<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
     xmlns:content="http://purl.org/rss/1.0/modules/content/"
     xmlns:dc="http://purl.org/dc/elements/1.1/"
     xmlns:dcterms="http://purl.org/dc/terms/"
     xmlns:media="http://search.yahoo.com/mrss/"
     xmlns:atom="http://www.w3.org/2005/Atom"
     xmlns:cf="https://www.futureplc.com/rss/content-flags"
>
    <channel>
                    <atom:link href="https://www.tomsguide.com/feeds/tag/samsung-phones" rel="self" type="application/rss+xml" />
                            <title><![CDATA[ Latest from Tom's Guide in Samsung-phones ]]></title>
                <link>https://www.tomsguide.com/phones/android-phones/samsung-phones</link>
        <description><![CDATA[ All the latest samsung-phones content from the Tom's Guide team ]]></description>
                                    <lastBuildDate>Sat, 07 Nov 2026 08:30:00 +0000</lastBuildDate>
                            <language>en</language>
                                <item>
                                                            <title><![CDATA[ What's the difference between Galaxy S27 Ultra and S27 Pro? — 5 key differences (and 3 similarities) based on the leaks ]]></title>
                                                                                                <dc:content><![CDATA[ <p>2027 is set to be a big year for Galaxy phones, with leaks pointing towards Samsung offering four new phones instead of the usual three. No, Samsung isn't resurrecting the short-lived "Edge" line, rumors and leaks actually <a href="https://www.tomsguide.com/phones/samsung-galaxy-s27-pro-and-ultra-tipped-for-an-iphone-like-camera-upgrade-thatll-massively-improve-selfies">suggest we'll see a Galaxy S27 Pro instead.</a></p><p>This phone is expected to sit somewhere between the Galaxy S27 Plus and the ultra-premium <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-ultra-rumors-release-display-upgrades-and-everything-we-know-so-far">Galaxy S27 Ultra</a>. Considering the gap between the Plus and Ultra models has been closing in recent years, that's a bit of an awkward spot. So how is the Galaxy S27 Pro going to make itself stand out from its cohorts?</p><p>Here are five key ways the Galaxy S27 Pro stands apart from the S27 Ultra, and two similarities both phones reportedly share.</p><h2 class="article-body__section" id="section-how-they-differ"><span>How they differ</span></h2><h3 class="article-body__section" id="section-it-s-got-a-smaller-screen"><span>It's got a smaller 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:4449px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="L4DMy5f22zHaPs5fPxVVwW" name="Samsung Galaxy S26 review" alt="Samsung Galaxy S26 held in the hand." src="https://cdn.mos.cms.futurecdn.net/L4DMy5f22zHaPs5fPxVVwW-1920-80.jpg" mos="" align="middle" fullscreen="" width="4449" height="2503" 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>Samsung's flagships have a lot of similarities, but screen size is not one of them. The three models we see every year all have different dimensions, and it seems like the Galaxy S27 Pro will be following that pattern. According to information from regulatory databases, the phone will come <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-leaks-are-coming-fast-and-weve-got-a-glimpse-of-a-new-design-and-disappointing-performance-hardware">with a 6.5-inch display.</a></p><p>This means it'll sit between the 6.3-inch S27 and 6.7-inch S27 Plus, with a screen that's almost half an inch smaller than the 6.9-inch Galaxy S27 Ultra. This means that the S27 Pro should have a distinct look compared to the S27 Ultra, and that could be enticing for those that want premium phone features without having to pick the largest model.</p><h3 class="article-body__section" id="section-it-s-going-to-be-less-powerful"><span>It's going to be less powerful</span></h3><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="CJC6PvLf36vkUo2kxn4dLT" name="Snapdragon 8 Elite Extreme Gen 6" alt="Snapdragon 8 Elite Extreme Gen 6" src="https://cdn.mos.cms.futurecdn.net/CJC6PvLf36vkUo2kxn4dLT-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Those same databases point towards the S27 Pro coming with less powerful hardware than the S27 Ultra. The Ultra is expected to come with the newly-announced <a href="https://www.tomsguide.com/phones/android-phones/snapdragon-8-elite-gen-6-benchmark-test-results-hands-on-vs-a20-pro-iphone-18-pro">Snapdragon 8 Elite Extreme Gen 6</a> system on chip, which offers major improvements to computing, graphics and AI processing.</p><p>The S27 Pro, on the other hand, is<a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-leaks-are-coming-fast-and-weve-got-a-glimpse-of-a-new-design-and-disappointing-performance-hardware"> tipped to use the Snapdragon 8 Elite Gen 6</a>. model. We don't know what sort of performance to expect from the moderate variant of the Gen 6 chip, other than the fact it's a step above the Gen 5 chip currently in circulation. But don't expect it to be as powerful as the Extreme version. </p><p>However we are still assuming that Samsung will employ custom "for Galaxy" variants of both chips, which offer better performance than the non-Galaxy variant. So that should hopefully still give the Pro a nice performance boost.</p><h3 class="article-body__section" id="section-don-t-expect-the-s-pen"><span>Don't expect the S Pen</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4345px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="AQBTHresRLkR56MSUmEFMM" name="Galaxy S26 Ultra review-17" alt="Samsung Galaxy S26 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/AQBTHresRLkR56MSUmEFMM-1920-80.jpg" mos="" align="middle" fullscreen="" width="4345" height="2444" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>One of the major selling points for the Galaxy S27 Ultra is the inclusion of the S Pen, which slots into the base of the phone whenever you're not using it. Sadly it sounds like the <a href="https://www.etnews.com/20260520000272?SNS=00001">S27 Pro will not feature this particular feature</a>, and potentially makes it far less useful as a productivity device.</p><p>My guess is that part of the reason Samsung hasn't added a built-in S Pen is because the S27 Pro is a much smaller device and there's less internal space to store it. It's unclear whether the phone will support a standalone S Pen stylus, as was the case with Galaxy S21 Ultra and various Z Fold devices. But I'm guessing that this won't happen, and those people wanting the S Pen will have to pay out for the Ultra model. </p><h3 class="article-body__section" id="section-the-telephoto-camera-won-t-be-as-good"><span>The telephoto camera won't be as good</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="LacgYzjqWKVkFAs6DKZ3ak" name="S27 Ultra render" alt="Samsung Galaxy S27 Ultra render" src="https://cdn.mos.cms.futurecdn.net/LacgYzjqWKVkFAs6DKZ3ak-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: @TechHome100)</span></figcaption></figure><p>Samsung's Ultra phones are known for their powerful telephoto lenses, a trend that will apparently continue with the S27 Ultra getting a 50MP lens capable of 5x optical magnification. Meanwhile the S27 Pro is rumored to offer a zooming lens with considerably less resolution and lower optical magnification.</p><p>The most common rumor suggests that the Pro will feature a <a href="https://www.etnews.com/20260731000266">12MP telephoto lens</a> capable of 3x optical magnification. That's noticeably less than the Ultra, but still higher than the 10MP telephoto lenses we've seen on the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-review">Galaxy S26</a> and <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-plus-review">S26 Plus</a>.</p><p>However there has also been a rumor that claims the Pro will feature a <a href="https://www.androidheadlines.com/2026/05/the-galaxy-s27-pro-might-have-a-better-camera-than-the-ultra.html">50MP camera with 3.5x optical zoom</a>. Obviously those potential specs are very different, and would help the Pro stand apart from the standard and Plus models. That said, whichever way you look at it, the Ultra will have the superior zooming camera hardware.</p><h3 class="article-body__section" id="section-the-battery-is-smaller"><span>The battery is smaller</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3583px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="dgLP9UwSff8QYf5UL9qpRL" name="Galaxy S26 Ultra review-24" alt="Samsung Galaxy S26 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/dgLP9UwSff8QYf5UL9qpRL-1920-80.jpg" mos="" align="middle" fullscreen="" width="3583" height="2015" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Rumor has it that Samsung will be utilizing silicon carbon batteries in the S27 series, including the S27 Ultra and the S27 Pro. Effectively offering greater battery capacity without increasing the size and weight of the phones by a meaningful degree. However, leaks suggest that the S27 Pro will have the smaller battery of the two, <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-ultra-leak-reveals-silicon-carbon-battery-leap-but-also-a-camera-downgrade]">with 5,200 mAh to the Ultra's 5,700 mAh.</a></p><p>Don't get me wrong, that's still larger than the 5,000 mAh battery in the Galaxy S26 Ultra. However, it does mean that the Pro may not have as much power to work with as the Ultra model. Whether that will matter in the long run, on account of the smaller screen and less powerful chips, isn't clear — and only hands-on battery testing can answer that question.</p><h3 class="article-body__section" id="section-how-they-re-similar"><span>How they're similar</span></h3><h3 class="article-body__section" id="section-it-looks-like-both-phone-will-have-a-200mp-camera"><span>It looks like both phone will have a 200MP 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:4397px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="MMrH9wwYJUAMMEM4PEkYTJ" name="Galaxy-S26-Ultra-review-18" alt="Samsung Galaxy S26 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/MMrH9wwYJUAMMEM4PEkYTJ-1920-80.jpg" mos="" align="middle" fullscreen="" width="4397" height="2473" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The S27 Pro's telephoto lens may not be quite as impressive as the S27 Ultra's, but the main camera is gearing up to be more or less the same. Both phones are rumored to <a href="https://wccftech.com/samsung-galaxy-s27-pro-tipped-to-steal-the-ultras-200mp-sensor-as-the-base-s27-finally-gets-a-50mp-ultra-wide-telephoto-upgrade/" target="_blank">have a 200MP main camera</a>, which has become a staple part of the Ultra series in the Galaxy Z and Galaxy Z lineups. </p><p>We're not too sure whether the cameras will be identical, though. It's possible that there will be some variations in things like sensor size or aperture, but that doesn't change the fact that the Pro is gearing up to offer the same high-resolution photography as its larger sibling.</p><h3 class="article-body__section" id="section-it-s-getting-a-privacy-display-too"><span>It's getting a Privacy Display too</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="f7xgeogiw6KvPnUbLtRM34" name="Galaxy S26 Ultra privacy screen LIST (1)" alt="Samsung Galaxy S26 Ultra front view and profile" src="https://cdn.mos.cms.futurecdn.net/f7xgeogiw6KvPnUbLtRM34-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-has-the-worlds-first-privacy-display-heres-how-it-works">Privacy Display</a> is easily one of the best things about the Galaxy S26 Ultra, and word is that Samsung will be fixing one of the biggest flaws on the S27 series. Specifically the fact that it dims the screen, even when the Privacy Display is switched off. Oh, and it won't be exclusive to the Ultra model this time round.</p><p>The <a href="https://www.etnews.com/20260908000267" target="_blank">S27 Pro is also expected to get a Privacy Display,</a> paired with the <a href="https://www.sammobile.com/news/galaxy-s27-pro-ultra-improved-privacy-display/" target="_blank">brighter M16 OLED display panel</a>. We don't know a lot about whether the Privacy Display may change next year, aside from the brightness thing. But it's good to see that Samsung isn't keeping an important security feature paywalled on its most expensive device.</p><p>Maybe one day we'll even see Privacy Display on a phone that doesn't cost over $1,000.</p><h3 class="article-body__section" id="section-it-should-have-the-same-charging-speeds"><span>It should have the same charging speeds</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2907px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="w8dEoJdD9j97ChKpUrPWwF" name="Galaxy S26 Ultra review" alt="Samsung Galaxy S26 Ultra with 60W charger" src="https://cdn.mos.cms.futurecdn.net/w8dEoJdD9j97ChKpUrPWwF-1920-80.jpg" mos="" align="middle" fullscreen="" width="2907" height="1635" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The final similarity between these two phones is that the Pro should have the same charging capabilities as the S27 Ultra. By which I mean <a href="https://www.sammobile.com/news/galaxy-s27-pro-fastest-charging-speed-samsung/" target="_blank">60W wired charging</a> and 25W Qi2 magnetic charging. That's right, Samsung will apparently add magnets to its phones next year, but word is that only the Ultra and Pro models will get that particular upgrade. </p><h3 class="article-body__section" id="section-bottom-line-what-is-the-pro-for"><span>Bottom line: What is the Pro for?</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4244px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="oEa4KtoNVtB4uMfhbBAZPM" name="Galaxy S26 Ultra review-19" alt="Samsung Galaxy S26 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/oEa4KtoNVtB4uMfhbBAZPM-1920-80.jpg" mos="" align="middle" fullscreen="" width="4244" height="2387" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>So far it seems as though the Galaxy S27 Pro is going to be a middle-ground for the ultra-premium market. It offers a lot more than the standard S27 and S27 Plus, but in a smaller form factor than the S27 Ultra. It looks like there will be some compromises made to account for that size change, but not to the same extreme as other options.</p><p>The only real question is how much you'll have to pay for one. Samsung's prices have gone up a lot over the course of this year, and <a href="https://www.tomsguide.com/phones/samsung-phones/all-three-galaxy-s27-models-tipped-for-price-hike-and-a-key-spec-for-the-s27-ultra-just-leaked">rumor is that the S27 series will also suffer a price hike. </a>Which means the S27 Ultra may be extremely expensive, which is likely to put a bunch of people off buying it. That would mean the Pro is effectively the middle-ground option, offering high-end features but at a slightly cheaper and more reasonable price point. Though I still wouldn't expect it to be a "cheap" option.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/apples-iphone-20-all-glass-revolution-just-got-bad-news-with-this-new-leak"><strong>Apple's iPhone 20 'all-glass' revolution just got bad news with this new leak</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/samsung-phones/now-is-the-perfect-time-for-samsung-to-release-a-cheaper-galaxy-z-fold-9-fe-and-its-all-because-of-iphone-duo"><strong>Now is the perfect time for Samsung to release a cheaper Galaxy Z Fold 9 FE — and it's all because of iPhone Duo</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/5-seriously-useful-iphone-duo-hacks-you-need-to-know"><strong>5 seriously useful iPhone Duo hacks you need to know</strong></a><strong></strong></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/whats-the-difference-between-galaxy-s27-ultra-and-s27-pro-5-key-differences-and-3-similarities-based-on-the-leaks</link>
                                                                            <description>
                            <![CDATA[ The Galaxy S27 Pro is expected to debut next year, but how different will it be from the Galaxy S27 Pro? ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">dd6fLqFSztDMTkZwE222JC</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/EKbAbDHJQJnhBVmx9jUbiC-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 07 Nov 2026 08:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/EKbAbDHJQJnhBVmx9jUbiC-1920-80.jpg">
                                                            <media:credit><![CDATA[Ice Universe]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Galaxy S27 Ultra render]]></media:description>                                                            <media:text><![CDATA[Galaxy S27 Ultra render]]></media:text>
                                <media:title type="plain"><![CDATA[Galaxy S27 Ultra render]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/EKbAbDHJQJnhBVmx9jUbiC-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>2027 is set to be a big year for Galaxy phones, with leaks pointing towards Samsung offering four new phones instead of the usual three. No, Samsung isn't resurrecting the short-lived "Edge" line, rumors and leaks actually <a href="https://www.tomsguide.com/phones/samsung-galaxy-s27-pro-and-ultra-tipped-for-an-iphone-like-camera-upgrade-thatll-massively-improve-selfies">suggest we'll see a Galaxy S27 Pro instead.</a></p><p>This phone is expected to sit somewhere between the Galaxy S27 Plus and the ultra-premium <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-ultra-rumors-release-display-upgrades-and-everything-we-know-so-far">Galaxy S27 Ultra</a>. Considering the gap between the Plus and Ultra models has been closing in recent years, that's a bit of an awkward spot. So how is the Galaxy S27 Pro going to make itself stand out from its cohorts?</p><p>Here are five key ways the Galaxy S27 Pro stands apart from the S27 Ultra, and two similarities both phones reportedly share.</p><h2 class="article-body__section" id="section-how-they-differ"><span>How they differ</span></h2><h3 class="article-body__section" id="section-it-s-got-a-smaller-screen"><span>It's got a smaller 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:4449px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="L4DMy5f22zHaPs5fPxVVwW" name="Samsung Galaxy S26 review" alt="Samsung Galaxy S26 held in the hand." src="https://cdn.mos.cms.futurecdn.net/L4DMy5f22zHaPs5fPxVVwW-1920-80.jpg" mos="" align="middle" fullscreen="" width="4449" height="2503" 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>Samsung's flagships have a lot of similarities, but screen size is not one of them. The three models we see every year all have different dimensions, and it seems like the Galaxy S27 Pro will be following that pattern. According to information from regulatory databases, the phone will come <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-leaks-are-coming-fast-and-weve-got-a-glimpse-of-a-new-design-and-disappointing-performance-hardware">with a 6.5-inch display.</a></p><p>This means it'll sit between the 6.3-inch S27 and 6.7-inch S27 Plus, with a screen that's almost half an inch smaller than the 6.9-inch Galaxy S27 Ultra. This means that the S27 Pro should have a distinct look compared to the S27 Ultra, and that could be enticing for those that want premium phone features without having to pick the largest model.</p><h3 class="article-body__section" id="section-it-s-going-to-be-less-powerful"><span>It's going to be less powerful</span></h3><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="CJC6PvLf36vkUo2kxn4dLT" name="Snapdragon 8 Elite Extreme Gen 6" alt="Snapdragon 8 Elite Extreme Gen 6" src="https://cdn.mos.cms.futurecdn.net/CJC6PvLf36vkUo2kxn4dLT-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Those same databases point towards the S27 Pro coming with less powerful hardware than the S27 Ultra. The Ultra is expected to come with the newly-announced <a href="https://www.tomsguide.com/phones/android-phones/snapdragon-8-elite-gen-6-benchmark-test-results-hands-on-vs-a20-pro-iphone-18-pro">Snapdragon 8 Elite Extreme Gen 6</a> system on chip, which offers major improvements to computing, graphics and AI processing.</p><p>The S27 Pro, on the other hand, is<a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-leaks-are-coming-fast-and-weve-got-a-glimpse-of-a-new-design-and-disappointing-performance-hardware"> tipped to use the Snapdragon 8 Elite Gen 6</a>. model. We don't know what sort of performance to expect from the moderate variant of the Gen 6 chip, other than the fact it's a step above the Gen 5 chip currently in circulation. But don't expect it to be as powerful as the Extreme version. </p><p>However we are still assuming that Samsung will employ custom "for Galaxy" variants of both chips, which offer better performance than the non-Galaxy variant. So that should hopefully still give the Pro a nice performance boost.</p><h3 class="article-body__section" id="section-don-t-expect-the-s-pen"><span>Don't expect the S Pen</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4345px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="AQBTHresRLkR56MSUmEFMM" name="Galaxy S26 Ultra review-17" alt="Samsung Galaxy S26 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/AQBTHresRLkR56MSUmEFMM-1920-80.jpg" mos="" align="middle" fullscreen="" width="4345" height="2444" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>One of the major selling points for the Galaxy S27 Ultra is the inclusion of the S Pen, which slots into the base of the phone whenever you're not using it. Sadly it sounds like the <a href="https://www.etnews.com/20260520000272?SNS=00001">S27 Pro will not feature this particular feature</a>, and potentially makes it far less useful as a productivity device.</p><p>My guess is that part of the reason Samsung hasn't added a built-in S Pen is because the S27 Pro is a much smaller device and there's less internal space to store it. It's unclear whether the phone will support a standalone S Pen stylus, as was the case with Galaxy S21 Ultra and various Z Fold devices. But I'm guessing that this won't happen, and those people wanting the S Pen will have to pay out for the Ultra model. </p><h3 class="article-body__section" id="section-the-telephoto-camera-won-t-be-as-good"><span>The telephoto camera won't be as good</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="LacgYzjqWKVkFAs6DKZ3ak" name="S27 Ultra render" alt="Samsung Galaxy S27 Ultra render" src="https://cdn.mos.cms.futurecdn.net/LacgYzjqWKVkFAs6DKZ3ak-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: @TechHome100)</span></figcaption></figure><p>Samsung's Ultra phones are known for their powerful telephoto lenses, a trend that will apparently continue with the S27 Ultra getting a 50MP lens capable of 5x optical magnification. Meanwhile the S27 Pro is rumored to offer a zooming lens with considerably less resolution and lower optical magnification.</p><p>The most common rumor suggests that the Pro will feature a <a href="https://www.etnews.com/20260731000266">12MP telephoto lens</a> capable of 3x optical magnification. That's noticeably less than the Ultra, but still higher than the 10MP telephoto lenses we've seen on the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-review">Galaxy S26</a> and <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-plus-review">S26 Plus</a>.</p><p>However there has also been a rumor that claims the Pro will feature a <a href="https://www.androidheadlines.com/2026/05/the-galaxy-s27-pro-might-have-a-better-camera-than-the-ultra.html">50MP camera with 3.5x optical zoom</a>. Obviously those potential specs are very different, and would help the Pro stand apart from the standard and Plus models. That said, whichever way you look at it, the Ultra will have the superior zooming camera hardware.</p><h3 class="article-body__section" id="section-the-battery-is-smaller"><span>The battery is smaller</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3583px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="dgLP9UwSff8QYf5UL9qpRL" name="Galaxy S26 Ultra review-24" alt="Samsung Galaxy S26 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/dgLP9UwSff8QYf5UL9qpRL-1920-80.jpg" mos="" align="middle" fullscreen="" width="3583" height="2015" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Rumor has it that Samsung will be utilizing silicon carbon batteries in the S27 series, including the S27 Ultra and the S27 Pro. Effectively offering greater battery capacity without increasing the size and weight of the phones by a meaningful degree. However, leaks suggest that the S27 Pro will have the smaller battery of the two, <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-ultra-leak-reveals-silicon-carbon-battery-leap-but-also-a-camera-downgrade]">with 5,200 mAh to the Ultra's 5,700 mAh.</a></p><p>Don't get me wrong, that's still larger than the 5,000 mAh battery in the Galaxy S26 Ultra. However, it does mean that the Pro may not have as much power to work with as the Ultra model. Whether that will matter in the long run, on account of the smaller screen and less powerful chips, isn't clear — and only hands-on battery testing can answer that question.</p><h3 class="article-body__section" id="section-how-they-re-similar"><span>How they're similar</span></h3><h3 class="article-body__section" id="section-it-looks-like-both-phone-will-have-a-200mp-camera"><span>It looks like both phone will have a 200MP 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:4397px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="MMrH9wwYJUAMMEM4PEkYTJ" name="Galaxy-S26-Ultra-review-18" alt="Samsung Galaxy S26 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/MMrH9wwYJUAMMEM4PEkYTJ-1920-80.jpg" mos="" align="middle" fullscreen="" width="4397" height="2473" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The S27 Pro's telephoto lens may not be quite as impressive as the S27 Ultra's, but the main camera is gearing up to be more or less the same. Both phones are rumored to <a href="https://wccftech.com/samsung-galaxy-s27-pro-tipped-to-steal-the-ultras-200mp-sensor-as-the-base-s27-finally-gets-a-50mp-ultra-wide-telephoto-upgrade/" target="_blank">have a 200MP main camera</a>, which has become a staple part of the Ultra series in the Galaxy Z and Galaxy Z lineups. </p><p>We're not too sure whether the cameras will be identical, though. It's possible that there will be some variations in things like sensor size or aperture, but that doesn't change the fact that the Pro is gearing up to offer the same high-resolution photography as its larger sibling.</p><h3 class="article-body__section" id="section-it-s-getting-a-privacy-display-too"><span>It's getting a Privacy Display too</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="f7xgeogiw6KvPnUbLtRM34" name="Galaxy S26 Ultra privacy screen LIST (1)" alt="Samsung Galaxy S26 Ultra front view and profile" src="https://cdn.mos.cms.futurecdn.net/f7xgeogiw6KvPnUbLtRM34-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-has-the-worlds-first-privacy-display-heres-how-it-works">Privacy Display</a> is easily one of the best things about the Galaxy S26 Ultra, and word is that Samsung will be fixing one of the biggest flaws on the S27 series. Specifically the fact that it dims the screen, even when the Privacy Display is switched off. Oh, and it won't be exclusive to the Ultra model this time round.</p><p>The <a href="https://www.etnews.com/20260908000267" target="_blank">S27 Pro is also expected to get a Privacy Display,</a> paired with the <a href="https://www.sammobile.com/news/galaxy-s27-pro-ultra-improved-privacy-display/" target="_blank">brighter M16 OLED display panel</a>. We don't know a lot about whether the Privacy Display may change next year, aside from the brightness thing. But it's good to see that Samsung isn't keeping an important security feature paywalled on its most expensive device.</p><p>Maybe one day we'll even see Privacy Display on a phone that doesn't cost over $1,000.</p><h3 class="article-body__section" id="section-it-should-have-the-same-charging-speeds"><span>It should have the same charging speeds</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2907px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="w8dEoJdD9j97ChKpUrPWwF" name="Galaxy S26 Ultra review" alt="Samsung Galaxy S26 Ultra with 60W charger" src="https://cdn.mos.cms.futurecdn.net/w8dEoJdD9j97ChKpUrPWwF-1920-80.jpg" mos="" align="middle" fullscreen="" width="2907" height="1635" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The final similarity between these two phones is that the Pro should have the same charging capabilities as the S27 Ultra. By which I mean <a href="https://www.sammobile.com/news/galaxy-s27-pro-fastest-charging-speed-samsung/" target="_blank">60W wired charging</a> and 25W Qi2 magnetic charging. That's right, Samsung will apparently add magnets to its phones next year, but word is that only the Ultra and Pro models will get that particular upgrade. </p><h3 class="article-body__section" id="section-bottom-line-what-is-the-pro-for"><span>Bottom line: What is the Pro for?</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4244px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="oEa4KtoNVtB4uMfhbBAZPM" name="Galaxy S26 Ultra review-19" alt="Samsung Galaxy S26 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/oEa4KtoNVtB4uMfhbBAZPM-1920-80.jpg" mos="" align="middle" fullscreen="" width="4244" height="2387" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>So far it seems as though the Galaxy S27 Pro is going to be a middle-ground for the ultra-premium market. It offers a lot more than the standard S27 and S27 Plus, but in a smaller form factor than the S27 Ultra. It looks like there will be some compromises made to account for that size change, but not to the same extreme as other options.</p><p>The only real question is how much you'll have to pay for one. Samsung's prices have gone up a lot over the course of this year, and <a href="https://www.tomsguide.com/phones/samsung-phones/all-three-galaxy-s27-models-tipped-for-price-hike-and-a-key-spec-for-the-s27-ultra-just-leaked">rumor is that the S27 series will also suffer a price hike. </a>Which means the S27 Ultra may be extremely expensive, which is likely to put a bunch of people off buying it. That would mean the Pro is effectively the middle-ground option, offering high-end features but at a slightly cheaper and more reasonable price point. Though I still wouldn't expect it to be a "cheap" option.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/apples-iphone-20-all-glass-revolution-just-got-bad-news-with-this-new-leak"><strong>Apple's iPhone 20 'all-glass' revolution just got bad news with this new leak</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/samsung-phones/now-is-the-perfect-time-for-samsung-to-release-a-cheaper-galaxy-z-fold-9-fe-and-its-all-because-of-iphone-duo"><strong>Now is the perfect time for Samsung to release a cheaper Galaxy Z Fold 9 FE — and it's all because of iPhone Duo</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/5-seriously-useful-iphone-duo-hacks-you-need-to-know"><strong>5 seriously useful iPhone Duo hacks you need to know</strong></a><strong></strong></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Samsung Galaxy S26 Ultra is now just $949 ahead of Black Friday — save $450 right now ]]></title>
                                                                                                <dc:content><![CDATA[ <p>This time of year is the perfect opportunity to buy a brand new phone. Sure some of the devices may be a little older, and set to be replaced in just a few months, but they're also experiencing some of the best discounts you're likely to see over the next 12 months.</p><p>Case in point, the <a href="https://www.bestbuy.com/product/samsung-galaxy-s26-ultra-256gb-unlocked-black/6669733" target="_blank" rel="nofollow">Samsung Galaxy S26 Ultra, which is now $949 over at Best Buy</a>. We have seen the flagship drop to this price before, but not since Samsung raised the MSRP to $1,399. This means you're saving $450 on one of the best phones money can buy right now.</p><div class="product"><a data-dimension112="bff38a4a-d9d2-11f1-957d-61202addf04f" data-action="Deal Block" data-label="Galaxy S26 Ultra" data-dimension48="Galaxy S26 Ultra" data-dimension25="$949" href="https://www.bestbuy.com/product/samsung-galaxy-s26-ultra-256gb-unlocked-black/6669733" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1475px;"><p class="vanilla-image-block" style="padding-top:101.69%;"><img id="pTo28Fx9tATQs3gfbYBFL5" name="Galaxy S26 Ultra deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/pTo28Fx9tATQs3gfbYBFL5-1920-80.jpg" mos="" align="middle" fullscreen="" width="1475" height="1500" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><strong><a href="https://www.bestbuy.com/product/samsung-galaxy-s26-ultra-256gb-unlocked-black/6669733" target="_blank" rel="nofollow" data-dimension112="bff38a4a-d9d2-11f1-957d-61202addf04f" data-action="Deal Block" data-label="Galaxy S26 Ultra" data-dimension48="Galaxy S26 Ultra" data-dimension25="$949">Galaxy S26 Ultra: was $1399 now $949</a></strong><br />Save $450 on the best Android Phone, and get a device capable of excellent photos with strong battery life and the super-useful Privacy Display. There's also a built-in S Pen, the full suite of Galaxy AI features, and faster 60W wired charging.</p><p><strong>Price check: </strong><a href="https://www.amazon.com/Samsung-Unlocked-Smartphone-Charging-Warranty/dp/B0G4SWDH8P" target="_blank" rel="nofollow"><strong>$949 @ Amazon</strong></a><strong> | </strong><a href="https://www.walmart.com/ip/Samsung-Galaxy-S26-Ultra-256GB-12GB-RAM-Brand-New-GSM-Unlocked-Android-AI-Smartphone-6-9-Dynamic-AMOLED-120Hz-Privacy-Display-200-MP-Camera-Dual-SIM/20387563004?" target="_blank" rel="nofollow"><strong>$979 @ Walmart</strong></a><a class="view-deal button" href="https://www.bestbuy.com/product/samsung-galaxy-s26-ultra-256gb-unlocked-black/6669733" target="_blank" rel="nofollow" data-dimension112="bff38a4a-d9d2-11f1-957d-61202addf04f" data-action="Deal Block" data-label="Galaxy S26 Ultra" data-dimension48="Galaxy S26 Ultra" data-dimension25="$949">View Deal</a></p></div><p>The <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review">Samsung Galaxy S26 Ultra</a> is one of the <a href="https://www.tomsguide.com/best-picks/best-phones">best phones </a>you can buy right now. While it's debatable as to whether it's better than an <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-and-pro-max-review">iPhone 18 Pro Max</a> there's no doubt that it is the <a href="https://www.tomsguide.com/us/best-android-phones,review-6051.html">best Android phone</a> currently on sale.</p><p>Why? Well plenty of reasons. The main one is that it has one of the best cameras of any smartphone, complete with a 200MP main camera, which is teamed up with 50MP ultrawide and telephoto (5x zoom) lenses. There's also a secondary 10MP telephoto lens with 3x zoom, which isn't something you see on many phones.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4952px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="QerAu6vWkwVLDo2te3djte" name="Galaxy S26 Ultra 24 hours-2" alt="Samsung Galaxy S26 Ultra" src="https://cdn.mos.cms.futurecdn.net/QerAu6vWkwVLDo2te3djte-1920-80.jpg" mos="" align="middle" fullscreen="" width="4952" height="2786" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>You also get a large 6.9-inch display with a built-in <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-has-the-worlds-first-privacy-display-heres-how-it-works">Privacy Display</a>. When active, this feature cuts off the side viewing angles, and stops people from trying to subtly spy on your phone screen. It doesn't just do it to the whole screen either, and can operate on an app-by-app basis, censoring sensitive areas of your screen without blocking the whole thing.</p><p>Other benefits to the S26 Ultra include the built-in S Pen, a large 5,000 mAh battery<a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-battery-life-tested-heres-how-it-stacks-up-to-iphone-17-pro-max-and-more"> with 16 hours and 10 minutes of battery life</a> (per our testing). Plus there's a whole suite of Galaxy AI features, including the upgraded Circle to Search, Automated App Actions, the Horizon Lock camera feature, and upgraded 60W wired charging.</p><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="high" data-lazy-src="https://www.youtube-nocookie.com/embed/nqacOri4veI" allowfullscreen=""></iframe></div></div><p>The <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-ultra-rumors-release-display-upgrades-and-everything-we-know-so-far">Galaxy S27 Ultra</a> may be coming in early 2027, with a bunch of upgrades, but <a href="https://www.tomsguide.com/phones/samsung-phones/all-three-galaxy-s27-models-tipped-for-price-hike-and-a-key-spec-for-the-s27-ultra-just-leaked">rumor has it we may see another price hike</a>. With that in mind, it's certainly worth taking the plunge now and swapping out your current handset for an S26 Ultra — and the (relatively) low price of $949. Because you likely won't see S27 Ultra deals like this until next November.</p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-is-now-just-usd949-ahead-of-black-friday-save-usd450-right-now</link>
                                                                            <description>
                            <![CDATA[ Price hikes be damned, the best Android phone is almost back to its all-time low. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">zSskAAr3bUfSYX6oBPsnAc</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/fc3mjHRK8uWWSB7nnDvMgA-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 06 Nov 2026 11:21:54 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/fc3mjHRK8uWWSB7nnDvMgA-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Close up of the Galaxy S26 Ultra&#039;s camera lenses]]></media:description>                                                            <media:text><![CDATA[Close up of the Galaxy S26 Ultra&#039;s camera lenses]]></media:text>
                                <media:title type="plain"><![CDATA[Close up of the Galaxy S26 Ultra&#039;s camera lenses]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/fc3mjHRK8uWWSB7nnDvMgA-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>This time of year is the perfect opportunity to buy a brand new phone. Sure some of the devices may be a little older, and set to be replaced in just a few months, but they're also experiencing some of the best discounts you're likely to see over the next 12 months.</p><p>Case in point, the <a href="https://www.bestbuy.com/product/samsung-galaxy-s26-ultra-256gb-unlocked-black/6669733" target="_blank" rel="nofollow">Samsung Galaxy S26 Ultra, which is now $949 over at Best Buy</a>. We have seen the flagship drop to this price before, but not since Samsung raised the MSRP to $1,399. This means you're saving $450 on one of the best phones money can buy right now.</p><div class="product"><a data-dimension112="bff38a4a-d9d2-11f1-957d-61202addf04f" data-action="Deal Block" data-label="Galaxy S26 Ultra" data-dimension48="Galaxy S26 Ultra" data-dimension25="$949" href="https://www.bestbuy.com/product/samsung-galaxy-s26-ultra-256gb-unlocked-black/6669733" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1475px;"><p class="vanilla-image-block" style="padding-top:101.69%;"><img id="pTo28Fx9tATQs3gfbYBFL5" name="Galaxy S26 Ultra deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/pTo28Fx9tATQs3gfbYBFL5-1920-80.jpg" mos="" align="middle" fullscreen="" width="1475" height="1500" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><strong><a href="https://www.bestbuy.com/product/samsung-galaxy-s26-ultra-256gb-unlocked-black/6669733" target="_blank" rel="nofollow" data-dimension112="bff38a4a-d9d2-11f1-957d-61202addf04f" data-action="Deal Block" data-label="Galaxy S26 Ultra" data-dimension48="Galaxy S26 Ultra" data-dimension25="$949">Galaxy S26 Ultra: was $1399 now $949</a></strong><br />Save $450 on the best Android Phone, and get a device capable of excellent photos with strong battery life and the super-useful Privacy Display. There's also a built-in S Pen, the full suite of Galaxy AI features, and faster 60W wired charging.</p><p><strong>Price check: </strong><a href="https://www.amazon.com/Samsung-Unlocked-Smartphone-Charging-Warranty/dp/B0G4SWDH8P" target="_blank" rel="nofollow"><strong>$949 @ Amazon</strong></a><strong> | </strong><a href="https://www.walmart.com/ip/Samsung-Galaxy-S26-Ultra-256GB-12GB-RAM-Brand-New-GSM-Unlocked-Android-AI-Smartphone-6-9-Dynamic-AMOLED-120Hz-Privacy-Display-200-MP-Camera-Dual-SIM/20387563004?" target="_blank" rel="nofollow"><strong>$979 @ Walmart</strong></a><a class="view-deal button" href="https://www.bestbuy.com/product/samsung-galaxy-s26-ultra-256gb-unlocked-black/6669733" target="_blank" rel="nofollow" data-dimension112="bff38a4a-d9d2-11f1-957d-61202addf04f" data-action="Deal Block" data-label="Galaxy S26 Ultra" data-dimension48="Galaxy S26 Ultra" data-dimension25="$949">View Deal</a></p></div><p>The <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review">Samsung Galaxy S26 Ultra</a> is one of the <a href="https://www.tomsguide.com/best-picks/best-phones">best phones </a>you can buy right now. While it's debatable as to whether it's better than an <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-and-pro-max-review">iPhone 18 Pro Max</a> there's no doubt that it is the <a href="https://www.tomsguide.com/us/best-android-phones,review-6051.html">best Android phone</a> currently on sale.</p><p>Why? Well plenty of reasons. The main one is that it has one of the best cameras of any smartphone, complete with a 200MP main camera, which is teamed up with 50MP ultrawide and telephoto (5x zoom) lenses. There's also a secondary 10MP telephoto lens with 3x zoom, which isn't something you see on many phones.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4952px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="QerAu6vWkwVLDo2te3djte" name="Galaxy S26 Ultra 24 hours-2" alt="Samsung Galaxy S26 Ultra" src="https://cdn.mos.cms.futurecdn.net/QerAu6vWkwVLDo2te3djte-1920-80.jpg" mos="" align="middle" fullscreen="" width="4952" height="2786" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>You also get a large 6.9-inch display with a built-in <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-has-the-worlds-first-privacy-display-heres-how-it-works">Privacy Display</a>. When active, this feature cuts off the side viewing angles, and stops people from trying to subtly spy on your phone screen. It doesn't just do it to the whole screen either, and can operate on an app-by-app basis, censoring sensitive areas of your screen without blocking the whole thing.</p><p>Other benefits to the S26 Ultra include the built-in S Pen, a large 5,000 mAh battery<a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-battery-life-tested-heres-how-it-stacks-up-to-iphone-17-pro-max-and-more"> with 16 hours and 10 minutes of battery life</a> (per our testing). Plus there's a whole suite of Galaxy AI features, including the upgraded Circle to Search, Automated App Actions, the Horizon Lock camera feature, and upgraded 60W wired charging.</p><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="high" data-lazy-src="https://www.youtube-nocookie.com/embed/nqacOri4veI" allowfullscreen=""></iframe></div></div><p>The <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-ultra-rumors-release-display-upgrades-and-everything-we-know-so-far">Galaxy S27 Ultra</a> may be coming in early 2027, with a bunch of upgrades, but <a href="https://www.tomsguide.com/phones/samsung-phones/all-three-galaxy-s27-models-tipped-for-price-hike-and-a-key-spec-for-the-s27-ultra-just-leaked">rumor has it we may see another price hike</a>. With that in mind, it's certainly worth taking the plunge now and swapping out your current handset for an S26 Ultra — and the (relatively) low price of $949. Because you likely won't see S27 Ultra deals like this until next November.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Samsung Galaxy S27 Ultra rumors — release, display upgrades and everything we know so far ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The Samsung Galaxy S27 Ultra is coming, and it could be arriving sooner than you think. The big phone launches of 2026 are effectively over, now that the new iPhones are out of the way, and that means we can start looking at what major releases 2027 will have to offer. </p><p>Samsung is usually the first out of the gate, and rumor has it that the launch will be a little earlier than we're used to — suggesting a January release window. The Unpacked event is also said to include four new Galaxy S27-series phones, with a <a href="https://www.tomsguide.com/phones/samsung-galaxy-s27-pro-and-ultra-tipped-for-an-iphone-like-camera-upgrade-thatll-massively-improve-selfies">Pro model</a> set to join the usual lineup. But, as ever, the Galaxy S27 Ultra is set to be the star of the show, with all the latest and best hardware Samsung has to offer.</p><p>Here's everything we know about the Samsung Galaxy S27 Ultra so far.</p><h2 class="article-body__section" id="section-samsung-galaxy-s27-ultra-rumored-specifications"><span>Samsung Galaxy S27 Ultra: Rumored Specifications</span></h2><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Samsung Galaxy S27 Ultra (rumored)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>6.9-inches</p></td></tr><tr><td class="firstcol " ><p><strong>Processor</strong></p></td><td  ><p>Snapdragon 8 Elite Extreme Gen 6</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>256/512/1TB</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>12/16GB</p></td></tr><tr><td class="firstcol " ><p><strong>Front Camera</strong></p></td><td  ><p>12MP</p></td></tr><tr><td class="firstcol " ><p><strong>Rear Cameras</strong></p></td><td  ><p>200MP main, 50MP ultrawide, 50MP telephoto with 4x or 5x optical zookm</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>5,700 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Charging</strong></p></td><td  ><p>60W</p></td></tr><tr><td class="firstcol " ><p><strong>Size</strong></p></td><td  ><p>163.76 x 78.25 x 7.97mm (6.44 x 3.0 x 0.31 inches)</p></td></tr></tbody></table></div><h2 class="article-body__section" id="section-samsung-galaxy-s27-ultra-design-and-display"><span>Samsung Galaxy S27 Ultra: Design and display</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2389px;"><p class="vanilla-image-block" style="padding-top:55.92%;"><img id="VUBmnW4HS7aUWWmqLRQ2mX" name="Screenshot 2026-11-04 113231" alt="samsung galaxy s27 ultra dummy unit leak" src="https://cdn.mos.cms.futurecdn.net/VUBmnW4HS7aUWWmqLRQ2mX-1920-80.png" mos="" align="middle" fullscreen="" width="2389" height="1336" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Android Headline)</span></figcaption></figure><p>We're not expecting any major changes to the size of the Galaxy S27 Ultra, and recently-leaked dummy units suggest that the dimensions of the upcoming phone will be very similar to those of the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review">Galaxy S26 Ultra</a>. And by very similar, I mean practically identical, with only a fraction of a millimeter's difference in width and thickness.</p><p>However, the big changes are set to happen on the back of the phone. Samsung is widely expected to ditch the vertical camera array of past Galaxy phones, <a href="https://www.tomsguide.com/phones/samsung-phones/finally-something-different-leaker-teases-samsung-galaxy-s27-ultra-concept-with-a-new-camera-bar-design">in favor of a full-width camera bar</a> — similar to that of the iPhone 18 Pro. This change is also supposed to come with the loss of the secondary telephoto lens, and turn the Ultra model into a triple-lens camera for the first time.</p><p>It's also been rumored that <a href="https://www.tomsguide.com/phones/samsung-phones/leaked-galaxy-s27-ultra-specs-reveal-a-long-overdue-major-upgrade">Samsung may finally </a>employ an <a href="https://www.sammobile.com/news/galaxy-s27-pro-ultra-improved-privacy-display/" target="_blank">M16 OLED</a> display on the S27 Ultra. This display is set to be brighter, and is the same material used on the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-and-pro-max-review">iPhone 18 Pro</a> and <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-review">iPhone Duo</a>. There are also rumors that the Ultra will feature "enhanced display brightness" to counteract the <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-s26-ultra-lab-tests-show-that-its-dimmer-than-s25-ultra-even-with-privacy-display-turned-off">dimming caused by the Privacy Display. </a></p><p>As useful as the feature is, we found that it caused a loss of display brightness even when the Privacy Display setting is deactivated. So it's good to see that Samsung is proactively dealing with that issue with the next generation Privacy Display. The Privacy feature is also rumored to be getting some upgrades, but it's unclear what those might actually be.</p><p><a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-leaks-are-coming-fast-and-weve-got-a-glimpse-of-a-new-design-and-disappointing-performance-hardware">Recently-leaked dummy units </a>also suggest that the Ultra will retain its built-in S Pen, and rumor has it that <a href="https://www.tomsguide.com/phones/samsung-galaxy-s27-pro-and-ultra-tipped-for-an-iphone-like-camera-upgrade-thatll-massively-improve-selfies">Qi2 magnets will finally be added</a> to the phone itself. That means no more having to buy special magnetic cases to make the most out of using Qi2 chargers and accessories. However, this feature may be exclusive to the Ultra and Pro models, with the Standard and Plus options missing out.</p><h2 class="article-body__section" id="section-samsung-galaxy-s27-ultra-performance"><span>Samsung Galaxy S27 Ultra: Performance</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="CJC6PvLf36vkUo2kxn4dLT" name="Snapdragon 8 Elite Extreme Gen 6" alt="Snapdragon 8 Elite Extreme Gen 6" src="https://cdn.mos.cms.futurecdn.net/CJC6PvLf36vkUo2kxn4dLT-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The one thing that isn't a mystery is the S27 Ultra's performance hardware. We assumed the phone would come with the <a href="https://www.tomsguide.com/phones/android-phones/do-you-actually-need-the-snapdragon-8-elite-extreme-gen-6-qualcomms-svps-explain-who-should-pay-the-premium">Snapdragon 8 Elite Extreme Gen 6</a>, and a recent leak seemingly confirmed that. Not that it was ever doubted that Samsung would opt for the most powerful Qualcomm chip on the market. The only real question we have is whether the phone will have a standard Extreme chip, or if a custom "for Galaxy" variant will be developed to offer stronger performance.</p><p><a href="https://www.tomsguide.com/phones/android-phones/snapdragon-8-elite-gen-6-benchmark-test-results-hands-on-vs-a20-pro-iphone-18-pro">Our own early tests of the Extreme</a>, using Qualcomm's reference device, reveal that the chip performed 29% better in Geekbench 7's single-core benchmark, and 16.3% better in the multi-core test. 3DMark's Solar Bay Extreme test shows a 49% increase in graphical power, or a 40% increase in Wildlife Extreme. Meanwhile AnTuTu's General AI benchmark showed an 18.4% increase, or a crazy 118% increase in AnTuTu's LLM AI test.</p><p>Obviously things are going to be a little different in a commercial phone, rather than a reference device that's built to perform well. But it shows just how much of an improvement we should see when the Galaxy S27 Ultra arrives next year. Needless to say this is going to be a powerful phone with a lot of AI capabilities.</p><h2 class="article-body__section" id="section-samsung-galaxy-s27-ultra-cameras"><span>Samsung Galaxy S27 Ultra: Cameras</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1723px;"><p class="vanilla-image-block" style="padding-top:55.95%;"><img id="G7XC4Y95F7B3L2YqTdpXoS" name="Screenshot 2026-11-04 111804" alt="galaxy s27 ultra dummy units" src="https://cdn.mos.cms.futurecdn.net/G7XC4Y95F7B3L2YqTdpXoS-1920-80.png" mos="" align="middle" fullscreen="" width="1723" height="964" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Android Headline)</span></figcaption></figure><p>Very little is known about the Galaxy S27 Ultra's cameras right now, other than the fact Samsung is seemingly <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-ultra-may-scrap-the-10mp-telephoto-lens-and-theres-no-word-of-a-replacement">scrapping the secondary telephoto lens</a>. This means the Ultra model will match other premium phones with a single zooming lens, which we assume will still be the same 50MP lens with 5x optical magnification we saw on the Galaxy S26 Ultra.</p><p>While that news may be disappointing to some, it's not a huge loss. The second telephoto lens was always fairly underpowered, with the last iteration offering 10MP of resolution and 3x optical zoom. The quality wasn't bad, but it also wasn't really a necessary feature to have. Particularly since telephoto lenses are expensive, hence why they're mostly found on premium phones, and take up a lot of space. Removing the second one adds extra space to the S27 Ultra, and hopefully helps avoid another price hike.</p><p>This would be the perfect time for Samsung to add variable optical zoom, which has been rumored for a few years and effectively squeezes two telephoto lenses into one. Sadly it's unclear whether that will actually happen, and the same is true for the possibility of getting variable aperture — a feature Samsung last offered in 2019.</p><p>Rumors instead suggest that the telephoto <a href="https://go.skimresources.com/?id=803X112721&amp;xs=1&amp;url=https://x.com/phonefuturist/status/2094046496362483863&amp;xcust=4-0-3238643-1-0-0-0-0&amp;sref=https://www.techadvisor.com/article/3238643/galaxy-s27-ultra-the-camera-upgrade-debate-rolls-on.html" target="_blank">may drop</a> to 4x magnification, with a larger 1/1.9-inch sensor to compensate. However, there are <a href="https://go.skimresources.com/?id=803X112721&amp;xs=1&amp;url=https://x.com/UniverseIce/status/2099327785814945972&amp;xcust=4-0-3238643-1-0-0-0-0&amp;sref=https://www.techadvisor.com/article/3238643/galaxy-s27-ultra-the-camera-upgrade-debate-rolls-on.html">conflicting reports</a>, and the S27 Ultra may instead just get the exact same zooming lens as the S26 Ultra.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ONPG8e"></div>                            </div>                            <script src="https://kwizly.com/embed/ONPG8e.js" async=""></script><h3 class="article-body__section" id="section-samsung-galaxy-s27-ultra-software-ai"><span>Samsung Galaxy S27 Ultra: Software &amp; AI</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5255px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="uy3k4iJ2P9SqjMAZ7v7hke" name="Galaxy S26 Ultra 24 hours-13" alt="Samsung Galaxy S26 Ultra" src="https://cdn.mos.cms.futurecdn.net/uy3k4iJ2P9SqjMAZ7v7hke-1920-80.jpg" mos="" align="middle" fullscreen="" width="5255" height="2956" attribution="" endorsement="" class="inline" /></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 know software is going to be a huge part of the Samsung Galaxy S27 series, as it has been for the last few generations of Galaxy phones. Galaxy AI is one of those things that isn't going to vanish overnight, though at this early stage we have absolutely no idea what sort of features and capabilities will be coming to the S27 Ultra and its cohorts.</p><p>One possibility is the addition of MyFanCam, an AI-powered feature that debuted on 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>. It works with existing footage that you've filmed, and uses AI to focus on a person of your choice. There's no reason why it couldn't exist on a Galaxy S phone, and the S27 launch is the perfect place to do it — especially if it has some much-needed upgrades, <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">like the ability to focus on animals as well.</a> We should also expect the phones to run on OneUI 9, possibly the updated OneUI 9.5, which is based on Android 17.</p><p>But, for the time being, any additional software and AI upgrades on the S27 Ultra are a complete mystery.</p><h2 class="article-body__section" id="section-samsung-galaxy-s27-ultra-battery"><span>Samsung Galaxy S27 Ultra: Battery</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="LacgYzjqWKVkFAs6DKZ3ak" name="S27 Ultra render" alt="Samsung Galaxy S27 Ultra render" src="https://cdn.mos.cms.futurecdn.net/LacgYzjqWKVkFAs6DKZ3ak-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: @TechHome100)</span></figcaption></figure><p>The release of the Galaxy Z Fold 8 saw Samsung finally embrace silicon carbon batteries. The main benefit is that the increased energy density means you can include more battery capacity without increasing the actual physical dimensions of the battery. This allows for larger batteries that aren't physically larger, and don't increase the size and weight of phones by any significant amount.</p><p>Leaks suggest that Samsung will be adopting the same technology in the Galaxy S27 Ultra,<a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-ultra-batteries-leak-heres-what-we-know"> increasing the size of the battery</a> from 5,000 mAh <a href="https://www.tomsguide.com/phones/samsung-phones/leaked-galaxy-s27-ultra-specs-reveal-a-long-overdue-major-upgrade">to 5,700 mAh</a>. That's quite an upgrade, considering Galaxy Ultra phones have been stuck at 5,000 mAh for the past six years, though whether it will help the S27 Ultra climb the ranks of our <a href="https://www.tomsguide.com/us/smartphones-best-battery-life,review-2857.html">best phone battery life page</a> isn't clear yet. We'll need to wait and see how it performs during battery life testing.</p><p>Furthermore, it's unclear whether charging speed will change at all, considering the S26 Ultra upped the ante from <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-tipped-for-this-long-overdue-charging-upgrade-what-we-know">45W wired charging to 60W</a>. However the rumored inclusion of Qi2 magnetic charging means that wireless charging should be much easier — even if it doesn't happen any faster.</p><h2 class="article-body__section" id="section-samsung-galaxy-s27-ultra-outlook"><span>Samsung Galaxy S27 Ultra: Outlook</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2392px;"><p class="vanilla-image-block" style="padding-top:56.31%;"><img id="pbkQPMog7DTsZnL2jnszET" name="Screenshot 2026-11-04 111758" alt="galaxy s27 ultra dummy units" src="https://cdn.mos.cms.futurecdn.net/pbkQPMog7DTsZnL2jnszET-1920-80.png" mos="" align="middle" fullscreen="" width="2392" height="1347" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Android Headline)</span></figcaption></figure><p>There's still a lot we don't know about the Galaxy S27 Ultra, but so far we're hearing about some promising things. Sure, the loss of a camera lens might be disappointing to some, but we are still getting some positive changes. A larger battery is something Galaxy users have been demanding for years, and the inclusion of Qi2 magnets means that Samsung is now on par with Apple and Google in the wireless charging game.</p><p>On top of that, we have the possibility of a brighter display, which takes the Privacy Display into account, and performance that should be some of the best you can get on any smartphone. The redesign is... interesting. It's clearly iPhone-inspired, which is both good and bad, and while people may not like the change I think it's good to see Samsung mix things up a bit. </p><p>There is still plenty of time for new information to leak, and that means we'll start getting a more complete picture of what the Galaxy S27 Ultra has to offer as the weeks and months roll on. Until the inevitable January Unpacked, where Samsung reveals the whole lineup in full. But until then, be sure to check back here for all the latest news and rumors about the upcoming flagships.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/apple-ceo-says-hes-not-able-to-predict-when-iphone-duo-shortages-will-end-it-probably-wont-be-this-year">Apple CEO says he's 'not able to predict' when iPhone Duo shortages will end — it probably won't be this year</a></li><li><a href="https://www.tomsguide.com/phones/android-phones/forget-iphone-18-pro-max-i-tested-this-wild-android-hasselblad-combo-for-a-month-and-its-my-favorite-new-camera-phone">Forget iPhone 18 Pro Max — I tested this wild Android/Hasselblad combo for a month and it's my favorite new camera phone</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-just-got-a-usability-feature-it-should-have-had-at-launch-thanks-to-ios-27-3">iPhone Duo just got a usability feature it should have had at launch, thanks to iOS 27.3</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-ultra-rumors-release-display-upgrades-and-everything-we-know-so-far</link>
                                                                            <description>
                            <![CDATA[ Samsung Galaxy S27 Ultra is coming in early 2027, and the leaks are already painting a picture of what to expect. Here's what we know. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">ipQcZMNyhLvLqe8SGqxVDV</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/EKbAbDHJQJnhBVmx9jUbiC-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 05 Nov 2026 06:15:00 +0000</pubDate>                                                                                                                                <updated>Thu, 05 Nov 2026 08:48:42 +0000</updated>
                                                                                                                                            <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/EKbAbDHJQJnhBVmx9jUbiC-1920-80.jpg">
                                                            <media:credit><![CDATA[Ice Universe]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Galaxy S27 Ultra render]]></media:description>                                                            <media:text><![CDATA[Galaxy S27 Ultra render]]></media:text>
                                <media:title type="plain"><![CDATA[Galaxy S27 Ultra render]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/EKbAbDHJQJnhBVmx9jUbiC-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The Samsung Galaxy S27 Ultra is coming, and it could be arriving sooner than you think. The big phone launches of 2026 are effectively over, now that the new iPhones are out of the way, and that means we can start looking at what major releases 2027 will have to offer. </p><p>Samsung is usually the first out of the gate, and rumor has it that the launch will be a little earlier than we're used to — suggesting a January release window. The Unpacked event is also said to include four new Galaxy S27-series phones, with a <a href="https://www.tomsguide.com/phones/samsung-galaxy-s27-pro-and-ultra-tipped-for-an-iphone-like-camera-upgrade-thatll-massively-improve-selfies">Pro model</a> set to join the usual lineup. But, as ever, the Galaxy S27 Ultra is set to be the star of the show, with all the latest and best hardware Samsung has to offer.</p><p>Here's everything we know about the Samsung Galaxy S27 Ultra so far.</p><h2 class="article-body__section" id="section-samsung-galaxy-s27-ultra-rumored-specifications"><span>Samsung Galaxy S27 Ultra: Rumored Specifications</span></h2><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Samsung Galaxy S27 Ultra (rumored)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>6.9-inches</p></td></tr><tr><td class="firstcol " ><p><strong>Processor</strong></p></td><td  ><p>Snapdragon 8 Elite Extreme Gen 6</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>256/512/1TB</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>12/16GB</p></td></tr><tr><td class="firstcol " ><p><strong>Front Camera</strong></p></td><td  ><p>12MP</p></td></tr><tr><td class="firstcol " ><p><strong>Rear Cameras</strong></p></td><td  ><p>200MP main, 50MP ultrawide, 50MP telephoto with 4x or 5x optical zookm</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>5,700 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Charging</strong></p></td><td  ><p>60W</p></td></tr><tr><td class="firstcol " ><p><strong>Size</strong></p></td><td  ><p>163.76 x 78.25 x 7.97mm (6.44 x 3.0 x 0.31 inches)</p></td></tr></tbody></table></div><h2 class="article-body__section" id="section-samsung-galaxy-s27-ultra-design-and-display"><span>Samsung Galaxy S27 Ultra: Design and display</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2389px;"><p class="vanilla-image-block" style="padding-top:55.92%;"><img id="VUBmnW4HS7aUWWmqLRQ2mX" name="Screenshot 2026-11-04 113231" alt="samsung galaxy s27 ultra dummy unit leak" src="https://cdn.mos.cms.futurecdn.net/VUBmnW4HS7aUWWmqLRQ2mX-1920-80.png" mos="" align="middle" fullscreen="" width="2389" height="1336" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Android Headline)</span></figcaption></figure><p>We're not expecting any major changes to the size of the Galaxy S27 Ultra, and recently-leaked dummy units suggest that the dimensions of the upcoming phone will be very similar to those of the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review">Galaxy S26 Ultra</a>. And by very similar, I mean practically identical, with only a fraction of a millimeter's difference in width and thickness.</p><p>However, the big changes are set to happen on the back of the phone. Samsung is widely expected to ditch the vertical camera array of past Galaxy phones, <a href="https://www.tomsguide.com/phones/samsung-phones/finally-something-different-leaker-teases-samsung-galaxy-s27-ultra-concept-with-a-new-camera-bar-design">in favor of a full-width camera bar</a> — similar to that of the iPhone 18 Pro. This change is also supposed to come with the loss of the secondary telephoto lens, and turn the Ultra model into a triple-lens camera for the first time.</p><p>It's also been rumored that <a href="https://www.tomsguide.com/phones/samsung-phones/leaked-galaxy-s27-ultra-specs-reveal-a-long-overdue-major-upgrade">Samsung may finally </a>employ an <a href="https://www.sammobile.com/news/galaxy-s27-pro-ultra-improved-privacy-display/" target="_blank">M16 OLED</a> display on the S27 Ultra. This display is set to be brighter, and is the same material used on the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-and-pro-max-review">iPhone 18 Pro</a> and <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-review">iPhone Duo</a>. There are also rumors that the Ultra will feature "enhanced display brightness" to counteract the <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-s26-ultra-lab-tests-show-that-its-dimmer-than-s25-ultra-even-with-privacy-display-turned-off">dimming caused by the Privacy Display. </a></p><p>As useful as the feature is, we found that it caused a loss of display brightness even when the Privacy Display setting is deactivated. So it's good to see that Samsung is proactively dealing with that issue with the next generation Privacy Display. The Privacy feature is also rumored to be getting some upgrades, but it's unclear what those might actually be.</p><p><a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-leaks-are-coming-fast-and-weve-got-a-glimpse-of-a-new-design-and-disappointing-performance-hardware">Recently-leaked dummy units </a>also suggest that the Ultra will retain its built-in S Pen, and rumor has it that <a href="https://www.tomsguide.com/phones/samsung-galaxy-s27-pro-and-ultra-tipped-for-an-iphone-like-camera-upgrade-thatll-massively-improve-selfies">Qi2 magnets will finally be added</a> to the phone itself. That means no more having to buy special magnetic cases to make the most out of using Qi2 chargers and accessories. However, this feature may be exclusive to the Ultra and Pro models, with the Standard and Plus options missing out.</p><h2 class="article-body__section" id="section-samsung-galaxy-s27-ultra-performance"><span>Samsung Galaxy S27 Ultra: Performance</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="CJC6PvLf36vkUo2kxn4dLT" name="Snapdragon 8 Elite Extreme Gen 6" alt="Snapdragon 8 Elite Extreme Gen 6" src="https://cdn.mos.cms.futurecdn.net/CJC6PvLf36vkUo2kxn4dLT-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The one thing that isn't a mystery is the S27 Ultra's performance hardware. We assumed the phone would come with the <a href="https://www.tomsguide.com/phones/android-phones/do-you-actually-need-the-snapdragon-8-elite-extreme-gen-6-qualcomms-svps-explain-who-should-pay-the-premium">Snapdragon 8 Elite Extreme Gen 6</a>, and a recent leak seemingly confirmed that. Not that it was ever doubted that Samsung would opt for the most powerful Qualcomm chip on the market. The only real question we have is whether the phone will have a standard Extreme chip, or if a custom "for Galaxy" variant will be developed to offer stronger performance.</p><p><a href="https://www.tomsguide.com/phones/android-phones/snapdragon-8-elite-gen-6-benchmark-test-results-hands-on-vs-a20-pro-iphone-18-pro">Our own early tests of the Extreme</a>, using Qualcomm's reference device, reveal that the chip performed 29% better in Geekbench 7's single-core benchmark, and 16.3% better in the multi-core test. 3DMark's Solar Bay Extreme test shows a 49% increase in graphical power, or a 40% increase in Wildlife Extreme. Meanwhile AnTuTu's General AI benchmark showed an 18.4% increase, or a crazy 118% increase in AnTuTu's LLM AI test.</p><p>Obviously things are going to be a little different in a commercial phone, rather than a reference device that's built to perform well. But it shows just how much of an improvement we should see when the Galaxy S27 Ultra arrives next year. Needless to say this is going to be a powerful phone with a lot of AI capabilities.</p><h2 class="article-body__section" id="section-samsung-galaxy-s27-ultra-cameras"><span>Samsung Galaxy S27 Ultra: Cameras</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1723px;"><p class="vanilla-image-block" style="padding-top:55.95%;"><img id="G7XC4Y95F7B3L2YqTdpXoS" name="Screenshot 2026-11-04 111804" alt="galaxy s27 ultra dummy units" src="https://cdn.mos.cms.futurecdn.net/G7XC4Y95F7B3L2YqTdpXoS-1920-80.png" mos="" align="middle" fullscreen="" width="1723" height="964" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Android Headline)</span></figcaption></figure><p>Very little is known about the Galaxy S27 Ultra's cameras right now, other than the fact Samsung is seemingly <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-ultra-may-scrap-the-10mp-telephoto-lens-and-theres-no-word-of-a-replacement">scrapping the secondary telephoto lens</a>. This means the Ultra model will match other premium phones with a single zooming lens, which we assume will still be the same 50MP lens with 5x optical magnification we saw on the Galaxy S26 Ultra.</p><p>While that news may be disappointing to some, it's not a huge loss. The second telephoto lens was always fairly underpowered, with the last iteration offering 10MP of resolution and 3x optical zoom. The quality wasn't bad, but it also wasn't really a necessary feature to have. Particularly since telephoto lenses are expensive, hence why they're mostly found on premium phones, and take up a lot of space. Removing the second one adds extra space to the S27 Ultra, and hopefully helps avoid another price hike.</p><p>This would be the perfect time for Samsung to add variable optical zoom, which has been rumored for a few years and effectively squeezes two telephoto lenses into one. Sadly it's unclear whether that will actually happen, and the same is true for the possibility of getting variable aperture — a feature Samsung last offered in 2019.</p><p>Rumors instead suggest that the telephoto <a href="https://go.skimresources.com/?id=803X112721&amp;xs=1&amp;url=https://x.com/phonefuturist/status/2094046496362483863&amp;xcust=4-0-3238643-1-0-0-0-0&amp;sref=https://www.techadvisor.com/article/3238643/galaxy-s27-ultra-the-camera-upgrade-debate-rolls-on.html" target="_blank">may drop</a> to 4x magnification, with a larger 1/1.9-inch sensor to compensate. However, there are <a href="https://go.skimresources.com/?id=803X112721&amp;xs=1&amp;url=https://x.com/UniverseIce/status/2099327785814945972&amp;xcust=4-0-3238643-1-0-0-0-0&amp;sref=https://www.techadvisor.com/article/3238643/galaxy-s27-ultra-the-camera-upgrade-debate-rolls-on.html">conflicting reports</a>, and the S27 Ultra may instead just get the exact same zooming lens as the S26 Ultra.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ONPG8e"></div>                            </div>                            <script src="https://kwizly.com/embed/ONPG8e.js" async=""></script><h3 class="article-body__section" id="section-samsung-galaxy-s27-ultra-software-ai"><span>Samsung Galaxy S27 Ultra: Software &amp; AI</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5255px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="uy3k4iJ2P9SqjMAZ7v7hke" name="Galaxy S26 Ultra 24 hours-13" alt="Samsung Galaxy S26 Ultra" src="https://cdn.mos.cms.futurecdn.net/uy3k4iJ2P9SqjMAZ7v7hke-1920-80.jpg" mos="" align="middle" fullscreen="" width="5255" height="2956" attribution="" endorsement="" class="inline" /></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 know software is going to be a huge part of the Samsung Galaxy S27 series, as it has been for the last few generations of Galaxy phones. Galaxy AI is one of those things that isn't going to vanish overnight, though at this early stage we have absolutely no idea what sort of features and capabilities will be coming to the S27 Ultra and its cohorts.</p><p>One possibility is the addition of MyFanCam, an AI-powered feature that debuted on 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>. It works with existing footage that you've filmed, and uses AI to focus on a person of your choice. There's no reason why it couldn't exist on a Galaxy S phone, and the S27 launch is the perfect place to do it — especially if it has some much-needed upgrades, <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">like the ability to focus on animals as well.</a> We should also expect the phones to run on OneUI 9, possibly the updated OneUI 9.5, which is based on Android 17.</p><p>But, for the time being, any additional software and AI upgrades on the S27 Ultra are a complete mystery.</p><h2 class="article-body__section" id="section-samsung-galaxy-s27-ultra-battery"><span>Samsung Galaxy S27 Ultra: Battery</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="LacgYzjqWKVkFAs6DKZ3ak" name="S27 Ultra render" alt="Samsung Galaxy S27 Ultra render" src="https://cdn.mos.cms.futurecdn.net/LacgYzjqWKVkFAs6DKZ3ak-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: @TechHome100)</span></figcaption></figure><p>The release of the Galaxy Z Fold 8 saw Samsung finally embrace silicon carbon batteries. The main benefit is that the increased energy density means you can include more battery capacity without increasing the actual physical dimensions of the battery. This allows for larger batteries that aren't physically larger, and don't increase the size and weight of phones by any significant amount.</p><p>Leaks suggest that Samsung will be adopting the same technology in the Galaxy S27 Ultra,<a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-ultra-batteries-leak-heres-what-we-know"> increasing the size of the battery</a> from 5,000 mAh <a href="https://www.tomsguide.com/phones/samsung-phones/leaked-galaxy-s27-ultra-specs-reveal-a-long-overdue-major-upgrade">to 5,700 mAh</a>. That's quite an upgrade, considering Galaxy Ultra phones have been stuck at 5,000 mAh for the past six years, though whether it will help the S27 Ultra climb the ranks of our <a href="https://www.tomsguide.com/us/smartphones-best-battery-life,review-2857.html">best phone battery life page</a> isn't clear yet. We'll need to wait and see how it performs during battery life testing.</p><p>Furthermore, it's unclear whether charging speed will change at all, considering the S26 Ultra upped the ante from <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-tipped-for-this-long-overdue-charging-upgrade-what-we-know">45W wired charging to 60W</a>. However the rumored inclusion of Qi2 magnetic charging means that wireless charging should be much easier — even if it doesn't happen any faster.</p><h2 class="article-body__section" id="section-samsung-galaxy-s27-ultra-outlook"><span>Samsung Galaxy S27 Ultra: Outlook</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2392px;"><p class="vanilla-image-block" style="padding-top:56.31%;"><img id="pbkQPMog7DTsZnL2jnszET" name="Screenshot 2026-11-04 111758" alt="galaxy s27 ultra dummy units" src="https://cdn.mos.cms.futurecdn.net/pbkQPMog7DTsZnL2jnszET-1920-80.png" mos="" align="middle" fullscreen="" width="2392" height="1347" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Android Headline)</span></figcaption></figure><p>There's still a lot we don't know about the Galaxy S27 Ultra, but so far we're hearing about some promising things. Sure, the loss of a camera lens might be disappointing to some, but we are still getting some positive changes. A larger battery is something Galaxy users have been demanding for years, and the inclusion of Qi2 magnets means that Samsung is now on par with Apple and Google in the wireless charging game.</p><p>On top of that, we have the possibility of a brighter display, which takes the Privacy Display into account, and performance that should be some of the best you can get on any smartphone. The redesign is... interesting. It's clearly iPhone-inspired, which is both good and bad, and while people may not like the change I think it's good to see Samsung mix things up a bit. </p><p>There is still plenty of time for new information to leak, and that means we'll start getting a more complete picture of what the Galaxy S27 Ultra has to offer as the weeks and months roll on. Until the inevitable January Unpacked, where Samsung reveals the whole lineup in full. But until then, be sure to check back here for all the latest news and rumors about the upcoming flagships.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/apple-ceo-says-hes-not-able-to-predict-when-iphone-duo-shortages-will-end-it-probably-wont-be-this-year">Apple CEO says he's 'not able to predict' when iPhone Duo shortages will end — it probably won't be this year</a></li><li><a href="https://www.tomsguide.com/phones/android-phones/forget-iphone-18-pro-max-i-tested-this-wild-android-hasselblad-combo-for-a-month-and-its-my-favorite-new-camera-phone">Forget iPhone 18 Pro Max — I tested this wild Android/Hasselblad combo for a month and it's my favorite new camera phone</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-just-got-a-usability-feature-it-should-have-had-at-launch-thanks-to-ios-27-3">iPhone Duo just got a usability feature it should have had at launch, thanks to iOS 27.3</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Samsung Galaxy S27 leaks reveal bold new Ultra design — and disappointing 'Pro' downgrade ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The <a href="https://www.tomsguide.com/phones/samsung-phones/5-ways-galaxy-s27-ultra-can-beat-the-iphone-18-pro-and-2-ways-apple-will-still-win">Samsung Galaxy S27 Ultra</a> is coming in early 2027, and while we haven't heard a lot about the phone so far, it looks like the floodgates are starting to open. The latest leaks seem to reveal more details about the phone's design, as well as a possible performance change that could prove very disappointing for those of you hoping to pick up the new S27 Ultra. </p><p>We've already seen <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-ultra-design-leaked-and-it-could-cause-the-most-intense-wave-of-criticism-in-galaxy-history">design leaks that showcase the Galaxy S27 Ultra's new look</a>, swapping the vertical camera array for a horizontal camera bar — which is reminiscent of the "Raised Plateau" Apple debuted on <a href="https://www.tomsguide.com/phones/iphones/iphone-17-pro-max-review">iPhone 17 Pro Max</a>. Now dummy units of that design have appeared online courtesy of <a href="https://www.androidheadlines.com/galaxy-s27-ultra-vs-galaxy-s26-ultra-iphone-18-pro-pixel-11-pro" target="_blank">Android Headline</a>, letting us visualize that design as a real phone.</p><p>Dummy units are, of course, no substitute for the real thing. However they do give us an idea of what using these phones might be like.</p><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:55.76%;"><img id="Y967iSkke8HCs7xjTpbgkX" name="Screenshot 2026-11-04 113249" alt="samsung galaxy s27 ultra dummy unit leak" src="https://cdn.mos.cms.futurecdn.net/Y967iSkke8HCs7xjTpbgkX-1920-80.png" mos="" align="middle" fullscreen="" width="2380" height="1327" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Android Headline)</span></figcaption></figure><p>Takeaways from the dummy units include changes to the camera, which includes <a href="https://www.tomsguide.com/phones/samsung-phones/the-samsung-galaxy-s27-ultra-could-ditch-the-redundant-3x-zoom-for-this-much-bigger-camera-upgrade">removing the 10MP telephoto lens</a> with 3x optical zoom. The telephoto does look quite small, but that's only because the S26 Ultra's telephoto had a deceptive design. So it's unclear what this means for the camera hardware.</p><p>The actual dimensions of the phone haven't really changed. The S27 Ultra dummy unit measures 163.76 x 78.25 x 7.97mm (6.44 x 3.0 x 0.31 inches), compared to 163.6 x 78.1 x 7.9mm on the Galaxy S26 Ultra. Which means the size difference is barely distinguishable. So really, the main visual changes come in the form of the camera setup.</p><p>Android Headline also notes that the design includes a built-in S Pen, alongside magnets to<a href="https://www.tomsguide.com/phones/samsung-galaxy-s27-pro-and-ultra-tipped-for-an-iphone-like-camera-upgrade-thatll-massively-improve-selfies"> facilitate full Qi2 wireless charging.</a> I don't see the magnets on the dummy unit or the CAD renders they're based on, so take that particular rumor with a healthy dose of scepticism.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ONPG8e"></div>                            </div>                            <script src="https://kwizly.com/embed/ONPG8e.js" async=""></script><h2 id="a-strange-performance-split">A strange performance split</h2><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:55.95%;"><img id="G7XC4Y95F7B3L2YqTdpXoS" name="Screenshot 2026-11-04 111804" alt="galaxy s27 ultra dummy units" src="https://cdn.mos.cms.futurecdn.net/G7XC4Y95F7B3L2YqTdpXoS-1920-80.png" mos="" align="middle" fullscreen="" width="1723" height="964" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Android Headline)</span></figcaption></figure><p>Those of you hoping for a super-powered S27 series may be disappointed, though. While we fully expect that the Ultra model will come with the newly-unveiled <a href="https://www.tomsguide.com/phones/android-phones/snapdragon-8-elite-gen-6-benchmark-test-results-hands-on-vs-a20-pro-iphone-18-pro">Snapdragon 8 Elite Extreme Gen 6 </a>(or a custom "for Galaxy" variant), the same may not be true of the S27 Pro.</p><p><a href="https://www.notebookcheck.net/Galaxy-S27-series-chipset-details-leak-with-a-surprising-entry-for-the-Pro.1441625.0.html" target="_blank">Notebookcheck</a> recently uncovered listings for all four Galaxy S27 models in the import-export database NBD. It reveals that the S27 Pro may come with the <a href="https://www.tomsguide.com/phones/android-phones/snapdragon-8-elite-gen-6-is-here-this-is-what-it-can-do-better-than-apples-a20-pro">Snapdragon 8 Elite Gen 6</a>, the successor to the current Elite Gen 5 chipset in the S26 series. This chip is still being build on a 2nm process, with all the performance and efficiency benefits that affords, but it's not the absolute best chip Qualcomm will have on offer. </p><p>The Extreme Gen 6 chip is supposed to come with better computing, graphics and neural performance, as well as the ability to record videos in 8K resolution at 60 frames per second. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2389px;"><p class="vanilla-image-block" style="padding-top:55.92%;"><img id="VUBmnW4HS7aUWWmqLRQ2mX" name="Screenshot 2026-11-04 113231" alt="samsung galaxy s27 ultra dummy unit leak" src="https://cdn.mos.cms.futurecdn.net/VUBmnW4HS7aUWWmqLRQ2mX-1920-80.png" mos="" align="middle" fullscreen="" width="2389" height="1336" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Android Headline)</span></figcaption></figure><p>The regular Elite Gen 6 is limited to 30fps, and while the ability to record in 8K isn't going to appeal to everyone, it shows that the Extreme chip is the superior option. Certainly from a performance point of view, and that could be enough to push people away from the Pro model.</p><p>That said, a less impressive chip is likely cheaper, and means Samsung could be trying to avoid unnecessary costs that would need to be passed on to the consumer.</p><p>The listings also reveal that the international versions of the S27 and S27 Plus could run on the Exynos 2700 chipset, rather than a Snapdragon chip. Though Samsung has been doing that for years, and it's not really that surprising. </p><p>The same listings feature screen size too, with the S27, S27 Plus and S27 Ultra offering the same 6.3-, 6.7- and 6.9-inch displays as their predecessors. Meanwhile the Pro is set to offer a 6.5-inch display, and sit between the S27 and its plus-sized counterpart.</p><p>The Galaxy S27 series is expected to arrive in January, and we here at Tom's Guide will be watching for all the latest news and rumors to keep you up to date. Stay tuned for more.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/apple-ceo-says-hes-not-able-to-predict-when-iphone-duo-shortages-will-end-it-probably-wont-be-this-year">Apple CEO says he's 'not able to predict' when iPhone Duo shortages will end — it probably won't be this year</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/here-are-the-7-biggest-upgrades-we-want-to-see-on-samsung-galaxy-s27">Here are the 7 biggest upgrades we want to see on Samsung Galaxy S27</a></li><li><a href="https://www.tomsguide.com/phones/iphones/is-your-iphone-listening-to-you-the-live-listen-setting-you-should-check-right-now">Is your iPhone listening to you? The 'live listen' setting you should check right now</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-leaks-are-coming-fast-and-weve-got-a-glimpse-of-a-new-design-and-disappointing-performance-hardware</link>
                                                                            <description>
                            <![CDATA[ Samsung Galaxy S27 Ultra's new design now exists in dummy unit form, but the Pro may not be as powerful as some would like. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">H3YKb4ftWAAyaorDPsLy3b</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/pbkQPMog7DTsZnL2jnszET-1920-80.png" type="image/png" length="0"></enclosure>
                                                                        <pubDate>Wed, 04 Nov 2026 11:35:52 +0000</pubDate>                                                                                                                                <updated>Wed, 04 Nov 2026 22:54:25 +0000</updated>
                                                                                                                                            <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/png" url="https://cdn.mos.cms.futurecdn.net/pbkQPMog7DTsZnL2jnszET-1920-80.png">
                                                            <media:credit><![CDATA[Android Headline]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[galaxy s27 ultra dummy units]]></media:description>                                                            <media:text><![CDATA[galaxy s27 ultra dummy units]]></media:text>
                                <media:title type="plain"><![CDATA[galaxy s27 ultra dummy units]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/pbkQPMog7DTsZnL2jnszET-1920-80.png" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The <a href="https://www.tomsguide.com/phones/samsung-phones/5-ways-galaxy-s27-ultra-can-beat-the-iphone-18-pro-and-2-ways-apple-will-still-win">Samsung Galaxy S27 Ultra</a> is coming in early 2027, and while we haven't heard a lot about the phone so far, it looks like the floodgates are starting to open. The latest leaks seem to reveal more details about the phone's design, as well as a possible performance change that could prove very disappointing for those of you hoping to pick up the new S27 Ultra. </p><p>We've already seen <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-ultra-design-leaked-and-it-could-cause-the-most-intense-wave-of-criticism-in-galaxy-history">design leaks that showcase the Galaxy S27 Ultra's new look</a>, swapping the vertical camera array for a horizontal camera bar — which is reminiscent of the "Raised Plateau" Apple debuted on <a href="https://www.tomsguide.com/phones/iphones/iphone-17-pro-max-review">iPhone 17 Pro Max</a>. Now dummy units of that design have appeared online courtesy of <a href="https://www.androidheadlines.com/galaxy-s27-ultra-vs-galaxy-s26-ultra-iphone-18-pro-pixel-11-pro" target="_blank">Android Headline</a>, letting us visualize that design as a real phone.</p><p>Dummy units are, of course, no substitute for the real thing. However they do give us an idea of what using these phones might be like.</p><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:55.76%;"><img id="Y967iSkke8HCs7xjTpbgkX" name="Screenshot 2026-11-04 113249" alt="samsung galaxy s27 ultra dummy unit leak" src="https://cdn.mos.cms.futurecdn.net/Y967iSkke8HCs7xjTpbgkX-1920-80.png" mos="" align="middle" fullscreen="" width="2380" height="1327" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Android Headline)</span></figcaption></figure><p>Takeaways from the dummy units include changes to the camera, which includes <a href="https://www.tomsguide.com/phones/samsung-phones/the-samsung-galaxy-s27-ultra-could-ditch-the-redundant-3x-zoom-for-this-much-bigger-camera-upgrade">removing the 10MP telephoto lens</a> with 3x optical zoom. The telephoto does look quite small, but that's only because the S26 Ultra's telephoto had a deceptive design. So it's unclear what this means for the camera hardware.</p><p>The actual dimensions of the phone haven't really changed. The S27 Ultra dummy unit measures 163.76 x 78.25 x 7.97mm (6.44 x 3.0 x 0.31 inches), compared to 163.6 x 78.1 x 7.9mm on the Galaxy S26 Ultra. Which means the size difference is barely distinguishable. So really, the main visual changes come in the form of the camera setup.</p><p>Android Headline also notes that the design includes a built-in S Pen, alongside magnets to<a href="https://www.tomsguide.com/phones/samsung-galaxy-s27-pro-and-ultra-tipped-for-an-iphone-like-camera-upgrade-thatll-massively-improve-selfies"> facilitate full Qi2 wireless charging.</a> I don't see the magnets on the dummy unit or the CAD renders they're based on, so take that particular rumor with a healthy dose of scepticism.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ONPG8e"></div>                            </div>                            <script src="https://kwizly.com/embed/ONPG8e.js" async=""></script><h2 id="a-strange-performance-split">A strange performance split</h2><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:55.95%;"><img id="G7XC4Y95F7B3L2YqTdpXoS" name="Screenshot 2026-11-04 111804" alt="galaxy s27 ultra dummy units" src="https://cdn.mos.cms.futurecdn.net/G7XC4Y95F7B3L2YqTdpXoS-1920-80.png" mos="" align="middle" fullscreen="" width="1723" height="964" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Android Headline)</span></figcaption></figure><p>Those of you hoping for a super-powered S27 series may be disappointed, though. While we fully expect that the Ultra model will come with the newly-unveiled <a href="https://www.tomsguide.com/phones/android-phones/snapdragon-8-elite-gen-6-benchmark-test-results-hands-on-vs-a20-pro-iphone-18-pro">Snapdragon 8 Elite Extreme Gen 6 </a>(or a custom "for Galaxy" variant), the same may not be true of the S27 Pro.</p><p><a href="https://www.notebookcheck.net/Galaxy-S27-series-chipset-details-leak-with-a-surprising-entry-for-the-Pro.1441625.0.html" target="_blank">Notebookcheck</a> recently uncovered listings for all four Galaxy S27 models in the import-export database NBD. It reveals that the S27 Pro may come with the <a href="https://www.tomsguide.com/phones/android-phones/snapdragon-8-elite-gen-6-is-here-this-is-what-it-can-do-better-than-apples-a20-pro">Snapdragon 8 Elite Gen 6</a>, the successor to the current Elite Gen 5 chipset in the S26 series. This chip is still being build on a 2nm process, with all the performance and efficiency benefits that affords, but it's not the absolute best chip Qualcomm will have on offer. </p><p>The Extreme Gen 6 chip is supposed to come with better computing, graphics and neural performance, as well as the ability to record videos in 8K resolution at 60 frames per second. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2389px;"><p class="vanilla-image-block" style="padding-top:55.92%;"><img id="VUBmnW4HS7aUWWmqLRQ2mX" name="Screenshot 2026-11-04 113231" alt="samsung galaxy s27 ultra dummy unit leak" src="https://cdn.mos.cms.futurecdn.net/VUBmnW4HS7aUWWmqLRQ2mX-1920-80.png" mos="" align="middle" fullscreen="" width="2389" height="1336" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Android Headline)</span></figcaption></figure><p>The regular Elite Gen 6 is limited to 30fps, and while the ability to record in 8K isn't going to appeal to everyone, it shows that the Extreme chip is the superior option. Certainly from a performance point of view, and that could be enough to push people away from the Pro model.</p><p>That said, a less impressive chip is likely cheaper, and means Samsung could be trying to avoid unnecessary costs that would need to be passed on to the consumer.</p><p>The listings also reveal that the international versions of the S27 and S27 Plus could run on the Exynos 2700 chipset, rather than a Snapdragon chip. Though Samsung has been doing that for years, and it's not really that surprising. </p><p>The same listings feature screen size too, with the S27, S27 Plus and S27 Ultra offering the same 6.3-, 6.7- and 6.9-inch displays as their predecessors. Meanwhile the Pro is set to offer a 6.5-inch display, and sit between the S27 and its plus-sized counterpart.</p><p>The Galaxy S27 series is expected to arrive in January, and we here at Tom's Guide will be watching for all the latest news and rumors to keep you up to date. Stay tuned for more.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/apple-ceo-says-hes-not-able-to-predict-when-iphone-duo-shortages-will-end-it-probably-wont-be-this-year">Apple CEO says he's 'not able to predict' when iPhone Duo shortages will end — it probably won't be this year</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/here-are-the-7-biggest-upgrades-we-want-to-see-on-samsung-galaxy-s27">Here are the 7 biggest upgrades we want to see on Samsung Galaxy S27</a></li><li><a href="https://www.tomsguide.com/phones/iphones/is-your-iphone-listening-to-you-the-live-listen-setting-you-should-check-right-now">Is your iPhone listening to you? The 'live listen' setting you should check right now</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Forget iPhone Duo, the Galaxy Z Fold 8 is now $300 off the normal price — just $1,599 at Amazon ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Still can't get your hands on the iPhone Duo? Well, there's a deal out there that could get you a similar foldable experience for considerably less money. You just need to be willing to jump from iOS to Android and buy a Samsung Galaxy Z Fold 8.</p><p>You can pick up the <a href="https://www.amazon.com/dp/B0H126B3KV" target="_blank" rel="nofollow">Samsung Galaxy Z Fold 8 for $1,599 at Amazon</a> right now. Not only is this one of the lowest prices we've seen, and $100 lower than the last time this phone got discounted, it's also $400 less than the cost of the iPhone Duo. Better still, this foldable is available now and won't force you to wait until January for delivery.</p><div class="product"><a data-dimension112="afc4d1e0-d78b-11f1-9d8c-e11dcd11de80" data-action="Deal Block" data-label="Galaxy Z Fold 8" data-dimension48="Galaxy Z Fold 8" data-dimension25="$1599" href="https://www.amazon.com/Samsung-Galaxy-Unlocked-Android-Smartphone/dp/B0H12M2TY4" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1327px;"><p class="vanilla-image-block" style="padding-top:64.28%;"><img id="9Rhpe6TtrVFSNo9Vtn27Tm" name="Galaxy Z Fold 8 Ultra deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/9Rhpe6TtrVFSNo9Vtn27Tm-1920-80.jpg" mos="" align="middle" fullscreen="" width="1327" height="853" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p>If you want the closest thing Samsung has to an iPhone Duo at a much lower price, check out this Galaxy Z Fold 8 deal. It's not as durable or long-lasting as the Duo, but it has the same comfortable design, great cameras and some of the best performance of any Android phone. All for $300 off the usual price tag.<a class="view-deal button" href="https://www.amazon.com/Samsung-Galaxy-Unlocked-Android-Smartphone/dp/B0H12M2TY4" target="_blank" rel="nofollow" data-dimension112="afc4d1e0-d78b-11f1-9d8c-e11dcd11de80" data-action="Deal Block" data-label="Galaxy Z Fold 8" data-dimension48="Galaxy Z Fold 8" data-dimension25="$1599">View Deal</a></p></div><p>Like the<a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-review"> iPhone Duo</a>, 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> has the wider, passport-shaped design that's started to take off in the foldable world. The Z Fold 8 has a 5.5-inch outer display and a 7.6-inch foldable display, which is pretty much identical to the iPhone Duo. The big difference is that Samsung's phone is a lot thinner and lighter, weighing 7.09 ounces and measuring just 0.17 inches thick when fully opened.</p><p>The inner screen features an anti-glare display that offers <a href="https://www.tomsguide.com/phones/iphones/my-iphone-duo-vs-galaxy-z-fold-8-display-test-just-went-viral-heres-why-the-internet-is-so-divided-and-my-pick">better color accuracy than the iPhone Duo</a>, which is great for streaming movies and TV. The anti-crease technology isn't nearly as impressive, but Samsung's Flex Titanium display technology means the crease is significantly less noticeable than a lot of other foldables.</p><p>Other specs include a pair of 48MP cameras, two 10MP selfie cameras (one on each display), 45W charging with 20W wireless charging (magnet-free) and up to 16GB of RAM on the 1TB model. There is a 4,800 mAh battery, but our testing shows that it doesn't last as long as the iPhone Duo — which is worth bearing in mind. </p><p>Apple's foldable is also more durable, can adjust the screen based on the hinge state and has the added benefit of vapor chamber cooling to aid performance. That's not to say the Fold 8 offers bad performance. It has the Snapdragon 8 Elite Gen 5 for Galaxy chipset, <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-vs-fold-8-ultra-vs-flip-8-benchmarked-the-results-are-in">which is easily the best Android chipset currently available.</a> </p><p>The main problem with foldables is that they're expensive, but the Galaxy Z Fold 8 is starting to buck that trend with all the discounts we're seeing. Considering how much money has been dropped off the MSRP, and how much we enjoyed using the phone ourselves, this is definitely worth considering if you're looking for a foldable of your own.</p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/forget-iphone-duo-the-galaxy-z-fold-8-is-now-usd300-off-the-normal-price-just-usd1-599-at-amazon</link>
                                                                            <description>
                            <![CDATA[ Not only is it cheaper than Apple's phone, but it's also much easier to get your hands on right now. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">e3GLmex3RqLdQ8aYiHcjHZ</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/GtEqu8qMu5TFusi2Q5xh2K-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 03 Nov 2026 13:42:47 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/GtEqu8qMu5TFusi2Q5xh2K-1920-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-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Still can't get your hands on the iPhone Duo? Well, there's a deal out there that could get you a similar foldable experience for considerably less money. You just need to be willing to jump from iOS to Android and buy a Samsung Galaxy Z Fold 8.</p><p>You can pick up the <a href="https://www.amazon.com/dp/B0H126B3KV" target="_blank" rel="nofollow">Samsung Galaxy Z Fold 8 for $1,599 at Amazon</a> right now. Not only is this one of the lowest prices we've seen, and $100 lower than the last time this phone got discounted, it's also $400 less than the cost of the iPhone Duo. Better still, this foldable is available now and won't force you to wait until January for delivery.</p><div class="product"><a data-dimension112="afc4d1e0-d78b-11f1-9d8c-e11dcd11de80" data-action="Deal Block" data-label="Galaxy Z Fold 8" data-dimension48="Galaxy Z Fold 8" data-dimension25="$1599" href="https://www.amazon.com/Samsung-Galaxy-Unlocked-Android-Smartphone/dp/B0H12M2TY4" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1327px;"><p class="vanilla-image-block" style="padding-top:64.28%;"><img id="9Rhpe6TtrVFSNo9Vtn27Tm" name="Galaxy Z Fold 8 Ultra deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/9Rhpe6TtrVFSNo9Vtn27Tm-1920-80.jpg" mos="" align="middle" fullscreen="" width="1327" height="853" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p>If you want the closest thing Samsung has to an iPhone Duo at a much lower price, check out this Galaxy Z Fold 8 deal. It's not as durable or long-lasting as the Duo, but it has the same comfortable design, great cameras and some of the best performance of any Android phone. All for $300 off the usual price tag.<a class="view-deal button" href="https://www.amazon.com/Samsung-Galaxy-Unlocked-Android-Smartphone/dp/B0H12M2TY4" target="_blank" rel="nofollow" data-dimension112="afc4d1e0-d78b-11f1-9d8c-e11dcd11de80" data-action="Deal Block" data-label="Galaxy Z Fold 8" data-dimension48="Galaxy Z Fold 8" data-dimension25="$1599">View Deal</a></p></div><p>Like the<a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-review"> iPhone Duo</a>, 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> has the wider, passport-shaped design that's started to take off in the foldable world. The Z Fold 8 has a 5.5-inch outer display and a 7.6-inch foldable display, which is pretty much identical to the iPhone Duo. The big difference is that Samsung's phone is a lot thinner and lighter, weighing 7.09 ounces and measuring just 0.17 inches thick when fully opened.</p><p>The inner screen features an anti-glare display that offers <a href="https://www.tomsguide.com/phones/iphones/my-iphone-duo-vs-galaxy-z-fold-8-display-test-just-went-viral-heres-why-the-internet-is-so-divided-and-my-pick">better color accuracy than the iPhone Duo</a>, which is great for streaming movies and TV. The anti-crease technology isn't nearly as impressive, but Samsung's Flex Titanium display technology means the crease is significantly less noticeable than a lot of other foldables.</p><p>Other specs include a pair of 48MP cameras, two 10MP selfie cameras (one on each display), 45W charging with 20W wireless charging (magnet-free) and up to 16GB of RAM on the 1TB model. There is a 4,800 mAh battery, but our testing shows that it doesn't last as long as the iPhone Duo — which is worth bearing in mind. </p><p>Apple's foldable is also more durable, can adjust the screen based on the hinge state and has the added benefit of vapor chamber cooling to aid performance. That's not to say the Fold 8 offers bad performance. It has the Snapdragon 8 Elite Gen 5 for Galaxy chipset, <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-vs-fold-8-ultra-vs-flip-8-benchmarked-the-results-are-in">which is easily the best Android chipset currently available.</a> </p><p>The main problem with foldables is that they're expensive, but the Galaxy Z Fold 8 is starting to buck that trend with all the discounts we're seeing. Considering how much money has been dropped off the MSRP, and how much we enjoyed using the phone ourselves, this is definitely worth considering if you're looking for a foldable of your own.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Here are the 7 biggest upgrades we want to see on Samsung Galaxy S27 ]]></title>
                                                                                                <dc:content><![CDATA[ <p>We're pretty much done for major phone launches in 2026, certainly for devices that will be coming to the U.S. and Europe, which means it's time to start looking forward to what might be coming next year. And, as usual, we expect the first big release of the year to be Samsung's Galaxy S27 series. </p><p>The <a href="https://www.tomsguide.com/phones/samsung-galaxy-s27-pro-and-ultra-tipped-for-an-iphone-like-camera-upgrade-thatll-massively-improve-selfies">S27 series is said to be made up of four phones</a>: The Galaxy S27, Galaxy S27 Plus, Galaxy S27 Ultra and the new Galaxy S27 Pro. We've started hearing some rumors about what those phones could have to offer, including one of the first major redesigns Galaxy phones have had for several years. Obviously there are a few things we also really want to see on these phones as well. </p><p>So here are the top seven changes we want to see on the Samsung Galaxy S27.</p><h3 class="article-body__section" id="section-larger-silicon-carbon-batteries"><span>Larger silicon carbon batteries</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="F6qr2SDN3gLqxsmgpqVYsY" name="Fold 8 back 2" alt="Samsung Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/F6qr2SDN3gLqxsmgpqVYsY-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Galaxy battery capacity does not change much, if ever. In fact the Galaxy S Ultra batteries have been stuck on the 5,000 mAh plateau since 2020. Meanwhile companies like <a href="https://www.tomsguide.com/phones/i-interviewed-honor-and-oneplus-about-their-silicon-carbon-battery-tech-apple-and-google-are-quickly-falling-behind">OnePlus have been offering over 7,000 mAh batteries</a> without any meaningful change to the design. </p><p>Frankly, people are sick of it, and it's time the Galaxy S27 changed that. Thankfully Samsung has shown that it can do this, thanks to the introduction of silicon carbon batteries in 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> series. This technology allows for greater energy density, meaning you can offer more battery capacity without increasing the size of the battery.</p><p><a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-ultra-batteries-leak-heres-what-we-know">Rumors suggest this may be happening too,</a> with the S27 Ultra reportedly getting a 5,700 mAh battery. The S27 Pro is tipped to get a 5,200 mAh battery, though we don't know what the S27 and S27 Plus might be getting. We hope they'll get an increase from the 4,300 mAh and 4,900mAh batteries on their S26 counterparts.</p><h3 class="article-body__section" id="section-magnetic-wireless-charging"><span>Magnetic wireless charging</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="LaP2SfFpoeBnvnoqoNv8wS" name="android-phones charging" alt="Pixel 10 mPro charging wirelessly as Galaxy s25 plus charges via USB-C" src="https://cdn.mos.cms.futurecdn.net/LaP2SfFpoeBnvnoqoNv8wS-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>One of my biggest gripes with Android phones is how so few of them have adopted the full <a href="https://www.tomsguide.com/phones/what-is-qi2-wireless-charging">Qi2 wireless charging</a> standard — complete with the magnetic charging ring. Samsung is one such offender, adding Qi2 charging technology, while relying on special cases to add the magnetic support.</p><p>Many reasons have been given over the past couple of years, ranging from issues with the S Pen to the fact the camera bump blocks where the magnetic ring should sit. Whatever the reason, it's high time that Samsung got its act together and added Qi2 magnets to its phones, and the S27 series' redesign is <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-ultra-could-feature-a-bigger-battery-and-magnetic-charging-but-it-may-come-at-the-expense-of-the-cameras">the perfect place to do it.</a></p><h3 class="article-body__section" id="section-a-better-privacy-display"><span>A better Privacy Display</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="wm8dR7CEavv9FRmX2wtdVX" name="Galaxy Unpacked February 2026_ Official Livestream 1-33-58 screenshot" alt="Privacy Display lifestyle" src="https://cdn.mos.cms.futurecdn.net/wm8dR7CEavv9FRmX2wtdVX-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Samsung)</span></figcaption></figure><p>The <a href="https://www.tomsguide.com/phones/samsung-phones/the-galaxy-s26-ultras-privacy-display-is-more-exciting-to-me-than-any-ai-feature">Privacy Display</a> is one of the best features on the Galaxy S26 Ultra, but it definitely needs some improvements. In particular, Samsung needs to counteract the fact the <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-s26-ultra-lab-tests-show-that-its-dimmer-than-s25-ultra-even-with-privacy-display-turned-off">Privacy Display dims the screen</a> — even when the feature is switched off. </p><p>Brighter screens offer huge visibility benefits, especially in bright conditions, and that shouldn't be affected by a new screen feature. Especially if you're not actually using it.</p><p>Similarly viewing angles are also reduced, even when the privacy features are switched off, which is far from ideal. I'd also like to see more control over the Privacy Display and the parts of the screen that are blacked out — rather than letting the phone handle everything automatically.</p><h3 class="article-body__section" id="section-upgraded-camera-features"><span>Upgraded camera features</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="LacgYzjqWKVkFAs6DKZ3ak" name="S27 Ultra render" alt="Samsung Galaxy S27 Ultra render" src="https://cdn.mos.cms.futurecdn.net/LacgYzjqWKVkFAs6DKZ3ak-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: @TechHome100)</span></figcaption></figure><p>Samsung has a habit of neglecting the camera hardware on some of its phones, particularly the cheaper models like the Galaxy S26 and Galaxy S26 Plus. 50MP main lenses are fine, but 12MP ultrawide and 10MP telephoto lenses aren't befitting a flagship device. It doesn't matter that they don't bear the Ultra branding.</p><p>At the very least the S27 and S27 Plus need a higher resolution ultrawide lens, ideally something closer to 50MP. Any extra upgrades on the telephoto lens will be a nice bonus.</p><p>As for the Galaxy S27 Ultra, it's about time we started seeing more advanced camera features.<a href="https://www.tomsguide.com/phones/samsung-phones/samsungs-working-on-new-phone-zoom-cameras-but-not-for-its-own-phones"> Variable zoom has been rumored</a> for at least a couple of years, and the rumored loss of the secondary telephoto lens feels like the perfect time to offer that. Likewise, now that the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-and-pro-max-review">iPhone 18 Pro</a> has a<a href="https://www.tomsguide.com/phones/iphones/i-tested-iphone-18-pro-max-variable-aperture-camera-and-i-can-almost-ditch-my-mirrorless"> variable aperture lens</a>, it's time Samsung brought that particular feature back to its own phones.</p><h3 class="article-body__section" id="section-faster-charging"><span>Faster charging</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3755px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="iGGyvv7a4hQPrn26YbFnid" name="Galaxy S26 Ultra 24 hours-11" alt="Samsung Galaxy S26 Ultra" src="https://cdn.mos.cms.futurecdn.net/iGGyvv7a4hQPrn26YbFnid-1920-80.jpg" mos="" align="middle" fullscreen="" width="3755" height="2112" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Samsung has not been the best at improving charging speed, though it earned some goodwill by upping the Galaxy S26 Ultra's charging speed from 45W to 60W. But sadly the S26 and S26 Plus were left at their old speeds of 25W and 45W, respectively. It's high time that changed.</p><p>There's little reason to keep both phones charging so slowly, especially since the Plus and Ultra models shared the same 45W charging speeds for a few years. It's also worth pointing out that the S26 Ultra can wirelessly charge at 25W speeds, which means the standard model really should be running faster by now. </p><p>Hopefully the Galaxy S27 series will fix that particular issue, even if the Ultra model sticks at 60W for a little while longer.</p><h3 class="article-body__section" id="section-an-s27-pro-that-doesn-t-feel-redundant"><span>An S27 Pro that doesn't feel redundant</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="xrRkG5WqQ2Zc28H48FRtUQ" name="Samsung Galaxy S26 Plus-1-LIST" alt="Samsung Galaxy S26 Plus" src="https://cdn.mos.cms.futurecdn.net/xrRkG5WqQ2Zc28H48FRtUQ-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>I have my concerns about the <a href="https://www.tomsguide.com/phones/samsung-galaxy-s27-pro-and-ultra-tipped-for-an-iphone-like-camera-upgrade-thatll-massively-improve-selfies">prospect of a Galaxy S27 Pro</a>, because I'm not entirely sure there's room for another Galaxy flagship to sit between the S27 Plus and S27 Ultra. Certainly not if the other three devices in the lineup are sticking around in their current forms.</p><p>What I hope is that Samsung can find some kind of niche for the S27 Pro to ensure that it's not a complete waste of time and money. Ideally without compromising features on the S27 Plus or hiking up the price of the S27 Ultra to ridiculous levels. </p><p>The Pro needs to balance the line between features and price, while justifying its own existence. Otherwise, Samsung is just going to end up cannibalizing its own customer base and making the whole endeavor pointless. </p><h3 class="article-body__section" id="section-no-more-price-hikes"><span>No more price hikes</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5030px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="3AU7b5543BpQUhStrp7AVC" name="Galaxy S26 hands-on" alt="Samsung Galaxy S26 and S26 Plus" src="https://cdn.mos.cms.futurecdn.net/3AU7b5543BpQUhStrp7AVC-1920-80.jpg" mos="" align="middle" fullscreen="" width="5030" height="2829" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Samsung has been an absolute demon for price hikes this year. Not only were multiple S26 models more expensive than their S25 counterparts, it also <a href="https://www.tomsguide.com/phones/samsung-phones/usd1-400-galaxy-s26-ultra-every-samsung-galaxy-s26-phone-just-got-a-price-hike">increased the price of the entire line-up back in September</a>. To the point where the Galaxy S26 Ultra now costs $1,400. Officially, anyway, since the <a href="https://www.tomsguide.com/phones/samsung-phones/7-amazing-pre-black-friday-samsung-phone-deals-including-z-fold-8-galaxy-s26-ultra-s26-fe-and-more">S26 series has been on sale almost everyday since.</a></p><p>Prices are high due to the skyrocketing cost of RAM and storage, and that means everyone has been hiking up the cost of their devices. With that in mind it would be really nice if Samsung didn't do that with the S27 series. Even if it's just a temporary reprieve, the last thing we need is phones getting even more expensive.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/weve-tested-the-iphone-duo-and-iphone-18-pro-max-heres-the-phone-you-should-actually-buy#mrfhud=true"><strong>We've tested the iPhone Duo and iPhone 18 Pro Max — here's the phone you should actually buy</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-2-is-inevitable-and-these-are-the-7-things-we-want-to-see"><strong>iPhone Duo 2 is inevitable — and these are the 7 things we want to see</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-has-been-hard-to-get-because-apple-did-almost-everything-wrong-heres-what-we-know"><strong>iPhone Duo has been hard to get because Apple did almost everything wrong — here's what we know</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/here-are-the-7-biggest-upgrades-we-want-to-see-on-samsung-galaxy-s27</link>
                                                                            <description>
                            <![CDATA[ Samsung needs to up its game with Galaxy S27, and these 7 things would be a good start. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">79YSJ6yTyhdKBaAnCmyGeV</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/EKbAbDHJQJnhBVmx9jUbiC-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 03 Nov 2026 06:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/EKbAbDHJQJnhBVmx9jUbiC-1920-80.jpg">
                                                            <media:credit><![CDATA[Ice Universe]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Galaxy S27 Ultra render]]></media:description>                                                            <media:text><![CDATA[Galaxy S27 Ultra render]]></media:text>
                                <media:title type="plain"><![CDATA[Galaxy S27 Ultra render]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/EKbAbDHJQJnhBVmx9jUbiC-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>We're pretty much done for major phone launches in 2026, certainly for devices that will be coming to the U.S. and Europe, which means it's time to start looking forward to what might be coming next year. And, as usual, we expect the first big release of the year to be Samsung's Galaxy S27 series. </p><p>The <a href="https://www.tomsguide.com/phones/samsung-galaxy-s27-pro-and-ultra-tipped-for-an-iphone-like-camera-upgrade-thatll-massively-improve-selfies">S27 series is said to be made up of four phones</a>: The Galaxy S27, Galaxy S27 Plus, Galaxy S27 Ultra and the new Galaxy S27 Pro. We've started hearing some rumors about what those phones could have to offer, including one of the first major redesigns Galaxy phones have had for several years. Obviously there are a few things we also really want to see on these phones as well. </p><p>So here are the top seven changes we want to see on the Samsung Galaxy S27.</p><h3 class="article-body__section" id="section-larger-silicon-carbon-batteries"><span>Larger silicon carbon batteries</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="F6qr2SDN3gLqxsmgpqVYsY" name="Fold 8 back 2" alt="Samsung Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/F6qr2SDN3gLqxsmgpqVYsY-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Galaxy battery capacity does not change much, if ever. In fact the Galaxy S Ultra batteries have been stuck on the 5,000 mAh plateau since 2020. Meanwhile companies like <a href="https://www.tomsguide.com/phones/i-interviewed-honor-and-oneplus-about-their-silicon-carbon-battery-tech-apple-and-google-are-quickly-falling-behind">OnePlus have been offering over 7,000 mAh batteries</a> without any meaningful change to the design. </p><p>Frankly, people are sick of it, and it's time the Galaxy S27 changed that. Thankfully Samsung has shown that it can do this, thanks to the introduction of silicon carbon batteries in 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> series. This technology allows for greater energy density, meaning you can offer more battery capacity without increasing the size of the battery.</p><p><a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-ultra-batteries-leak-heres-what-we-know">Rumors suggest this may be happening too,</a> with the S27 Ultra reportedly getting a 5,700 mAh battery. The S27 Pro is tipped to get a 5,200 mAh battery, though we don't know what the S27 and S27 Plus might be getting. We hope they'll get an increase from the 4,300 mAh and 4,900mAh batteries on their S26 counterparts.</p><h3 class="article-body__section" id="section-magnetic-wireless-charging"><span>Magnetic wireless charging</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="LaP2SfFpoeBnvnoqoNv8wS" name="android-phones charging" alt="Pixel 10 mPro charging wirelessly as Galaxy s25 plus charges via USB-C" src="https://cdn.mos.cms.futurecdn.net/LaP2SfFpoeBnvnoqoNv8wS-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>One of my biggest gripes with Android phones is how so few of them have adopted the full <a href="https://www.tomsguide.com/phones/what-is-qi2-wireless-charging">Qi2 wireless charging</a> standard — complete with the magnetic charging ring. Samsung is one such offender, adding Qi2 charging technology, while relying on special cases to add the magnetic support.</p><p>Many reasons have been given over the past couple of years, ranging from issues with the S Pen to the fact the camera bump blocks where the magnetic ring should sit. Whatever the reason, it's high time that Samsung got its act together and added Qi2 magnets to its phones, and the S27 series' redesign is <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-ultra-could-feature-a-bigger-battery-and-magnetic-charging-but-it-may-come-at-the-expense-of-the-cameras">the perfect place to do it.</a></p><h3 class="article-body__section" id="section-a-better-privacy-display"><span>A better Privacy Display</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="wm8dR7CEavv9FRmX2wtdVX" name="Galaxy Unpacked February 2026_ Official Livestream 1-33-58 screenshot" alt="Privacy Display lifestyle" src="https://cdn.mos.cms.futurecdn.net/wm8dR7CEavv9FRmX2wtdVX-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Samsung)</span></figcaption></figure><p>The <a href="https://www.tomsguide.com/phones/samsung-phones/the-galaxy-s26-ultras-privacy-display-is-more-exciting-to-me-than-any-ai-feature">Privacy Display</a> is one of the best features on the Galaxy S26 Ultra, but it definitely needs some improvements. In particular, Samsung needs to counteract the fact the <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-s26-ultra-lab-tests-show-that-its-dimmer-than-s25-ultra-even-with-privacy-display-turned-off">Privacy Display dims the screen</a> — even when the feature is switched off. </p><p>Brighter screens offer huge visibility benefits, especially in bright conditions, and that shouldn't be affected by a new screen feature. Especially if you're not actually using it.</p><p>Similarly viewing angles are also reduced, even when the privacy features are switched off, which is far from ideal. I'd also like to see more control over the Privacy Display and the parts of the screen that are blacked out — rather than letting the phone handle everything automatically.</p><h3 class="article-body__section" id="section-upgraded-camera-features"><span>Upgraded camera features</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="LacgYzjqWKVkFAs6DKZ3ak" name="S27 Ultra render" alt="Samsung Galaxy S27 Ultra render" src="https://cdn.mos.cms.futurecdn.net/LacgYzjqWKVkFAs6DKZ3ak-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: @TechHome100)</span></figcaption></figure><p>Samsung has a habit of neglecting the camera hardware on some of its phones, particularly the cheaper models like the Galaxy S26 and Galaxy S26 Plus. 50MP main lenses are fine, but 12MP ultrawide and 10MP telephoto lenses aren't befitting a flagship device. It doesn't matter that they don't bear the Ultra branding.</p><p>At the very least the S27 and S27 Plus need a higher resolution ultrawide lens, ideally something closer to 50MP. Any extra upgrades on the telephoto lens will be a nice bonus.</p><p>As for the Galaxy S27 Ultra, it's about time we started seeing more advanced camera features.<a href="https://www.tomsguide.com/phones/samsung-phones/samsungs-working-on-new-phone-zoom-cameras-but-not-for-its-own-phones"> Variable zoom has been rumored</a> for at least a couple of years, and the rumored loss of the secondary telephoto lens feels like the perfect time to offer that. Likewise, now that the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-and-pro-max-review">iPhone 18 Pro</a> has a<a href="https://www.tomsguide.com/phones/iphones/i-tested-iphone-18-pro-max-variable-aperture-camera-and-i-can-almost-ditch-my-mirrorless"> variable aperture lens</a>, it's time Samsung brought that particular feature back to its own phones.</p><h3 class="article-body__section" id="section-faster-charging"><span>Faster charging</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3755px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="iGGyvv7a4hQPrn26YbFnid" name="Galaxy S26 Ultra 24 hours-11" alt="Samsung Galaxy S26 Ultra" src="https://cdn.mos.cms.futurecdn.net/iGGyvv7a4hQPrn26YbFnid-1920-80.jpg" mos="" align="middle" fullscreen="" width="3755" height="2112" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Samsung has not been the best at improving charging speed, though it earned some goodwill by upping the Galaxy S26 Ultra's charging speed from 45W to 60W. But sadly the S26 and S26 Plus were left at their old speeds of 25W and 45W, respectively. It's high time that changed.</p><p>There's little reason to keep both phones charging so slowly, especially since the Plus and Ultra models shared the same 45W charging speeds for a few years. It's also worth pointing out that the S26 Ultra can wirelessly charge at 25W speeds, which means the standard model really should be running faster by now. </p><p>Hopefully the Galaxy S27 series will fix that particular issue, even if the Ultra model sticks at 60W for a little while longer.</p><h3 class="article-body__section" id="section-an-s27-pro-that-doesn-t-feel-redundant"><span>An S27 Pro that doesn't feel redundant</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="xrRkG5WqQ2Zc28H48FRtUQ" name="Samsung Galaxy S26 Plus-1-LIST" alt="Samsung Galaxy S26 Plus" src="https://cdn.mos.cms.futurecdn.net/xrRkG5WqQ2Zc28H48FRtUQ-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>I have my concerns about the <a href="https://www.tomsguide.com/phones/samsung-galaxy-s27-pro-and-ultra-tipped-for-an-iphone-like-camera-upgrade-thatll-massively-improve-selfies">prospect of a Galaxy S27 Pro</a>, because I'm not entirely sure there's room for another Galaxy flagship to sit between the S27 Plus and S27 Ultra. Certainly not if the other three devices in the lineup are sticking around in their current forms.</p><p>What I hope is that Samsung can find some kind of niche for the S27 Pro to ensure that it's not a complete waste of time and money. Ideally without compromising features on the S27 Plus or hiking up the price of the S27 Ultra to ridiculous levels. </p><p>The Pro needs to balance the line between features and price, while justifying its own existence. Otherwise, Samsung is just going to end up cannibalizing its own customer base and making the whole endeavor pointless. </p><h3 class="article-body__section" id="section-no-more-price-hikes"><span>No more price hikes</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5030px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="3AU7b5543BpQUhStrp7AVC" name="Galaxy S26 hands-on" alt="Samsung Galaxy S26 and S26 Plus" src="https://cdn.mos.cms.futurecdn.net/3AU7b5543BpQUhStrp7AVC-1920-80.jpg" mos="" align="middle" fullscreen="" width="5030" height="2829" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Samsung has been an absolute demon for price hikes this year. Not only were multiple S26 models more expensive than their S25 counterparts, it also <a href="https://www.tomsguide.com/phones/samsung-phones/usd1-400-galaxy-s26-ultra-every-samsung-galaxy-s26-phone-just-got-a-price-hike">increased the price of the entire line-up back in September</a>. To the point where the Galaxy S26 Ultra now costs $1,400. Officially, anyway, since the <a href="https://www.tomsguide.com/phones/samsung-phones/7-amazing-pre-black-friday-samsung-phone-deals-including-z-fold-8-galaxy-s26-ultra-s26-fe-and-more">S26 series has been on sale almost everyday since.</a></p><p>Prices are high due to the skyrocketing cost of RAM and storage, and that means everyone has been hiking up the cost of their devices. With that in mind it would be really nice if Samsung didn't do that with the S27 series. Even if it's just a temporary reprieve, the last thing we need is phones getting even more expensive.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/weve-tested-the-iphone-duo-and-iphone-18-pro-max-heres-the-phone-you-should-actually-buy#mrfhud=true"><strong>We've tested the iPhone Duo and iPhone 18 Pro Max — here's the phone you should actually buy</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-2-is-inevitable-and-these-are-the-7-things-we-want-to-see"><strong>iPhone Duo 2 is inevitable — and these are the 7 things we want to see</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-has-been-hard-to-get-because-apple-did-almost-everything-wrong-heres-what-we-know"><strong>iPhone Duo has been hard to get because Apple did almost everything wrong — here's what we know</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Now is the perfect time for Samsung to release a cheaper Galaxy Z Fold 9 FE — and it's all because of iPhone Duo ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Foldables have been around for several years, but the recent launch of the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-review">iPhone Duo</a> means the foldable market could be on the verge of changing in a big way. To the point where Samsung is reportedly looking to mix things up, and offer an <a href="https://www.tomsguide.com/phones/samsung-phones/forget-iphone-duo-samsung-could-release-six-different-foldable-phones-next-year-including-the-mysterious-galaxy-z-slide">even more diverse range of foldable-centric devices</a> than it already does.</p><p>The latest rumor claims that Samsung is currently working on a companion for the <a href="https://www.tomsguide.com/phones/iphones/5-things-galaxy-z-fold-9-needs-to-steal-from-iphone-duo-and-2-it-shouldnt">Galaxy Z Fold 9</a>, sharing the same wider passport-shape 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>. According to a leak on <a href="https://blog.naver.com/yeux1122/224456540056" target="_blank">Korean network Naver</a>, Samsung is testing two possible options, including a Galaxy Z Fold 9 Plus and a lower-priced Galaxy Z Fold 9 FE. </p><p>I've already expressed some confusion as to how a Z Fold 9 Plus would sit between the Fold 9 and Fold 9 Ultra. But an FE-branded model? That's actually a very good idea, especially in the current climate. Just as long as Samsung doesn't mess things up, like it did with last year's <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-7-fe-review">Galaxy Z Flip 7 FE</a>.</p><h2 id="prices-are-too-high-right-now">Prices are too high 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="gvtqLkqk3GoUwMeqrMVPBk" name="Samsung Galaxy Z Fold 8--12" alt="Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/gvtqLkqk3GoUwMeqrMVPBk-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>It's no secret that the cost of smartphones is rising, and Samsung has been one of the worst offenders when it comes to price hikes. The Galaxy S26 series was already subjected to some price hikes at launch, depending on which version you bought, only for <a href="https://www.tomsguide.com/phones/samsung-phones/usd1-400-galaxy-s26-ultra-every-samsung-galaxy-s26-phone-just-got-a-price-hike">Samsung to raise prices again at the start of October.</a> The Z Fold 8 Ultra was also noticeably more expensive than the <a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-7-review">Z Fold 7</a>, which was in turn more expensive than the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-6-review-test-results">Z Fold 6</a>.</p><p>The reason for these price hikes are obvious. The cost of phone manufacturing has been rising for a number of years, and the last 12 months have seen an<a href="https://www.tomsguide.com/computing/ram-price-crisis-2026-everything-you-need-to-know"> explosion in the cost of RAM and storage</a> — all thanks to the current AI boom we've been experiencing. </p><p>Because of that multiple electronics companies have been forced to increase prices across the board including Samsung, <a href="https://www.tomsguide.com/phones/iphones/apple-quietly-jacks-the-prices-of-the-iphone-16-iphone-17-and-iphone-air-heres-how-much-youll-pay-now">Apple </a>and Google.</p><p>The key problem with foldable adoption has been that they're so darn expensive, especially if you don't have easy access to Chinese brands that (usually) charge less than their international counterparts. So if you think about it, the seemingly never-ending price hikes means that now is the perfect time to start releasing lower-cost foldables. </p><p>The iPhone Duo has raised a lot more awareness about foldables, and could mean higher foldable adoption rates across the board. All foldable phone makers need to do is make sure their devices are accessible, and offering something with a lower price tag is one way to do that — even if it does come with some compromises.</p><p>Plus, the cost of everything is going up, and there's less money to spend on luxury purchases like new smartphones. Especially ones that cost close to $2,000.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-e40oae"></div>                            </div>                            <script src="https://kwizly.com/embed/e40oae.js" async=""></script><h2 id="fighting-increased-competition">Fighting increased competition</h2><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:53.52%;"><img id="QpUatS2MEqT6AKWMCXpFi" name="Apple iPhone Duo-14" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/QpUatS2MEqT6AKWMCXpFi-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1370" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>While the launch of the iPhone Duo will help raise awareness of foldable phones, it also means that Galaxy foldables have some serious competition — possibly for the first time ever.</p><p>Apple is a popular brand, and that's reflected in the fact iPhone sales outpace any other individual phone brand. Even Samsung, easily the most popular Android brand, <a href="https://gs.statcounter.com/vendor-market-share/mobile/worldwide/2025" target="_blank">trailed behind Apple in global market share last year</a>.</p><p>There are plenty of people out in the world who will only ever buy an iPhone, and will never even consider the possibility of switching to a rival brand — regardless of what might be on offer. But that doesn't mean convincing people to make the switch is impossible, and this means Samsung needs something that will help fight the increased competition from Apple and convince people that a Galaxy foldable is a much better option than an iPhone Duo.</p><p>Considering the Duo starts at $2,000, second only in price to the Galaxy Z Fold 8 Ultra, the obvious solution is to start offering something even cheaper. To hook into those people who saw the iPhone Duo, but were unwilling to pay quite so much money to experience what foldable phones have to offer.</p><p>The Galaxy Z Fold 8 is already slightly cheaper than the Duo, especially when you can grab one on sale. But finally releasing a Fan Edition foldable at an even lower price point should help steal interest away from Apple and other foldable rivals.</p><h2 id="there-could-be-a-gap-in-the-line-up">There could be a gap in the line-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: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 review." src="https://cdn.mos.cms.futurecdn.net/xrCY54SFGKoAniBXQAyGV6-1920-80.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>One of the earliest rumors about the Galaxy Z 9 lineup was that Samsung may be planning on <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-tipster-says-galaxy-z-flip-9-could-be-cancelled-heres-why-thats-a-terrible-idea">scrapping the Galaxy Z Flip 9.</a> At least one recent rumor has refuted that, but considering its been fairly persistent, there may be some truth to the claims. </p><p>Plus, considering Samsung has basically neglected the Z Flip series for the past few generations, and the relative popularity of book-style foldables, it's no surprise that they might turn around and can the whole thing.</p><p>If that does end up being the case, then Samsung will have a very large gap in its lineup. Not just because it might be killing off one of its long-term staples, but because the Z flip series has always been more of a lower-cost option for foldable users to consider.</p><p>Admittedly, $1,199 is still pretty expensive as far as smartphones go. It's the same price as the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-plus-review">Galaxy S26 Plus</a>, and $100 more than the Plus cost when it launched at the start of the year. For your money you get slower charging, worse battery life, lower durability and a bunch of other compromises that are cut in order to pay for the folding screen.</p><p>Still, the Z Flip series offered a cheaper alternative to the expensive Z Fold lineup. Without it, the base cost of a Galaxy foldable would shoot up to whatever the Z Fold 9 costs. I would bet money that it'll end up costing at least $1,900, or $100 more than the Z Fold 8.</p><p>But if there's a Z Fold 9 FE, then suddenly the cost of entry isn't quite so expensive. I doubt it'll be as cheap as the Z Flip 9 would have cost, but at least it lowers the barrier of entry for more frugally-minded folks.</p><h2 id="samsung-just-needs-to-not-mess-it-up">Samsung just needs to not mess it 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:3169px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="ox6BRZi8aATRcsZYvBbCTY" name="Galaxy Z Fold 8 review-25" alt="Galaxy Z Fold 8 shown held in-hand" src="https://cdn.mos.cms.futurecdn.net/ox6BRZi8aATRcsZYvBbCTY-1920-80.jpg" mos="" align="middle" fullscreen="" width="3169" height="1783" attribution="" endorsement="" class="inline" /></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 actual success of a Z Fold 9 FE is all dependent on what Samsung actually does with it, and the kind of sacrifices that have to be made in order to keep the cost low. Last time that happened we ended up with the<a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-7-fe-review"> Galaxy Z Flip 7 FE</a>, which was quite stripped down compared to the Z Flip 7.</p><p>Considering the Z Flip 7 wasn't all that impressive either just shows how disappointing the Fan Edition model was. More so when you remember that it started at $899, which was just $200 cheaper than its full edition sibling. </p><p>The price of a Z Fold 9 FE needs to reflect the compromises involved, and those compromises need to ensure that the user experience isn't hampered in any meaningful way. This means Samsung actually needs to put thought and care into the design of this hypothetical phone, otherwise we're going to end up with another damp squib that might as well have never been released.</p><p>But considering the job it did with the Z Fold 8 and the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Fold 8 Ultra</a>, I have better hopes for the possibility of a Z Fold 9 FE being done well. Or, at the very least, done better than the Z Flip 7 FE was. We only have to hope that Samsung doesn't pick the Z Fold 9 Plus instead.</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/24-hours-with-the-iphone-duo-here-are-my-5-immediate-takeaways">24 hours with the iPhone Duo — here are my 5 immediate takeaways</a></li><li><a href="https://www.tomsguide.com/phones/ive-tested-the-iphone-duo-galaxy-z-fold-8-pixel-11-pro-fold-and-razr-fold-heres-the-foldable-phone-i-recommend">I’ve tested the iPhone Duo, Galaxy Z Fold 8, Pixel 11 Pro Fold, and Razr Fold — here’s the foldable phone I recommend</a></li><li><a href="https://www.tomsguide.com/phones/iphones/is-your-iphone-listening-to-you-the-live-listen-setting-you-should-check-right-now">Is your iPhone listening to you? The 'live listen' setting you should check right now</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/now-is-the-perfect-time-for-samsung-to-release-a-cheaper-galaxy-z-fold-9-fe-and-its-all-because-of-iphone-duo</link>
                                                                            <description>
                            <![CDATA[ Samsung could be preparing to release a cheaper version of the Galaxy Z Fold 9 — and the timing couldn't be better. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">3fVXXYMnunxaBrp3MKzKbg</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/F6qr2SDN3gLqxsmgpqVYsY-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 30 Oct 2026 05:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/F6qr2SDN3gLqxsmgpqVYsY-1920-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/F6qr2SDN3gLqxsmgpqVYsY-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Foldables have been around for several years, but the recent launch of the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-review">iPhone Duo</a> means the foldable market could be on the verge of changing in a big way. To the point where Samsung is reportedly looking to mix things up, and offer an <a href="https://www.tomsguide.com/phones/samsung-phones/forget-iphone-duo-samsung-could-release-six-different-foldable-phones-next-year-including-the-mysterious-galaxy-z-slide">even more diverse range of foldable-centric devices</a> than it already does.</p><p>The latest rumor claims that Samsung is currently working on a companion for the <a href="https://www.tomsguide.com/phones/iphones/5-things-galaxy-z-fold-9-needs-to-steal-from-iphone-duo-and-2-it-shouldnt">Galaxy Z Fold 9</a>, sharing the same wider passport-shape 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>. According to a leak on <a href="https://blog.naver.com/yeux1122/224456540056" target="_blank">Korean network Naver</a>, Samsung is testing two possible options, including a Galaxy Z Fold 9 Plus and a lower-priced Galaxy Z Fold 9 FE. </p><p>I've already expressed some confusion as to how a Z Fold 9 Plus would sit between the Fold 9 and Fold 9 Ultra. But an FE-branded model? That's actually a very good idea, especially in the current climate. Just as long as Samsung doesn't mess things up, like it did with last year's <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-7-fe-review">Galaxy Z Flip 7 FE</a>.</p><h2 id="prices-are-too-high-right-now">Prices are too high 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="gvtqLkqk3GoUwMeqrMVPBk" name="Samsung Galaxy Z Fold 8--12" alt="Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/gvtqLkqk3GoUwMeqrMVPBk-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>It's no secret that the cost of smartphones is rising, and Samsung has been one of the worst offenders when it comes to price hikes. The Galaxy S26 series was already subjected to some price hikes at launch, depending on which version you bought, only for <a href="https://www.tomsguide.com/phones/samsung-phones/usd1-400-galaxy-s26-ultra-every-samsung-galaxy-s26-phone-just-got-a-price-hike">Samsung to raise prices again at the start of October.</a> The Z Fold 8 Ultra was also noticeably more expensive than the <a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-7-review">Z Fold 7</a>, which was in turn more expensive than the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-6-review-test-results">Z Fold 6</a>.</p><p>The reason for these price hikes are obvious. The cost of phone manufacturing has been rising for a number of years, and the last 12 months have seen an<a href="https://www.tomsguide.com/computing/ram-price-crisis-2026-everything-you-need-to-know"> explosion in the cost of RAM and storage</a> — all thanks to the current AI boom we've been experiencing. </p><p>Because of that multiple electronics companies have been forced to increase prices across the board including Samsung, <a href="https://www.tomsguide.com/phones/iphones/apple-quietly-jacks-the-prices-of-the-iphone-16-iphone-17-and-iphone-air-heres-how-much-youll-pay-now">Apple </a>and Google.</p><p>The key problem with foldable adoption has been that they're so darn expensive, especially if you don't have easy access to Chinese brands that (usually) charge less than their international counterparts. So if you think about it, the seemingly never-ending price hikes means that now is the perfect time to start releasing lower-cost foldables. </p><p>The iPhone Duo has raised a lot more awareness about foldables, and could mean higher foldable adoption rates across the board. All foldable phone makers need to do is make sure their devices are accessible, and offering something with a lower price tag is one way to do that — even if it does come with some compromises.</p><p>Plus, the cost of everything is going up, and there's less money to spend on luxury purchases like new smartphones. Especially ones that cost close to $2,000.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-e40oae"></div>                            </div>                            <script src="https://kwizly.com/embed/e40oae.js" async=""></script><h2 id="fighting-increased-competition">Fighting increased competition</h2><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:53.52%;"><img id="QpUatS2MEqT6AKWMCXpFi" name="Apple iPhone Duo-14" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/QpUatS2MEqT6AKWMCXpFi-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1370" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>While the launch of the iPhone Duo will help raise awareness of foldable phones, it also means that Galaxy foldables have some serious competition — possibly for the first time ever.</p><p>Apple is a popular brand, and that's reflected in the fact iPhone sales outpace any other individual phone brand. Even Samsung, easily the most popular Android brand, <a href="https://gs.statcounter.com/vendor-market-share/mobile/worldwide/2025" target="_blank">trailed behind Apple in global market share last year</a>.</p><p>There are plenty of people out in the world who will only ever buy an iPhone, and will never even consider the possibility of switching to a rival brand — regardless of what might be on offer. But that doesn't mean convincing people to make the switch is impossible, and this means Samsung needs something that will help fight the increased competition from Apple and convince people that a Galaxy foldable is a much better option than an iPhone Duo.</p><p>Considering the Duo starts at $2,000, second only in price to the Galaxy Z Fold 8 Ultra, the obvious solution is to start offering something even cheaper. To hook into those people who saw the iPhone Duo, but were unwilling to pay quite so much money to experience what foldable phones have to offer.</p><p>The Galaxy Z Fold 8 is already slightly cheaper than the Duo, especially when you can grab one on sale. But finally releasing a Fan Edition foldable at an even lower price point should help steal interest away from Apple and other foldable rivals.</p><h2 id="there-could-be-a-gap-in-the-line-up">There could be a gap in the line-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: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 review." src="https://cdn.mos.cms.futurecdn.net/xrCY54SFGKoAniBXQAyGV6-1920-80.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>One of the earliest rumors about the Galaxy Z 9 lineup was that Samsung may be planning on <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-tipster-says-galaxy-z-flip-9-could-be-cancelled-heres-why-thats-a-terrible-idea">scrapping the Galaxy Z Flip 9.</a> At least one recent rumor has refuted that, but considering its been fairly persistent, there may be some truth to the claims. </p><p>Plus, considering Samsung has basically neglected the Z Flip series for the past few generations, and the relative popularity of book-style foldables, it's no surprise that they might turn around and can the whole thing.</p><p>If that does end up being the case, then Samsung will have a very large gap in its lineup. Not just because it might be killing off one of its long-term staples, but because the Z flip series has always been more of a lower-cost option for foldable users to consider.</p><p>Admittedly, $1,199 is still pretty expensive as far as smartphones go. It's the same price as the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-plus-review">Galaxy S26 Plus</a>, and $100 more than the Plus cost when it launched at the start of the year. For your money you get slower charging, worse battery life, lower durability and a bunch of other compromises that are cut in order to pay for the folding screen.</p><p>Still, the Z Flip series offered a cheaper alternative to the expensive Z Fold lineup. Without it, the base cost of a Galaxy foldable would shoot up to whatever the Z Fold 9 costs. I would bet money that it'll end up costing at least $1,900, or $100 more than the Z Fold 8.</p><p>But if there's a Z Fold 9 FE, then suddenly the cost of entry isn't quite so expensive. I doubt it'll be as cheap as the Z Flip 9 would have cost, but at least it lowers the barrier of entry for more frugally-minded folks.</p><h2 id="samsung-just-needs-to-not-mess-it-up">Samsung just needs to not mess it 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:3169px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="ox6BRZi8aATRcsZYvBbCTY" name="Galaxy Z Fold 8 review-25" alt="Galaxy Z Fold 8 shown held in-hand" src="https://cdn.mos.cms.futurecdn.net/ox6BRZi8aATRcsZYvBbCTY-1920-80.jpg" mos="" align="middle" fullscreen="" width="3169" height="1783" attribution="" endorsement="" class="inline" /></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 actual success of a Z Fold 9 FE is all dependent on what Samsung actually does with it, and the kind of sacrifices that have to be made in order to keep the cost low. Last time that happened we ended up with the<a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-7-fe-review"> Galaxy Z Flip 7 FE</a>, which was quite stripped down compared to the Z Flip 7.</p><p>Considering the Z Flip 7 wasn't all that impressive either just shows how disappointing the Fan Edition model was. More so when you remember that it started at $899, which was just $200 cheaper than its full edition sibling. </p><p>The price of a Z Fold 9 FE needs to reflect the compromises involved, and those compromises need to ensure that the user experience isn't hampered in any meaningful way. This means Samsung actually needs to put thought and care into the design of this hypothetical phone, otherwise we're going to end up with another damp squib that might as well have never been released.</p><p>But considering the job it did with the Z Fold 8 and the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Fold 8 Ultra</a>, I have better hopes for the possibility of a Z Fold 9 FE being done well. Or, at the very least, done better than the Z Flip 7 FE was. We only have to hope that Samsung doesn't pick the Z Fold 9 Plus instead.</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/24-hours-with-the-iphone-duo-here-are-my-5-immediate-takeaways">24 hours with the iPhone Duo — here are my 5 immediate takeaways</a></li><li><a href="https://www.tomsguide.com/phones/ive-tested-the-iphone-duo-galaxy-z-fold-8-pixel-11-pro-fold-and-razr-fold-heres-the-foldable-phone-i-recommend">I’ve tested the iPhone Duo, Galaxy Z Fold 8, Pixel 11 Pro Fold, and Razr Fold — here’s the foldable phone I recommend</a></li><li><a href="https://www.tomsguide.com/phones/iphones/is-your-iphone-listening-to-you-the-live-listen-setting-you-should-check-right-now">Is your iPhone listening to you? The 'live listen' setting you should check right now</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 7 amazing pre-Black Friday Samsung phone deals — including Z Fold 8, Galaxy S26 Ultra, S26 FE and more ]]></title>
                                                                                                <dc:content><![CDATA[ <p>With Black Friday coming, a bunch of you out there will be looking for ways to pick up a brand new smartphone without paying full price. I don't blame you, because phone prices have gone through the roof this year, and paying the MSRP is starting to feel a lot like being ripped off.</p><p>The good news is that you don't have to wait until Black Friday to save serious money. Nor do you have to pick up the latest iPhone to get the best possible phone experience. Samsung sells a lot of the <a href="https://www.tomsguide.com/best-picks/best-phones">best phones</a> and <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">best foldables</a>, and their latest models are all discounted ahead of Black Friday — with some deals knocking hundreds of dollars off. </p><p>It's almost enough to make you forget that Samsung has been one of the <a href="https://www.tomsguide.com/phones/samsung-phones/usd1-400-galaxy-s26-ultra-every-samsung-galaxy-s26-phone-just-got-a-price-hike">worst offenders for raising prices</a>.</p><div class="product"><a data-dimension112="427fd158-d15e-11f1-a549-65baaa014e00" data-action="Deal Block" data-label="Galaxy Z Fold 8" data-dimension48="Galaxy Z Fold 8" data-dimension25="$1699" href="https://www.amazon.com/Samsung-Smartphone-Content-Native-Customized-Processor/dp/B0H126B3KV" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1327px;"><p class="vanilla-image-block" style="padding-top:64.28%;"><img id="9Rhpe6TtrVFSNo9Vtn27Tm" name="Galaxy Z Fold 8 Ultra deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/9Rhpe6TtrVFSNo9Vtn27Tm-1920-80.jpg" mos="" align="middle" fullscreen="" width="1327" height="853" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-review" data-dimension112="427fd158-d15e-11f1-a549-65baaa014e00" data-action="Deal Block" data-label="Galaxy Z Fold 8" data-dimension48="Galaxy Z Fold 8" data-dimension25="$1699">iPhone Duo</a> may be getting all the attention at the moment, but we can't forget that Samsung has its own passport-shaped foldable — and one that seems to have Apple beat on AI and price. 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>has a similar design to the Duo, complete with a 5.5-inch cover screen and 7.6-inch foldable screen and eight generations of foldable experience to draw upon. All with $200 off the usual price over at Amazon<a class="view-deal button" href="https://www.amazon.com/Samsung-Smartphone-Content-Native-Customized-Processor/dp/B0H126B3KV" target="_blank" rel="nofollow" data-dimension112="427fd158-d15e-11f1-a549-65baaa014e00" data-action="Deal Block" data-label="Galaxy Z Fold 8" data-dimension48="Galaxy Z Fold 8" data-dimension25="$1699">View Deal</a></p></div><div class="product"><a data-dimension112="427fd1e4-d15e-11f1-a34b-d9dc8d42b2ec" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra" data-dimension48="Galaxy Z Fold 8 Ultra" data-dimension25="$1899" href="https://www.amazon.com/Samsung-Smartphone-Customized-Processor-Multitasking/dp/B0H12KX1X4" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:954px;"><p class="vanilla-image-block" style="padding-top:98.95%;"><img id="4EngEpxMLxWVDrp7aAo2xi" name="Galaxy Z Fold 8 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/4EngEpxMLxWVDrp7aAo2xi-1920-80.jpg" mos="" align="middle" fullscreen="" width="954" height="944" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p>If you need a slightly bigger screen, then the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review" data-dimension112="427fd1e4-d15e-11f1-a34b-d9dc8d42b2ec" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra" data-dimension48="Galaxy Z Fold 8 Ultra" data-dimension25="$1899">Samsung Galaxy Z Fold 8 Ultra</a> is the foldable for you. It features a taller and narrower design than the Z Fold 8, with a 6.5-inch cover screen and 8-inch foldable display. It also features more powerful cameras, with a 200MP main lens, 50MP ultrawide and a 10MP telephoto with 3x optical zoom. It also features a larger 5,000 mAh battery and a super thin and lightweight design — alongside all the benefits of the Z Fold 8.<a class="view-deal button" href="https://www.amazon.com/Samsung-Smartphone-Customized-Processor-Multitasking/dp/B0H12KX1X4" target="_blank" rel="nofollow" data-dimension112="427fd1e4-d15e-11f1-a34b-d9dc8d42b2ec" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra" data-dimension48="Galaxy Z Fold 8 Ultra" data-dimension25="$1899">View Deal</a></p></div><div class="product"><a data-dimension112="427fd252-d15e-11f1-a5c9-9f869c881be6" data-action="Deal Block" data-label="Galaxy Z Flip 8" data-dimension48="Galaxy Z Flip 8" data-dimension25="$1049" href="https://www.bestbuy.com/product/samsung-galaxy-z-flip8-256gb-unlocked-graphite/JJGRF3TF7P" 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-1920-80.jpg" mos="" align="middle" fullscreen="" width="1199" height="1500" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p>If you'd prefer a more compact foldable experience, there's always the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-8-review" data-dimension112="427fd252-d15e-11f1-a5c9-9f869c881be6" data-action="Deal Block" data-label="Galaxy Z Flip 8" data-dimension48="Galaxy Z Flip 8" data-dimension25="$1049">Galaxy Z Flip 8</a>. It's nowhere near as advanced as the Z Fold 8 series, and there isn't a whole lot to make it stand out from other flip phones, But you do get access to Galaxy AI, strong Snapdragon performance, a 6.9-inch main display, 4.1-inch cover display, and a 4,300 mAh battery. And, its 50MP main camera paired with a 12MP ultrawide take great photos.<a class="view-deal button" href="https://www.bestbuy.com/product/samsung-galaxy-z-flip8-256gb-unlocked-graphite/JJGRF3TF7P" target="_blank" rel="nofollow" data-dimension112="427fd252-d15e-11f1-a5c9-9f869c881be6" data-action="Deal Block" data-label="Galaxy Z Flip 8" data-dimension48="Galaxy Z Flip 8" data-dimension25="$1049">View Deal</a></p></div><div class="product"><a data-dimension112="427fd2b6-d15e-11f1-9a1a-11dc41005f42" data-action="Deal Block" data-label="Galaxy S26 FE" data-dimension48="Galaxy S26 FE" data-dimension25="$599" href="https://www.amazon.com/Samsung-Galaxy-Unlocked-Graphite-Battery/dp/B0H7SLXZPB/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1145px;"><p class="vanilla-image-block" style="padding-top:120.61%;"><img id="WLXj7d8uGbL3XKk4YkG9Cf" name="Galaxy S26 FE" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/WLXj7d8uGbL3XKk4YkG9Cf-1920-80.png" mos="" align="middle" fullscreen="" width="1145" height="1381" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p>If you want the premium experience at a lower price, Samsung's Fan Edition series has long been the go-to. You do make some compromises to get the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-fe-review-the-perfect-cure-for-samsungs-recent-price-hike-frenzy" data-dimension112="427fd2b6-d15e-11f1-9a1a-11dc41005f42" data-action="Deal Block" data-label="Galaxy S26 FE" data-dimension48="Galaxy S26 FE" data-dimension25="$599">Galaxy S26 FE</a>'s lower price, but you still get good cameras, solid battery life and a design that offers a premium feel — even if it's not quite as fancy as that of the Galaxy S26. Plus you get many of the same AI features as the rest of the S26 series in a lower cost package. <a class="view-deal button" href="https://www.amazon.com/Samsung-Galaxy-Unlocked-Graphite-Battery/dp/B0H7SLXZPB/" target="_blank" rel="nofollow" data-dimension112="427fd2b6-d15e-11f1-9a1a-11dc41005f42" data-action="Deal Block" data-label="Galaxy S26 FE" data-dimension48="Galaxy S26 FE" data-dimension25="$599">View Deal</a></p></div><div class="product"><a data-dimension112="427fd324-d15e-11f1-baf6-09f7d2f674aa" data-action="Deal Block" data-label="Galaxy S26" data-dimension48="Galaxy S26" data-dimension25="$849" href="https://www.amazon.com/Samsung-Unlocked-Smartphone-Processor-Immersive/dp/B0G4SWZP8B/" 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="82idHUPd6dizKAJwshQ8mk" name="Galaxy S26 (256GB) 'Cobalt Violet'" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/82idHUPd6dizKAJwshQ8mk-1920-80.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p>For the absolute basic Samsung flagship experience, there's the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-review" data-dimension112="427fd324-d15e-11f1-baf6-09f7d2f674aa" data-action="Deal Block" data-label="Galaxy S26" data-dimension48="Galaxy S26" data-dimension25="$849">Galaxy S26</a>. It's not as large or feature-rich as the Ultra, or even the Plus, but it still offers a whole lot of great features. That includes powerful Snapdragon 8 Elite Gen 5 performance, a larger, brighter display than before, a bunch of cool new magnetic AI features and a combination of solid battery life and camera quality. <a class="view-deal button" href="https://www.amazon.com/Samsung-Unlocked-Smartphone-Processor-Immersive/dp/B0G4SWZP8B/" target="_blank" rel="nofollow" data-dimension112="427fd324-d15e-11f1-baf6-09f7d2f674aa" data-action="Deal Block" data-label="Galaxy S26" data-dimension48="Galaxy S26" data-dimension25="$849">View Deal</a></p></div><div class="product"><a data-dimension112="427fd37e-d15e-11f1-8b7f-afea1ff831b7" data-action="Deal Block" data-label="Galaxy S26 Plus" data-dimension48="Galaxy S26 Plus" data-dimension25="$999" href="https://www.bestbuy.com/product/samsung-galaxy-s26-256gb-unlocked-black/JJGRF368TV" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1192px;"><p class="vanilla-image-block" style="padding-top:123.07%;"><img id="nLnALydHBLsMiQiAEDTrQk" name="Galaxy S26 Plus deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/nLnALydHBLsMiQiAEDTrQk-1920-80.jpg" mos="" align="middle" fullscreen="" width="1192" height="1467" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-plus-review" data-dimension112="427fd37e-d15e-11f1-8b7f-afea1ff831b7" data-action="Deal Block" data-label="Galaxy S26 Plus" data-dimension48="Galaxy S26 Plus" data-dimension25="$999">Galaxy S26 Plus</a> is a little bigger and a little more capable than the Galaxy S26. It features a QHD resolution screen, a larger 4,900 mAh battery, faster 45W charging speeds as well as all the same advantages as the standard S26 model. Though sadly it lacks the major benefits of the Ultra model, such as the high-resolution cameras and built-in S Pen.<a class="view-deal button" href="https://www.bestbuy.com/product/samsung-galaxy-s26-256gb-unlocked-black/JJGRF368TV" target="_blank" rel="nofollow" data-dimension112="427fd37e-d15e-11f1-8b7f-afea1ff831b7" data-action="Deal Block" data-label="Galaxy S26 Plus" data-dimension48="Galaxy S26 Plus" data-dimension25="$999">View Deal</a></p></div><div class="product"><a data-dimension112="427fd5e0-d15e-11f1-b12f-35d75b49d0cc" data-action="Deal Block" data-label="Galaxy S26 Ultra" data-dimension48="Galaxy S26 Ultra" data-dimension25="$1144" href="https://www.amazon.com/Samsung-Unlocked-Smartphone-Charging-Warranty/dp/B0G4SWDH8P" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1475px;"><p class="vanilla-image-block" style="padding-top:101.69%;"><img id="pTo28Fx9tATQs3gfbYBFL5" name="Galaxy S26 Ultra deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/pTo28Fx9tATQs3gfbYBFL5-1920-80.jpg" mos="" align="middle" fullscreen="" width="1475" height="1500" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review#section-galaxy-s26-ultra-review-release-date-and-price" data-dimension112="427fd5e0-d15e-11f1-b12f-35d75b49d0cc" data-action="Deal Block" data-label="Galaxy S26 Ultra" data-dimension48="Galaxy S26 Ultra" data-dimension25="$1144">Samsung Galaxy S26 Ultra</a> is the flagship of Samsung's premium phone line, and it easily offers the best Galaxy experience you can get right now. Not only does it have the largest screen of the S26 lineup, it also features a built-in S Pen stylus, a larger 5,000 mAh battery, 60W wires charging speeds and the Privacy Display that helps keep snooping eyes away from your phone — but only when you say so. Not to mention the fact there's a 200MP main camera, and  a main telephoto lens with 50MP resolution.<a class="view-deal button" href="https://www.amazon.com/Samsung-Unlocked-Smartphone-Charging-Warranty/dp/B0G4SWDH8P" target="_blank" rel="nofollow" data-dimension112="427fd5e0-d15e-11f1-b12f-35d75b49d0cc" data-action="Deal Block" data-label="Galaxy S26 Ultra" data-dimension48="Galaxy S26 Ultra" data-dimension25="$1144">View Deal</a></p></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/7-amazing-pre-black-friday-samsung-phone-deals-including-z-fold-8-galaxy-s26-ultra-s26-fe-and-more</link>
                                                                            <description>
                            <![CDATA[ Black Friday isn't here yet, but you can still save hundreds of dollars on the best Samsung Galaxy phones. Here are 7 unmissable deals. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">R6a54cdPzPKzonsL7DFcqD</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/GtEqu8qMu5TFusi2Q5xh2K-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 27 Oct 2026 12:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/GtEqu8qMu5TFusi2Q5xh2K-1920-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-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>With Black Friday coming, a bunch of you out there will be looking for ways to pick up a brand new smartphone without paying full price. I don't blame you, because phone prices have gone through the roof this year, and paying the MSRP is starting to feel a lot like being ripped off.</p><p>The good news is that you don't have to wait until Black Friday to save serious money. Nor do you have to pick up the latest iPhone to get the best possible phone experience. Samsung sells a lot of the <a href="https://www.tomsguide.com/best-picks/best-phones">best phones</a> and <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">best foldables</a>, and their latest models are all discounted ahead of Black Friday — with some deals knocking hundreds of dollars off. </p><p>It's almost enough to make you forget that Samsung has been one of the <a href="https://www.tomsguide.com/phones/samsung-phones/usd1-400-galaxy-s26-ultra-every-samsung-galaxy-s26-phone-just-got-a-price-hike">worst offenders for raising prices</a>.</p><div class="product"><a data-dimension112="427fd158-d15e-11f1-a549-65baaa014e00" data-action="Deal Block" data-label="Galaxy Z Fold 8" data-dimension48="Galaxy Z Fold 8" data-dimension25="$1699" href="https://www.amazon.com/Samsung-Smartphone-Content-Native-Customized-Processor/dp/B0H126B3KV" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1327px;"><p class="vanilla-image-block" style="padding-top:64.28%;"><img id="9Rhpe6TtrVFSNo9Vtn27Tm" name="Galaxy Z Fold 8 Ultra deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/9Rhpe6TtrVFSNo9Vtn27Tm-1920-80.jpg" mos="" align="middle" fullscreen="" width="1327" height="853" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-review" data-dimension112="427fd158-d15e-11f1-a549-65baaa014e00" data-action="Deal Block" data-label="Galaxy Z Fold 8" data-dimension48="Galaxy Z Fold 8" data-dimension25="$1699">iPhone Duo</a> may be getting all the attention at the moment, but we can't forget that Samsung has its own passport-shaped foldable — and one that seems to have Apple beat on AI and price. 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>has a similar design to the Duo, complete with a 5.5-inch cover screen and 7.6-inch foldable screen and eight generations of foldable experience to draw upon. All with $200 off the usual price over at Amazon<a class="view-deal button" href="https://www.amazon.com/Samsung-Smartphone-Content-Native-Customized-Processor/dp/B0H126B3KV" target="_blank" rel="nofollow" data-dimension112="427fd158-d15e-11f1-a549-65baaa014e00" data-action="Deal Block" data-label="Galaxy Z Fold 8" data-dimension48="Galaxy Z Fold 8" data-dimension25="$1699">View Deal</a></p></div><div class="product"><a data-dimension112="427fd1e4-d15e-11f1-a34b-d9dc8d42b2ec" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra" data-dimension48="Galaxy Z Fold 8 Ultra" data-dimension25="$1899" href="https://www.amazon.com/Samsung-Smartphone-Customized-Processor-Multitasking/dp/B0H12KX1X4" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:954px;"><p class="vanilla-image-block" style="padding-top:98.95%;"><img id="4EngEpxMLxWVDrp7aAo2xi" name="Galaxy Z Fold 8 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/4EngEpxMLxWVDrp7aAo2xi-1920-80.jpg" mos="" align="middle" fullscreen="" width="954" height="944" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p>If you need a slightly bigger screen, then the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review" data-dimension112="427fd1e4-d15e-11f1-a34b-d9dc8d42b2ec" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra" data-dimension48="Galaxy Z Fold 8 Ultra" data-dimension25="$1899">Samsung Galaxy Z Fold 8 Ultra</a> is the foldable for you. It features a taller and narrower design than the Z Fold 8, with a 6.5-inch cover screen and 8-inch foldable display. It also features more powerful cameras, with a 200MP main lens, 50MP ultrawide and a 10MP telephoto with 3x optical zoom. It also features a larger 5,000 mAh battery and a super thin and lightweight design — alongside all the benefits of the Z Fold 8.<a class="view-deal button" href="https://www.amazon.com/Samsung-Smartphone-Customized-Processor-Multitasking/dp/B0H12KX1X4" target="_blank" rel="nofollow" data-dimension112="427fd1e4-d15e-11f1-a34b-d9dc8d42b2ec" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra" data-dimension48="Galaxy Z Fold 8 Ultra" data-dimension25="$1899">View Deal</a></p></div><div class="product"><a data-dimension112="427fd252-d15e-11f1-a5c9-9f869c881be6" data-action="Deal Block" data-label="Galaxy Z Flip 8" data-dimension48="Galaxy Z Flip 8" data-dimension25="$1049" href="https://www.bestbuy.com/product/samsung-galaxy-z-flip8-256gb-unlocked-graphite/JJGRF3TF7P" 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-1920-80.jpg" mos="" align="middle" fullscreen="" width="1199" height="1500" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p>If you'd prefer a more compact foldable experience, there's always the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-8-review" data-dimension112="427fd252-d15e-11f1-a5c9-9f869c881be6" data-action="Deal Block" data-label="Galaxy Z Flip 8" data-dimension48="Galaxy Z Flip 8" data-dimension25="$1049">Galaxy Z Flip 8</a>. It's nowhere near as advanced as the Z Fold 8 series, and there isn't a whole lot to make it stand out from other flip phones, But you do get access to Galaxy AI, strong Snapdragon performance, a 6.9-inch main display, 4.1-inch cover display, and a 4,300 mAh battery. And, its 50MP main camera paired with a 12MP ultrawide take great photos.<a class="view-deal button" href="https://www.bestbuy.com/product/samsung-galaxy-z-flip8-256gb-unlocked-graphite/JJGRF3TF7P" target="_blank" rel="nofollow" data-dimension112="427fd252-d15e-11f1-a5c9-9f869c881be6" data-action="Deal Block" data-label="Galaxy Z Flip 8" data-dimension48="Galaxy Z Flip 8" data-dimension25="$1049">View Deal</a></p></div><div class="product"><a data-dimension112="427fd2b6-d15e-11f1-9a1a-11dc41005f42" data-action="Deal Block" data-label="Galaxy S26 FE" data-dimension48="Galaxy S26 FE" data-dimension25="$599" href="https://www.amazon.com/Samsung-Galaxy-Unlocked-Graphite-Battery/dp/B0H7SLXZPB/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1145px;"><p class="vanilla-image-block" style="padding-top:120.61%;"><img id="WLXj7d8uGbL3XKk4YkG9Cf" name="Galaxy S26 FE" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/WLXj7d8uGbL3XKk4YkG9Cf-1920-80.png" mos="" align="middle" fullscreen="" width="1145" height="1381" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p>If you want the premium experience at a lower price, Samsung's Fan Edition series has long been the go-to. You do make some compromises to get the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-fe-review-the-perfect-cure-for-samsungs-recent-price-hike-frenzy" data-dimension112="427fd2b6-d15e-11f1-9a1a-11dc41005f42" data-action="Deal Block" data-label="Galaxy S26 FE" data-dimension48="Galaxy S26 FE" data-dimension25="$599">Galaxy S26 FE</a>'s lower price, but you still get good cameras, solid battery life and a design that offers a premium feel — even if it's not quite as fancy as that of the Galaxy S26. Plus you get many of the same AI features as the rest of the S26 series in a lower cost package. <a class="view-deal button" href="https://www.amazon.com/Samsung-Galaxy-Unlocked-Graphite-Battery/dp/B0H7SLXZPB/" target="_blank" rel="nofollow" data-dimension112="427fd2b6-d15e-11f1-9a1a-11dc41005f42" data-action="Deal Block" data-label="Galaxy S26 FE" data-dimension48="Galaxy S26 FE" data-dimension25="$599">View Deal</a></p></div><div class="product"><a data-dimension112="427fd324-d15e-11f1-baf6-09f7d2f674aa" data-action="Deal Block" data-label="Galaxy S26" data-dimension48="Galaxy S26" data-dimension25="$849" href="https://www.amazon.com/Samsung-Unlocked-Smartphone-Processor-Immersive/dp/B0G4SWZP8B/" 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="82idHUPd6dizKAJwshQ8mk" name="Galaxy S26 (256GB) 'Cobalt Violet'" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/82idHUPd6dizKAJwshQ8mk-1920-80.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p>For the absolute basic Samsung flagship experience, there's the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-review" data-dimension112="427fd324-d15e-11f1-baf6-09f7d2f674aa" data-action="Deal Block" data-label="Galaxy S26" data-dimension48="Galaxy S26" data-dimension25="$849">Galaxy S26</a>. It's not as large or feature-rich as the Ultra, or even the Plus, but it still offers a whole lot of great features. That includes powerful Snapdragon 8 Elite Gen 5 performance, a larger, brighter display than before, a bunch of cool new magnetic AI features and a combination of solid battery life and camera quality. <a class="view-deal button" href="https://www.amazon.com/Samsung-Unlocked-Smartphone-Processor-Immersive/dp/B0G4SWZP8B/" target="_blank" rel="nofollow" data-dimension112="427fd324-d15e-11f1-baf6-09f7d2f674aa" data-action="Deal Block" data-label="Galaxy S26" data-dimension48="Galaxy S26" data-dimension25="$849">View Deal</a></p></div><div class="product"><a data-dimension112="427fd37e-d15e-11f1-8b7f-afea1ff831b7" data-action="Deal Block" data-label="Galaxy S26 Plus" data-dimension48="Galaxy S26 Plus" data-dimension25="$999" href="https://www.bestbuy.com/product/samsung-galaxy-s26-256gb-unlocked-black/JJGRF368TV" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1192px;"><p class="vanilla-image-block" style="padding-top:123.07%;"><img id="nLnALydHBLsMiQiAEDTrQk" name="Galaxy S26 Plus deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/nLnALydHBLsMiQiAEDTrQk-1920-80.jpg" mos="" align="middle" fullscreen="" width="1192" height="1467" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-plus-review" data-dimension112="427fd37e-d15e-11f1-8b7f-afea1ff831b7" data-action="Deal Block" data-label="Galaxy S26 Plus" data-dimension48="Galaxy S26 Plus" data-dimension25="$999">Galaxy S26 Plus</a> is a little bigger and a little more capable than the Galaxy S26. It features a QHD resolution screen, a larger 4,900 mAh battery, faster 45W charging speeds as well as all the same advantages as the standard S26 model. Though sadly it lacks the major benefits of the Ultra model, such as the high-resolution cameras and built-in S Pen.<a class="view-deal button" href="https://www.bestbuy.com/product/samsung-galaxy-s26-256gb-unlocked-black/JJGRF368TV" target="_blank" rel="nofollow" data-dimension112="427fd37e-d15e-11f1-8b7f-afea1ff831b7" data-action="Deal Block" data-label="Galaxy S26 Plus" data-dimension48="Galaxy S26 Plus" data-dimension25="$999">View Deal</a></p></div><div class="product"><a data-dimension112="427fd5e0-d15e-11f1-b12f-35d75b49d0cc" data-action="Deal Block" data-label="Galaxy S26 Ultra" data-dimension48="Galaxy S26 Ultra" data-dimension25="$1144" href="https://www.amazon.com/Samsung-Unlocked-Smartphone-Charging-Warranty/dp/B0G4SWDH8P" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1475px;"><p class="vanilla-image-block" style="padding-top:101.69%;"><img id="pTo28Fx9tATQs3gfbYBFL5" name="Galaxy S26 Ultra deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/pTo28Fx9tATQs3gfbYBFL5-1920-80.jpg" mos="" align="middle" fullscreen="" width="1475" height="1500" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review#section-galaxy-s26-ultra-review-release-date-and-price" data-dimension112="427fd5e0-d15e-11f1-b12f-35d75b49d0cc" data-action="Deal Block" data-label="Galaxy S26 Ultra" data-dimension48="Galaxy S26 Ultra" data-dimension25="$1144">Samsung Galaxy S26 Ultra</a> is the flagship of Samsung's premium phone line, and it easily offers the best Galaxy experience you can get right now. Not only does it have the largest screen of the S26 lineup, it also features a built-in S Pen stylus, a larger 5,000 mAh battery, 60W wires charging speeds and the Privacy Display that helps keep snooping eyes away from your phone — but only when you say so. Not to mention the fact there's a 200MP main camera, and  a main telephoto lens with 50MP resolution.<a class="view-deal button" href="https://www.amazon.com/Samsung-Unlocked-Smartphone-Charging-Warranty/dp/B0G4SWDH8P" target="_blank" rel="nofollow" data-dimension112="427fd5e0-d15e-11f1-b12f-35d75b49d0cc" data-action="Deal Block" data-label="Galaxy S26 Ultra" data-dimension48="Galaxy S26 Ultra" data-dimension25="$1144">View Deal</a></p></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ iPhone Duo vs. Samsung Galaxy Z Fold 8: Which foldable is the best? ]]></title>
                                                                                                <dc:content><![CDATA[ <p>After what feels like and endless amount of waiting, the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-review">iPhone Duo</a> is finally here. Apple's first foldable has generated a lot of buzz, and despite some flaws it seems as though reception has been largely positive. Can Apple steal Samsung's crown as the maker of the <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">best foldable phone</a> though?</p><p>Samsung has almost a decade of experience making foldables, and the fresh new look of the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Samsung Galaxy Z Fold 8</a> shows that it's not given up trying new things just yet. Even if it emphasizes the compact (and arguably more comfortable) design, rather than the flashy features you'll find on the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Galaxy Z Fold 8 Ultra</a>. </p><p>The thing we want to know is which of these two passport-shaped foldables is actually the better choice for you. Now that we've had chance to test the iPhone Duo in all its glory, here's our full comparison of the iPhone Duo vs. Samsung Galaxy Z Fold 8 to help you decide.</p><h2 class="article-body__section" id="section-iphone-duo-vs-samsung-galaxy-z-fold-8-specifications"><span>iPhone Duo vs Samsung Galaxy Z Fold 8: Specifications</span></h2><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>iPhone Duo</strong></p></td><td  ><p><strong>Samsung Galaxy Z Fold 8</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>$1,999 / £1,999 AU$3,499</p></td><td  ><p>From $1,899 / £1,699 / AU$2,699</p></td></tr><tr><td class="firstcol " ><p><strong>Cover display</strong></p></td><td  ><p>5.4 inches (1398 x 2034)</p></td><td  ><p>5.5 inches (1248 x 1972)</p></td></tr><tr><td class="firstcol " ><p><strong>Foldable Display</strong></p></td><td  ><p>7.6 inches (1878 x 2670)</p></td><td  ><p>7.6 inches (2448 x 1848)</p></td></tr><tr><td class="firstcol " ><p><strong>Refresh Rate</strong></p></td><td  ><p>1-120Hz</p></td><td  ><p>1-120Hz</p></td></tr><tr><td class="firstcol " ><p><strong>Chipset</strong></p></td><td  ><p>A20 Pro</p></td><td  ><p>Snapdragon 8 Elite Gen 5 for Galaxy</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>12GB</p></td><td  ><p>12-16GB</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>256GB / 512GB / 1TB / 2TB</p></td><td  ><p>256GB / 512GB / 1TB</p></td></tr><tr><td class="firstcol " ><p><strong>Rear cameras</strong></p></td><td  ><p>48MP (main), 48MP (ultrawide)</p></td><td  ><p>50MP main, 50MP (ultrawide)</p></td></tr><tr><td class="firstcol " ><p><strong>Front cameras</strong></p></td><td  ><p>12MP selfie, Under display camera</p></td><td  ><p>2 x 10MP</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>4,883 mAh </p></td><td  ><p>4,800 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Charging speed</strong></p></td><td  ><p>60W (wired), 25W (wireless)</p></td><td  ><p>45W (wired), 20W (wireless)</p></td></tr><tr><td class="firstcol " ><p><strong>IP rating</strong></p></td><td  ><p>IP68</p></td><td  ><p>IP48</p></td></tr><tr><td class="firstcol " ><p><strong>Size (Closed)</strong></p></td><td  ><p>117.8 x 84.1 x 11.3mm ( 3.31 x 4.64 x 0.44 inches)</p></td><td  ><p>123.9 x 81.9 x 9.7 mm (4.88 × 3.22 × 0.38 inches)</p></td></tr><tr><td class="firstcol " ><p><strong>Size (Open)</strong></p></td><td  ><p>117.8 x 164.6 x 5.2mm (6.48 x 4.64 x 0.21 inches)</p></td><td  ><p>123.9 x 161.4 x 4.5 mm (4.87 x 6.35 x 0.17 inches)</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>254 g (8.96 oz)</p></td><td  ><p>201 g (7.09 oz)</p></td></tr><tr><td class="firstcol " ><p><strong>Colors</strong></p></td><td  ><p>Night Sky, Star White</p></td><td  ><p>Graphite, Cream, Lavender, Pistachio</p></td></tr></tbody></table></div><h2 class="article-body__section" id="section-iphone-duo-vs-samsung-galaxy-z-fold-8-price-availability"><span>iPhone Duo vs. Samsung Galaxy Z Fold 8: Price &amp; availability</span></h2><p>Both the iPhone Duo and Samsung Galaxy Z Fold 8 are officially on sale right now. But if you want to get technical about it, demand for the Duo has been so extreme that every single carrier and retailer is sold out — and will be for the foreseeable future. </p><p>Current <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-wait-times-latest-updates-and-how-to-beat-apples-january-delay">iPhone Duo wait times</a> mean the absolute earliest time you'll get an iPhone Duo is the end of November, though most retailers and carriers have delivery estimates in late December and January. The Samsung Galaxy Z Fold 8 is readily available, and is actually on sale at retailers like <a href="https://www.amazon.com/Samsung-Smartphone-Content-Native-Customized-Processor/dp/B0H126B3KV" target="_blank" rel="nofollow">Amazon</a>.</p><p>The cost of an iPhone Duo starts at $1,999 / £1,999 / AU$3,499 for a model with 256GB of storage. Higher storage options are available including 512GB ($2,199 / £2,199 / AU$3,899), 1TB ($2,599 / £2,599 / AU$4,699) and 2TB ($3,199 / £3,199 / AU$5,899).</p><p>The Samsung Galaxy Z Fold 8 prices start at $1,899/£1,699/AU$2,699 for 256GB of storage and 12GB RAM. The 512GB model is $2,099 / £1,869 / AU$2,999, and a 1TB model with 16GB of RAM costs $2,499 / £2,209 / AU$3,599. Samsung does not offer a 2TB storage option.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ODm30X"></div>                            </div>                            <script src="https://kwizly.com/embed/ODm30X.js" async=""></script><h2 class="article-body__section" id="section-iphone-duo-vs-samsung-galaxy-z-fold-8-design-display"><span>iPhone Duo vs. Samsung Galaxy Z Fold 8: Design &amp; Display</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="irfrG6iVhAEC5dg3yt2fAN" name="iphone Duo vs. Galaxy Z Fold 8" alt="iphone Duo vs. Galaxy Z Fold 8." src="https://cdn.mos.cms.futurecdn.net/irfrG6iVhAEC5dg3yt2fAN-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The iPhone Duo and Z Fold 8 both have the passport-shaped design that is starting to take the foldable phone market by storm. Both phones include a large 7.6-inch foldable display with an aspect ratio close to 4:3, which is the same kind of display you'll find on the best tablets. </p><p>The Z fold 8 has a slightly larger outer display, though, with a 5.5-inch screen to Apple's 5.4-inches. The sharp corners also mean there's a little more real estate for the apps to work with compared to Apple's asymmetrical rounded design.</p><p>The Z Fold 8 features an anti-glare coating which is designed to improve visibility in low-light conditions. The iPhone Duo features a nano-texture display, which offers  a matte feel to the screen. This is also designed to minimize glare, while also reducing the visibility of the crease. While the phone does accomplish both those things, the nano-texture display doesn't have nearly as good <a href="https://www.tomsguide.com/phones/iphones/my-iphone-duo-vs-galaxy-z-fold-8-display-test-just-went-viral-heres-why-the-internet-is-so-divided-and-my-pick">color saturation and contrast as Samsung's main display.</a></p><p>Both phones have similar brightness levels on the screen, though we found that the Z Fold 8 is a little bit brighter. In our testing Samsung's foldable had a peak brightness of 2,649 nits, while the iPhone maxed out at 2,558. It's less than 90 nits difference, which isn't going to be noticeable to many, but the numbers don't lie.</p><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="T2KGZbC8NRZCKAFfuEHRLW" name="iPhone Duo vs Galaxy Fold 8 display" alt="iPhone Duo vs Galaxy Z Fold 8 display showing Spider-Man Brand New Day" src="https://cdn.mos.cms.futurecdn.net/T2KGZbC8NRZCKAFfuEHRLW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>In terms of design, the iPhone Duo is noticeably thicker and heavier than the Galaxy Z Fold 8. Samsung's foldable is 4.5mm thick with a weight of 7.09 ounces. Meanwhile, the iPhone Duo is 5.2mm thick and weights 8.96 ounces. Not only is that almost two ounces more than the Z Fold 8, it also means this is the heaviest iPhone Apple has ever made.</p><p>Both phones feature power-button fingerprint scanners, and a pair of main cameras on the back of the phone. However while they also utilize the hole-punch camera design on the cover display, only the Galaxy uses the same one for the inner selfie camera. Apple instead opted for an under-display camera that's specifically meant for FaceTime and video calling — not selfies.</p><p>iPhone Duo has a key advantage where durability is concerned, thanks to the IP68 rating. This means that the phone is fully sealed against dust ingress, something that the IP48-rated Z Fold 8 offers no protection against. However both offer protection against being submerged in water for a short period of time.</p><h2 class="article-body__section" id="section-iphone-duo-vs-samsung-galaxy-z-fold-8-cameras"><span>iPhone Duo vs. Samsung Galaxy Z Fold 8: Cameras</span></h2><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="EhkNJhLSzZBDovnEc5h29b" name="iPhone Duo vs. Galaxy Z Fold 8" alt="iPhone Duo vs. Galaxy Z Fold 8 held in the hand." src="https://cdn.mos.cms.futurecdn.net/EhkNJhLSzZBDovnEc5h29b-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>From a hardware standpoint, both the Z Fold 8 and iPhone Duo should be fairly evenly matched in the camera department. Apple has equipped its foldable with a pair of 48MP cameras (main and ultrawide) while Samsung has a pair of 50MP lenses. </p><p>Neither phone has a telephoto lens, which means your zoomed in shots will not be that impressive.</p><p>Of course, modern phone cameras heavily rely on computational photography software, and that can easily make the most difference in photo comparisons. So let's take a look at photos from both phones.</p><iframe allow="" height="420" 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=0629460e-cccb-11f1-ba1b-0e6f42328d7d"></iframe><p>Both phones have capable main cameras, capturing bright colors with a lot of detail. It's worth noting that while the Z Fold 8 is able to capture brighter images, the photos end up a little more washed out in the process. </p><iframe allow="" height="420" 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=be97f514-cccb-11f1-ba1b-0e6f42328d7d"></iframe><p>It's a similar situation with the ultrawide camera too. The iPhone Duo struggled with the darker spots within view, but the brightness on the Z Fold 8 is ramped up by so much that it completely washed out the background details and makes the details much harder to discern. </p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/nMGkPKFgWQufyrSTJZ5tXY-1920-80.jpg" alt="iPhone Duo vs iPhone 18 Pro Max zoom comparison" /><figcaption>iPhone Duo (10x zoom)<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/uPH2b57NkRM6xrQZ6eqDkY-1920-80.jpg" alt="iPhone Duo vs iPhone 18 Pro Max zoom comparison" /><figcaption>iPhone 18 Pro Max (10x zoom)<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/5krqgrGy8mzv64KUxGy2XY-1920-80.jpg" alt="iPhone Duo vs iPhone 18 Pro Max zoom comparison" /><figcaption>iPhone Duo (8x zoom)<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/omXMZf3L4fcYgp74U3AYpY-1920-80.jpg" alt="iPhone Duo vs iPhone 18 Pro Max zoom comparison" /><figcaption>iPhone 18 Pro Max (8x zoom)<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/dGzEsqM5uKmzRRtSVARrnY-1920-80.jpg" alt="iPhone Duo vs iPhone 18 Pro Max zoom comparison" /><figcaption>iPhone Duo (4x zoom)<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/MNuVYRnFGpKrPckpMsiBuY-1920-80.jpg" alt="iPhone Duo vs iPhone 18 Pro Max zoom comparison" /><figcaption>iPhone 18 Pro Max (4x zoom)<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/H4F5ELBEpSQu5tFhqGmmpY-1920-80.jpg" alt="iPhone Duo vs iPhone 18 Pro Max zoom comparison" /><figcaption>iPhone Duo (2x zoom)<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/y4BmzmErfCryfjqwdYeXiY-1920-80.jpg" alt="iPhone Duo vs iPhone 18 Pro Max zoom comparison" /><figcaption>iPhone 18 Pro Max (2x zoom)<small role="credit">Future</small></figcaption></figure></figure><p>In terms of Zoom, the Duo and Z Fold 8 are fairly evenly matched, but as the magnification increases, the worse the quality on the Duo actually gets. At 10x magnification, you can see that the Duo is noticeably blurry and more pixelated than the Z Fold 8 — even though its own zoomed shots are nowhere near as good as they could have been with a dedicated telephoto lens.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/YCR9SLtP7gMALnWxYSoBGF-1920-80.jpg" alt="z fold 8 vs iphone duo" /><figcaption>iPhone Duo<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/sd2vAQHvCwxeDVy4MhvRTN-1920-80.jpg" alt="samsung galaxy z fold 8 selfie" /><figcaption>Samsung Galaxy Z Fold 8<small role="credit">Future</small></figcaption></figure></figure><p>Photos from the outer selfie camera are a little more clear cut, with the iPhone Duo producing a sharper and less blurry image, without the same washed out effect that seems to be plaguing the Z Fold 8's camera</p><iframe allow="" height="420" 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=fa287ed2-cccb-11f1-ba1b-0e6f42328d7d"></iframe><p>The iPhone Duo offers noticeably better performance in low light, too. Both cameras managed to brighten up the image, but the Duo managed to produce a noticeably sharper photo than the Samsung. </p><p>Overall it seems as though the iPhone Duo has the edge in the camera department. While the Z Fold 8 doesn't take bad photos, and the iPhone Duo has its flaws, the fact is that Apple's foldable seems to do a much better job of capturing its surroundings in a more lifelike way — and without producing a washed out images that loses its spark. If you're looking for a deeper dive, our <a href="https://www.tomsguide.com/phones/iphones/i-put-the-iphone-duo-vs-galaxy-fold-8-through-a-10-round-photo-face-off-heres-the-winner">iPhone Duo vs. Galaxy Z Fold 8 camera face-off</a> has more samples to check out.</p><h2 class="article-body__section" id="section-iphone-duo-vs-samsung-galaxy-z-fold-8-performance"><span>iPhone Duo vs. Samsung Galaxy Z Fold 8: Performance</span></h2><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="5cCAmuyZjkQerPrbP7MV93" name="Apple iPhone Duo-11" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/5cCAmuyZjkQerPrbP7MV93-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Apple has already proven that the <a href="https://www.tomsguide.com/phones/iphones/apple-a20-pro-chip-why-its-such-a-big-deal-for-the-iphone-ultra-and-iphone-18-pro-max">A20 Pro chipset</a> is an absolute <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-benchmarks-apple-just-built-the-most-powerful-phones-weve-ever-seen">powerhouse of graphics and computing power on the iPhone 18 Pro</a>.  To the point where it trumps the Z Fold 8's Snapdragon 8 Elite Gen 5 Chipset for Galaxy in almost every category. But does that still hold true for the iPhone Duo?</p><p>Yes, as it turns out, and you can see the figures below.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Geekbench 7 (single, multi-core)</strong><br /><br /></p></td><td  ><p><strong>3DMark Solar Bay Unlimited</strong></p><p><br /></p></td><td  ><p><strong>Geekbench AI 1.7</strong></p></td></tr><tr><td class="firstcol " ><p><strong>iPhone Duo </strong></p></td><td  ><p>4,007 / 11,363</p></td><td  ><p>62.3 fps / 16,496</p></td><td  ><p>69,438</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8</strong></p></td><td  ><p>2,978 / 9,811</p></td><td  ><p>47.35 fps / 12,454</p></td><td  ><p>72,242</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 18 Pro</strong></p></td><td  ><p>4,022 / 11,543</p></td><td  ><p>61.93 fps / 16,288</p></td><td  ><p>69,245 </p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 18 Pro Max</strong></p></td><td  ><p>4,025 / 11,525</p></td><td  ><p>67.9 fps / 17,850</p></td><td  ><p>71,974</p></td></tr></tbody></table></div><p>It turns out that, per the benchmarking tests, there isn't a whole lot of <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-full-benchmarks-the-worlds-fastest-foldable-but-how-does-it-stack-up-to-iphone-18-pro">difference in performance on the iPhone Duo</a> compared to the iPhone 18 Pro and iPhone 18 Pro Max. The figures aren't identical, but they do outpace the Z Fold 8 in everything except AI performance.</p><p>Geekbench 7 benchmarks produced scores of 4,007 for a single-core benchmark and 11,363 for multi-core testing — far in excess of the Z Fold 8's 2,978 and 9,811. Similarly 3DMark's Solar Bay Unlimited graphics test came out with a score of 16,496 and an average frame-rate of 62.3 fps. Sadly the Z Fold 8 only managed to produce 12,454 and 47.35 fps.</p><p>AI is a different story, though. The Z Fold 8 scored 72,242 in the Geekbench AI 1.7 test, compared to the Duo's 69,438. This means that on-device AI processing should be slightly better on Samsung's foldable.</p><h2 class="article-body__section" id="section-iphone-duo-vs-samsung-galaxy-z-fold-8-software-ai"><span>iPhone Duo vs. Samsung Galaxy Z Fold 8: Software &amp; AI</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="KSYDGbqfndacsbXn2VzL9N" name="iphone Duo vs. Galaxy Z Fold 8" alt="iphone Duo vs. Galaxy Z Fold 8." src="https://cdn.mos.cms.futurecdn.net/KSYDGbqfndacsbXn2VzL9N-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Apple's made a bunch of major advances in AI this year, thanks to the launch of <a href="https://www.tomsguide.com/phones/iphones/20-smart-ios-27-features-that-will-make-your-life-easier-and-how-to-use-them">iOS 27</a> and <a href="https://www.tomsguide.com/phones/iphones/i-spent-a-week-with-siri-ai-here-are-my-honest-pros-and-cons">Siri AI</a>. This upgraded assistant is capable of performing various different and more complicated tasks, as well as understanding personal context that helps it understand your commands much more easily.</p><p>On top of that, iOS 27 features expressive voices for Siri, more advanced dictation, and AI-powered editing features such as <a href="https://www.tomsguide.com/phones/i-tried-ios-27-clean-up-vs-galaxy-ai-photo-assist-in-a-7-round-test-and-i-was-surprised-with-how-close-it-was">Clean Up</a>, Extend and the unique <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"</a> that lets you adjust the angle of your photos. Outside of features available on other iPhones, the Duo comes with a Smart tracking camera feature, which operates in a similar manner to <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 on the Z Fold 8</a>.</p><p>The Z Fold 8 comes with all the best Galaxy AI features you'll find on every flagship Galaxy phone, plus all the best parts of Google Gemini. This includes <a href="https://www.tomsguide.com/phones/samsung-phones/how-to-turn-on-galaxy-s26s-now-nudge-and-how-it-works">Now Nudge</a>, a context-based tool to resurface relevant information when you need it, Now Brief's regular preparatory reports and the advanced version of Circle to Search that's capable of identifying multiple items at once.</p><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="oty2YzwQZNhensgcK2MQEC" name="Apple iPhone Duo-29" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/oty2YzwQZNhensgcK2MQEC-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>However, the Duo has some drawbacks to its overall UI. The main one is that the taskbar has been pinned to the right side of the screen, with no option to change it — compared to Samsung's traditional bar along the bottom of the phone. </p><p>The Duo's multitasking is also limited to running two apps side by side, and doesn't work as consistently when the phone is in portrait mode. The <a href="https://www.tomsguide.com/phones/iphones/ive-tested-the-galaxy-z-fold-8-and-it-proves-apple-really-needs-to-solve-this-one-thing">Z Fold 8 supports up to three split-screen apps</a> and as many as five floating app windows — giving it the edge for productive multitasking. The Z Fold 8 also supports the <a href="https://www.tomsguide.com/phones/samsung-phones/i-just-tried-the-new-samsung-dex-on-the-galaxy-z-fold-8-and-it-has-one-huge-upgrade">DeX desktop mode</a>, and so far there's no equivalent feature on iPhones.</p><p>Right now it feels like Samsung may have an edge with app optimization too. Apple has done a lot to <a href="https://www.tomsguide.com/phones/iphones/ive-been-testing-dozens-of-iphone-duo-apps-heres-my-top-15-picks-so-far">ensure major apps take advantage of the iPhone Duo's larger screen</a>, but Samsung has a head start of several years — and the fact Android itself runs on a huge number of devices of differing sizes.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5276px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="AieHmWF2DYNhYEc6WiBT4n" name="Samsung DeX on Galaxy Z Flip 8" alt="Samsung DeX on Galaxy Z Flip 8." src="https://cdn.mos.cms.futurecdn.net/AieHmWF2DYNhYEc6WiBT4n-1920-80.jpg" mos="" align="middle" fullscreen="" width="5276" height="2968" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>Only the iPhone Duo offers stylus support, thanks to the Apple Pencil USB-C. Likewise, the Z Fold 8 doesn't fracture Samsung's Flex Mode, which adjusts the UI depending on the angle of the hinge. The Duo does do this, and has<a href="https://www.tomsguide.com/phones/iphones/iphone-duo-modes-explained-6-ways-you-can-use-apples-new-foldable"> multiple different fold states to take advantage of.</a></p><h2 class="article-body__section" id="section-iphone-duo-vs-samsung-galaxy-z-fold-8-battery"><span>iPhone Duo vs. Samsung Galaxy Z Fold 8: Battery</span></h2><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="aKDJfWTz98pAvJTXB3pNLN" name="iphone Duo vs. Galaxy Z Fold 8" alt="iphone Duo vs. Galaxy Z Fold 8." src="https://cdn.mos.cms.futurecdn.net/aKDJfWTz98pAvJTXB3pNLN-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>When it comes to total battery capacity, the iPhone Duo and Galaxy Z Fold 8 are pretty evenly matched. The Duo offers 4,883 mAh of power reserves, while the Z Fold 8 is slightly lower at 4,800 mAh. However the slight difference in capacity has led to very different results in our battery life testing.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>iPhone Duo</strong></p></td><td  ><p><strong>Samsung Galaxy Z Fold 8</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Battery Life (Hrs:Mins)</strong></p></td><td  ><p>13:20</p></td><td  ><p>10:06 (New test)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery Size (mAh)</strong></p></td><td  ><p>4,883</p></td><td  ><p>4,800</p></td></tr><tr><td class="firstcol " ><p><strong>15 minutes</strong></p></td><td  ><p>42%</p></td><td  ><p>43%</p></td></tr><tr><td class="firstcol " ><p><strong>30 minutes</strong></p></td><td  ><p>66%</p></td><td  ><p>70%</p></td></tr><tr><td class="firstcol " ><p><strong>Charge Speed</strong></p></td><td  ><p>60W</p></td><td  ><p>45W</p></td></tr></tbody></table></div><p>The iPhone Duo lasted 13 hours and 20 minutes in a new version of our battery test, which was optimized for the iPhone Duo. In that same test, which ran simultaneously, the Z Fold 8 only lasted 10 hours and six minutes — which is not particularly great in the grand scheme of things.</p><p>Previously the <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-vs-fold-8-ultra-vs-flip-8-battery-tests-silicon-carbon-pays-off">Z Fold 8 has lasted 12hours and 19 minutes</a> in testing, but that's no longer the case — and the current battery life is much lower. However, whichever way you look at it, the iPhone Duo has the clear advantage.</p><p>However, the Z Fold 8 has a slight edge when it comes to charging speed, despite the fact its 45W wired charging is noticeably lower than the iPhone Duo's 60W. The Duo reclaimed 42% battery in 15 minutes, compared to the Z Fold 8's 43%, with both numbers rising to a respective 66% and 70%. </p><p>It's not a huge amount of difference, but if you want to recoup as much power as you can as quickly as possible, the Z Fold 8 actually has Apple beat. Though its wireless charging speed is limited to 20W, compared to the Duo's 25W, and it lacks the internal magnets that facilitate Qi2 or MagSafe chargers and accessories.</p><h2 class="article-body__section" id="section-iphone-duo-vs-samsung-galaxy-z-fold-8-bottom-line"><span>iPhone Duo vs. Samsung Galaxy Z Fold 8: Bottom line</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="sAGeWKGJXCR285UXZNowXb" name="iPhone Duo vs. Galaxy Z Fold 8" alt="iPhone Duo vs. Galaxy Z Fold 8 held in the hand." src="https://cdn.mos.cms.futurecdn.net/sAGeWKGJXCR285UXZNowXb-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>Apple has done great things with the iPhone Duo, and it manages to edge out competition from the Galaxy Z Fold 8 in a number of key areas. The main ones, of course, being battery life, performance, overall camera performance and the fact it has stylus support.</p><p>That said, the Z Fold 8 offers a lot and it feels like it has Apple beat when it comes to AI and software capabilities. Not to mention the fact it's cheaper, thinner and lighter than Apple's foldable, and the anti-glare coating means the colors from the screen really pop compared to the iPhone.</p><p>When deciding between the two, it's going to come down to what you actually want out of a foldable. If you value the software experience above all else, then the Z Fold 8 is going to be the right option for you. But if you like Apple products, and prefer a phone that is physically more capable, then the Duo might be the better option.</p><p>Then again, considering the iPhone Duo is sold out everywhere, and you're going to have to wait at least several weeks before you can actually get your hands on one.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-2-with-face-id-is-reportedly-being-tested-even-before-the-first-foldable-hits-shelves"><strong>Apple iPhone Duo 2 with Face ID is reportedly being tested even before the first foldable hits shelves</strong></a></li><li><a href="https://www.tomsguide.com/phones/iphones/i-put-the-iphone-duo-vs-galaxy-fold-8-through-a-10-round-photo-face-off-heres-the-winner"><strong>I put the iPhone Duo vs. Galaxy Fold 8 through a 10-round photo face-off — and there's a clear winner</strong></a></li><li><a href="https://www.tomsguide.com/phones/iphones/polished-but-rough-the-common-flaws-in-the-iphone-duo-found-by-nine-different-reviewers"><strong>'Polished but rough': The common flaws in the iPhone Duo found by nine different reviewers</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphone-duo-vs-samsung-galaxy-z-fold-8</link>
                                                                            <description>
                            <![CDATA[ Can't decide between the iPhone Duo and the Samsung Galaxy Z Fold 8? Here's out verdict on which wider foldable phone is best. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">VL3Vyo56qdUiDZtnetzxzn</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/xZTTWVaxBtooBq6xrAHYEN-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 26 Oct 2026 05:15:00 +0000</pubDate>                                                                                                                                <updated>Mon, 26 Oct 2026 09:08:24 +0000</updated>
                                                                                                                                            <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/xZTTWVaxBtooBq6xrAHYEN-1920-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iphone Duo vs. Galaxy Z Fold 8.]]></media:description>                                                            <media:text><![CDATA[iphone Duo vs. Galaxy Z Fold 8.]]></media:text>
                                <media:title type="plain"><![CDATA[iphone Duo vs. Galaxy Z Fold 8.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/xZTTWVaxBtooBq6xrAHYEN-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>After what feels like and endless amount of waiting, the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-review">iPhone Duo</a> is finally here. Apple's first foldable has generated a lot of buzz, and despite some flaws it seems as though reception has been largely positive. Can Apple steal Samsung's crown as the maker of the <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">best foldable phone</a> though?</p><p>Samsung has almost a decade of experience making foldables, and the fresh new look of the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Samsung Galaxy Z Fold 8</a> shows that it's not given up trying new things just yet. Even if it emphasizes the compact (and arguably more comfortable) design, rather than the flashy features you'll find on the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Galaxy Z Fold 8 Ultra</a>. </p><p>The thing we want to know is which of these two passport-shaped foldables is actually the better choice for you. Now that we've had chance to test the iPhone Duo in all its glory, here's our full comparison of the iPhone Duo vs. Samsung Galaxy Z Fold 8 to help you decide.</p><h2 class="article-body__section" id="section-iphone-duo-vs-samsung-galaxy-z-fold-8-specifications"><span>iPhone Duo vs Samsung Galaxy Z Fold 8: Specifications</span></h2><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>iPhone Duo</strong></p></td><td  ><p><strong>Samsung Galaxy Z Fold 8</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>$1,999 / £1,999 AU$3,499</p></td><td  ><p>From $1,899 / £1,699 / AU$2,699</p></td></tr><tr><td class="firstcol " ><p><strong>Cover display</strong></p></td><td  ><p>5.4 inches (1398 x 2034)</p></td><td  ><p>5.5 inches (1248 x 1972)</p></td></tr><tr><td class="firstcol " ><p><strong>Foldable Display</strong></p></td><td  ><p>7.6 inches (1878 x 2670)</p></td><td  ><p>7.6 inches (2448 x 1848)</p></td></tr><tr><td class="firstcol " ><p><strong>Refresh Rate</strong></p></td><td  ><p>1-120Hz</p></td><td  ><p>1-120Hz</p></td></tr><tr><td class="firstcol " ><p><strong>Chipset</strong></p></td><td  ><p>A20 Pro</p></td><td  ><p>Snapdragon 8 Elite Gen 5 for Galaxy</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>12GB</p></td><td  ><p>12-16GB</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>256GB / 512GB / 1TB / 2TB</p></td><td  ><p>256GB / 512GB / 1TB</p></td></tr><tr><td class="firstcol " ><p><strong>Rear cameras</strong></p></td><td  ><p>48MP (main), 48MP (ultrawide)</p></td><td  ><p>50MP main, 50MP (ultrawide)</p></td></tr><tr><td class="firstcol " ><p><strong>Front cameras</strong></p></td><td  ><p>12MP selfie, Under display camera</p></td><td  ><p>2 x 10MP</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>4,883 mAh </p></td><td  ><p>4,800 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Charging speed</strong></p></td><td  ><p>60W (wired), 25W (wireless)</p></td><td  ><p>45W (wired), 20W (wireless)</p></td></tr><tr><td class="firstcol " ><p><strong>IP rating</strong></p></td><td  ><p>IP68</p></td><td  ><p>IP48</p></td></tr><tr><td class="firstcol " ><p><strong>Size (Closed)</strong></p></td><td  ><p>117.8 x 84.1 x 11.3mm ( 3.31 x 4.64 x 0.44 inches)</p></td><td  ><p>123.9 x 81.9 x 9.7 mm (4.88 × 3.22 × 0.38 inches)</p></td></tr><tr><td class="firstcol " ><p><strong>Size (Open)</strong></p></td><td  ><p>117.8 x 164.6 x 5.2mm (6.48 x 4.64 x 0.21 inches)</p></td><td  ><p>123.9 x 161.4 x 4.5 mm (4.87 x 6.35 x 0.17 inches)</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>254 g (8.96 oz)</p></td><td  ><p>201 g (7.09 oz)</p></td></tr><tr><td class="firstcol " ><p><strong>Colors</strong></p></td><td  ><p>Night Sky, Star White</p></td><td  ><p>Graphite, Cream, Lavender, Pistachio</p></td></tr></tbody></table></div><h2 class="article-body__section" id="section-iphone-duo-vs-samsung-galaxy-z-fold-8-price-availability"><span>iPhone Duo vs. Samsung Galaxy Z Fold 8: Price &amp; availability</span></h2><p>Both the iPhone Duo and Samsung Galaxy Z Fold 8 are officially on sale right now. But if you want to get technical about it, demand for the Duo has been so extreme that every single carrier and retailer is sold out — and will be for the foreseeable future. </p><p>Current <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-wait-times-latest-updates-and-how-to-beat-apples-january-delay">iPhone Duo wait times</a> mean the absolute earliest time you'll get an iPhone Duo is the end of November, though most retailers and carriers have delivery estimates in late December and January. The Samsung Galaxy Z Fold 8 is readily available, and is actually on sale at retailers like <a href="https://www.amazon.com/Samsung-Smartphone-Content-Native-Customized-Processor/dp/B0H126B3KV" target="_blank" rel="nofollow">Amazon</a>.</p><p>The cost of an iPhone Duo starts at $1,999 / £1,999 / AU$3,499 for a model with 256GB of storage. Higher storage options are available including 512GB ($2,199 / £2,199 / AU$3,899), 1TB ($2,599 / £2,599 / AU$4,699) and 2TB ($3,199 / £3,199 / AU$5,899).</p><p>The Samsung Galaxy Z Fold 8 prices start at $1,899/£1,699/AU$2,699 for 256GB of storage and 12GB RAM. The 512GB model is $2,099 / £1,869 / AU$2,999, and a 1TB model with 16GB of RAM costs $2,499 / £2,209 / AU$3,599. Samsung does not offer a 2TB storage option.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ODm30X"></div>                            </div>                            <script src="https://kwizly.com/embed/ODm30X.js" async=""></script><h2 class="article-body__section" id="section-iphone-duo-vs-samsung-galaxy-z-fold-8-design-display"><span>iPhone Duo vs. Samsung Galaxy Z Fold 8: Design &amp; Display</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="irfrG6iVhAEC5dg3yt2fAN" name="iphone Duo vs. Galaxy Z Fold 8" alt="iphone Duo vs. Galaxy Z Fold 8." src="https://cdn.mos.cms.futurecdn.net/irfrG6iVhAEC5dg3yt2fAN-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The iPhone Duo and Z Fold 8 both have the passport-shaped design that is starting to take the foldable phone market by storm. Both phones include a large 7.6-inch foldable display with an aspect ratio close to 4:3, which is the same kind of display you'll find on the best tablets. </p><p>The Z fold 8 has a slightly larger outer display, though, with a 5.5-inch screen to Apple's 5.4-inches. The sharp corners also mean there's a little more real estate for the apps to work with compared to Apple's asymmetrical rounded design.</p><p>The Z Fold 8 features an anti-glare coating which is designed to improve visibility in low-light conditions. The iPhone Duo features a nano-texture display, which offers  a matte feel to the screen. This is also designed to minimize glare, while also reducing the visibility of the crease. While the phone does accomplish both those things, the nano-texture display doesn't have nearly as good <a href="https://www.tomsguide.com/phones/iphones/my-iphone-duo-vs-galaxy-z-fold-8-display-test-just-went-viral-heres-why-the-internet-is-so-divided-and-my-pick">color saturation and contrast as Samsung's main display.</a></p><p>Both phones have similar brightness levels on the screen, though we found that the Z Fold 8 is a little bit brighter. In our testing Samsung's foldable had a peak brightness of 2,649 nits, while the iPhone maxed out at 2,558. It's less than 90 nits difference, which isn't going to be noticeable to many, but the numbers don't lie.</p><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="T2KGZbC8NRZCKAFfuEHRLW" name="iPhone Duo vs Galaxy Fold 8 display" alt="iPhone Duo vs Galaxy Z Fold 8 display showing Spider-Man Brand New Day" src="https://cdn.mos.cms.futurecdn.net/T2KGZbC8NRZCKAFfuEHRLW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>In terms of design, the iPhone Duo is noticeably thicker and heavier than the Galaxy Z Fold 8. Samsung's foldable is 4.5mm thick with a weight of 7.09 ounces. Meanwhile, the iPhone Duo is 5.2mm thick and weights 8.96 ounces. Not only is that almost two ounces more than the Z Fold 8, it also means this is the heaviest iPhone Apple has ever made.</p><p>Both phones feature power-button fingerprint scanners, and a pair of main cameras on the back of the phone. However while they also utilize the hole-punch camera design on the cover display, only the Galaxy uses the same one for the inner selfie camera. Apple instead opted for an under-display camera that's specifically meant for FaceTime and video calling — not selfies.</p><p>iPhone Duo has a key advantage where durability is concerned, thanks to the IP68 rating. This means that the phone is fully sealed against dust ingress, something that the IP48-rated Z Fold 8 offers no protection against. However both offer protection against being submerged in water for a short period of time.</p><h2 class="article-body__section" id="section-iphone-duo-vs-samsung-galaxy-z-fold-8-cameras"><span>iPhone Duo vs. Samsung Galaxy Z Fold 8: Cameras</span></h2><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="EhkNJhLSzZBDovnEc5h29b" name="iPhone Duo vs. Galaxy Z Fold 8" alt="iPhone Duo vs. Galaxy Z Fold 8 held in the hand." src="https://cdn.mos.cms.futurecdn.net/EhkNJhLSzZBDovnEc5h29b-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>From a hardware standpoint, both the Z Fold 8 and iPhone Duo should be fairly evenly matched in the camera department. Apple has equipped its foldable with a pair of 48MP cameras (main and ultrawide) while Samsung has a pair of 50MP lenses. </p><p>Neither phone has a telephoto lens, which means your zoomed in shots will not be that impressive.</p><p>Of course, modern phone cameras heavily rely on computational photography software, and that can easily make the most difference in photo comparisons. So let's take a look at photos from both phones.</p><iframe allow="" height="420" 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=0629460e-cccb-11f1-ba1b-0e6f42328d7d"></iframe><p>Both phones have capable main cameras, capturing bright colors with a lot of detail. It's worth noting that while the Z Fold 8 is able to capture brighter images, the photos end up a little more washed out in the process. </p><iframe allow="" height="420" 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=be97f514-cccb-11f1-ba1b-0e6f42328d7d"></iframe><p>It's a similar situation with the ultrawide camera too. The iPhone Duo struggled with the darker spots within view, but the brightness on the Z Fold 8 is ramped up by so much that it completely washed out the background details and makes the details much harder to discern. </p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/nMGkPKFgWQufyrSTJZ5tXY-1920-80.jpg" alt="iPhone Duo vs iPhone 18 Pro Max zoom comparison" /><figcaption>iPhone Duo (10x zoom)<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/uPH2b57NkRM6xrQZ6eqDkY-1920-80.jpg" alt="iPhone Duo vs iPhone 18 Pro Max zoom comparison" /><figcaption>iPhone 18 Pro Max (10x zoom)<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/5krqgrGy8mzv64KUxGy2XY-1920-80.jpg" alt="iPhone Duo vs iPhone 18 Pro Max zoom comparison" /><figcaption>iPhone Duo (8x zoom)<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/omXMZf3L4fcYgp74U3AYpY-1920-80.jpg" alt="iPhone Duo vs iPhone 18 Pro Max zoom comparison" /><figcaption>iPhone 18 Pro Max (8x zoom)<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/dGzEsqM5uKmzRRtSVARrnY-1920-80.jpg" alt="iPhone Duo vs iPhone 18 Pro Max zoom comparison" /><figcaption>iPhone Duo (4x zoom)<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/MNuVYRnFGpKrPckpMsiBuY-1920-80.jpg" alt="iPhone Duo vs iPhone 18 Pro Max zoom comparison" /><figcaption>iPhone 18 Pro Max (4x zoom)<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/H4F5ELBEpSQu5tFhqGmmpY-1920-80.jpg" alt="iPhone Duo vs iPhone 18 Pro Max zoom comparison" /><figcaption>iPhone Duo (2x zoom)<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/y4BmzmErfCryfjqwdYeXiY-1920-80.jpg" alt="iPhone Duo vs iPhone 18 Pro Max zoom comparison" /><figcaption>iPhone 18 Pro Max (2x zoom)<small role="credit">Future</small></figcaption></figure></figure><p>In terms of Zoom, the Duo and Z Fold 8 are fairly evenly matched, but as the magnification increases, the worse the quality on the Duo actually gets. At 10x magnification, you can see that the Duo is noticeably blurry and more pixelated than the Z Fold 8 — even though its own zoomed shots are nowhere near as good as they could have been with a dedicated telephoto lens.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/YCR9SLtP7gMALnWxYSoBGF-1920-80.jpg" alt="z fold 8 vs iphone duo" /><figcaption>iPhone Duo<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/sd2vAQHvCwxeDVy4MhvRTN-1920-80.jpg" alt="samsung galaxy z fold 8 selfie" /><figcaption>Samsung Galaxy Z Fold 8<small role="credit">Future</small></figcaption></figure></figure><p>Photos from the outer selfie camera are a little more clear cut, with the iPhone Duo producing a sharper and less blurry image, without the same washed out effect that seems to be plaguing the Z Fold 8's camera</p><iframe allow="" height="420" 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=fa287ed2-cccb-11f1-ba1b-0e6f42328d7d"></iframe><p>The iPhone Duo offers noticeably better performance in low light, too. Both cameras managed to brighten up the image, but the Duo managed to produce a noticeably sharper photo than the Samsung. </p><p>Overall it seems as though the iPhone Duo has the edge in the camera department. While the Z Fold 8 doesn't take bad photos, and the iPhone Duo has its flaws, the fact is that Apple's foldable seems to do a much better job of capturing its surroundings in a more lifelike way — and without producing a washed out images that loses its spark. If you're looking for a deeper dive, our <a href="https://www.tomsguide.com/phones/iphones/i-put-the-iphone-duo-vs-galaxy-fold-8-through-a-10-round-photo-face-off-heres-the-winner">iPhone Duo vs. Galaxy Z Fold 8 camera face-off</a> has more samples to check out.</p><h2 class="article-body__section" id="section-iphone-duo-vs-samsung-galaxy-z-fold-8-performance"><span>iPhone Duo vs. Samsung Galaxy Z Fold 8: Performance</span></h2><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="5cCAmuyZjkQerPrbP7MV93" name="Apple iPhone Duo-11" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/5cCAmuyZjkQerPrbP7MV93-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Apple has already proven that the <a href="https://www.tomsguide.com/phones/iphones/apple-a20-pro-chip-why-its-such-a-big-deal-for-the-iphone-ultra-and-iphone-18-pro-max">A20 Pro chipset</a> is an absolute <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-benchmarks-apple-just-built-the-most-powerful-phones-weve-ever-seen">powerhouse of graphics and computing power on the iPhone 18 Pro</a>.  To the point where it trumps the Z Fold 8's Snapdragon 8 Elite Gen 5 Chipset for Galaxy in almost every category. But does that still hold true for the iPhone Duo?</p><p>Yes, as it turns out, and you can see the figures below.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Geekbench 7 (single, multi-core)</strong><br /><br /></p></td><td  ><p><strong>3DMark Solar Bay Unlimited</strong></p><p><br /></p></td><td  ><p><strong>Geekbench AI 1.7</strong></p></td></tr><tr><td class="firstcol " ><p><strong>iPhone Duo </strong></p></td><td  ><p>4,007 / 11,363</p></td><td  ><p>62.3 fps / 16,496</p></td><td  ><p>69,438</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8</strong></p></td><td  ><p>2,978 / 9,811</p></td><td  ><p>47.35 fps / 12,454</p></td><td  ><p>72,242</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 18 Pro</strong></p></td><td  ><p>4,022 / 11,543</p></td><td  ><p>61.93 fps / 16,288</p></td><td  ><p>69,245 </p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 18 Pro Max</strong></p></td><td  ><p>4,025 / 11,525</p></td><td  ><p>67.9 fps / 17,850</p></td><td  ><p>71,974</p></td></tr></tbody></table></div><p>It turns out that, per the benchmarking tests, there isn't a whole lot of <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-full-benchmarks-the-worlds-fastest-foldable-but-how-does-it-stack-up-to-iphone-18-pro">difference in performance on the iPhone Duo</a> compared to the iPhone 18 Pro and iPhone 18 Pro Max. The figures aren't identical, but they do outpace the Z Fold 8 in everything except AI performance.</p><p>Geekbench 7 benchmarks produced scores of 4,007 for a single-core benchmark and 11,363 for multi-core testing — far in excess of the Z Fold 8's 2,978 and 9,811. Similarly 3DMark's Solar Bay Unlimited graphics test came out with a score of 16,496 and an average frame-rate of 62.3 fps. Sadly the Z Fold 8 only managed to produce 12,454 and 47.35 fps.</p><p>AI is a different story, though. The Z Fold 8 scored 72,242 in the Geekbench AI 1.7 test, compared to the Duo's 69,438. This means that on-device AI processing should be slightly better on Samsung's foldable.</p><h2 class="article-body__section" id="section-iphone-duo-vs-samsung-galaxy-z-fold-8-software-ai"><span>iPhone Duo vs. Samsung Galaxy Z Fold 8: Software &amp; AI</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="KSYDGbqfndacsbXn2VzL9N" name="iphone Duo vs. Galaxy Z Fold 8" alt="iphone Duo vs. Galaxy Z Fold 8." src="https://cdn.mos.cms.futurecdn.net/KSYDGbqfndacsbXn2VzL9N-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Apple's made a bunch of major advances in AI this year, thanks to the launch of <a href="https://www.tomsguide.com/phones/iphones/20-smart-ios-27-features-that-will-make-your-life-easier-and-how-to-use-them">iOS 27</a> and <a href="https://www.tomsguide.com/phones/iphones/i-spent-a-week-with-siri-ai-here-are-my-honest-pros-and-cons">Siri AI</a>. This upgraded assistant is capable of performing various different and more complicated tasks, as well as understanding personal context that helps it understand your commands much more easily.</p><p>On top of that, iOS 27 features expressive voices for Siri, more advanced dictation, and AI-powered editing features such as <a href="https://www.tomsguide.com/phones/i-tried-ios-27-clean-up-vs-galaxy-ai-photo-assist-in-a-7-round-test-and-i-was-surprised-with-how-close-it-was">Clean Up</a>, Extend and the unique <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"</a> that lets you adjust the angle of your photos. Outside of features available on other iPhones, the Duo comes with a Smart tracking camera feature, which operates in a similar manner to <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 on the Z Fold 8</a>.</p><p>The Z Fold 8 comes with all the best Galaxy AI features you'll find on every flagship Galaxy phone, plus all the best parts of Google Gemini. This includes <a href="https://www.tomsguide.com/phones/samsung-phones/how-to-turn-on-galaxy-s26s-now-nudge-and-how-it-works">Now Nudge</a>, a context-based tool to resurface relevant information when you need it, Now Brief's regular preparatory reports and the advanced version of Circle to Search that's capable of identifying multiple items at once.</p><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="oty2YzwQZNhensgcK2MQEC" name="Apple iPhone Duo-29" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/oty2YzwQZNhensgcK2MQEC-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>However, the Duo has some drawbacks to its overall UI. The main one is that the taskbar has been pinned to the right side of the screen, with no option to change it — compared to Samsung's traditional bar along the bottom of the phone. </p><p>The Duo's multitasking is also limited to running two apps side by side, and doesn't work as consistently when the phone is in portrait mode. The <a href="https://www.tomsguide.com/phones/iphones/ive-tested-the-galaxy-z-fold-8-and-it-proves-apple-really-needs-to-solve-this-one-thing">Z Fold 8 supports up to three split-screen apps</a> and as many as five floating app windows — giving it the edge for productive multitasking. The Z Fold 8 also supports the <a href="https://www.tomsguide.com/phones/samsung-phones/i-just-tried-the-new-samsung-dex-on-the-galaxy-z-fold-8-and-it-has-one-huge-upgrade">DeX desktop mode</a>, and so far there's no equivalent feature on iPhones.</p><p>Right now it feels like Samsung may have an edge with app optimization too. Apple has done a lot to <a href="https://www.tomsguide.com/phones/iphones/ive-been-testing-dozens-of-iphone-duo-apps-heres-my-top-15-picks-so-far">ensure major apps take advantage of the iPhone Duo's larger screen</a>, but Samsung has a head start of several years — and the fact Android itself runs on a huge number of devices of differing sizes.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5276px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="AieHmWF2DYNhYEc6WiBT4n" name="Samsung DeX on Galaxy Z Flip 8" alt="Samsung DeX on Galaxy Z Flip 8." src="https://cdn.mos.cms.futurecdn.net/AieHmWF2DYNhYEc6WiBT4n-1920-80.jpg" mos="" align="middle" fullscreen="" width="5276" height="2968" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>Only the iPhone Duo offers stylus support, thanks to the Apple Pencil USB-C. Likewise, the Z Fold 8 doesn't fracture Samsung's Flex Mode, which adjusts the UI depending on the angle of the hinge. The Duo does do this, and has<a href="https://www.tomsguide.com/phones/iphones/iphone-duo-modes-explained-6-ways-you-can-use-apples-new-foldable"> multiple different fold states to take advantage of.</a></p><h2 class="article-body__section" id="section-iphone-duo-vs-samsung-galaxy-z-fold-8-battery"><span>iPhone Duo vs. Samsung Galaxy Z Fold 8: Battery</span></h2><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="aKDJfWTz98pAvJTXB3pNLN" name="iphone Duo vs. Galaxy Z Fold 8" alt="iphone Duo vs. Galaxy Z Fold 8." src="https://cdn.mos.cms.futurecdn.net/aKDJfWTz98pAvJTXB3pNLN-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>When it comes to total battery capacity, the iPhone Duo and Galaxy Z Fold 8 are pretty evenly matched. The Duo offers 4,883 mAh of power reserves, while the Z Fold 8 is slightly lower at 4,800 mAh. However the slight difference in capacity has led to very different results in our battery life testing.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>iPhone Duo</strong></p></td><td  ><p><strong>Samsung Galaxy Z Fold 8</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Battery Life (Hrs:Mins)</strong></p></td><td  ><p>13:20</p></td><td  ><p>10:06 (New test)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery Size (mAh)</strong></p></td><td  ><p>4,883</p></td><td  ><p>4,800</p></td></tr><tr><td class="firstcol " ><p><strong>15 minutes</strong></p></td><td  ><p>42%</p></td><td  ><p>43%</p></td></tr><tr><td class="firstcol " ><p><strong>30 minutes</strong></p></td><td  ><p>66%</p></td><td  ><p>70%</p></td></tr><tr><td class="firstcol " ><p><strong>Charge Speed</strong></p></td><td  ><p>60W</p></td><td  ><p>45W</p></td></tr></tbody></table></div><p>The iPhone Duo lasted 13 hours and 20 minutes in a new version of our battery test, which was optimized for the iPhone Duo. In that same test, which ran simultaneously, the Z Fold 8 only lasted 10 hours and six minutes — which is not particularly great in the grand scheme of things.</p><p>Previously the <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-vs-fold-8-ultra-vs-flip-8-battery-tests-silicon-carbon-pays-off">Z Fold 8 has lasted 12hours and 19 minutes</a> in testing, but that's no longer the case — and the current battery life is much lower. However, whichever way you look at it, the iPhone Duo has the clear advantage.</p><p>However, the Z Fold 8 has a slight edge when it comes to charging speed, despite the fact its 45W wired charging is noticeably lower than the iPhone Duo's 60W. The Duo reclaimed 42% battery in 15 minutes, compared to the Z Fold 8's 43%, with both numbers rising to a respective 66% and 70%. </p><p>It's not a huge amount of difference, but if you want to recoup as much power as you can as quickly as possible, the Z Fold 8 actually has Apple beat. Though its wireless charging speed is limited to 20W, compared to the Duo's 25W, and it lacks the internal magnets that facilitate Qi2 or MagSafe chargers and accessories.</p><h2 class="article-body__section" id="section-iphone-duo-vs-samsung-galaxy-z-fold-8-bottom-line"><span>iPhone Duo vs. Samsung Galaxy Z Fold 8: Bottom line</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="sAGeWKGJXCR285UXZNowXb" name="iPhone Duo vs. Galaxy Z Fold 8" alt="iPhone Duo vs. Galaxy Z Fold 8 held in the hand." src="https://cdn.mos.cms.futurecdn.net/sAGeWKGJXCR285UXZNowXb-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>Apple has done great things with the iPhone Duo, and it manages to edge out competition from the Galaxy Z Fold 8 in a number of key areas. The main ones, of course, being battery life, performance, overall camera performance and the fact it has stylus support.</p><p>That said, the Z Fold 8 offers a lot and it feels like it has Apple beat when it comes to AI and software capabilities. Not to mention the fact it's cheaper, thinner and lighter than Apple's foldable, and the anti-glare coating means the colors from the screen really pop compared to the iPhone.</p><p>When deciding between the two, it's going to come down to what you actually want out of a foldable. If you value the software experience above all else, then the Z Fold 8 is going to be the right option for you. But if you like Apple products, and prefer a phone that is physically more capable, then the Duo might be the better option.</p><p>Then again, considering the iPhone Duo is sold out everywhere, and you're going to have to wait at least several weeks before you can actually get your hands on one.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-2-with-face-id-is-reportedly-being-tested-even-before-the-first-foldable-hits-shelves"><strong>Apple iPhone Duo 2 with Face ID is reportedly being tested even before the first foldable hits shelves</strong></a></li><li><a href="https://www.tomsguide.com/phones/iphones/i-put-the-iphone-duo-vs-galaxy-fold-8-through-a-10-round-photo-face-off-heres-the-winner"><strong>I put the iPhone Duo vs. Galaxy Fold 8 through a 10-round photo face-off — and there's a clear winner</strong></a></li><li><a href="https://www.tomsguide.com/phones/iphones/polished-but-rough-the-common-flaws-in-the-iphone-duo-found-by-nine-different-reviewers"><strong>'Polished but rough': The common flaws in the iPhone Duo found by nine different reviewers</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 7 ways the iPhone Duo already beats the Galaxy Z Fold 8 ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Now that I’ve had my hands on the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-review">iPhone Duo</a> and seen what the hype is about, I better understand Apple’s vision for what a foldable phone should be. That matters, since Apple is just entering the market with its first-ever foldable, while Samsung has been refining the category for years.</p><p>While there are still many areas where Samsung is untouchable with its foldables, I’m going to tell you all the ways the iPhone Duo beats 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>. These are without a doubt two of the <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">best foldable phones</a> available, but this matchup is even more compelling because of how much they share —from their prices and designs to their cameras.</p><p>Considering that the iPhone Duo is a first-generation device, I have to give Apple credit for prioritizing the areas where it’s superior to its rival.</p><h2 id="no-glare-and-less-of-a-crease">No glare and less of a crease</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="T6ady39e5KDu4ksmKLUxu" name="Apple iPhone Duo-9" alt="iPhone Duo nearly invisible crease." src="https://cdn.mos.cms.futurecdn.net/T6ady39e5KDu4ksmKLUxu-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Foldable phone makers have long striven to achieve a nearly invisible display crease. While the Z Fold 8 smooths it out to the most subtle Samsung has ever designed, it still doesn't match the iPhone Duo’s implementation.</p><p>Side by side, there’s no comparison, especially because Apple’s anti-reflective nano-texture display coating also dramatically cuts ambient glare. The result is a seam that feels nearly flush under my thumb and fades from view when I watch videos.</p><h2 id="the-apps-are-already-way-better">The apps are already way better</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="wuNoq7PRrLVCmDUEB5xofd" name="iPhone Duo apps-18" alt="iPhone Duo apps" src="https://cdn.mos.cms.futurecdn.net/wuNoq7PRrLVCmDUEB5xofd-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p></p><p>One of the biggest frustrations with the Z Fold 8—shared with other Android foldables—is that many apps still aren't well optimized for larger, tablet-sized screens. Apple again leaves a strong impression, as many of the apps I use make great use of the expanded canvas.</p><p>For example, Instagram spreads out to show a video alongside the comments section simultaneously. My colleague Mark Spoonauer details how several <a href="https://www.tomsguide.com/phones/iphones/ive-been-testing-dozens-of-iphone-duo-apps-heres-my-top-15-picks-so-far">popular apps look across the Duo’s larger footprint</a>.</p><h2 id="yes-apple-has-a-39-flex-mode-39">Yes, Apple has a 'Flex mode'</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="WFPanGnqfTTmqLLzboyopd" name="iPhone Duo apps-10" alt="iPhone Duo apps" src="https://cdn.mos.cms.futurecdn.net/WFPanGnqfTTmqLLzboyopd-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>I was genuinely surprised by the Z Fold 8's stiff hinge, which refuses to stay propped open halfway like a mini laptop. The iPhone Duo doesn't have that problem—and its take on "Flex mode" rearranges UI elements with the polish I expect from Apple.</p><p>Open Netflix with the Duo propped on a flat surface, and the video cleanly snaps to the top panel, while playback controls shift down to the bottom half.</p><h2 id="more-durable-design">More durable 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:2560px;"><p class="vanilla-image-block" style="padding-top:53.28%;"><img id="KixUJtNpzExjyZZcHPyqh4" name="Apple iPhone Duo-35" alt="iPhone Duo side profile." src="https://cdn.mos.cms.futurecdn.net/KixUJtNpzExjyZZcHPyqh4-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1364" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Foldable phones are inherently more fragile than traditional slabs, so it’s reassuring that the iPhone Duo has a more durable build that's not just water-resistant but also dust-resistant.</p><p>That’s thanks to its IP68 rating, compared to the Z Fold 8’s IP48. This gives the iPhone Duo a huge advantage: its chassis is sealed more tightly, preventing fine debris from working its way inside and damaging internal components.</p><h2 id="stronger-performance">Stronger 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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="5cCAmuyZjkQerPrbP7MV93" name="Apple iPhone Duo-11" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/5cCAmuyZjkQerPrbP7MV93-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The Galaxy Z Fold 8 is no slouch, especially since it can run the graphically intensive games I play most. However, Apple’s new <a href="https://www.tomsguide.com/phones/iphones/apple-a20-pro-chip-why-its-such-a-big-deal-for-the-iphone-ultra-and-iphone-18-pro-max">A20 Pro chip</a> operates on an entirely different level, easily <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-full-benchmarks-the-worlds-fastest-foldable-but-how-does-it-stack-up-to-iphone-18-pro">overshadowing its rival's benchmark figures</a>.</p><p>Not only does it handily beat the Z Fold 8 in Geekbench’s single- and multi-core tests, but the A20 Pro also pulls ahead by an even wider margin in sustained graphics workloads. In 3DMark’s Solar Bay Unlimited stress test, the Duo clocked an average frame rate of 62.3 fps compared to the Fold 8’s 47.35 fps — a <strong>massive 32% performance advantage for Apple</strong>.</p><h2 id="longer-battery-life">Longer battery life</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Pcu3MGroVr8WrNFNXGGErB" name="Apple iPhone Duo-22" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/Pcu3MGroVr8WrNFNXGGErB-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Because of their massive main displays, foldables have larger power appetites that put heavy strain on battery cells. Between the two, however, the iPhone Duo delivers noticeably longer endurance.</p><p>What’s surprising is that their packs differ <strong>by only 1.73% in raw capacity</strong> (4,883 mAh on the Duo vs. 4,800 mAh on the Fold 8). Yet, the gap in actual performance is massive. On Tom’s Guide’s custom battery drain test, the <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-battery-life-results-are-in-how-does-it-compare-to-other-foldables">Duo averaged 13 hours and 20 minutes</a>, compared to just 10 hours and 6 minutes for the Z Fold 8. That means Apple’s foldable lasts over 3 hours longer on a single charge, a <strong>32% boost in battery life</strong>.</p><h2 id="apple-pencil-support">Apple Pencil support</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3382px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="4qS4JBhEFqgsqr48uj9FE4" name="Apple Pencil USB-C-2.jpg" alt="Apple Pencil USB-C" src="https://cdn.mos.cms.futurecdn.net/4qS4JBhEFqgsqr48uj9FE4-1920-80.jpg" mos="" align="middle" fullscreen="" width="3382" height="1902" attribution="" endorsement="" class="" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Finally, the iPhone Duo beats the Galaxy Z Fold 8 thanks to the added versatility of <a href="https://www.tomsguide.com/opinion/apple-pencil-usb-c-3-things-i-like-and-3-i-dont">Apple Pencil USB-C</a> support. In pursuing a thinner, lighter chassis, Samsung stripped the digitizer layer from the Fold 8's main display, meaning there’s no S Pen compatibility whatsoever.</p><p>Even though I don’t use a stylus every day, it remains essential for anyone craving a true pen-on-paper feel. The Apple Pencil doesn't just turn the Duo into a capable digital notepad — its low latency and pressure precision also make it an ideal canvas for quick sketches and markups.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ODm30X"></div>                            </div>                            <script src="https://kwizly.com/embed/ODm30X.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/my-iphone-18-pro-max-just-got-delivered-and-i-immediately-regret-the-purchase-and-i-think-iphone-duo-is-to-blame">My iPhone 18 Pro Max just got delivered and I immediately regret the purchase — and I think iPhone Duo is to blame</a></li><li><a href="https://www.tomsguide.com/phones/iphones/ive-waited-5-years-for-the-iphone-duo-here-are-7-reasons-i-decided-not-to-pre-order">I've waited 5 years for the iPhone Duo — here are 7 reasons I decided not to pre-order</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-modes-explained-6-ways-you-can-use-apples-new-foldable">iPhone Duo modes explained — 6 ways you can use Apple's new foldable</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/7-ways-the-iphone-duo-already-beats-the-galaxy-z-fold-8</link>
                                                                            <description>
                            <![CDATA[ After checking out both foldable phones, here are all the ways I think the Apple iPhone Duo beats the Samsung Galaxy Z Fold 8. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">wf9UwSZ4eWgQ3SXYsm3haY</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/ZwGYpo7bW8xGYJ2Q64oDcb-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 24 Oct 2026 04:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ john.velasco@futurenet.com (John Velasco) ]]></author>                    <dc:creator><![CDATA[ John Velasco ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/TSj224oX8d5ERXaDs8pDGd-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/ZwGYpo7bW8xGYJ2Q64oDcb-1920-80.jpg">
                                                            <media:credit><![CDATA[John Velasco / Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPhone Duo vs. Galaxy Z Fold 8 held in the hand.]]></media:description>                                                            <media:text><![CDATA[iPhone Duo vs. Galaxy Z Fold 8 held in the hand.]]></media:text>
                                <media:title type="plain"><![CDATA[iPhone Duo vs. Galaxy Z Fold 8 held in the hand.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/ZwGYpo7bW8xGYJ2Q64oDcb-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Now that I’ve had my hands on the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-review">iPhone Duo</a> and seen what the hype is about, I better understand Apple’s vision for what a foldable phone should be. That matters, since Apple is just entering the market with its first-ever foldable, while Samsung has been refining the category for years.</p><p>While there are still many areas where Samsung is untouchable with its foldables, I’m going to tell you all the ways the iPhone Duo beats 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>. These are without a doubt two of the <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">best foldable phones</a> available, but this matchup is even more compelling because of how much they share —from their prices and designs to their cameras.</p><p>Considering that the iPhone Duo is a first-generation device, I have to give Apple credit for prioritizing the areas where it’s superior to its rival.</p><h2 id="no-glare-and-less-of-a-crease">No glare and less of a crease</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="T6ady39e5KDu4ksmKLUxu" name="Apple iPhone Duo-9" alt="iPhone Duo nearly invisible crease." src="https://cdn.mos.cms.futurecdn.net/T6ady39e5KDu4ksmKLUxu-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Foldable phone makers have long striven to achieve a nearly invisible display crease. While the Z Fold 8 smooths it out to the most subtle Samsung has ever designed, it still doesn't match the iPhone Duo’s implementation.</p><p>Side by side, there’s no comparison, especially because Apple’s anti-reflective nano-texture display coating also dramatically cuts ambient glare. The result is a seam that feels nearly flush under my thumb and fades from view when I watch videos.</p><h2 id="the-apps-are-already-way-better">The apps are already way better</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="wuNoq7PRrLVCmDUEB5xofd" name="iPhone Duo apps-18" alt="iPhone Duo apps" src="https://cdn.mos.cms.futurecdn.net/wuNoq7PRrLVCmDUEB5xofd-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p></p><p>One of the biggest frustrations with the Z Fold 8—shared with other Android foldables—is that many apps still aren't well optimized for larger, tablet-sized screens. Apple again leaves a strong impression, as many of the apps I use make great use of the expanded canvas.</p><p>For example, Instagram spreads out to show a video alongside the comments section simultaneously. My colleague Mark Spoonauer details how several <a href="https://www.tomsguide.com/phones/iphones/ive-been-testing-dozens-of-iphone-duo-apps-heres-my-top-15-picks-so-far">popular apps look across the Duo’s larger footprint</a>.</p><h2 id="yes-apple-has-a-39-flex-mode-39">Yes, Apple has a 'Flex mode'</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="WFPanGnqfTTmqLLzboyopd" name="iPhone Duo apps-10" alt="iPhone Duo apps" src="https://cdn.mos.cms.futurecdn.net/WFPanGnqfTTmqLLzboyopd-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>I was genuinely surprised by the Z Fold 8's stiff hinge, which refuses to stay propped open halfway like a mini laptop. The iPhone Duo doesn't have that problem—and its take on "Flex mode" rearranges UI elements with the polish I expect from Apple.</p><p>Open Netflix with the Duo propped on a flat surface, and the video cleanly snaps to the top panel, while playback controls shift down to the bottom half.</p><h2 id="more-durable-design">More durable 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:2560px;"><p class="vanilla-image-block" style="padding-top:53.28%;"><img id="KixUJtNpzExjyZZcHPyqh4" name="Apple iPhone Duo-35" alt="iPhone Duo side profile." src="https://cdn.mos.cms.futurecdn.net/KixUJtNpzExjyZZcHPyqh4-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1364" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Foldable phones are inherently more fragile than traditional slabs, so it’s reassuring that the iPhone Duo has a more durable build that's not just water-resistant but also dust-resistant.</p><p>That’s thanks to its IP68 rating, compared to the Z Fold 8’s IP48. This gives the iPhone Duo a huge advantage: its chassis is sealed more tightly, preventing fine debris from working its way inside and damaging internal components.</p><h2 id="stronger-performance">Stronger 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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="5cCAmuyZjkQerPrbP7MV93" name="Apple iPhone Duo-11" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/5cCAmuyZjkQerPrbP7MV93-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The Galaxy Z Fold 8 is no slouch, especially since it can run the graphically intensive games I play most. However, Apple’s new <a href="https://www.tomsguide.com/phones/iphones/apple-a20-pro-chip-why-its-such-a-big-deal-for-the-iphone-ultra-and-iphone-18-pro-max">A20 Pro chip</a> operates on an entirely different level, easily <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-full-benchmarks-the-worlds-fastest-foldable-but-how-does-it-stack-up-to-iphone-18-pro">overshadowing its rival's benchmark figures</a>.</p><p>Not only does it handily beat the Z Fold 8 in Geekbench’s single- and multi-core tests, but the A20 Pro also pulls ahead by an even wider margin in sustained graphics workloads. In 3DMark’s Solar Bay Unlimited stress test, the Duo clocked an average frame rate of 62.3 fps compared to the Fold 8’s 47.35 fps — a <strong>massive 32% performance advantage for Apple</strong>.</p><h2 id="longer-battery-life">Longer battery life</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Pcu3MGroVr8WrNFNXGGErB" name="Apple iPhone Duo-22" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/Pcu3MGroVr8WrNFNXGGErB-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Because of their massive main displays, foldables have larger power appetites that put heavy strain on battery cells. Between the two, however, the iPhone Duo delivers noticeably longer endurance.</p><p>What’s surprising is that their packs differ <strong>by only 1.73% in raw capacity</strong> (4,883 mAh on the Duo vs. 4,800 mAh on the Fold 8). Yet, the gap in actual performance is massive. On Tom’s Guide’s custom battery drain test, the <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-battery-life-results-are-in-how-does-it-compare-to-other-foldables">Duo averaged 13 hours and 20 minutes</a>, compared to just 10 hours and 6 minutes for the Z Fold 8. That means Apple’s foldable lasts over 3 hours longer on a single charge, a <strong>32% boost in battery life</strong>.</p><h2 id="apple-pencil-support">Apple Pencil support</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3382px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="4qS4JBhEFqgsqr48uj9FE4" name="Apple Pencil USB-C-2.jpg" alt="Apple Pencil USB-C" src="https://cdn.mos.cms.futurecdn.net/4qS4JBhEFqgsqr48uj9FE4-1920-80.jpg" mos="" align="middle" fullscreen="" width="3382" height="1902" attribution="" endorsement="" class="" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Finally, the iPhone Duo beats the Galaxy Z Fold 8 thanks to the added versatility of <a href="https://www.tomsguide.com/opinion/apple-pencil-usb-c-3-things-i-like-and-3-i-dont">Apple Pencil USB-C</a> support. In pursuing a thinner, lighter chassis, Samsung stripped the digitizer layer from the Fold 8's main display, meaning there’s no S Pen compatibility whatsoever.</p><p>Even though I don’t use a stylus every day, it remains essential for anyone craving a true pen-on-paper feel. The Apple Pencil doesn't just turn the Duo into a capable digital notepad — its low latency and pressure precision also make it an ideal canvas for quick sketches and markups.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ODm30X"></div>                            </div>                            <script src="https://kwizly.com/embed/ODm30X.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/my-iphone-18-pro-max-just-got-delivered-and-i-immediately-regret-the-purchase-and-i-think-iphone-duo-is-to-blame">My iPhone 18 Pro Max just got delivered and I immediately regret the purchase — and I think iPhone Duo is to blame</a></li><li><a href="https://www.tomsguide.com/phones/iphones/ive-waited-5-years-for-the-iphone-duo-here-are-7-reasons-i-decided-not-to-pre-order">I've waited 5 years for the iPhone Duo — here are 7 reasons I decided not to pre-order</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-modes-explained-6-ways-you-can-use-apples-new-foldable">iPhone Duo modes explained — 6 ways you can use Apple's new foldable</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Samsung Galaxy S27 Ultra batteries leak — here's what we know ]]></title>
                                                                                                <dc:content><![CDATA[ <p>With the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-review">iPhone Duo</a> launch now out of the way, it's time to start looking forward to some of the phones headed our way in the near future — into 2027 and beyond. The next big release we're expecting is the Samsung Galaxy S27, and the latest leak may have revealed what batteries to expect from two of the four upcoming models.</p><p>That's right, four models, because rumor has it that Samsung will be releasing a <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-pro-could-finally-be-the-smaller-ultra-phone-ive-been-waiting-for-heres-how">new Galaxy S27 Pro. </a>Presumably this is a device that will sit between the Plus and the Ultra models, though we'll have to wait and see just what Samsung has planned. This new battery leak covers the mysterious Pro and the flagship Galaxy S27 Ultra.</p><p>Two batteries have just shown up on the<a href="https://www.safetykorea.kr/release/certDetail" target="_blank"> Safety Korea database</a>, alongside photos, featuring the model numbers EB-BS957CBY and EB-BS958DBY. This lines up with the SM-S957 and SM-S958 model numbers tied to the S27 Pro and Ultra, suggesting these are the batteries we'll see in next year's high-end Galaxy phones.</p><p>We can't quite see the capacities, but <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-ultra-leak-reveals-silicon-carbon-battery-leap-but-also-a-camera-downgrade">past leaks suggest that we'll see 5,534 mAh and 5,087 mAh batteries, </a>with typical capacities of 5,700 mAh and 5,200 mAh, respectively. If those figures are accurate, it means this is the first time the Ultra model has had a battery capacity upgrade since the release of the <a href="https://www.tomsguide.com/reviews/galaxy-s20-ultra">Galaxy S20 Ultra </a>almost seven years ago. Charging is said to be 60W on both, which is the same as the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review">Galaxy S26 Ultra</a>.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eAGKMO"></div>                            </div>                            <script src="https://kwizly.com/embed/eAGKMO.js" async=""></script><h2 id="this-is-a-long-time-coming">This is a long time coming</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="LacgYzjqWKVkFAs6DKZ3ak" name="S27 Ultra render" alt="Samsung Galaxy S27 Ultra render" src="https://cdn.mos.cms.futurecdn.net/LacgYzjqWKVkFAs6DKZ3ak-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: @TechHome100)</span></figcaption></figure><p>For those that don't remember, the Galaxy S20 Ultra was the first of Samsung's modern Ultra phones, and it came with a 5,000 mAh battery — up from 4,100 mAh on the <a href="https://www.tomsguide.com/us/galaxy-s10-plus,review-6210.html">Galaxy S10 Plus.</a> This 700 mAh upgrade effectively means that the S27 Ultra is shaping up for an extra 100 mAh for every year Samsung ignored the calls for higher battery capacity.</p><div><blockquote><p>This 700 mAh upgrade effectively means that the S27 Ultra is shaping up for an extra 100 mAh for every year Samsung ignored the calls for higher battery capacity.</p></blockquote></div><p>Presumably this increase in capacity will be aided by Samsung's recent push into <a href="https://www.tomsguide.com/phones/i-interviewed-honor-and-oneplus-about-their-silicon-carbon-battery-tech-apple-and-google-are-quickly-falling-behind">silicon carbon battery technology</a>. As we saw with the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Galaxy Z Fold 8</a>, the different battery chemistry allows phone makers to improve battery density — packing more power into the same amount of space.</p><p>The batteries pictured don't look particularly big, which lends some support to that theory. Plus, the Z Fold 8 managed to adopt the new batteries without issue, and it makes little sense to avoid rolling silicon carbon out to other premium Samsung phones.</p><p>The Galaxy S27 series is expected to launch in early 2027, with rumors suggesting Samsung may pivot back to a January launch window. In the meantime we'll be seeing a lot more rumors about what all four phones can do, so stay tuned to Tom's Guide to hear all the best news and rumors as we hear about them.</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-put-the-iphone-duo-vs-galaxy-fold-8-through-a-10-round-photo-face-off-heres-the-winner">I put the iPhone Duo vs. Galaxy Fold 8 through a 10-round photo face-off — here’s the winner</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-full-benchmarks-the-worlds-fastest-foldable-but-how-does-it-stack-up-to-iphone-18-pro">iPhone Duo full benchmarks — the world's fastest foldable, but how does it stack up to iPhone 18 Pro?</a></li><li><a href="https://www.tomsguide.com/phones/iphones/ive-been-testing-dozens-of-iphone-duo-apps-heres-my-top-15-picks-so-far">I’ve been testing dozens of iPhone Duo apps — here’s my top 15 picks so far</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-ultra-batteries-leak-heres-what-we-know</link>
                                                                            <description>
                            <![CDATA[ Samsung may finally give Galaxy owners what they're been asking for — a proper battery upgrade in the Galaxy S27 Ultra. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">m2QqtVfW8EW6EoR3h3neoB</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/EKbAbDHJQJnhBVmx9jUbiC-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 23 Oct 2026 10:38:52 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/EKbAbDHJQJnhBVmx9jUbiC-1920-80.jpg">
                                                            <media:credit><![CDATA[Ice Universe]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Galaxy S27 Ultra render]]></media:description>                                                            <media:text><![CDATA[Galaxy S27 Ultra render]]></media:text>
                                <media:title type="plain"><![CDATA[Galaxy S27 Ultra render]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/EKbAbDHJQJnhBVmx9jUbiC-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>With the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-review">iPhone Duo</a> launch now out of the way, it's time to start looking forward to some of the phones headed our way in the near future — into 2027 and beyond. The next big release we're expecting is the Samsung Galaxy S27, and the latest leak may have revealed what batteries to expect from two of the four upcoming models.</p><p>That's right, four models, because rumor has it that Samsung will be releasing a <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-pro-could-finally-be-the-smaller-ultra-phone-ive-been-waiting-for-heres-how">new Galaxy S27 Pro. </a>Presumably this is a device that will sit between the Plus and the Ultra models, though we'll have to wait and see just what Samsung has planned. This new battery leak covers the mysterious Pro and the flagship Galaxy S27 Ultra.</p><p>Two batteries have just shown up on the<a href="https://www.safetykorea.kr/release/certDetail" target="_blank"> Safety Korea database</a>, alongside photos, featuring the model numbers EB-BS957CBY and EB-BS958DBY. This lines up with the SM-S957 and SM-S958 model numbers tied to the S27 Pro and Ultra, suggesting these are the batteries we'll see in next year's high-end Galaxy phones.</p><p>We can't quite see the capacities, but <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-ultra-leak-reveals-silicon-carbon-battery-leap-but-also-a-camera-downgrade">past leaks suggest that we'll see 5,534 mAh and 5,087 mAh batteries, </a>with typical capacities of 5,700 mAh and 5,200 mAh, respectively. If those figures are accurate, it means this is the first time the Ultra model has had a battery capacity upgrade since the release of the <a href="https://www.tomsguide.com/reviews/galaxy-s20-ultra">Galaxy S20 Ultra </a>almost seven years ago. Charging is said to be 60W on both, which is the same as the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review">Galaxy S26 Ultra</a>.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eAGKMO"></div>                            </div>                            <script src="https://kwizly.com/embed/eAGKMO.js" async=""></script><h2 id="this-is-a-long-time-coming">This is a long time coming</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="LacgYzjqWKVkFAs6DKZ3ak" name="S27 Ultra render" alt="Samsung Galaxy S27 Ultra render" src="https://cdn.mos.cms.futurecdn.net/LacgYzjqWKVkFAs6DKZ3ak-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: @TechHome100)</span></figcaption></figure><p>For those that don't remember, the Galaxy S20 Ultra was the first of Samsung's modern Ultra phones, and it came with a 5,000 mAh battery — up from 4,100 mAh on the <a href="https://www.tomsguide.com/us/galaxy-s10-plus,review-6210.html">Galaxy S10 Plus.</a> This 700 mAh upgrade effectively means that the S27 Ultra is shaping up for an extra 100 mAh for every year Samsung ignored the calls for higher battery capacity.</p><div><blockquote><p>This 700 mAh upgrade effectively means that the S27 Ultra is shaping up for an extra 100 mAh for every year Samsung ignored the calls for higher battery capacity.</p></blockquote></div><p>Presumably this increase in capacity will be aided by Samsung's recent push into <a href="https://www.tomsguide.com/phones/i-interviewed-honor-and-oneplus-about-their-silicon-carbon-battery-tech-apple-and-google-are-quickly-falling-behind">silicon carbon battery technology</a>. As we saw with the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Galaxy Z Fold 8</a>, the different battery chemistry allows phone makers to improve battery density — packing more power into the same amount of space.</p><p>The batteries pictured don't look particularly big, which lends some support to that theory. Plus, the Z Fold 8 managed to adopt the new batteries without issue, and it makes little sense to avoid rolling silicon carbon out to other premium Samsung phones.</p><p>The Galaxy S27 series is expected to launch in early 2027, with rumors suggesting Samsung may pivot back to a January launch window. In the meantime we'll be seeing a lot more rumors about what all four phones can do, so stay tuned to Tom's Guide to hear all the best news and rumors as we hear about them.</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-put-the-iphone-duo-vs-galaxy-fold-8-through-a-10-round-photo-face-off-heres-the-winner">I put the iPhone Duo vs. Galaxy Fold 8 through a 10-round photo face-off — here’s the winner</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-full-benchmarks-the-worlds-fastest-foldable-but-how-does-it-stack-up-to-iphone-18-pro">iPhone Duo full benchmarks — the world's fastest foldable, but how does it stack up to iPhone 18 Pro?</a></li><li><a href="https://www.tomsguide.com/phones/iphones/ive-been-testing-dozens-of-iphone-duo-apps-heres-my-top-15-picks-so-far">I’ve been testing dozens of iPhone Duo apps — here’s my top 15 picks so far</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I put the iPhone Duo vs. Galaxy Fold 8 through a 10-round photo face-off — and there's a clear winner ]]></title>
                                                                                                <dc:content><![CDATA[ <p>​Two of the <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">best foldable phones</a> are on a collision course to determine which is superior. But before my colleagues and I can definitively crown a champion, I’m taking a close look at how the <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-vs-samsung-galaxy-z-fold-8-which-foldable-is-best-for-you">iPhone Duo and Galaxy Z Fold 8</a> cameras stack up against one another. Seeing as both handsets feature evenly matched dual rear camera systems, imaging performance will likely be the deciding factor for anyone considering either device.</p><p>​The <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-review">iPhone Duo </a>features a dual 48MP rear camera array supplemented by a 12MP selfie camera on the outer cover screen and an under-display sensor on the inner folding display. Meanwhile, the Galaxy Z Fold 8 packs an equally formidable dual 50MP rear camera system alongside matching 10MP selfie cameras on both its inner and outer displays.</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/pbWV4A3i7kE" allowfullscreen=""></iframe></div></div><p>​It’s worth noting that unlike the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-and-pro-max-review">iPhone 18 Pro and iPhone 18 Pro Max</a>, the Duo lacks Apple’s <a href="https://www.tomsguide.com/phones/iphones/forget-variable-aperture-the-real-upgrade-with-the-iphone-18-pro-max-is-pro-controls">Pro Controls</a>, denying users the granular adjustments that serious photographers crave — such as manual shutter speed, ISO, white balance, and manual focus. In contrast, Samsung provides comprehensive manual shooting controls right out of the box. For this photo face-off, however, I’m strictly judging the final image quality and processing each phone delivers.</p><h2 class="article-body__section" id="section-iphone-duo-vs-galaxy-fold-8-camera-face-off-daytime"><span>iPhone Duo vs. Galaxy Fold 8 camera face-off: Daytime</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/8PJ7sB99qN5Ty3fRv8WrF5-1920-80.jpg" alt="Apple iPhone Duo camera sample." /><figcaption>Apple iPhone Duo.<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/XKevGvw6RTdfzyr6JAC9RN-1920-80.jpg" alt="Samsung Galaxy Z Fold 8 camera sample." /><figcaption>Samsung Galaxy Z Fold 8.<small role="credit">Future</small></figcaption></figure></figure><p>​First up, let’s look at the perspective shots of the building above to see how their main cameras handle daytime conditions. At first glance, the iPhone Duo immediately catches my eye with its stronger contrast, which gives the brickwork across the facade noticeable pop and definition.</p><p>​Punching in closer, both phones resolve excellent detail — even the signage along the leftmost windows of the middle building remains crisp and legible on each. Across the entire frame, however, the iPhone Duo retains a bit more edge sharpness and micro-contrast.</p><p><strong>Winner: </strong>iPhone Duo</p><h2 class="article-body__section" id="section-iphone-duo-vs-galaxy-fold-8-camera-face-off-dynamic-range"><span>iPhone Duo vs. Galaxy Fold 8 camera face-off: Dynamic range</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/gTUemcBxi7r8jBZnVoe6D5-1920-80.jpg" alt="Apple iPhone Duo camera sample." /><figcaption>Apple iPhone Duo.<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/kLGwF95JybWunV2z2DwuLN-1920-80.jpg" alt="Samsung Galaxy Z Fold 8 camera sample." /><figcaption>Samsung Galaxy Z Fold 8.<small role="credit">Future</small></figcaption></figure></figure><p>​With harsh afternoon sunlight washing over the New York Public Library and the surrounding skyscrapers, it’s clear which phone commands the wider dynamic range. While you could argue that the Galaxy Z Fold 8’s high contrast creates a punchy, dramatic aesthetic, the iPhone Duo does a significantly better job balancing exposure across harsh highlights and deep shadows.</p><p>​The Duo lifts the foreground without blowing out the sky, making it easy to discern fine carving on the fountain to the right, while preserving natural highlight detail in the tree foliage framing the left side.</p><p><strong>Winner:</strong> iPhone Duo</p><h2 class="article-body__section" id="section-iphone-duo-vs-galaxy-fold-8-camera-face-off-ultrawide"><span>iPhone Duo vs. Galaxy Fold 8 camera face-off: Ultrawide</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/7c3NibGTae9fNAhbnA5v75-1920-80.jpg" alt="Apple iPhone Duo camera sample." /><figcaption>Apple iPhone Duo.<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/TLFWErp7kXbQPfxpNgwBHN-1920-80.jpg" alt="Samsung Galaxy Z Fold 8 camera sample." /><figcaption>Samsung Galaxy Z Fold 8.<small role="credit">Future</small></figcaption></figure></figure><p>After polling my colleagues in the office on which ultrawide shot was better, picking a clear winner sparked genuine debate. Many initially favored the Galaxy Z Fold 8 for its brighter exposure and punchier, more saturated colors. However, upon closer side-by-side inspection, the iPhone Duo’s edge-to-edge sharpness and superior contrast prompted several people to reconsider.</p><p>​Personally, I lean toward the dramatic tone of the iPhone Duo, even though it doesn't lift shadow areas as aggressively as the Galaxy Z Fold 8. Ultimately, this round boils down to personal taste: Samsung's crowd-pleasing vibrancy versus Apple's refined contrast and clarity.</p><p><strong>Winner: </strong>tie</p><h2 class="article-body__section" id="section-iphone-duo-vs-galaxy-fold-8-camera-face-off-colors"><span>iPhone Duo vs. Galaxy Fold 8 camera face-off: Colors</span></h2><iframe allow="" height="420" 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=0629460e-cccb-11f1-ba1b-0e6f42328d7d"></iframe><p>​Inside Whole Foods overlooking the floral department, one immediate difference stands out: the iPhone Duo’s ability to deliver rich, punchy colors without clipping highlight details.</p><p>​Both cameras produce richly saturated tones, but the Galaxy Z Fold 8 tends to lift shadows too aggressively, leading to noticeable color bleeding and smearing when punching in on dense arrangements. Looking closely at the white flower petals throughout the scene, the iPhone Duo renders much tighter contrast and balanced exposure, preserving delicate petal textures that get washed out on Samsung’s shot.</p><p><strong>Winner:</strong> iPhone Duo</p><h2 class="article-body__section" id="section-iphone-duo-vs-galaxy-fold-8-camera-face-off-macro"><span>iPhone Duo vs. Galaxy Fold 8 camera face-off: Macro</span></h2><iframe allow="" height="420" 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=dbfb2194-cccb-11f1-ba1b-0e6f42328d7d"></iframe><p>​Almost immediately, I’m drawn to the Galaxy Z Fold 8’s macro capture of a bright orange Zinnia. The flower's petals take on a vibrant, iridescent sheen that pops off the screen, while the sensor resolves delicate textures like the finely fringed edges of each petal with crisp precision.</p><p>​Don't get me wrong: the iPhone Duo’s capture remains impressively sharp, but it lacks the visual punch found in Samsung’s rendering.</p><p><strong>Winner:</strong> Galaxy Z Fold 8</p><h2 class="article-body__section" id="section-iphone-duo-vs-galaxy-fold-8-camera-face-off-inner-screen-selfie"><span>iPhone Duo vs. Galaxy Fold 8 camera face-off: Inner screen selfie</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/QPzJBp8FhgHsobZpqnFxth-1920-80.jpg" alt="iPhone Duo vs Galaxy Z Fold 8" /><figcaption>iPhone Duo – Inside camera selfie<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/m4hCar5k8MMEqubJ93Lnvh-1920-80.jpg" alt="iPhone Duo vs Galaxy Z Fold 8" /><figcaption>Galaxy Z Fold 8 – Inside camera selfie<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>​You have several ways to take a selfie on both foldables, but using their inner folding screens should strictly be a last resort. Because these under-display and pinhole shooters are engineered primarily for video calls, they yield the softest captures of the bunch.</p><p>​Evaluating the test shots my colleague Mark captured on each handset makes picking a decisive winner tricky, as both frames lack sharpness. Still, the edge goes to the iPhone Duo for delivering better overall contrast and avoiding the blown-out, overexposed skin tones visible in Samsung's capture.</p><p><strong>Winner:</strong> iPhone Duo</p><h2 class="article-body__section" id="section-iphone-duo-vs-galaxy-fold-8-camera-face-off-outer-screen-selfie"><span>iPhone Duo vs. Galaxy Fold 8 camera face-off: Outer screen selfie</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/PRu2dGwGnzt4nVko3pVbD5-1920-80.jpg" alt="Apple iPhone Duo camera sample." /><figcaption>Apple iPhone Duo.<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/j36fUVNswUVm4ixAkJQA9N-1920-80.jpg" alt="Samsung Galaxy Z Fold 8 camera sample." /><figcaption>Samsung Galaxy Z Fold 8.<small role="credit">Future</small></figcaption></figure></figure><p>​Switching over to their cover screen selfie cameras, the gap between the two widens noticeably. The iPhone Duo produces a visibly sharper image that resolves finer facial detail on Mark, while metering a far more balanced, true-to-life exposure across his skin. The Galaxy Z Fold 8 still delivers a respectable shot, but it sits a distinct step behind Apple’s rendering.</p><p><strong>Winner:</strong> iPhone Duo</p><h2 class="article-body__section" id="section-iphone-duo-vs-galaxy-fold-8-camera-face-off-portrait"><span>iPhone Duo vs. Galaxy Fold 8 camera face-off: Portrait</span></h2><iframe allow="" height="420" 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=9b8866ee-cccb-11f1-ba1b-0e6f42328d7d"></iframe><p>What jumps out at me right away is the sheer intensity of the iPhone Duo’s artificial bokeh, which ends up looking unnatural. While you can dial down the blur intensity in post, the Galaxy Z Fold 8 clearly delivers a more convincing, true-to-life depth effect at its default setting.</p><p>​Despite that aggressive blur, the iPhone Duo captures far more fine detail — from the distinct woven texture of Mark’s collared shirt to the clean, natural blur transition around the edges of his face. In comparison, the Galaxy Z Fold 8 doesn't have nearly as much edge definition, while also leaving his skin tone looking somewhat flat and muted.</p><p><strong>Winner:</strong> iPhone Duo</p><h2 class="article-body__section" id="section-iphone-duo-vs-galaxy-fold-8-camera-face-off-zoom"><span>iPhone Duo vs. Galaxy Fold 8 camera face-off: Zoom</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/BU3mHs3biHpN9XYhPg9vo4-1920-80.jpg" alt="Apple iPhone Duo camera sample." /><figcaption>Apple iPhone Duo.<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/88qxjmNwUPtzJ5c6ysjBxM-1920-80.jpg" alt="Samsung Galaxy Z Fold 8 camera sample." /><figcaption>Samsung Galaxy Z Fold 8.<small role="credit">Future</small></figcaption></figure></figure><p>​Both phones rely solely on in-sensor cropping from their primary cameras for zoom duties, maxing out at 10x digital zoom. Pushing them to that extreme, it quickly becomes evident which handset's processing algorithms handle heavy digital magnification better.</p><p>​At 10x zoom, the Galaxy Z Fold 8 yields a noticeably cleaner, sharper image — I can easily read the fine menu text posted underneath the hot dog stand umbrella. In comparison, the iPhone Duo fails to resolve the same degree of clarity, resulting in a noisier shot with grainy artifacts.</p><p><strong>Winner:</strong> Galaxy Z Fold 8</p><h2 class="article-body__section" id="section-iphone-duo-vs-galaxy-fold-8-camera-face-off-low-light"><span>iPhone Duo vs. Galaxy Fold 8 camera face-off: Low Light</span></h2><iframe allow="" height="420" 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=fa287ed2-cccb-11f1-ba1b-0e6f42328d7d"></iframe><p>​Both main cameras navigate tricky low-light situations with relative ease, but one clearly pulls ahead under close inspection. Most notably, the iPhone Duo renders a visibly sharper image across the frame — preserving delicate vein textures on the plant's leaves and sharp definition in the planter's decorative eyelashes. The Galaxy Z Fold 8 holds its own by general smartphone standards, but its output is noticeably softer overall.</p><p><strong>Winner: </strong>iPhone Duo</p><h2 class="article-body__section" id="section-iphone-duo-vs-galaxy-fold-8-camera-face-off-verdict"><span>iPhone Duo vs. Galaxy Fold 8 camera face-off: 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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="XFKbuFCrTXVaBW6PPtRobb" name="iPhone Duo vs. Galaxy Z Fold 8" alt="iPhone Duo vs. Galaxy Z Fold 8 held in the hand." src="https://cdn.mos.cms.futurecdn.net/XFKbuFCrTXVaBW6PPtRobb-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>​This camera face-off turned out to be a one-sided affair after tallying up all 10 rounds, with the iPhone Duo sweeping an overwhelming number of categories. If pure image quality and consistency matter most to you, the Duo delivers noticeably superior straight-out-of-the-camera results across nearly every scenario. While it struggles against the Galaxy Z Fold 8 at extreme digital zoom levels, its primary camera proves far better at resolving fine detail and balancing challenging lighting conditions.</p><p>​That doesn't mean the Galaxy Z Fold 8 is a complete wash. The margins across several rounds remained razor-thin, with a couple coming down to personal preference. While it may lack the tack-sharp definition and refined dynamic range of its rival, Samsung still offers a more versatile suite of pro shooting controls and manual tools out of the box.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OLYM6X"></div>                            </div>                            <script src="https://kwizly.com/embed/OLYM6X.js" async=""></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/i-disabled-these-ios-27-features-and-my-iphone-feels-responsive-again"><strong>I disabled these iOS 27 features and my iPhone finally feels responsive again</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-ask-our-foldable-phone-experts-anything"><strong>iPhone Duo Live Q&amp;A: I spent a week with Apple's foldable and can answer ALL your questions</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/ive-waited-5-years-for-the-iphone-duo-here-are-7-reasons-i-decided-not-to-pre-order"><strong>I've waited 5 years for the iPhone Duo — here are 7 reasons I decided not to pre-order</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/i-put-the-iphone-duo-vs-galaxy-fold-8-through-a-10-round-photo-face-off-heres-the-winner</link>
                                                                            <description>
                            <![CDATA[ In this head-to-head matchup, we put the iPhone Duo and Galaxy Z Fold 8 through a 10-round photo face-off to see which is the better camera phone. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">yNqBgPJ4Da7Rem6JkAA97a</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/ShwYoKE8tnY5EK6BebD3Yb-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 22 Oct 2026 04:00:00 +0000</pubDate>                                                                                                                                <updated>Thu, 22 Oct 2026 21:09:05 +0000</updated>
                                                                                                                                            <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ john.velasco@futurenet.com (John Velasco) ]]></author>                    <dc:creator><![CDATA[ John Velasco ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/TSj224oX8d5ERXaDs8pDGd-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/ShwYoKE8tnY5EK6BebD3Yb-1920-80.jpg">
                                                            <media:credit><![CDATA[John Velasco / Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPhone Duo vs. Galaxy Z Fold 8 held in the hand.]]></media:description>                                                            <media:text><![CDATA[iPhone Duo vs. Galaxy Z Fold 8 held in the hand.]]></media:text>
                                <media:title type="plain"><![CDATA[iPhone Duo vs. Galaxy Z Fold 8 held in the hand.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/ShwYoKE8tnY5EK6BebD3Yb-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>​Two of the <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">best foldable phones</a> are on a collision course to determine which is superior. But before my colleagues and I can definitively crown a champion, I’m taking a close look at how the <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-vs-samsung-galaxy-z-fold-8-which-foldable-is-best-for-you">iPhone Duo and Galaxy Z Fold 8</a> cameras stack up against one another. Seeing as both handsets feature evenly matched dual rear camera systems, imaging performance will likely be the deciding factor for anyone considering either device.</p><p>​The <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-review">iPhone Duo </a>features a dual 48MP rear camera array supplemented by a 12MP selfie camera on the outer cover screen and an under-display sensor on the inner folding display. Meanwhile, the Galaxy Z Fold 8 packs an equally formidable dual 50MP rear camera system alongside matching 10MP selfie cameras on both its inner and outer displays.</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/pbWV4A3i7kE" allowfullscreen=""></iframe></div></div><p>​It’s worth noting that unlike the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-and-pro-max-review">iPhone 18 Pro and iPhone 18 Pro Max</a>, the Duo lacks Apple’s <a href="https://www.tomsguide.com/phones/iphones/forget-variable-aperture-the-real-upgrade-with-the-iphone-18-pro-max-is-pro-controls">Pro Controls</a>, denying users the granular adjustments that serious photographers crave — such as manual shutter speed, ISO, white balance, and manual focus. In contrast, Samsung provides comprehensive manual shooting controls right out of the box. For this photo face-off, however, I’m strictly judging the final image quality and processing each phone delivers.</p><h2 class="article-body__section" id="section-iphone-duo-vs-galaxy-fold-8-camera-face-off-daytime"><span>iPhone Duo vs. Galaxy Fold 8 camera face-off: Daytime</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/8PJ7sB99qN5Ty3fRv8WrF5-1920-80.jpg" alt="Apple iPhone Duo camera sample." /><figcaption>Apple iPhone Duo.<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/XKevGvw6RTdfzyr6JAC9RN-1920-80.jpg" alt="Samsung Galaxy Z Fold 8 camera sample." /><figcaption>Samsung Galaxy Z Fold 8.<small role="credit">Future</small></figcaption></figure></figure><p>​First up, let’s look at the perspective shots of the building above to see how their main cameras handle daytime conditions. At first glance, the iPhone Duo immediately catches my eye with its stronger contrast, which gives the brickwork across the facade noticeable pop and definition.</p><p>​Punching in closer, both phones resolve excellent detail — even the signage along the leftmost windows of the middle building remains crisp and legible on each. Across the entire frame, however, the iPhone Duo retains a bit more edge sharpness and micro-contrast.</p><p><strong>Winner: </strong>iPhone Duo</p><h2 class="article-body__section" id="section-iphone-duo-vs-galaxy-fold-8-camera-face-off-dynamic-range"><span>iPhone Duo vs. Galaxy Fold 8 camera face-off: Dynamic range</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/gTUemcBxi7r8jBZnVoe6D5-1920-80.jpg" alt="Apple iPhone Duo camera sample." /><figcaption>Apple iPhone Duo.<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/kLGwF95JybWunV2z2DwuLN-1920-80.jpg" alt="Samsung Galaxy Z Fold 8 camera sample." /><figcaption>Samsung Galaxy Z Fold 8.<small role="credit">Future</small></figcaption></figure></figure><p>​With harsh afternoon sunlight washing over the New York Public Library and the surrounding skyscrapers, it’s clear which phone commands the wider dynamic range. While you could argue that the Galaxy Z Fold 8’s high contrast creates a punchy, dramatic aesthetic, the iPhone Duo does a significantly better job balancing exposure across harsh highlights and deep shadows.</p><p>​The Duo lifts the foreground without blowing out the sky, making it easy to discern fine carving on the fountain to the right, while preserving natural highlight detail in the tree foliage framing the left side.</p><p><strong>Winner:</strong> iPhone Duo</p><h2 class="article-body__section" id="section-iphone-duo-vs-galaxy-fold-8-camera-face-off-ultrawide"><span>iPhone Duo vs. Galaxy Fold 8 camera face-off: Ultrawide</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/7c3NibGTae9fNAhbnA5v75-1920-80.jpg" alt="Apple iPhone Duo camera sample." /><figcaption>Apple iPhone Duo.<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/TLFWErp7kXbQPfxpNgwBHN-1920-80.jpg" alt="Samsung Galaxy Z Fold 8 camera sample." /><figcaption>Samsung Galaxy Z Fold 8.<small role="credit">Future</small></figcaption></figure></figure><p>After polling my colleagues in the office on which ultrawide shot was better, picking a clear winner sparked genuine debate. Many initially favored the Galaxy Z Fold 8 for its brighter exposure and punchier, more saturated colors. However, upon closer side-by-side inspection, the iPhone Duo’s edge-to-edge sharpness and superior contrast prompted several people to reconsider.</p><p>​Personally, I lean toward the dramatic tone of the iPhone Duo, even though it doesn't lift shadow areas as aggressively as the Galaxy Z Fold 8. Ultimately, this round boils down to personal taste: Samsung's crowd-pleasing vibrancy versus Apple's refined contrast and clarity.</p><p><strong>Winner: </strong>tie</p><h2 class="article-body__section" id="section-iphone-duo-vs-galaxy-fold-8-camera-face-off-colors"><span>iPhone Duo vs. Galaxy Fold 8 camera face-off: Colors</span></h2><iframe allow="" height="420" 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=0629460e-cccb-11f1-ba1b-0e6f42328d7d"></iframe><p>​Inside Whole Foods overlooking the floral department, one immediate difference stands out: the iPhone Duo’s ability to deliver rich, punchy colors without clipping highlight details.</p><p>​Both cameras produce richly saturated tones, but the Galaxy Z Fold 8 tends to lift shadows too aggressively, leading to noticeable color bleeding and smearing when punching in on dense arrangements. Looking closely at the white flower petals throughout the scene, the iPhone Duo renders much tighter contrast and balanced exposure, preserving delicate petal textures that get washed out on Samsung’s shot.</p><p><strong>Winner:</strong> iPhone Duo</p><h2 class="article-body__section" id="section-iphone-duo-vs-galaxy-fold-8-camera-face-off-macro"><span>iPhone Duo vs. Galaxy Fold 8 camera face-off: Macro</span></h2><iframe allow="" height="420" 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=dbfb2194-cccb-11f1-ba1b-0e6f42328d7d"></iframe><p>​Almost immediately, I’m drawn to the Galaxy Z Fold 8’s macro capture of a bright orange Zinnia. The flower's petals take on a vibrant, iridescent sheen that pops off the screen, while the sensor resolves delicate textures like the finely fringed edges of each petal with crisp precision.</p><p>​Don't get me wrong: the iPhone Duo’s capture remains impressively sharp, but it lacks the visual punch found in Samsung’s rendering.</p><p><strong>Winner:</strong> Galaxy Z Fold 8</p><h2 class="article-body__section" id="section-iphone-duo-vs-galaxy-fold-8-camera-face-off-inner-screen-selfie"><span>iPhone Duo vs. Galaxy Fold 8 camera face-off: Inner screen selfie</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/QPzJBp8FhgHsobZpqnFxth-1920-80.jpg" alt="iPhone Duo vs Galaxy Z Fold 8" /><figcaption>iPhone Duo – Inside camera selfie<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/m4hCar5k8MMEqubJ93Lnvh-1920-80.jpg" alt="iPhone Duo vs Galaxy Z Fold 8" /><figcaption>Galaxy Z Fold 8 – Inside camera selfie<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>​You have several ways to take a selfie on both foldables, but using their inner folding screens should strictly be a last resort. Because these under-display and pinhole shooters are engineered primarily for video calls, they yield the softest captures of the bunch.</p><p>​Evaluating the test shots my colleague Mark captured on each handset makes picking a decisive winner tricky, as both frames lack sharpness. Still, the edge goes to the iPhone Duo for delivering better overall contrast and avoiding the blown-out, overexposed skin tones visible in Samsung's capture.</p><p><strong>Winner:</strong> iPhone Duo</p><h2 class="article-body__section" id="section-iphone-duo-vs-galaxy-fold-8-camera-face-off-outer-screen-selfie"><span>iPhone Duo vs. Galaxy Fold 8 camera face-off: Outer screen selfie</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/PRu2dGwGnzt4nVko3pVbD5-1920-80.jpg" alt="Apple iPhone Duo camera sample." /><figcaption>Apple iPhone Duo.<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/j36fUVNswUVm4ixAkJQA9N-1920-80.jpg" alt="Samsung Galaxy Z Fold 8 camera sample." /><figcaption>Samsung Galaxy Z Fold 8.<small role="credit">Future</small></figcaption></figure></figure><p>​Switching over to their cover screen selfie cameras, the gap between the two widens noticeably. The iPhone Duo produces a visibly sharper image that resolves finer facial detail on Mark, while metering a far more balanced, true-to-life exposure across his skin. The Galaxy Z Fold 8 still delivers a respectable shot, but it sits a distinct step behind Apple’s rendering.</p><p><strong>Winner:</strong> iPhone Duo</p><h2 class="article-body__section" id="section-iphone-duo-vs-galaxy-fold-8-camera-face-off-portrait"><span>iPhone Duo vs. Galaxy Fold 8 camera face-off: Portrait</span></h2><iframe allow="" height="420" 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=9b8866ee-cccb-11f1-ba1b-0e6f42328d7d"></iframe><p>What jumps out at me right away is the sheer intensity of the iPhone Duo’s artificial bokeh, which ends up looking unnatural. While you can dial down the blur intensity in post, the Galaxy Z Fold 8 clearly delivers a more convincing, true-to-life depth effect at its default setting.</p><p>​Despite that aggressive blur, the iPhone Duo captures far more fine detail — from the distinct woven texture of Mark’s collared shirt to the clean, natural blur transition around the edges of his face. In comparison, the Galaxy Z Fold 8 doesn't have nearly as much edge definition, while also leaving his skin tone looking somewhat flat and muted.</p><p><strong>Winner:</strong> iPhone Duo</p><h2 class="article-body__section" id="section-iphone-duo-vs-galaxy-fold-8-camera-face-off-zoom"><span>iPhone Duo vs. Galaxy Fold 8 camera face-off: Zoom</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/BU3mHs3biHpN9XYhPg9vo4-1920-80.jpg" alt="Apple iPhone Duo camera sample." /><figcaption>Apple iPhone Duo.<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/88qxjmNwUPtzJ5c6ysjBxM-1920-80.jpg" alt="Samsung Galaxy Z Fold 8 camera sample." /><figcaption>Samsung Galaxy Z Fold 8.<small role="credit">Future</small></figcaption></figure></figure><p>​Both phones rely solely on in-sensor cropping from their primary cameras for zoom duties, maxing out at 10x digital zoom. Pushing them to that extreme, it quickly becomes evident which handset's processing algorithms handle heavy digital magnification better.</p><p>​At 10x zoom, the Galaxy Z Fold 8 yields a noticeably cleaner, sharper image — I can easily read the fine menu text posted underneath the hot dog stand umbrella. In comparison, the iPhone Duo fails to resolve the same degree of clarity, resulting in a noisier shot with grainy artifacts.</p><p><strong>Winner:</strong> Galaxy Z Fold 8</p><h2 class="article-body__section" id="section-iphone-duo-vs-galaxy-fold-8-camera-face-off-low-light"><span>iPhone Duo vs. Galaxy Fold 8 camera face-off: Low Light</span></h2><iframe allow="" height="420" 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=fa287ed2-cccb-11f1-ba1b-0e6f42328d7d"></iframe><p>​Both main cameras navigate tricky low-light situations with relative ease, but one clearly pulls ahead under close inspection. Most notably, the iPhone Duo renders a visibly sharper image across the frame — preserving delicate vein textures on the plant's leaves and sharp definition in the planter's decorative eyelashes. The Galaxy Z Fold 8 holds its own by general smartphone standards, but its output is noticeably softer overall.</p><p><strong>Winner: </strong>iPhone Duo</p><h2 class="article-body__section" id="section-iphone-duo-vs-galaxy-fold-8-camera-face-off-verdict"><span>iPhone Duo vs. Galaxy Fold 8 camera face-off: 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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="XFKbuFCrTXVaBW6PPtRobb" name="iPhone Duo vs. Galaxy Z Fold 8" alt="iPhone Duo vs. Galaxy Z Fold 8 held in the hand." src="https://cdn.mos.cms.futurecdn.net/XFKbuFCrTXVaBW6PPtRobb-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>​This camera face-off turned out to be a one-sided affair after tallying up all 10 rounds, with the iPhone Duo sweeping an overwhelming number of categories. If pure image quality and consistency matter most to you, the Duo delivers noticeably superior straight-out-of-the-camera results across nearly every scenario. While it struggles against the Galaxy Z Fold 8 at extreme digital zoom levels, its primary camera proves far better at resolving fine detail and balancing challenging lighting conditions.</p><p>​That doesn't mean the Galaxy Z Fold 8 is a complete wash. The margins across several rounds remained razor-thin, with a couple coming down to personal preference. While it may lack the tack-sharp definition and refined dynamic range of its rival, Samsung still offers a more versatile suite of pro shooting controls and manual tools out of the box.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OLYM6X"></div>                            </div>                            <script src="https://kwizly.com/embed/OLYM6X.js" async=""></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/i-disabled-these-ios-27-features-and-my-iphone-feels-responsive-again"><strong>I disabled these iOS 27 features and my iPhone finally feels responsive again</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-ask-our-foldable-phone-experts-anything"><strong>iPhone Duo Live Q&amp;A: I spent a week with Apple's foldable and can answer ALL your questions</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/ive-waited-5-years-for-the-iphone-duo-here-are-7-reasons-i-decided-not-to-pre-order"><strong>I've waited 5 years for the iPhone Duo — here are 7 reasons I decided not to pre-order</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Forget iPhone Duo, Samsung could release six different foldable phones next year — including the mysterious 'Galaxy Z Slide' ]]></title>
                                                                                                <dc:content><![CDATA[ <p>2026 has been a big year for foldable phones, especially with the launch of the <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-hands-on-apple-nailed-it-and-just-put-everyone-else-on-notice">iPhone Duo</a>, Apple's first foldable phone. But it sounds like Samsung isn't going to let Apple take the glory. After a successful launch of the passport-shaped <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Galaxy Z Fold 8</a>, it's been claimed that Samsung could launch six foldables devices next year — including a new "Galaxy Z Slide."</p><p>This rumor comes from <a href="https://x.com/TheGalox_/status/2110224762198687930" target="_blank">TheGalox on X,</a> who claims that Samsung is prepping its biggest foldable lineup ever." Apparently the 2027 lineup will start with the launch of the Galaxy Z TriFold 2, and will be followed by a Galaxy Z Slide, Z Fold 9 Ultra, Z Fold 9 Pro, Z Fold 9 and the Z Flip 9. </p><div class="see-more see-more--clipped"><figure><blockquote class="twitter-tweet hawk-ignore" data-lang="en" cite="https://twitter.com/cantworkitout/status/2110224762198687930"><p lang="en" dir="ltr">Galaxy Z SlideGalaxy Z TriFold2Galaxy Z Fold9 UltraGalaxy Z Fold9 ProGalaxy Z Fold9Galaxy Z Flip9The 2027 Galaxy Z lineup will be the biggest foldable lineup ever, with battery, thickness &amp; weight improvements across the board.Z TriFold2 will kick things off https://t.co/VM1N3IIIkT<a href="https://twitter.com/cantworkitout/status/2110224762198687930">October 14, 2026</a></p></blockquote></figure><div class="see-more__filter"></div></div><p>That certainly is an interesting lineup of new phones. The two things that stand out most are the inclusion of the Z Fold 9 Pro and the Z Flip 9 — the latter of which is <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-tipster-says-galaxy-z-flip-9-could-be-cancelled-heres-why-thats-a-terrible-idea">rumored to have been canceled</a>. Likewise the "Pro" is not something we've heard of yet, and I'm curious to hear what kind of niche it might fill in the Z Fold 9 lineup. </p><p>There isn't a whole lot of difference between the Z Fold 8 and <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Z Fold 8 Ultra</a>, after all, and the last thing Samsung needs is to confuse people with multiple foldables that are too similar to one another.</p><p>The Z Slide is another mystery, and this is the first we've actually heard about such a device. If I were to guess, this is some kind of extendable phone with an extending screen, similar to various concept devices Samsung (and others) have produced over the years.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Od2QAe"></div>                            </div>                            <script src="https://kwizly.com/embed/Od2QAe.js" async=""></script><h2 id="what-we-think-is-coming">What we think is coming</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="GoHwVgvWMokxkhACFLnnAE" name="Samsung Display Slidable Flex Duet" alt="Samsung Display Slidable Flex Duet" src="https://cdn.mos.cms.futurecdn.net/GoHwVgvWMokxkhACFLnnAE-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The last time we saw one <a href="https://www.tomsguide.com/phones/samsung-phones/forget-galaxy-s25-i-just-saw-samsung-displays-wild-new-slidables-and-foldables-and-this-is-my-favorite">was back at CES 2025</a>, with a number of different "slidable" phones. There was the Slidable Flex Duet, which extended  its screen from 8.1-inches to a massive 12.4-inches, as well as the Slidable Flex Solo which grew from 8-inches to a mammoth 17-inches. Then there was the Flex Vertical, which grew vertically from 5.1-inches to 6.7-inches.</p><p>The question is whether or not these designs will be utilized for the Galaxy Z Slide, and if so which one will actually go on sale. My first guess would be some kind of smartphone-sized device, similar to the Flex Vertical, though that all depends on whether Samsung could make those smaller extendable displays at scale. </p><p>It's quite possible that a larger screen is easier (and therefore cheaper) to mass produce, which would see one of the tablet-inspired designs arrive first. @TheGalox has not elaborated on what's to come, and that means all we can do at this stage is guess. </p><p>As for the TriFold 2, it's no huge surprise that a sequel triple-foldable is coming. We've <a href="https://www.cnet.com/tech/mobile/samsung-is-fast-tracking-galaxy-z-trifold-2-after-iphone-duo-reveal-according-to-leaks/">heard rumors about that already,</a> but it's unclear how easy it will be to get hold of. The original TriFold was only available in limited quantities, and Samsung completely <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-kills-the-galaxy-z-trifold-after-just-three-months-and-im-hardly-surprised-heres-why">canceled production back in March.</a> Here's hoping the sequel is a little easier to purchase. </p><p>It's still very early days for Samsung's 2027 foldables, and until we hear more there's no telling how accurate any of this information might actually be. So we're just going to have to wait and see what the rumor mill produces in the coming months.</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/my-iphone-18-pro-max-just-got-delivered-and-i-immediately-regret-the-purchase-and-i-think-iphone-duo-is-to-blame">My iPhone 18 Pro Max just got delivered and I immediately regret the purchase — and I think iPhone Duo is to blame</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-duos-battery-is-officially-bigger-than-galaxy-z-fold-8-heres-how-it-compares-to-other-foldables">iPhone Duo's battery is officially bigger than Galaxy Z Fold 8 — here's how it compares to other foldables</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-modes-explained-6-ways-you-can-use-apples-new-foldable">iPhone Duo modes explained — 6 ways you can use Apple's new foldable</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/forget-iphone-duo-samsung-could-release-six-different-foldable-phones-next-year-including-the-mysterious-galaxy-z-slide</link>
                                                                            <description>
                            <![CDATA[ 2027 could see Samsung nearly double the size of its foldable line-up, and that makes Apple's solo foldable feel a little lonely. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">dDHeu2UNdmjfnepTdsshFA</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/YqjnZw2B5sUj3Cvpn3g9nX-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 20 Oct 2026 11:05:05 +0000</pubDate>                                                                                                                                <updated>Tue, 20 Oct 2026 23:01:08 +0000</updated>
                                                                                                                                            <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/YqjnZw2B5sUj3Cvpn3g9nX-1920-80.jpg">
                                                            <media:credit><![CDATA[Samsung]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Samsung Display Flex Duet slidable display concept]]></media:description>                                                            <media:text><![CDATA[Samsung Display Flex Duet slidable display concept]]></media:text>
                                <media:title type="plain"><![CDATA[Samsung Display Flex Duet slidable display concept]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/YqjnZw2B5sUj3Cvpn3g9nX-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>2026 has been a big year for foldable phones, especially with the launch of the <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-hands-on-apple-nailed-it-and-just-put-everyone-else-on-notice">iPhone Duo</a>, Apple's first foldable phone. But it sounds like Samsung isn't going to let Apple take the glory. After a successful launch of the passport-shaped <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Galaxy Z Fold 8</a>, it's been claimed that Samsung could launch six foldables devices next year — including a new "Galaxy Z Slide."</p><p>This rumor comes from <a href="https://x.com/TheGalox_/status/2110224762198687930" target="_blank">TheGalox on X,</a> who claims that Samsung is prepping its biggest foldable lineup ever." Apparently the 2027 lineup will start with the launch of the Galaxy Z TriFold 2, and will be followed by a Galaxy Z Slide, Z Fold 9 Ultra, Z Fold 9 Pro, Z Fold 9 and the Z Flip 9. </p><div class="see-more see-more--clipped"><figure><blockquote class="twitter-tweet hawk-ignore" data-lang="en" cite="https://twitter.com/cantworkitout/status/2110224762198687930"><p lang="en" dir="ltr">Galaxy Z SlideGalaxy Z TriFold2Galaxy Z Fold9 UltraGalaxy Z Fold9 ProGalaxy Z Fold9Galaxy Z Flip9The 2027 Galaxy Z lineup will be the biggest foldable lineup ever, with battery, thickness &amp; weight improvements across the board.Z TriFold2 will kick things off https://t.co/VM1N3IIIkT<a href="https://twitter.com/cantworkitout/status/2110224762198687930">October 14, 2026</a></p></blockquote></figure><div class="see-more__filter"></div></div><p>That certainly is an interesting lineup of new phones. The two things that stand out most are the inclusion of the Z Fold 9 Pro and the Z Flip 9 — the latter of which is <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-tipster-says-galaxy-z-flip-9-could-be-cancelled-heres-why-thats-a-terrible-idea">rumored to have been canceled</a>. Likewise the "Pro" is not something we've heard of yet, and I'm curious to hear what kind of niche it might fill in the Z Fold 9 lineup. </p><p>There isn't a whole lot of difference between the Z Fold 8 and <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Z Fold 8 Ultra</a>, after all, and the last thing Samsung needs is to confuse people with multiple foldables that are too similar to one another.</p><p>The Z Slide is another mystery, and this is the first we've actually heard about such a device. If I were to guess, this is some kind of extendable phone with an extending screen, similar to various concept devices Samsung (and others) have produced over the years.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Od2QAe"></div>                            </div>                            <script src="https://kwizly.com/embed/Od2QAe.js" async=""></script><h2 id="what-we-think-is-coming">What we think is coming</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="GoHwVgvWMokxkhACFLnnAE" name="Samsung Display Slidable Flex Duet" alt="Samsung Display Slidable Flex Duet" src="https://cdn.mos.cms.futurecdn.net/GoHwVgvWMokxkhACFLnnAE-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The last time we saw one <a href="https://www.tomsguide.com/phones/samsung-phones/forget-galaxy-s25-i-just-saw-samsung-displays-wild-new-slidables-and-foldables-and-this-is-my-favorite">was back at CES 2025</a>, with a number of different "slidable" phones. There was the Slidable Flex Duet, which extended  its screen from 8.1-inches to a massive 12.4-inches, as well as the Slidable Flex Solo which grew from 8-inches to a mammoth 17-inches. Then there was the Flex Vertical, which grew vertically from 5.1-inches to 6.7-inches.</p><p>The question is whether or not these designs will be utilized for the Galaxy Z Slide, and if so which one will actually go on sale. My first guess would be some kind of smartphone-sized device, similar to the Flex Vertical, though that all depends on whether Samsung could make those smaller extendable displays at scale. </p><p>It's quite possible that a larger screen is easier (and therefore cheaper) to mass produce, which would see one of the tablet-inspired designs arrive first. @TheGalox has not elaborated on what's to come, and that means all we can do at this stage is guess. </p><p>As for the TriFold 2, it's no huge surprise that a sequel triple-foldable is coming. We've <a href="https://www.cnet.com/tech/mobile/samsung-is-fast-tracking-galaxy-z-trifold-2-after-iphone-duo-reveal-according-to-leaks/">heard rumors about that already,</a> but it's unclear how easy it will be to get hold of. The original TriFold was only available in limited quantities, and Samsung completely <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-kills-the-galaxy-z-trifold-after-just-three-months-and-im-hardly-surprised-heres-why">canceled production back in March.</a> Here's hoping the sequel is a little easier to purchase. </p><p>It's still very early days for Samsung's 2027 foldables, and until we hear more there's no telling how accurate any of this information might actually be. So we're just going to have to wait and see what the rumor mill produces in the coming months.</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/my-iphone-18-pro-max-just-got-delivered-and-i-immediately-regret-the-purchase-and-i-think-iphone-duo-is-to-blame">My iPhone 18 Pro Max just got delivered and I immediately regret the purchase — and I think iPhone Duo is to blame</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-duos-battery-is-officially-bigger-than-galaxy-z-fold-8-heres-how-it-compares-to-other-foldables">iPhone Duo's battery is officially bigger than Galaxy Z Fold 8 — here's how it compares to other foldables</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-modes-explained-6-ways-you-can-use-apples-new-foldable">iPhone Duo modes explained — 6 ways you can use Apple's new foldable</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Act fast! Prime Day just knocked $400 off Galaxy Z Fold 8 Ultra and $350 off Galaxy Fold 8 ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The iPhone Duo is set to arrive later this month, but before you go ahead and pre-order Apple's first foldable you should be aware that Samsung's latest folding phones have just had a hefty discount thanks to Prime Day. These discounts take the price of both the passport-shaped Galaxy Z Fold 8 and the larger Z Fold 8 Ultra a few hundred dollars below what Apple is charging.</p><p>Normally costing $2,099, Amazon has knocked the price of the<a href="https://www.amazon.com/dp/B0H12DXK8J" target="_blank" rel="nofollow"> Galaxy Z Fold 8 Ultra down to $1,699 for a 256GB model</a>. That's a saving of over $400, and $300 less than the iPhone Duo is set to cost. Meanwhile, the <a href="https://www.amazon.com/Samsung-Galaxy-Unlocked-Android-Smartphone/dp/B0H12M2TY4" target="_blank" rel="nofollow">Galaxy Z Fold 8 has now dropped to $1,549</a>, which is $350 less than the usual $1,899 price tag. </p><div class="product"><a data-dimension112="6253e418-c170-11f1-b6a1-6f234d2c7e33" data-action="Deal Block" data-label="Galaxy Z Fold 8" data-dimension48="Galaxy Z Fold 8" data-dimension25="$1549" href="https://www.amazon.com/Samsung-Galaxy-Unlocked-Android-Smartphone/dp/B0H12M2TY4" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1327px;"><p class="vanilla-image-block" style="padding-top:64.28%;"><img id="9Rhpe6TtrVFSNo9Vtn27Tm" name="Galaxy Z Fold 8 Ultra deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/9Rhpe6TtrVFSNo9Vtn27Tm-1920-80.jpg" mos="" align="middle" fullscreen="" width="1327" height="853" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p>If you want the closest thing Samsung has to an iPhone Duo, but at a much lower price point, then check out this Galaxy Z Fold 8 deal. The passport-shaped Samsung foldable has two cameras, a 7.6-inch foldable display, 5.5-inch cover display and all the AI features you could dream off. It's all wrapped up in a design that's lighter and thinner than Apple's foldable.<a class="view-deal button" href="https://www.amazon.com/Samsung-Galaxy-Unlocked-Android-Smartphone/dp/B0H12M2TY4" target="_blank" rel="nofollow" data-dimension112="6253e418-c170-11f1-b6a1-6f234d2c7e33" data-action="Deal Block" data-label="Galaxy Z Fold 8" data-dimension48="Galaxy Z Fold 8" data-dimension25="$1549">View Deal</a></p></div><div class="product"><a data-dimension112="6253e486-c170-11f1-8227-794e236ca5b1" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra" data-dimension48="Galaxy Z Fold 8 Ultra" data-dimension25="$1699" href="https://www.amazon.com/dp/B0H12DXK8J" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:954px;"><p class="vanilla-image-block" style="padding-top:98.95%;"><img id="4EngEpxMLxWVDrp7aAo2xi" name="Galaxy Z Fold 8 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/4EngEpxMLxWVDrp7aAo2xi-1920-80.jpg" mos="" align="middle" fullscreen="" width="954" height="944" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0H12DXK8J" target="_blank" rel="nofollow" data-dimension112="6253e486-c170-11f1-8227-794e236ca5b1" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra" data-dimension48="Galaxy Z Fold 8 Ultra" data-dimension25="$1699">Galaxy Z Fold 8 Ultra: was $2099 now $1699</a></strong><br />If you want a larger screen than the Z Fold 8 and iPhone Duo, or want an actual telephoto lens, then the Z Fold 8 Ultra could be the foldable for you. It has everything the Z Fold 8 offers, plus a larger 8-inch screen and 6.5-inch cover display, plus a 200MP main camera lens. <a class="view-deal button" href="https://www.amazon.com/dp/B0H12DXK8J" target="_blank" rel="nofollow" data-dimension112="6253e486-c170-11f1-8227-794e236ca5b1" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra" data-dimension48="Galaxy Z Fold 8 Ultra" data-dimension25="$1699">View Deal</a></p></div><p>Both Samsung foldables are powerful, offer strong battery life and feature bright anti-reflective screens that let you enjoy all the extra space regardless of the environment. Plus, Samsung has been working hard to reduce the appearance of the crease, and while not completely invisible it is much harder to see than with previous devices.</p><p>Both Samsung foldables are thinner and lighter than the iPhone Duo, while also offering better multitasking, DeX desktop mode and now a much lower price tag. Not to mention the fact that Samsung has a clear advantage when it comes to AI features, on account of its own head start and collaborative efforts with Google.</p><p>The <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Z Fold 8 Ultra</a> also has the added benefit of including a 200MP main camera and a third camera lens, a 10MP telephoto shooter with 3x optical zoom. But the regular Fold 8 is the one to get if you prefer a more compact design and wider main display.</p><p><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-vs-samsung-galaxy-z-fold-8-7-ways-apples-foldable-beats-its-rival-from-ip68-to-faster-charging-and-more">There are some downsides</a>, though. The main one is that Samsung doesn't offer stylus support on its latest foldables, whereas Apple does with the Apple Pencil. In addition, Apple offers faster charging, MagSafe support, IP68 dust resistance and vapor chamber cooling for improved performance. The Z Fold 8 also lacks the ability to detect the way the screen and hinge are positioned, which both the Ultra (as Flex View) and iPhone Duo offer.</p><p>There's a lot to love about foldable phones, but the prices have always been particularly excessive. With that in mind, the ability to save such a considerable amount of money on two of the latest foldables, and so soon after they first released, is a deal that most people can't afford to miss out on. </p><h3 class="article-body__section" id="section-shop-more-deals"><span>Shop more deals</span></h3><ul><li><strong></strong><a href="https://www.amazon.com/primebigdealdays?" target="_blank" rel="nofollow"><strong>See all deals in the Prime Day sale</strong></a><strong></strong></li><li><strong></strong><a href="https://www.amazon.com/amazonprime" target="_blank" rel="nofollow"><strong>Sign up for Amazon Prime</strong></a><strong></strong></li></ul><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=tablets&amp;brands=Amazon&amp;min_discount_ratio=0.95&amp;widget_title=Top+Deals+Handpicked+by+Our+Editors&amp;widget_subtitle=Discover+the+best+discounts+currently+available%2C+curated+daily+by+the+Tom%27s+Guide+Savings+Squad.&amp;bg_color=transparent" data-vizualizer-embed="true"></div>    <script>    /**     * Tom's Guide Deals Finder - Vanilla JS Encapsulated Engine     */    (function() {      // --- Freyr Analytics Adapter ---      function initAnalytics() {        window.dataLayer = window.dataLayer || [];        window.googletag = window.googletag || {};        window.googletag.cmd = window.googletag.cmd || [];        window.hawk = window.hawk || { analytics: { freyr: [] } };        window.hawk.analytics = window.hawk.analytics || { freyr: [] };        window.hawk.analytics.freyr = window.hawk.analytics.freyr || [];        window.freyr = window.freyr || { cmd: [] };        const scriptSrc = 'https://freyr.futurecdn.net/freyr.js';        const hostname = typeof window !== 'undefined' ? window.location.hostname : '';        const isTestEnv = typeof window.navigator !== 'undefined' && (window.navigator.webdriver || window.navigator.userAgent.includes('Headless'));        const shouldSendRealAnalytics = !isTestEnv && hostname && hostname !== 'localhost' && hostname !== '127.0.0.1' && !hostname.includes('run.app');        if (shouldSendRealAnalytics && !document.querySelector(`script[src="${scriptSrc}"]`)) {          const script = document.createElement('script');          script.src = scriptSrc;          script.async = true;          document.head.appendChild(script);        }      }      function storeEventForDebug(name, data) {        if (!window.hawk || !window.hawk.analytics || !window.hawk.analytics.freyr) return;        window.hawk.analytics.freyr.push({ name, data });        try {          if (typeof window !== 'undefined' && window.localStorage) {            window.localStorage.setItem("hawk", JSON.stringify(window.hawk));          }        } catch (e) {          // Ignore storage issues        }        try {          window.dispatchEvent(new CustomEvent("hawk-analytics-update"));        } catch (e) {}      }      function sendToFreyr(eventName, data) {        if (typeof window === 'undefined') return;        window.freyr = window.freyr || { cmd: [] };        window.freyr.cmd.push(() => {          if (window.freyr && window.freyr.pushAndUpdate) {            window.freyr.pushAndUpdate(eventName, data);          }        });      }      function sendEvent(event, skip = false) {        try {          storeEventForDebug(event.name, event.data);          if (!skip) {            sendToFreyr(event.name, event.data);          }        } catch (e) {          // Ensure tracking errors don't surface to the user        }      }      function getCookie(name) {        try {          const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));          return match ? match[2] : null;        } catch (e) {          return null;        }      }      function normalizeCurrency(symbol) {        const map = {          '£': 'GBP',          '$': 'USD',          'A$': 'AUD',          'CA$': 'CAD',          '€': 'EUR'        };        return map[symbol] || symbol;      }      function trackElementInteraction(props) {        sendEvent({          name: 'elementInteraction',          data: {            element: {              action: props.action || "click",              id: props.id || undefined,              class: props.class || undefined,              name: props.name || undefined,              text: props.text || undefined,              label: props.label || undefined,              container: props.container || undefined,              url: props.url || undefined,              articleId: props.articleId || undefined            }          }        });      }      function generateRevenueId(url, productName, merchantName, modelId) {        const str = `${window.location.href}|${productName}|${merchantName}|${modelId || ''}|${new Date().toDateString()}|tomsguide`;        let hash = 0;        for (let i = 0; i < str.length; i++) {          const char = str.charCodeAt(i);          hash = ((hash << 5) - hash) + char;          hash = hash & hash;        }        let numericStr = Math.abs(hash).toString();        while (numericStr.length < 19) {          numericStr += Math.floor(Math.random() * 10).toString();        }        return numericStr.substring(0, 19);      }      function rewriteAffiliateLink(url, territory, revenueId) {        if (!url) return url;        const t = (territory || 'gb').toLowerCase();        return url.replace(/hawk-custom-tracking/g, `tomsguide-${t}-${revenueId}`);      }      function trackHawkEvent(params) {        const { clickType, widgetId, productCategoryName, product, productsArray, zeroBasedProductIndexOrNull, totalDealsOrProducts, areaClicked, merchant, revenueId, isoCurrencyCode, queryName, widgetTypeName } = params;        const data = {          event: "hawkEvent",          category: "Affiliates",          affiliate: {            action: {              type: clickType,              id: widgetId,              event: clickType === "appeared" ? "viewed" : "Click from",              timestamp: Date.now()            },            component: {              flag: "Editor",              product: productCategoryName || "deals",              category: `Signal Deal Finder ${widgetTypeName || "Carousel"} widget`,              type: clickType === "appeared" ? "review" : "signal product",              label: queryName || (product ? (product.name || "") : ""),              index: zeroBasedProductIndexOrNull === null || zeroBasedProductIndexOrNull === undefined ? -1 : zeroBasedProductIndexOrNull,              linkCount: totalDealsOrProducts || 0,              blockLayout: "",              areaClicked: areaClicked || ""            }          },          products: productsArray || (product && merchant ? [            {              product: {                primary: {                  id: product.id || product.matchId || null,                  name: product.name,                  type: "deal",                  price: product.price,                  previousPrice: product.previousPrice || null,                  currency: isoCurrencyCode || "USD",                  preorder: false,                  labels: [],                  link: product.link,                  originalLink: product.originalLink || null,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: null,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: product.globalId || null,                  inStock: product.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: isoCurrencyCode || "USD"                }              },              merchant: {                id: merchant.id || null,                name: merchant.name,                url: merchant.url || null,                network: merchant.network || null              },              model: {                id: product.modelId || null,                brand: product.brand || null,                name: product.name,                parent: product.parent || null              }            }          ] : []),          reviews: [],          _clear: true,          "gtm.uniqueEventId": Date.now() % 10000        };        sendEvent({ name: 'hawkEvent', data });      }      function trackDealClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card" });      }      function trackViewSimilarClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card View Similar" });      }      function trackPriceComparisonClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Price Comparison" });      }      function trackReviewClick(params) {        trackHawkEvent({ ...params, clickType: "review", areaClicked: "Signal Product Card Review Link" });      }      function trackShare(params) {        trackHawkEvent({ ...params, clickType: "share", areaClicked: "Signal Product Card Share" });      }      function trackDealsAppeared(widgetId, deals, revenueId, currency, queryName, widgetTypeName) {         if (!deals || deals.length === 0) return;                  const productsArray = deals.slice(0, 50).map((deal) => {            let voucherPct = null;            let rawPrice = parseFloat(deal.rawPrice) || parseFloat(deal.price) || null;            let rawMsrp = parseFloat(deal.rawMsrp) || parseFloat(deal.msrp) || null;            if (rawMsrp > rawPrice && rawPrice > 0) {              voucherPct = Math.round((1 - (rawPrice / rawMsrp)) * 100);            }            let numId = null;            if (deal.externalProductId && !isNaN(parseInt(deal.externalProductId))) {              numId = parseInt(deal.externalProductId);            } else if (deal.id && !isNaN(parseInt(deal.id))) {              numId = parseInt(deal.id);            } else {              numId = deal.matchId || null;            }            return {              product: {                primary: {                  id: numId,                  name: deal.productName || deal.title || "",                  type: "deal",                  price: rawPrice,                  previousPrice: rawMsrp,                  currency: currency || 'USD',                  preorder: false,                  labels: deal.modelBrand || deal.brand ? [                     { type: "brand", value: deal.modelBrand || deal.brand }                  ] : [],                  link: deal.url,                  originalLink: deal.url,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: voucherPct,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: deal.productKey || null,                  inStock: deal.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: currency || 'USD'                }              },              merchant: {                id: deal.merchantId ? parseInt(deal.merchantId) : null,                name: deal.merchant || "Retailer",                url: deal.merchantUrl || null,                network: deal.merchantNetwork || null              },              model: {                id: deal.modelId ? parseInt(deal.modelId) : null,                brand: deal.modelBrand || deal.brand || null,                name: deal.productName || deal.title || "",                parent: deal.modelParent || null              }            };         });                  trackHawkEvent({             clickType: "appeared",             widgetId: widgetId,             productCategoryName: "deals",             zeroBasedProductIndexOrNull: null,             totalDealsOrProducts: deals.length,             productsArray: productsArray,             queryName: queryName,             widgetTypeName: widgetTypeName         });      }      // 1. Setup Shadow DOM Sandbox      const currentScript = document.currentScript;      let hostContainer = null;      let template = null;            if (currentScript) {        let prev = currentScript.previousElementSibling;        while (prev) {          if (prev.tagName === 'TEMPLATE' && prev.classList.contains('tg-df-widget-template')) {            template = prev;          } else if (prev.tagName === 'DIV' && prev.classList.contains('tg-df-widget-host') && !prev.hasAttribute('data-initialized')) {            hostContainer = prev;            break;          }          prev = prev.previousElementSibling;        }      }            // Fallbacks in case script is deferred      if (!hostContainer) {        const hosts = document.querySelectorAll('.tg-df-widget-host:not([data-initialized])');        if (hosts.length > 0) hostContainer = hosts[0];      }            // Safely embedded template for CMS environments      const rawTemplate = `  \x3Cstyle>    /* --- Shadow DOM Base Reset --- */    *, *::before, *::after {      box-sizing: border-box;    }    img, picture, svg, video {      max-width: 100%;      height: auto;      display: block;    }    /*       1. Scoped CSS for Tom's Guide Deals Widget       All classes are prefixed with \`tg-df-\` to prevent CMS style leakage.    */    .tg-df-container {      container-type: inline-size;      container-name: tg-df;      --tg-df-blue: #1F69FF;      --tg-df-blue-hover: #004d8c;      --tg-df-text: #222222;      --tg-df-text-muted: #555555;      --tg-df-bg: #ffffff;      --tg-df-bg-secondary: #f4f4f4;      --tg-df-border: #e2e8f0;      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;      color: var(--tg-df-text);      background-color: transparent;       width: 100%;      max-width: 1200px;      margin: 0 auto;      padding-bottom: 24px;    }    .tg-df-container *, .tg-df-container *::before, .tg-df-container *::after {      margin: 0;      padding: 0;      box-sizing: border-box;    }    .tg-df-container img {      border: none;      margin: 0;      padding: 0;    }    .tg-df-container a {      text-decoration: none;      color: inherit;    }    /*       2. Search & Filter Bar    */    .tg-df-controls {      display: flex;      flex-direction: column;      align-items: center;      gap: 20px;      margin-bottom: 32px;      width: 100%;    }    .tg-df-top-bar {      display: flex;      width: 100%;      max-width: 760px;      gap: 12px;      align-items: center;    }    .tg-df-search-wrapper {      position: relative;      flex: 1;      width: 100%;      box-shadow: 0 8px 24px rgba(0,0,0,0.06);      border-radius: 40px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      z-index: 100;    }    .tg-df-autocomplete-dropdown {      position: absolute;      top: calc(100% + 4px);      left: 0;      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      max-height: 300px;      overflow-y: auto;      z-index: 200;      display: none;    }    .tg-df-autocomplete-dropdown.active {      display: block;    }    .tg-df-autocomplete-item {      padding: 12px 24px;      cursor: pointer;      font-size: 14px;      color: var(--tg-df-text);      transition: background 0.1s ease;    }    .tg-df-autocomplete-item:hover {      background: var(--tg-df-bg-secondary);    }    .tg-df-search-input {      width: 100%;      padding: 16px 64px 16px 24px;      font-size: 16px;      border: 2px solid transparent;      border-radius: 40px;      outline: none;      transition: border-color 0.2s ease, box-shadow 0.2s ease;      color: var(--tg-df-text);      background: transparent;    }    .tg-df-search-input:focus {      border-color: transparent;      box-shadow: 0 0 0 3px rgba(0, 108, 196, 0.15);    }    .tg-df-search-input::placeholder {      color: #999999;    }        .tg-df-search-btn {      position: absolute;      right: 8px;      top: 50%;      transform: translateY(-50%);      width: 40px;      height: 40px;      border-radius: 50%;      background: #222;      border: none;      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: background 0.2s ease;    }        .tg-df-search-btn:hover {      background: #000;    }    .tg-df-search-icon {      width: 16px;      height: 16px;      fill: #fff;    }    .tg-df-settings-wrapper {      position: relative;    }        .tg-df-settings-btn {      width: 48px;      height: 48px;      border-radius: 50%;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      box-shadow: 0 4px 12px rgba(0,0,0,0.04);      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: all 0.2s ease;      color: var(--tg-df-text-muted);      flex-shrink: 0;    }    .tg-df-settings-btn:hover {      background: var(--tg-df-bg-secondary);      border-color: #0000ff;      color: var(--tg-df-text);    }    .tg-df-settings-btn svg {      width: 24px;      height: 24px;      fill: currentColor;    }    .tg-df-settings-dropdown {      position: absolute;      top: calc(100% + 8px);      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      width: 280px;      padding: 20px;      display: none;      z-index: 100;      flex-direction: column;      gap: 20px;    }    .tg-df-settings-dropdown.active {      display: flex;    }        .tg-df-settings-dropdown-backdrop {      display: none;      position: fixed;      inset: 0;      z-index: 99;    }        .tg-df-settings-dropdown-backdrop.active {      display: block;    }    .tg-df-setting-item {      display: flex;      flex-direction: column;      gap: 10px;    }    .tg-df-setting-label {      font-size: 11px;      font-weight: 700;      color: var(--tg-df-text-muted);      text-transform: uppercase;      letter-spacing: 0.5px;    }        .tg-df-region-select {        padding: 10px 12px;        border-radius: 8px;        border: 1px solid var(--tg-df-border);        font-size: 15px;        outline: none;        background: var(--tg-df-bg-secondary);        color: var(--tg-df-text);        cursor: pointer;        width: 100%;    }    .tg-df-toggle {        position: relative;        display: inline-block;        width: 44px;        height: 24px;        flex-shrink: 0;    }    .tg-df-toggle input {        opacity: 0;        width: 0;        height: 0;    }    .tg-df-slider {        position: absolute;        cursor: pointer;        top: 0; left: 0; right: 0; bottom: 0;        background-color: #ccc;        transition: .2s;        border-radius: 24px;    }    .tg-df-slider:before {        position: absolute;        content: "";        height: 18px;        width: 18px;        left: 3px;        bottom: 3px;        background-color: white;        transition: .2s;        border-radius: 50%;    }    .tg-df-toggle input:checked + .tg-df-slider {        background-color: #1F69FF;    }    .tg-df-toggle input:checked + .tg-df-slider:before {        transform: translateX(20px);    }    .tg-df-dl-row {        flex-direction: row;        align-items: center;        justify-content: space-between;    }    .tg-df-dl-row-text {        font-size: 14px;        font-weight: 600;        color: var(--tg-df-text);    }    .tg-df-dl-row-subtext {        font-size: 12px;        font-weight: 400;        line-height: 1.3;        color: var(--tg-df-text-muted);        margin-top: 4px;        display: block;    }    .tg-df-filters {      display: flex;      gap: 12px;      justify-content: center;      flex-wrap: wrap;    }    .tg-df-sort-wrapper {      position: relative;      display: flex;      align-items: center;    }        .tg-df-sort-icon {      position: absolute;      left: 14px;      width: 14px;      height: 14px;      fill: var(--tg-df-text-muted);      pointer-events: none;    }    .tg-df-sort-select, .tg-df-filter-select {      padding: 10px 36px 10px 38px;      font-size: 14px;      border: 1px solid var(--tg-df-border);      border-radius: 100px;      outline: none;      appearance: none;      background-color: var(--tg-df-bg-secondary);      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 12 12'%3E%3Cpath fill='%23555555' d='M6 8L1 3h10z'/%3E%3C/svg%3E");      background-repeat: no-repeat;      background-position: right 14px center;      color: var(--tg-df-text);      cursor: pointer;      font-weight: 500;      transition: all 0.2s ease;    }        .tg-df-price-input::-webkit-outer-spin-button,    .tg-df-price-input::-webkit-inner-spin-button {      -webkit-appearance: none;      margin: 0;    }    .tg-df-price-input {      -moz-appearance: textfield;    }    .tg-df-sort-select:hover, .tg-df-filter-select:hover {      background-color: #e2e8f0;    }    .tg-df-multiselect-container {      position: relative;    }        .tg-df-multiselect-trigger {      display: block;      background: #fff;      user-select: none;      width: 100%;      overflow: hidden;      white-space: nowrap;      text-overflow: ellipsis;    }        .tg-df-multiselect-dropdown {      display: none;      position: absolute;      top: calc(100% + 4px);      left: 0;      width: 100%;      min-width: 220px;      max-height: 300px;      overflow-y: auto;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);      z-index: 100;      padding: 8px 0;    }    .tg-df-multiselect-dropdown.active {      display: block;    }    .tg-df-ms-option {      padding: 8px 16px;      display: flex;      align-items: center;      gap: 8px;      cursor: pointer;      font-size: 14px;    }    .tg-df-ms-option:hover {      background-color: var(--tg-df-bg-secondary);    }        .tg-df-ms-option input {      cursor: pointer;      accent-color: #1f69ff;    }    .tg-df-sort-select:focus, .tg-df-filter-select:focus {      border-color: #0000ff;      box-shadow: 0 0 0 3px rgba(0, 0, 255, 0.2);      background-color: var(--tg-df-bg);    }    /*       3. Deal Grid Layout    */    .tg-df-grid.tg-df-grid-auto {      padding-top: 24px;    }    .tg-df-grid, .tg-df-grid.layout-grid {      display: grid;      grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));      gap: 10px;    }    .tg-df-grid.layout-row {      grid-template-columns: 1fr;      gap: 16px;    }        .tg-df-grid.layout-row .tg-df-card {      flex-direction: row;      align-items: stretch;      height: auto;      box-shadow: none;      border-bottom: 1px solid var(--tg-df-border);    }    .tg-df-grid.layout-row .tg-df-card:hover {      box-shadow: none;    }    .tg-df-grid.layout-row .tg-df-card-image-box {      width: 140px;      min-width: 140px;      aspect-ratio: 3/4;      border-right: none;      padding: 16px 16px 16px 32px;    }    .tg-df-grid.layout-row .tg-df-card-body {      padding: 16px;      justify-content: space-between;    }    .tg-df-grid.layout-row .tg-df-card-title {      font-size: 15px;      margin-bottom: 16px;    }    .tg-df-grid.layout-row .tg-df-card-stars { margin-bottom: 8px; }    .tg-df-grid.layout-row .tg-df-card-footer {      flex-direction: column;      align-items: flex-start;      gap: 0;    }    .tg-df-grid.layout-row .tg-df-card-merchant-pill {      margin-bottom: 4px;    }    .tg-df-grid.layout-row .tg-df-card-price-group {      margin-bottom: 8px;    }    .tg-df-grid.layout-row .tg-df-price-group {      width: auto;    }    .tg-df-grid.layout-row .tg-df-card-cta {      width: 100%;      max-width: 200px;      padding: 10px 24px;      font-size: 13px;      flex-shrink: 0;      text-align: center;      justify-content: center;    }    /*       4. Deal Card Design    */    .tg-df-card {      position: relative;      display: flex;      flex-direction: column;      background-color: #ffffff;      border-radius: 0;      overflow: hidden;      transition: transform 0.2s ease, box-shadow 0.2s ease;      text-decoration: none;      color: inherit;      height: 100%;      box-shadow: 0 0 16px rgba(0, 0, 0, 0.08);      border: 1px solid var(--tg-df-border);    }    .tg-df-card:hover {      box-shadow: 0 0 24px rgba(0, 0, 0, 0.12);    }    .tg-df-card-image-box {      width: 100%;      aspect-ratio: 3/4;      background-color: #f8f8f8;      display: flex;      align-items: center;      justify-content: center;      position: relative;      overflow: hidden;      padding: 32px;      flex: 0 0 auto;    }    .tg-df-card-image {      max-width: 100%;      max-height: 100%;      width: auto;      height: auto;      object-fit: contain;      mix-blend-mode: multiply; /* Helps white background images blend into secondary bg */      transition: transform 0.3s ease;    }    .tg-df-card:hover .tg-df-card-image {      transform: scale(1.05); /* Zoom in on hover */    }    .tg-df-card-discount-badge {      position: absolute;      top: 12px;      left: 12px;      background: #dc2626; /* Red */      color: #ffffff;      padding: 6px 8px;      font-size: 11px;      font-weight: 500;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      z-index: 10;    }        .tg-df-card-merchant-pill {      display: block;      padding: 0;      font-size: 11px;      font-weight: 600;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      color: var(--tg-df-text-muted);      margin-bottom: 8px;      white-space: nowrap;      overflow: hidden;      text-overflow: ellipsis;    }    .tg-df-card-body {      padding: 16px;      display: flex;      flex-direction: column;      flex-grow: 1;      min-width: 0;    }    .tg-df-card-badges {      display: flex;      flex-wrap: wrap;      gap: 6px;      margin-bottom: 8px;    }    .tg-df-tag {      display: inline-flex;      align-items: center;      padding: 4px 6px;      font-size: 11px;      font-weight: 700;      text-transform: uppercase;      border-radius: 4px;      gap: 4px;    }    .tg-df-tag-prime {      background-color: #00A8E1;      color: #fff;    }    .tg-df-tag-coupons {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-coupons:hover {      background-color: #e2e8f0;    }        .tg-df-tag-outline {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-outline:hover {      background-color: #e2e8f0;    }        @keyframes tg-df-spin {      0% { transform: rotate(0deg); }      100% { transform: rotate(360deg); }    }    .tg-df-coupon-spinner {      border: 2px solid #e2e8f0;      border-top: 2px solid #3b82f6;      border-radius: 50%;      width: 14px;      height: 14px;      animation: tg-df-spin 1s linear infinite;      margin: 4px 8px;      display: inline-block;    }        /* Vouchers Modal */    .tg-df-modal-backdrop {      position: fixed;      top: 0; left: 0; right: 0; bottom: 0;      background: rgba(0,0,0,0.5);      z-index: 10000;      display: flex;      align-items: center;      justify-content: center;      opacity: 0;      pointer-events: none;      transition: opacity 0.3s;    }    .tg-df-modal-backdrop.active {      opacity: 1;      pointer-events: auto;    }    .tg-df-modal {      background: #fff;      border-radius: 12px;      width: 90%;      max-width: 400px;      max-height: 80vh;      display: flex;      flex-direction: column;      box-shadow: 0 10px 40px rgba(0,0,0,0.2);      transform: translateY(20px);      transition: transform 0.3s;    }    .tg-df-modal-backdrop.active .tg-df-modal {      transform: translateY(0);    }    .tg-df-modal-header {      padding: 16px;      border-bottom: 1px solid #e2e8f0;      display: flex;      align-items: center;      justify-content: space-between;    }    .tg-df-modal-title {      font-size: 16px;      font-weight: 600;      margin: 0;    }    .tg-df-modal-close {      background: none;      border: none;      cursor: pointer;      padding: 4px;      color: #64748b;    }    .tg-df-modal-body {      padding: 16px;      overflow-y: auto;    }    .tg-df-voucher-item {      padding: 12px;      border: 1px dashed #cbd5e1;      border-radius: 8px;      margin-bottom: 10px;      background: #f8fafc;      display: flex;      align-items: center;      gap: 12px;      text-decoration: none;      color: inherit;      transition: background-color 0.2s, border-color 0.2s;    }    .tg-df-voucher-item:hover {      background: #f1f5f9;      border-color: #94a3b8;    }    .tg-df-voucher-item:last-child {      margin-bottom: 0;    }    .tg-df-voucher-logo {      width: 48px;      height: 48px;      object-fit: contain;      border-radius: 4px;      background: #fff;      border: 1px solid #e2e8f0;      flex-shrink: 0;    }    .tg-df-voucher-content {      flex: 1;      min-width: 0;    }    .tg-df-voucher-title {      font-size: 14px;      font-weight: 600;      margin: 0 0 4px 0;      line-height: 1.3;      color: #0f172a;    }    .tg-df-voucher-expiry {      font-size: 12px;      color: #64748b;      display: flex;      align-items: center;      gap: 4px;      margin-top: 6px;    }    .tg-df-voucher-code {      display: inline-flex;      align-items: center;      background: #f1f5f9;      border: 1px dashed #cbd5e1;      padding: 6px 10px;      font-family: monospace;      font-weight: 700;      font-size: 14px;      color: #0f172a;      border-radius: 4px;      margin-top: 8px;      cursor: pointer;      transition: all 0.2s ease;    }    .tg-df-voucher-code:hover {      background: #e2e8f0;      border-color: #94a3b8;    }    .tg-df-voucher-code.copied {      background: #ecfdf5;      border-color: #10b981;      color: #10b981;    }    .tg-df-voucher-cta {      display: inline-block;      margin-top: 8px;      font-size: 13px;      font-weight: 600;      color: #2563eb;      text-decoration: none;    }    .tg-df-card-title {      font-size: 15px;      font-weight: 400;      line-height: 1.4;      margin: 0 0 12px 0;      color: var(--tg-df-text);      display: -webkit-box;      -webkit-line-clamp: 2;      -webkit-box-orient: vertical;      overflow: hidden;    }    .tg-df-card-footer {      margin-top: auto;      display: flex;      flex-direction: column;      width: 100%;    }    .tg-df-card-price-group {      display: flex;      flex-direction: row;      align-items: center;      gap: 8px;      margin-bottom: 12px;    }    .tg-df-card-price {      font-size: 16px;      font-weight: 700;      color: #dc2626; /* Red price */      line-height: 1;    }        .tg-df-card-msrp {      font-size: 13px;      color: var(--tg-df-text-muted);      text-decoration: line-through;    }    .tg-df-container .tg-df-card-cta {      display: flex;      align-items: center;      justify-content: center;      width: 100%;      box-sizing: border-box;      background-color: #1f69ff;      color: #ffffff;      font-size: 12px;      font-weight: 700;      text-transform: uppercase;      letter-spacing: 0.5px;      padding: 12px 16px;      border-radius: 0;      border: none;      cursor: pointer;      transition: background-color 0.2s ease;    }    .tg-df-card:hover .tg-df-card-cta,    .tg-df-card-cta:hover {      background-color: #1555cc;    }    .tg-df-container .tg-df-card-cta.tg-df-cta-savings-squad {      background-color: #3c8d0d;    }    .tg-df-card:hover .tg-df-card-cta.tg-df-cta-savings-squad,    .tg-df-card-cta.tg-df-cta-savings-squad:hover {      background-color: #2b6509;    }    /*       5. State & Skeleton Styles    */    .tg-df-message {      grid-column: 1 / -1;      text-align: center;      padding: 48px 24px;      color: var(--tg-df-text-muted);      font-size: 16px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;    }    @keyframes tg-df-shimmer {      0% { background-position: -200% 0; }      100% { background-position: 200% 0; }    }    .tg-df-skeleton {      background: linear-gradient(90deg, var(--tg-df-bg-secondary) 25%, #e2e8f0 50%, var(--tg-df-bg-secondary) 75%);      background-size: 200% 100%;      animation: tg-df-shimmer 1.5s infinite;      border-radius: 4px;    }    .tg-df-skeleton-img {      width: 100%;      height: 100%;      position: absolute;      top: 0; left: 0;    }        .tg-df-skeleton-text {      height: 16px;      margin-bottom: 8px;      width: 100%;    }    .tg-df-skeleton-text.short { width: 40%; }    .tg-df-skeleton-text.title { height: 20px; margin-bottom: 16px; }    /* Editor Floating Bar & Elements */    .tg-df-editor-bar {      position: sticky;      top: 0;      z-index: 1000;      background: #111827;      color: #fff;      padding: 12px 16px;      border-radius: 8px;      margin-bottom: 16px;      display: flex;      align-items: center;      justify-content: space-between;      box-shadow: 0 4px 12px rgba(0,0,0,0.15);    }    .tg-df-editor-bar-text {      font-weight: 600;      font-size: 14px;    }    .tg-df-editor-copy-btn {      background: #10b981;      color: #fff;      padding: 6px 16px;      border: none;      border-radius: 4px;      font-weight: 600;      cursor: pointer;      display: flex;      align-items: center;      font-size: 13px;    }    .tg-df-editor-copy-btn:hover { background: #059669; }        .tg-df-deal-checkbox {      position: absolute;      top: 12px;      right: 12px;      z-index: 10;      width: 20px;      height: 20px;      cursor: pointer;      pointer-events: auto;    }    /*       6. Mobile List View (Stacks into a cleaner horizontal row/list)    */    @container tg-df (max-width: 599px) {      .tg-df-controls {        padding: 0 16px;      }            .tg-df-top-bar {        width: 100%;      }            .tg-df-settings-dropdown {        position: fixed;        top: auto;        bottom: 0;        left: 0;        right: 0;        width: 100%;        border-radius: 20px 20px 0 0;        padding: 24px;        box-shadow: 0 -8px 32px rgba(0,0,0,0.15);        z-index: 1000;        border: none;        border-top: 1px solid var(--tg-df-border);      }            .tg-df-settings-dropdown-backdrop.active {        background: rgba(0,0,0,0.4);      }            .tg-df-search-wrapper {        box-shadow: 0 0 16px rgba(0,0,0,0.08);      }            .tg-df-filters {        width: calc(100% + 32px);        margin: 0 -16px;        padding: 0 16px 4px 16px;        display: flex;        justify-content: flex-start;        gap: 8px;        flex-wrap: nowrap;        overflow-x: auto;        -webkit-overflow-scrolling: touch;        scrollbar-width: none;      }      .tg-df-filters::after {        content: "";        display: block;        flex: 0 0 8px;      }      .tg-df-filters::-webkit-scrollbar {        display: none;      }            .tg-df-sort-wrapper {        flex: 0 0 max(42%, 130px);        min-width: 0;      }      .tg-df-sort-wrapper.tg-df-price-range-wrapper {        flex: 0 0 auto;        min-width: max-content;      }            .tg-df-sort-select, .tg-df-filter-select {        width: 100%;        text-align: left;        padding: 10px 24px 10px 32px;        background-position: right 8px center;        text-overflow: ellipsis;        white-space: nowrap;        overflow: hidden;      }      .tg-df-sort-icon {        left: 10px;      }      .tg-df-grid:not(.layout-grid):not(.layout-row),      .tg-df-grid.layout-row {        grid-template-columns: 1fr;        gap: 16px;      }            .tg-df-grid.tg-df-grid-auto {        padding-top: 24px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card,      .tg-df-grid.layout-row .tg-df-card {        flex-direction: row;        align-items: stretch;        height: auto;        box-shadow: none; /* simple line on mobile if preferred, or keep */        border-bottom: 1px solid var(--tg-df-border);      }      .tg-df-grid.tg-df-grid-auto .tg-df-card:hover,      .tg-df-grid.layout-row .tg-df-card:hover {        box-shadow: none;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-image-box,      .tg-df-grid.layout-row .tg-df-card-image-box {        width: 120px;        min-width: 120px;        aspect-ratio: 3/4;        border-right: none;        padding: 12px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-body,      .tg-df-grid.layout-row .tg-df-card-body {        padding: 12px;        justify-content: space-between;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-title,      .tg-df-grid.layout-row .tg-df-card-title {        font-size: 14px;        margin-bottom: 12px;        -webkit-line-clamp: 3;      }      /* Single column mobile grid override */      .tg-df-grid.layout-grid {        grid-template-columns: 1fr;        gap: 16px;      }      .tg-df-grid.layout-grid .tg-df-card-image-box {        padding: 12px;      }      .tg-df-grid.layout-grid .tg-df-card-body {        padding: 10px;      }      .tg-df-grid.layout-grid .tg-df-card-title {        font-size: 13px;        -webkit-line-clamp: 3;        margin-bottom: 8px;      }      .tg-df-grid.layout-grid .tg-df-card-price {        font-size: 14px;      }            .tg-df-card-footer {        flex-direction: column;        align-items: stretch;        gap: 0;        width: 100%;        min-width: 0;      }      .tg-df-card-merchant-pill {        margin-bottom: 4px;      }      .tg-df-card-price-group {        flex: 1 1 auto;        margin-bottom: 8px;      }      .tg-df-card-price {        font-size: 16px;      }      .tg-df-card-msrp {        display: block;       }      .tg-df-grid.layout-row .tg-df-card-cta,      .tg-df-container .tg-df-card-cta {        width: 100%;        max-width: none;        min-width: 0;        box-sizing: border-box;        padding: 8px 16px;        font-size: 12px;        flex: 0 0 auto;        text-align: center;        white-space: normal;        line-height: 1.2;      }    }    .tg-df-container.is-carousel {      min-height: 760px;      background-color: #E7F0FF;      padding: 0 0 24px 0;      border-radius: 24px;    }    .tg-df-container.is-carousel.hide-header-details {      min-height: 480px;    }    /*       7. Carousel View Mode    */    .tg-df-container .tg-df-carousel-host {      /* Layout is now handled by container wrapper */    }    .tg-df-container .tg-df-carousel-eyebrow {      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      padding: 24px 16px 0 16px;      display: none;    }    .tg-df-container .tg-df-carousel-query-title {      color: #011535;      font-size: 28px;      font-weight: 600;      padding: 0 16px 24px 16px;      line-height: 1.2;      display: none;    }    .tg-df-container .tg-df-carousel-blue-box {      background-color: transparent;      border-radius: 0;      padding: 24px 24px 0 24px;      margin: 0;      color: #1F69FF;          position: relative;      overflow: hidden;    }    .tg-df-container .tg-df-carousel-bg-circle-1 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-2 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-3 {      display: none;    }    .tg-df-container .tg-df-carousel-box-content {      position: relative;      z-index: 10;    }    .tg-df-container .tg-df-carousel-box-eyebrow {      background-color: transparent;      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      display: inline-block;      padding: 0;      border-radius: 0;    }    .tg-df-container .tg-df-carousel-box-title {      font-size: 28px;      font-weight: 600;      line-height: 1.2;      margin-top: 8px;      color: #1e293b;    }    .tg-df-container .tg-df-countdown-wrapper {      position: absolute;      top: 0;      right: 0;      display: flex;      flex-direction: column;      align-items: flex-end;      gap: 12px;      transform: scale(0.67);      transform-origin: top right;    }    .tg-df-container .tg-df-countdown-title {      font-size: 16px;      text-align: center;      width: 100%;      font-weight: 600;      color: #011535;      margin: 0;    }    .tg-df-container .tg-df-countdown-blocks {      display: flex;      gap: 16px;    }    .tg-df-container .tg-df-countdown-item {      display: flex;      flex-direction: column;      align-items: center;      gap: 4px;    }    .tg-df-container .tg-df-countdown-box {      width: 59px;      height: 59px;      background: #03FE9E;      border-radius: 15px;      display: flex;      align-items: center;      justify-content: center;    }    .tg-df-container .tg-df-countdown-num {      font-family: 'Inter', sans-serif;      font-weight: 700;      font-size: 20px;      line-height: normal;      color: #011535;    }    .tg-df-container .tg-df-countdown-label {      font-family: 'Inter', sans-serif;      font-weight: 500;      font-size: 16px;      line-height: normal;      color: #1e293b;      text-transform: uppercase;    }    .tg-df-container .tg-df-carousel-box-subtitle {      font-size: 16px;      margin-top: 8px;      font-weight: 300;      color: #1e293b;      line-height: 24px;    }    .tg-df-container .tg-df-carousel-roundels-wrapper {      position: relative;      margin-top: 24px;      margin-left: -24px;      margin-right: -24px;    }    .tg-df-container .tg-df-carousel-roundels {      display: flex;      gap: 16px;      overflow-x: auto;            scrollbar-width: none;      padding-top: 12px;      padding-bottom: 24px;      padding-left: 24px;      padding-right: 24px;      margin-left: 0;      margin-right: 0;    }        .tg-df-container .tg-df-carousel-scroll-left,    .tg-df-container .tg-df-carousel-scroll-right {      position: absolute;      top: 50%;      transform: translateY(-50%);      height: 36px;      width: 36px;      display: flex;      align-items: center;      justify-content: center;      border-radius: 50%;      background-color: #ffffff;      border: 1px solid #e2e8f0;      box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);      color: #1F69FF;      cursor: pointer;      transition: all 0.2s;      margin-top: -4px;      z-index: 20;    }    .tg-df-container .tg-df-carousel-scroll-left { left: 8px; }    .tg-df-container .tg-df-carousel-scroll-right { right: 8px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left { left: 0px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right { right: 0px; }    .tg-df-carousel-filters-outer { margin-left: -24px; margin-right: -24px; padding-left: 24px; padding-right: 24px; }    @container tg-df (max-width: 599px) { .tg-df-carousel-filters-outer { margin-left: -16px; margin-right: -16px; padding-left: 16px; padding-right: 16px; } }        .tg-df-container .tg-df-carousel-scroll-left:hover,    .tg-df-container .tg-df-carousel-scroll-right:hover {      background-color: #f8fafc;      border-color: #cbd5e1;    }        .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-left,    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right,    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left,    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right {      background-color: rgba(255, 255, 255, 0.4);      border: none;      box-shadow: none;      backdrop-filter: blur(4px);      -webkit-backdrop-filter: blur(4px);    }    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-left { left: 0; }    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right { right: 0; }    .tg-df-grid-wrapper .tg-df-carousel-scroll-left { left: 0; }    .tg-df-grid-wrapper .tg-df-carousel-scroll-right { right: 0; }        .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-left:hover,    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right:hover {      background-color: rgba(255, 255, 255, 0.6);      border: none;    }    .tg-df-container .tg-df-carousel-roundels::-webkit-scrollbar {      display: none;    }    .tg-df-container .tg-df-carousel-roundels::after {      content: "";      flex: 0 0 32px;    }    .tg-df-container .tg-df-roundel {      display: flex;      flex-direction: column;      align-items: center;      gap: 8px;      cursor: pointer;      min-width: 120px;      flex-shrink: 0;    }    .tg-df-container .tg-df-roundel-img-box {      width: 120px;      height: 120px;      border-radius: 50%;      background: white;      display: flex;      align-items: center;      justify-content: center;      overflow: hidden;      box-shadow: 0px 3px 14px 0px rgba(30, 41, 59, 0.08);      transition: box-shadow 0.2s;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box img {      transform: scale(1.08);    }    .tg-df-container .tg-df-roundel-img-box img {      width: 100%;      height: 100%;      object-fit: contain;      padding: 10px;      box-sizing: border-box;      transition: transform 0.3s ease;    }    .tg-df-container .tg-df-roundel-label {      font-size: 13px;      font-weight: 400;      color: #1e293b;      text-align: center;      transition: font-weight 0.2s;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-label {      font-weight: 700;    }    .tg-df-container .tg-df-carousel-filters-label {      font-size: 16px;      font-weight: 400;      color: #1e293b;      white-space: nowrap;      margin-right: 4px;    }    .tg-df-container .tg-df-carousel-filters-wrap {      display: flex;      align-items: center;      flex-wrap: nowrap;      gap: 8px;      margin-top: 8px;      overflow-x: auto;      scrollbar-width: none;      -webkit-overflow-scrolling: touch;      padding-bottom: 8px;      margin-left: -24px;      margin-right: -24px;      padding-left: 24px;      padding-right: 24px;    }    .tg-df-container .tg-df-carousel-filters-wrap::-webkit-scrollbar {      display: none;    }        .tg-df-container .tg-df-carousel-filter-btn img,    .tg-df-container .tg-df-carousel-filter-btn picture {      height: 20px;      width: 20px;      object-fit: contain;      object-position: center;      display: inline-flex;      align-items: center;      justify-content: center;      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn picture img {      margin-right: 0;      height: 100%;      width: 100%;    }    .tg-df-container .tg-df-carousel-filter-btn img.active-img,    .tg-df-container .tg-df-carousel-filter-btn picture:has(.active-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.inactive-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.inactive-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.active-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.active-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.active-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.active-img) {      display: inline-flex;    }    .tg-df-container .tg-df-carousel-filter-btn {      background: #ffffff;      border: 2px solid #1e293b;      color: #1e293b;      border-radius: 24px;      padding: 6px 16px;      font-size: 14px;      font-weight: 600;      cursor: pointer;      transition: all 0.2s;      flex-shrink: 0;      white-space: nowrap;      display: inline-flex;      align-items: center;      justify-content: center;      min-height: 36px;      box-sizing: border-box;    }    .tg-df-container .tg-df-carousel-filter-btn svg {      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn:hover {      background: #1e293b;      color: white;      border-color: #1e293b;    }    .tg-df-container .tg-df-carousel-filter-btn.active {      background: #1e293b;      color: white;      border-color: #1e293b;    }        .tg-df-grid.carousel-compact {      display: flex;      flex-wrap: nowrap;      overflow-x: auto;      gap: 16px;      padding: 16px 24px;      align-items: stretch;      scrollbar-width: none;    }    .tg-df-grid.carousel-compact::after {      content: "";      flex: 0 0 32px;    }    .tg-df-grid-wrapper {      position: relative;    }    .tg-df-grid.carousel-compact::-webkit-scrollbar {      display: none;    }    .tg-df-grid.carousel-compact .tg-df-load-more-card {      flex: 0 0 auto;      width: 100px;      border-radius: 15px;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      border: 2px solid #1e293b;      background: white;      color: #1e293b;      display: flex;      flex-direction: column;      justify-content: center;      align-items: center;      font-weight: 600;      font-size: 14px;      cursor: pointer;      padding: 16px;      text-align: center;      transition: all 0.2s;    }    .tg-df-grid.carousel-compact .tg-df-load-more-card:hover {      background: #1e293b;      color: white;    }    .tg-df-grid.carousel-compact .tg-df-card {      flex: 0 0 auto;      width: 200px;      min-height: auto;      height: auto;      display: flex;      flex-direction: column;      border-radius: 15px;      border: none;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      overflow: visible;    }    .tg-df-grid.carousel-compact .tg-df-card-image-box {      padding: 12px;      background-color: transparent;      border-radius: 15px 15px 0 0;      height: 130px;    }    .tg-df-grid.carousel-compact .tg-df-card-image {      mix-blend-mode: normal;    }    .tg-df-grid.carousel-compact .tg-df-card-discount-badge {      border-radius: 0;      top: 0px;      left: 0px;      padding: 4px 8px;      font-size: 11px;    }    .tg-df-grid.carousel-compact .tg-df-card-body {      padding: 8px 12px 12px 12px;    }    .tg-df-grid.carousel-compact .tg-df-card-title {      font-size: 14px;      font-weight: 400;      -webkit-line-clamp: 2;      margin-bottom: 8px;      color: #011535;    }    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):not(:has(.tg-df-tag-prime)):not(:has(.tg-df-coupon-wrapper:not([style*="none"]))) > .tg-df-card-title,    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):has(> .tg-df-card-title:first-child) > .tg-df-card-title {      -webkit-line-clamp: 3;    }    .tg-df-grid.carousel-compact .tg-df-card-cta {      border-radius: 5px;      padding: 8px 10px;      margin-top: 4px;      background-color: #1F69FF;    }    .tg-df-grid.carousel-compact .tg-df-card-price-group {      margin-bottom: 2px;    }    .tg-df-grid.carousel-compact .tg-df-card-merchant-pill {      margin-bottom: 2px;    }    @container tg-df (max-width: 599px) {      .tg-df-container .tg-df-carousel-blue-box-title {        font-size: 24px;      }      .tg-df-container .tg-df-countdown-title {        display: none;      }      .tg-df-container .tg-df-countdown-wrapper {        position: absolute;        top: 0;        right: 0;        align-items: flex-end;        transform: scale(0.45);        transform-origin: top right;      }      .tg-df-container .tg-df-roundel {        min-width: 88px;      }      .tg-df-container .tg-df-roundel-img-box {        width: 88px;        height: 88px;      }    }    /* REPLICA BLOCK STYLES */    .tg-df-grid.layout-replica-2 { grid-template-columns: repeat(2, 1fr) !important; gap: 20px; }    .tg-df-grid.layout-replica-1 { grid-template-columns: 1fr !important; gap: 20px; }        .tg-df-container .hawk-deal-widget-container { border-bottom: 1px solid #e5e7eb; display: flex; flex-direction: column; margin: 0; padding: 20px 0; box-sizing: border-box; font-family: inherit; }    .tg-df-container .hawk-deal-widget-wrap { display: flex; flex-direction: row; align-items: flex-start; width: 100%; gap: 24px; }    .tg-df-container .hawk-deal-widget-image-container { display: flex; flex-shrink: 0; justify-content: center; width: 160px; height: 160px; align-items: center; background: white; margin-bottom: 0px; }    .tg-df-container .hawk-deal-widget-title-product-title { color: #111827; font-size: 18px; font-weight: 700; line-height: 1.4; display: inline; }    .tg-df-container .hawk-deal-widget-title-price { font-size: 18px; font-weight: 700; line-height: 1.4; white-space: nowrap; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-price-now { font-weight: 700; }    .tg-df-container .hawk-deal-widget-title-retailer-price:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-title-retailer { font-size: 18px; font-weight: 700; line-height: 1.4; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-was-price { color: #dc2626; font-size: 16px; font-weight: 500; line-height: 1.4; text-decoration: line-through; white-space: nowrap; margin-left: 8px; margin-right: 8px; }    .tg-df-container .hawk-deal-widget-text-body-container { position: relative; width: 100%; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-text-body-main { font-size: 16px; width: 100%; margin-bottom: 12px; }    .tg-df-container .hawk-deal-widget-text-body-description { display: block; font-size: 15px; margin-top: 12px; color: #4b5563; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-body-description p { margin: 0; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-cta-container { display: flex; flex-direction: column; gap: 12px; width: 100%; flex: 1; min-width: 0; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-footer { display: flex; justify-content: flex-end; width: 100%; margin-top: auto; }    .tg-df-container .hawk-deal-widget-button-wrapper { display: flex; flex-direction: column; align-items: flex-end; justify-content: flex-end; width: 100%; }    .tg-df-container .hawk-deal-widget-preferred-partner-wrapper { display: flex; flex-direction: row; }        @container tg-df (min-width: 600px) {      .tg-df-mobile-only { display: none !important; }    }    @container tg-df (max-width: 599px) {      .tg-df-desktop-only { display: none !important; }      .tg-df-grid.layout-replica-2 { grid-template-columns: 1fr !important; }      .tg-df-grid.savings-squad-cards { grid-template-columns: 1fr !important; display: flex; flex-direction: column; }    }    .tg-df-grid.savings-squad-cards .tg-df-card-title {      -webkit-line-clamp: unset !important;      display: block !important;      overflow: visible !important;    }    @container tg-df (max-width: 500px) {      .tg-df-container .hawk-deal-widget-wrap { display: block; }      .tg-df-container .hawk-deal-widget-image-container { display: block; float: left; margin: 0 16px 8px 0; width: 120px; max-width: 120px; height: auto; align-items: normal; justify-content: normal; }      .tg-df-container .hawk-deal-widget-text-cta-container { display: block; text-align: left; }      .tg-df-container .hawk-deal-widget-footer { display: block; margin-top: 16px; clear: both; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper .hawk-deal-widget-preferred-partner-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-affiliate-link-deal-button { box-sizing: border-box !important; display: flex !important; max-width: none !important; width: 100% !important; margin: 0 !important; }    }        .tg-df-container .hawk-affiliate-link-deal-button {       align-items: center; background-color: #5aaf0b; box-sizing: border-box; color: #ffffff !important; display: flex; font-size: 14px; font-weight: 700; justify-content: center; letter-spacing: 0.5px; line-height: 1; min-width: 160px; padding: 14px 24px; text-align: center; text-decoration: none; text-transform: uppercase; width: 100%; word-break: normal; border-radius: 4px; border: 0; transition: background-color 0.2s;     }    .tg-df-container .hawk-affiliate-link-deal-button:hover { background-color: #4a9109; text-decoration: none; }    .tg-df-container .hawk-lazy-image-deal-widget { display: block; height: auto; margin: auto; max-height: 160px; max-width: 100%; mix-blend-mode: multiply; object-fit: contain; }    .tg-df-container .hawk-deal-widget-text-cta-container a { color: #2563eb; text-decoration: none; display: inline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:has(.hawk-deal-widget-title-product-title) { color: #111827; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-product-title,    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-retailer-price { text-decoration: underline; }  \x3C/style>  \x3C!-- Widget Container --\x3E  \x3Cdiv class="tg-df-container" id="signal-deals-finder-root">    \x3C!-- Editor Floating Bar --\x3E    \x3Cdiv class="tg-df-editor-bar" id="tg-df-editor-bar" style="display:none;">      \x3Cdiv class="tg-df-editor-bar-text" style="display: flex; align-items: center;">        \x3Cspan id="tg-df-selected-count">0\x3C/span>\x26nbsp;Deals Selected        \x3Cbutton class="tg-df-editor-clear-btn" id="tg-df-editor-clear" type="button" style="margin-left: 12px; font-size: 13px; color: #9ca3af; background: none; border: none; cursor: pointer; text-decoration: underline;">Clear All\x3C/button>      \x3C/div>      \x3Cbutton class="tg-df-editor-copy-btn" id="tg-df-editor-copy" type="button">        \x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">\x3C/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">\x3C/path>\x3C/svg>        Copy to CMS      \x3C/button>    \x3C/div>    \x3Cdiv class="tg-df-carousel-host" id="tg-df-carousel-host" style="display: none;">      \x3Cdiv class="tg-df-carousel-eyebrow">DEAL FINDER\x3C/div>      \x3Cdiv class="tg-df-carousel-query-title" id="tg-df-carousel-title-label">Best Deals\x3C/div>            \x3Cdiv class="tg-df-carousel-blue-box">        \x3Cdiv class="tg-df-carousel-bg-circle-1" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-2" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-3" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-box-content">          \x3Cdiv class="tg-df-countdown-wrapper" id="tg-df-countdown-wrapper" style="display:none;">            \x3Cdiv class="tg-df-countdown-title" id="tg-df-countdown-title">Prime Day starts in\x3C/div>            \x3Cdiv class="tg-df-countdown-blocks">              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-days">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">DAYS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-hrs">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">HRS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-min">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">MIN\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-sec">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">SEC\x3C/div>\x3C/div>            \x3C/div>          \x3C/div>          \x3Cdiv class="tg-df-carousel-box-eyebrow">DEAL FINDER\x3C/div>          \x3Cdiv class="tg-df-carousel-box-title">Find Deals Fast\x3C/div>          \x3Cdiv class="tg-df-carousel-box-subtitle">The latest deals from the biggest retailers, all in one place\x3C/div>                    \x3Cdiv class="tg-df-carousel-roundels-wrapper">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-roundels">            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>          \x3C/div>          \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-carousel-filters-outer" style="position: relative;">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-filters-wrap">                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="0">All\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_lightning">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_prime">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-d="10">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 10% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="15">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 15% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="25">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 25% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-pr="under50">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>            Under $50\x3C/button>        \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3C/div>    \x3C/div>    \x3C/div>      \x3C!-- Search & Filter Controls --\x3E    \x3Cdiv class="tg-df-controls" id="tg-df-controls" style="display:flex;">      \x3Cdiv class="tg-df-top-bar">        \x3Cdiv class="tg-df-search-wrapper">          \x3Cinput type="text" class="tg-df-search-input" placeholder="Search for deals, products, or brands...">          \x3Cbutton type="button" class="tg-df-search-btn" aria-label="Search">              \x3Csvg class="tg-df-search-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">                \x3Cpath d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/>              \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-autocomplete-dropdown" id="tg-df-autocomplete">\x3C/div>        \x3C/div>                \x3Cdiv class="tg-df-settings-wrapper">          \x3Cbutton type="button" class="tg-df-settings-btn" aria-label="Settings" id="tg-df-settings-toggle">            \x3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20">                \x3Cpath d="M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.06-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.73 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.06.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .43-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.49-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z"/>            \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-settings-dropdown-backdrop" id="tg-df-settings-backdrop">\x3C/div>          \x3Cdiv class="tg-df-settings-dropdown" id="tg-df-settings-panel">            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Search Region\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-region-select">                \x3Coption value="auto">🌍 Auto-detect\x3C/option>                \x3Coption value="US">🇺🇸 United States (US)\x3C/option>                \x3Coption value="GB">🇬🇧 United Kingdom (UK)\x3C/option>                \x3Coption value="CA">🇨🇦 Canada (CA)\x3C/option>                \x3Coption value="AU">🇦🇺 Australia (AU)\x3C/option>                \x3Coption value="DE">🇩🇪 Germany (DE)\x3C/option>                \x3Coption value="FR">🇫🇷 France (FR)\x3C/option>                \x3Coption value="IT">🇮🇹 Italy (IT)\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Retailer\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-retailer-select">                \x3Coption value="">All Retailers\x3C/option>                \x3Coption value="Amazon">Amazon\x3C/option>                \x3Coption value="Walmart">Walmart\x3C/option>                \x3Coption value="Best Buy">Best Buy\x3C/option>                \x3Coption value="Target">Target\x3C/option>                \x3Coption value="John Lewis">John Lewis\x3C/option>                \x3Coption value="Currys">Currys\x3C/option>                \x3Coption value="Argos">Argos\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Offer Type\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-offer-type-select">                \x3Coption value="">All Offers\x3C/option>                \x3Coption value="amazon_prime">Amazon Prime\x3C/option>                \x3Coption value="recommended_promo">Recommended Promo\x3C/option>                \x3Coption value="amazon_lightning">Amazon Lightning Deal\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Result Count\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-rows-select">                \x3Coption value="3">3 Items\x3C/option>                \x3Coption value="4">4 Items\x3C/option>                \x3Coption value="6">6 Items\x3C/option>                \x3Coption value="8">8 Items\x3C/option>                \x3Coption value="12" selected>12 Items\x3C/option>                \x3Coption value="24">24 Items\x3C/option>                \x3Coption value="48">48 Items\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item tg-df-dl-row">              \x3Cdiv>                \x3Cspan class="tg-df-dl-row-text">Deal Mode\x3C/span>                \x3Cspan class="tg-df-dl-row-subtext">Only show products with active offers or previous prices (was_price)\x3C/span>              \x3C/div>              \x3Clabel class="tg-df-toggle">                \x3Cinput type="checkbox" id="tg-df-deal-mode">                \x3Cspan class="tg-df-slider">\x3C/span>              \x3C/label>            \x3C/div>            \x3Cdiv class="tg-df-setting-item tg-df-dl-row">              \x3Cdiv>                \x3Cspan class="tg-df-dl-row-text">Editor Mode\x3C/span>                \x3Cspan class="tg-df-dl-row-subtext">Enable multi-select to copy deals to CMS\x3C/span>              \x3C/div>              \x3Clabel class="tg-df-toggle">                \x3Cinput type="checkbox" id="tg-df-editor-mode">                \x3Cspan class="tg-df-slider">\x3C/span>              \x3C/label>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">View Mode\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-view-mode-select">                \x3Coption value="auto">Auto Collection\x3C/option>                \x3Coption value="carousel">Carousel\x3C/option>                \x3Coption value="savings_squad">Savings Squad\x3C/option>                \x3Coption value="grid">Grid (Columns)\x3C/option>                \x3Coption value="row">Row (List)\x3C/option>              \x3C/select>            \x3C/div>          \x3C/div>        \x3C/div>      \x3C/div>      \x3Cdiv class="tg-df-filters">        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-category-filter-wrapper" style="display: none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-category-filter" aria-label="Category">            \x3Coption value="all">All Categories\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-multiselect-container" id="tg-df-brand-filter-wrapper" style="display:none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M4.25 5.61C6.27 8.2 10 13 10 13v6c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-6s3.72-4.8 5.74-7.39A.998.998 0 0 0 18.95 4H5.04c-.83 0-1.3.95-.79 1.61z"/>          \x3C/svg>          \x3Cdiv class="tg-df-filter-select tg-df-multiselect-trigger" id="tg-df-brand-trigger" tabindex="0">            Any Brand          \x3C/div>          \x3Cdiv class="tg-df-multiselect-dropdown" id="tg-df-brand-dropdown">            \x3C!-- Populated via script --\x3E          \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M9 3L5 6.99h3V14h2V6.99h3L9 3zm7 14.01V10h-2v7.01h-3L15 21l4-3.99h-3z"/>          \x3C/svg>          \x3Cselect class="tg-df-sort-select" aria-label="Sort Deals">            \x3Coption value="date_desc">Newest First\x3C/option>            \x3Coption value="best_match">Sort by: Match\x3C/option>            \x3Coption value="price_asc">Price Low to High\x3C/option>            \x3Coption value="price_desc">Price High to Low\x3C/option>            \x3Coption value="discount_desc">Biggest Discount\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-price-range-wrapper" id="tg-df-custom-price-wrapper" style="display: flex; align-items:center; justify-content:center; padding: 10px 20px; gap: 8px; border: 1px solid var(--tg-df-border); border-radius: 100px; background-color: var(--tg-df-bg);">          \x3Cspan style="font-size:14px; font-weight:500; color:var(--tg-df-text-primary);">Price\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-min" placeholder="Min" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">          \x3Cspan style="color:var(--tg-df-text-muted)">-\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-max" placeholder="Max" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-legacy-price-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-price-filter" aria-label="Filter Prices">            \x3Coption value="all">All Prices\x3C/option>            \x3Coption value="under50">Under $50\x3C/option>            \x3Coption value="50_100">$50 - $100\x3C/option>            \x3Coption value="100_200">$100 - $200\x3C/option>            \x3Coption value="200_500">$200 - $500\x3C/option>            \x3Coption value="over500">Over $500\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-discount-filter-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-discount-filter" aria-label="Discount Amount">            \x3Coption value="all">Any discount\x3C/option>            \x3Coption value="5">Min 5%\x3C/option>            \x3Coption value="10">Min 10%\x3C/option>            \x3Coption value="15">Min 15%\x3C/option>            \x3Coption value="20">Min 20%\x3C/option>            \x3Coption value="25">Min 25%\x3C/option>            \x3Coption value="30">Min 30%\x3C/option>            \x3Coption value="40">Min 40%\x3C/option>            \x3Coption value="50">Min 50%\x3C/option>            \x3Coption value="60">Min 60%\x3C/option>            \x3Coption value="70">Min 70%\x3C/option>          \x3C/select>        \x3C/div>      \x3C/div>    \x3C/div>    \x3C!-- Deals Grid Wrapper --\x3E    \x3Cdiv class="tg-df-grid-wrapper tg-df-carousel-cards-wrapper" id="tg-df-grid-wrapper">      \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3Cdiv class="tg-df-grid" id="tg-df-grid">        \x3C!-- Content populated by JavaScript --\x3E      \x3C/div>      \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>    \x3C/div>        \x3C!-- Vouchers Modal --\x3E    \x3Cdiv class="tg-df-modal-backdrop" id="tg-df-vouchers-modal">      \x3Cdiv class="tg-df-modal">        \x3Cdiv class="tg-df-modal-header">          \x3Ch3 class="tg-df-modal-title" id="tg-df-vouchers-title">Available Coupons & Deals\x3C/h3>          \x3Cbutton class="tg-df-modal-close" id="tg-df-vouchers-close">            \x3Csvg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">              \x3Cline x1="18" y1="6" x2="6" y2="18">\x3C/line>              \x3Cline x1="6" y1="6" x2="18" y2="18">\x3C/line>            \x3C/svg>          \x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-modal-body" id="tg-df-vouchers-content">          \x3C!-- Vouchers injected here --\x3E        \x3C/div>      \x3C/div>    \x3C/div>  \x3C/div>`;      if (!template) {        template = document.createElement('template');        template.innerHTML = rawTemplate;      }      let shadowRoot = null;      if (hostContainer && template) {        hostContainer.setAttribute('data-initialized', 'true');        shadowRoot = hostContainer.attachShadow({ mode: 'open' });        shadowRoot.appendChild(template.content.cloneNode(true));      }      class DealsFinderWidget {        constructor(config) {          this.rootNode = config.rootNode || document;          this.hostContainer = config.hostContainer || null;          this.rootId = config.rootId || 'signal-deals-finder-root';          this.root = this.rootNode.querySelector('#' + this.rootId);          if (!this.root) return;          this.widgetId = (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'widget-' + Date.now() + '-' + Math.random().toString(36).slice(2);          this.grid = this.root.querySelector('#tg-df-grid');          this.tagsContainer = this.root.querySelector('#tg-df-tags-container');          this.categoryFilter = this.root.querySelector('#tg-df-category-filter');          this.categoryFilterWrapper = this.root.querySelector('#tg-df-category-filter-wrapper');          this.searchInput = this.root.querySelector('.tg-df-search-input');          this.autocompleteDropdown = this.root.querySelector('#tg-df-autocomplete');          this.sortSelect = this.root.querySelector('.tg-df-sort-select');          this.searchBtn = this.root.querySelector('.tg-df-search-btn');                    this.settingsToggle = this.root.querySelector('#tg-df-settings-toggle');          this.settingsPanel = this.root.querySelector('#tg-df-settings-panel');          this.settingsBackdrop = this.root.querySelector('#tg-df-settings-backdrop');          this.regionSelect = this.root.querySelector('#tg-df-region-select');          this.retailerSelect = this.root.querySelector('#tg-df-retailer-select');          this.offerTypeSelect = this.root.querySelector('#tg-df-offer-type-select');          this.viewModeSelect = this.root.querySelector('#tg-df-view-mode-select');          this.rowsSelect = this.root.querySelector('#tg-df-rows-select');          this.dealModeToggle = this.root.querySelector('#tg-df-deal-mode');          this.editorModeToggle = this.root.querySelector('#tg-df-editor-mode');          this.priceFilter = this.root.querySelector('#tg-df-price-filter');          this.discountFilter = this.root.querySelector('#tg-df-discount-filter');                    this.editorBar = this.root.querySelector('#tg-df-editor-bar');          this.editorSelectedCount = this.root.querySelector('#tg-df-selected-count');          this.editorCopyBtn = this.root.querySelector('#tg-df-editor-copy');          this.editorClearBtn = this.root.querySelector('#tg-df-editor-clear');                    this.apiUrl = 'https://search-api.fie.future.net.uk/widget.php';          this.deals = [];          this.displayLimit = 12;          this.airedaleArticles = null;          this.airedaleTags = [];          this.airedaleTagCounts = {};          this.activeDealTag = null;          this.selectedBrands = [];          this.currentQuery = '';          this.editorMode = this.hostContainer ? this.hostContainer.hasAttribute('data-editor-mode') : false;          this.viewModeOverride = this.hostContainer ? this.hostContainer.getAttribute('data-view-mode') : null;          this.selectedDeals = new Map();                    this.brandFilterWrapper = this.root.querySelector('#tg-df-brand-filter-wrapper');          this.brandTrigger = this.root.querySelector('#tg-df-brand-trigger');          this.brandDropdown = this.root.querySelector('#tg-df-brand-dropdown');                    this.customPriceWrapper = this.root.querySelector('#tg-df-custom-price-wrapper');          this.customPriceMin = this.root.querySelector('#tg-df-custom-price-min');          this.customPriceMax = this.root.querySelector('#tg-df-custom-price-max');          this.legacyPriceWrapper = this.root.querySelector('#tg-df-legacy-price-wrapper');          this.discountFilterWrapper = this.root.querySelector('#tg-df-discount-filter-wrapper');          this.initResizeObserver();          this.init();            if (['carousel', 'carousel-compact', 'auto', 'grid', 'row'].includes(this.getViewMode())) { this.loadCarouselSpreadsheet(); }        }        getViewMode() {          if (this.viewModeOverride && (!this.editorMode || !this.viewModeSelect)) {            return this.viewModeOverride;          }          return (this.viewModeSelect && this.viewModeSelect.value) ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');        }        applyLayoutMode() {          if (!this.grid) return;          const mode = this.getViewMode();          this.grid.classList.remove('layout-row', 'layout-grid', 'tg-df-grid-auto', 'carousel-compact', 'layout-replica-1', 'layout-replica-2');                    const carouselHost = this.root.querySelector('#tg-df-carousel-host');          const controlsDiv = this.root.querySelector('#tg-df-controls');          if (mode === 'carousel' || mode === 'auto' || mode === 'grid' || mode === 'row') {             if (mode === 'carousel') this.grid.classList.add('carousel-compact');             if (carouselHost) carouselHost.style.display = 'block';             if (controlsDiv) controlsDiv.style.display = 'none';             if (this.root.classList.contains('tg-df-container') && mode === 'carousel') {               this.root.classList.add('is-carousel');             } else if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          } else {             if (carouselHost) carouselHost.style.display = 'none';             if (controlsDiv) controlsDiv.style.display = 'flex';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          }          if (mode === 'grid') {            this.grid.classList.add('layout-grid');          } else if (mode === 'row') {            this.grid.classList.add('layout-row');          } else if (mode === 'savings_squad') {            this.grid.classList.add('tg-df-grid-auto', 'savings-squad-cards');          } else if (mode !== 'carousel') {            this.grid.classList.add('tg-df-grid-auto');          }                    const settingsWrapper = this.root.querySelector('.tg-df-settings-wrapper');          if (settingsWrapper) {            settingsWrapper.style.display = mode === 'auto' ? 'none' : 'block';          }          if (this.customPriceWrapper) {             this.customPriceWrapper.style.display = mode === 'auto' ? 'flex' : 'none';          }          if (this.legacyPriceWrapper) {             this.legacyPriceWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }          if (this.discountFilterWrapper) {             this.discountFilterWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }        }        initResizeObserver() {          try {            if (window.parent === window) return;          } catch (e) {            // cross origin frame check threw          }          const emitHeight = () => {            try {              const height = document.documentElement.scrollHeight || document.body.scrollHeight;              const msg = { type: 'embed-size', height: height };              if (window.parent && window.parent !== window) {                window.parent.postMessage(msg, '*');                window.parent.postMessage(JSON.stringify({ ...msg, sentinel: 'amp' }), '*');              }            } catch (e) {}          };                    if (window.ResizeObserver) {            try {              const ro = new ResizeObserver(() => emitHeight());              ro.observe(document.body);              if (this.root) ro.observe(this.root);            } catch(e){ console.warn(e); }          }          window.addEventListener('resize', emitHeight);          setTimeout(emitHeight, 300);        }        initCountdown() {          this.cdWrapper = this.root.querySelector('#tg-df-countdown-wrapper');                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          this.showCountdown = params.get('show_countdown') === 'true';          const showHeaderDetails = params.get('show_header_details') !== 'false';          const eyebrow = this.root.querySelector('.tg-df-carousel-box-eyebrow');          const title = this.root.querySelector('.tg-df-carousel-box-title');          const subtitle = this.root.querySelector('.tg-df-carousel-box-subtitle');          if (!showHeaderDetails) {            let containerElement = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (containerElement) containerElement.classList.add('hide-header-details');            if (eyebrow) eyebrow.style.display = 'none';            if (title) title.style.display = 'none';            if (subtitle) subtitle.style.display = 'none';          }          if (!this.cdWrapper) return;          this.cdTitle = this.root.querySelector('#tg-df-countdown-title');          this.cdDays = this.root.querySelector('#tg-df-cd-days');          this.cdHrs = this.root.querySelector('#tg-df-cd-hrs');          this.cdMin = this.root.querySelector('#tg-df-cd-min');          this.cdSec = this.root.querySelector('#tg-df-cd-sec');          this.updateCountdown();          this.cdInterval = setInterval(() => this.updateCountdown(), 1000);        }        updateCountdown() {          if (!this.cdWrapper) return;          if (!this.showCountdown) {            this.cdWrapper.style.display = 'none';            return;          }          const area = this.getAreaCode();          let offset = '-04:00';          if (['DE', 'FR', 'IT', 'ES', 'NL'].includes(area)) {             offset = '+02:00';          } else if (['GB', 'IE', 'UK'].includes(area)) {             offset = '+01:00';          }          const startTime = new Date('2026-06-23T00:00:00' + offset).getTime();          const endTime = new Date('2026-06-26T00:00:00' + offset).getTime();          const now = Date.now();          let targetTime = 0;          if (now < startTime) {             targetTime = startTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day starts in';             this.cdWrapper.style.display = 'flex';          } else if (now < endTime) {             targetTime = endTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day ends in';             this.cdWrapper.style.display = 'flex';          } else {             this.cdWrapper.style.display = 'none';             if (this.cdInterval) clearInterval(this.cdInterval);             return;          }          const diff = Math.max(0, targetTime - now);          const d = Math.floor(diff / (1000 * 60 * 60 * 24));          const h = Math.floor((diff / (1000 * 60 * 60)) % 24);          const m = Math.floor((diff / 1000 / 60) % 60);          const s = Math.floor((diff / 1000) % 60);          if (this.cdDays) this.cdDays.textContent = d;          if (this.cdHrs) this.cdHrs.textContent = h;          if (this.cdMin) this.cdMin.textContent = m;          if (this.cdSec) this.cdSec.textContent = s;        }        init() {          this.initCountdown();          try {            initAnalytics();          } catch (e) {            console.warn('Deals Widget Analytics Error:', e);          }                    this.bindEvents();                    let initialQuery = '';                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          let initialViewMode = params.get('view_mode');          if (!params.has('search') && !params.has('q') && !params.has('query') && initialViewMode !== 'savings_squad') {             initialQuery = 'Everything';             if (this.discountFilter && !params.has('min_discount_ratio')) {               this.discountFilter.value = '5';             }          }          const website = params.get('website') || 'tomsguide';          this.website = website;          if (website === 'techradar') {            const squadHeader = this.root.querySelector('.tg-df-savings-squad-header');            if (squadHeader) {               const pic = squadHeader.querySelector('picture');               if (pic) pic.style.display = 'none';            }            const style = document.createElement('style');            style.innerHTML = `              .tg-df-container .hawk-affiliate-link-deal-button, .tg-df-container .tg-df-card-cta { background-color: #5DAF08 !important; }              .tg-df-container .hawk-affiliate-link-deal-button:hover, .tg-df-container .tg-df-card-cta:hover { background-color: #4a8c06 !important; }            `;            this.root.appendChild(style);          }                    if (this.regionSelect) {            this.regionSelect.value = params.get('region') || 'auto';            this.updatePriceDropdownCurrency();          }                    if (this.retailerSelect && params.has('retailer')) {            this.retailerSelect.value = params.get('retailer');          }                    if (params.has('brands')) {            const b = params.get('brands');            if (b) {              this.selectedBrands = b.split(',');            }          }                    if (this.offerTypeSelect && params.has('offer_type')) {            this.offerTypeSelect.value = params.get('offer_type');          }          if (params.has('bg_color')) {            const bg = params.get('bg_color');            if (bg === 'white') {              this.root.style.setProperty('background-color', '#ffffff', 'important');            } else if (bg === 'transparent') {              this.root.style.setProperty('background-color', 'transparent', 'important');            } else if (bg === 'light_blue') {              this.root.style.setProperty('background-color', '#E7F0FF', 'important');            }          } else {             this.root.style.removeProperty('background-color');          }                    if (params.has('view_mode')) {            if (this.viewModeSelect) {              this.viewModeSelect.value = params.get('view_mode');            } else {              this.viewModeOverride = params.get('view_mode');            }          }          if (this.rowsSelect && params.has('rows')) {            this.rowsSelect.value = params.get('rows');          }          if (params.has('price')) {            const priceVal = params.get('price');            if (this.priceFilter) {               // Try assigning it directly to select. If it's not present implicitly ignores               this.priceFilter.value = priceVal;            }            if (priceVal.includes('_')) {               const parts = priceVal.split('_');               if (this.customPriceMin && parts[0]) this.customPriceMin.value = parts[0];               if (this.customPriceMax && parts[1]) this.customPriceMax.value = parts[1];            }          }          if (this.discountFilter && params.has('min_discount_ratio')) {            // Need to convert back from ratio (e.g. 0.8) to select value (e.g. "20")            const ratioStr = params.get('min_discount_ratio');            const ratioFloat = parseFloat(ratioStr);            if (!isNaN(ratioFloat)) {               const percentage = Math.round((1 - ratioFloat) * 100);               this.discountFilter.value = percentage.toString();            }          }          if (this.sortSelect) {            this.sortSelect.value = params.get('sort') || 'discount_desc';          }          if (this.dealModeToggle && params.has('deal_mode')) {            this.dealModeToggle.checked = params.get('deal_mode') === 'true' || params.get('deal_mode') === '1';          }                    // Re-apply layout after params have updated control values          this.applyLayoutMode();                    if (params.get('search')) {            initialQuery = params.get('search');          } else if (params.get('q')) {            initialQuery = params.get('q');          } else if (params.get('query')) {            initialQuery = params.get('query');          }                    this.currentQuery = initialQuery;          if (this.searchInput) {            this.searchInput.value = this.currentQuery;          }                    if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {            this.fetchDeals(this.currentQuery);          } else {            this.render();          }        }        updatePriceDropdownCurrency() {          if (!this.priceFilter || !this.regionSelect) return;          const currencySymbols = {            'US': '$',            'GB': '£',            'CA': '$CA',            'AU': '$AU',            'DE': '€',            'FR': '€',            'IT': '€',          };          const area = this.getAreaCode();          const cur = currencySymbols[area || 'US'] || '$';                    const options = this.priceFilter.options;          for (let i = 0; i < options.length; i++) {            const opt = options[i];            if (opt.value === 'all') {              opt.innerText = 'All Prices';            } else if (opt.value === 'under50') {              opt.innerText = `Under ${cur}50`;            } else if (opt.value === '50_100') {              opt.innerText = `${cur}50 - ${cur}100`;            } else if (opt.value === '100_200') {              opt.innerText = `${cur}100 - ${cur}200`;            } else if (opt.value === '200_500') {              opt.innerText = `${cur}200 - ${cur}500`;            } else if (opt.value === 'over500') {              opt.innerText = `Over ${cur}500`;            }          }        }        populateBrandDropdown(values) {          if (!this.brandDropdown || !this.brandFilterWrapper) return;          this.brandFilterWrapper.style.display = 'flex'; // show the wrapper                    let html = '';          const allChecked = this.selectedBrands.length === 0 ? 'checked' : '';          const _div = '<' + '/div>';          const _span = '<' + '/span>';          html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="" ${allChecked} class="tg-df-brand-chk"> Any Brand${_div}`;                    values.forEach(v => {             if (!v.formatted_value || v.formatted_value === 'Any Brand') return;             const isChecked = this.selectedBrands.includes(v.formatted_value) ? 'checked' : '';             html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="${this.escapeHTML(v.formatted_value)}" ${isChecked} class="tg-df-brand-chk"> ${this.escapeHTML(v.formatted_value)} \x3Cspan style="color:var(--tg-df-text-muted);font-size:12px">(${v.count || 0})${_span}${_div}`;          });                    this.brandDropdown.innerHTML = html;                    // Re-bind listeners          const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');          chks.forEach(chk => {            chk.addEventListener('change', (e) => {              const val = e.target.value;              if (val === '') {                this.selectedBrands = [];              } else {                if (e.target.checked) {                   if (!this.selectedBrands.includes(val)) this.selectedBrands.push(val);                } else {                   this.selectedBrands = this.selectedBrands.filter(b => b !== val);                }              }                            if (this.selectedBrands.length === 0) {                 this.brandTrigger.innerText = 'Any Brand';              } else if (this.selectedBrands.length === 1) {                 this.brandTrigger.innerText = this.selectedBrands[0];              } else {                 this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;              }                            // Only call API if changed from UI interactions              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.updateURLParams();                 this.fetchDeals(this.currentQuery);              }            });          });                    // Update button text on load          if (this.selectedBrands.length === 0) {             this.brandTrigger.innerText = 'Any Brand';          } else if (this.selectedBrands.length === 1) {             this.brandTrigger.innerText = this.selectedBrands[0];          } else {             this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;          }        }        updateURLParams() {          const url = new URL(window.location);          if (this.currentQuery && this.currentQuery !== 'Gaming laptops') {            url.searchParams.set('q', this.currentQuery);          } else {            url.searchParams.delete('q');            url.searchParams.delete('search');            url.searchParams.delete('query');          }                    if (this.regionSelect && this.regionSelect.value !== 'auto') {            url.searchParams.set('region', this.regionSelect.value);          } else {            url.searchParams.delete('region');          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.set('retailer', this.retailerSelect.value);          } else {            url.searchParams.delete('retailer');          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.set('brands', this.selectedBrands.join(','));          } else {            url.searchParams.delete('brands');          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.set('offer_type', this.offerTypeSelect.value);          } else {            url.searchParams.delete('offer_type');          }                    if (this.viewModeSelect && this.viewModeSelect.value !== 'auto') {            url.searchParams.set('view_mode', this.viewModeSelect.value);          } else {            url.searchParams.delete('view_mode');          }                    if (this.rowsSelect && this.rowsSelect.value !== '12') {            url.searchParams.set('rows', this.rowsSelect.value);          } else {            url.searchParams.delete('rows');          }                    const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             url.searchParams.set('price', `${min}_${max}`);          } else if (this.priceFilter && this.priceFilter.value !== 'all') {            url.searchParams.set('price', this.priceFilter.value);          } else {            url.searchParams.delete('price');          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {               const ratio = (100 - v) / 100;               url.searchParams.set('min_discount_ratio', ratio.toString());            }          } else {            url.searchParams.delete('min_discount_ratio');          }                    if (this.sortSelect && this.sortSelect.value !== 'discount_desc') {            url.searchParams.set('sort', this.sortSelect.value);          } else {            url.searchParams.delete('sort');          }                    if (this.dealModeToggle && this.dealModeToggle.checked) {            url.searchParams.set('deal_mode', 'true');          } else {            url.searchParams.delete('deal_mode');          }                    window.history.replaceState({}, '', url);        }        bindEvents() {          const roundels = this.root.querySelectorAll('.tg-df-carousel-cat.original-hardcoded');          roundels.forEach(r => {             r.addEventListener('click', () => {                const q = r.getAttribute('data-query');                const pr = r.getAttribute('data-pr');                if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: q,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = q;                const label = this.root.querySelector('#tg-df-carousel-title-label');                if (label) label.textContent = 'Best ' + q;                if (this.priceFilter) this.priceFilter.value = pr || 'all';                if (this.discountFilter) this.discountFilter.value = '5';                if (this.searchInput) this.searchInput.value = q;                                roundels.forEach(ro => ro.classList.remove('active'));                r.classList.add('active');                this.fetchDeals(this.currentQuery);             });          });          const discBtns = this.root.querySelectorAll('.tg-df-carousel-filter-btn');          discBtns.forEach(b => {             b.addEventListener('click', () => {                const d = b.getAttribute('data-d');                const pr = b.getAttribute('data-pr');                const ot = b.getAttribute('data-ot');                let label = b.innerText ? b.innerText.trim() : '';                let filterType = 'unknown';                let filterVal = 'unknown';                if (d !== null) { filterType = 'discount'; filterVal = d; }                else if (pr !== null) { filterType = 'price'; filterVal = pr; }                else if (ot !== null) { filterType = 'offertype'; filterVal = ot; }                if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-${filterType}-${filterVal}`, name: 'Filter Button', label: label });                                if (d !== null) {                   if (this.discountFilter) this.discountFilter.value = this.discountFilter.value === d ? '0' : d;                } else if (pr !== null) {                   if (this.priceFilter) this.priceFilter.value = this.priceFilter.value === pr ? 'all' : pr;                } else if (ot !== null) {                   if (this.offerTypeSelect) this.offerTypeSelect.value = this.offerTypeSelect.value === ot ? 'all' : ot;                } else {                   if (this.discountFilter) this.discountFilter.value = '0';                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.offerTypeSelect) this.offerTypeSelect.value = 'all';                }                if (d === null && pr === null && ot === null && b.getAttribute("data-type") !== "custom") {                   discBtns.forEach(ro => ro.classList.remove('active'));                   b.classList.add('active');                } else if (b.getAttribute("data-type") !== "custom") {                   // Only operate on hardcoded buttons (those without data-type)                   discBtns.forEach(ro => {                      if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active');                   });                                      let makeActive = true;                   if (d !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-d') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (pr !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-pr') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (ot !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-ot') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   }                                      if (makeActive) b.classList.add('active');                                      // Check if anything is active, if not activate "All"                   let anyActive = false;                   discBtns.forEach(ro => { if (ro.classList.contains('active') && ro.getAttribute('data-type') !== 'custom') anyActive = true; });                   if (!anyActive) {                       discBtns.forEach(ro => { if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.add('active'); });                   }                }                                this.fetchDeals(this.currentQuery);             });          });          if (this.brandTrigger && this.brandDropdown) {            this.brandTrigger.addEventListener('click', () => {              this.brandDropdown.classList.toggle('active');            });            document.addEventListener('click', (e) => {              if (this.brandFilterWrapper && !e.composedPath().includes(this.brandFilterWrapper)) {                this.brandDropdown.classList.remove('active');              }            });          }          let debounceTimer;          if(this.searchInput) {            this.searchInput.addEventListener('input', (e) => {              clearTimeout(debounceTimer);              const query = e.target.value.trim();              this.currentQuery = query;              if (this.getViewMode() === 'savings_squad' && this.autocompleteDropdown && this.airedaleTags && query.length > 0) {                 const matches = this.airedaleTags.filter(t => t.toLowerCase().includes(query.toLowerCase()) && t.toLowerCase() !== query.toLowerCase()).slice(0, 5);                 if (matches.length > 0) {                    this.autocompleteDropdown.innerHTML = matches.map(m => `\x3Cdiv class="tg-df-autocomplete-item" data-tag="${this.escapeHTML(m)}">${this.escapeHTML(m)}<` + `/div>`).join('');                    this.autocompleteDropdown.classList.add('active');                 } else {                    this.autocompleteDropdown.classList.remove('active');                 }              } else if (this.autocompleteDropdown) {                 this.autocompleteDropdown.classList.remove('active');              }              debounceTimer = setTimeout(() => {                this.updateURLParams();                if (query.length > 2) {                  this.fetchDeals(query);                } else if (query.length === 0) {                  this.deals = [];                  this.render();                }              }, 400);            });            this.searchInput.addEventListener('keypress', (e) => {              if (e.key === 'Enter') {                if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');                clearTimeout(debounceTimer);                const query = e.target.value.trim();                this.currentQuery = query;                this.activeDealTag = null;                trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                this.updateURLParams();                if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                   this.fetchDeals(query);                }              }            });          }          if (this.autocompleteDropdown) {             this.autocompleteDropdown.addEventListener('click', (e) => {                const item = e.target.closest('.tg-df-autocomplete-item');                if (item) {                   const tag = item.getAttribute('data-tag');                   this.currentQuery = tag;                   if (this.searchInput) this.searchInput.value = tag;                   this.activeDealTag = tag;                   this.autocompleteDropdown.classList.remove('active');                   this.updateURLParams();                   this.fetchDeals(tag);                }             });             document.addEventListener('click', (e) => {               if (this.autocompleteDropdown && this.searchInput && !e.composedPath().includes(this.searchInput) && !e.composedPath().includes(this.autocompleteDropdown)) {                 this.autocompleteDropdown.classList.remove('active');               }             });          }          if (this.searchBtn) {            this.searchBtn.addEventListener('click', () => {              if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');              clearTimeout(debounceTimer);              const query = this.searchInput.value.trim();              trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });              this.activeDealTag = null;              this.currentQuery = query;              this.updateURLParams();              if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.fetchDeals(query);              }            });          }          if(this.sortSelect) this.sortSelect.addEventListener('change', () => {            trackElementInteraction({ id: `sort-option-${this.sortSelect.value}`, name: 'Sort', label: `Sort: ${this.sortSelect.options[this.sortSelect.selectedIndex].text}` });            this.updateURLParams();            if (this.deals.length > 0) {              this.sortData();              this.render();            }          });                    const priceFilter = this.root.querySelector('#tg-df-price-filter');          if (priceFilter) {            this.priceFilter = priceFilter;            this.priceFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-price-${this.priceFilter.value}`, name: 'Price', label: this.priceFilter.options[this.priceFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          const updateCustomPrice = () => {             this.updateURLParams();             if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);             } else {                this.render();             }          };          if (this.customPriceMin) {             this.customPriceMin.addEventListener('change', updateCustomPrice);             this.customPriceMin.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          if (this.customPriceMax) {             this.customPriceMax.addEventListener('change', updateCustomPrice);             this.customPriceMax.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          const discountFilter = this.root.querySelector('#tg-df-discount-filter');          if (discountFilter) {            this.discountFilter = discountFilter;            this.discountFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-discount-${this.discountFilter.value}`, name: 'Discount', label: this.discountFilter.options[this.discountFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          if (this.categoryFilter) {            this.categoryFilter.addEventListener('change', (e) => {               const val = e.target.value === 'all' ? null : e.target.value;               this.activeDealTag = val;               this.fetchSavingsSquad();            });          }                    if (this.settingsToggle) {            this.settingsToggle.addEventListener('click', () => {              const o = this.settingsPanel.classList.toggle('active');              this.settingsBackdrop.classList.toggle('active');              if (o) trackElementInteraction({ id: 'filter-open', name: 'Filters', label: 'Open filters' });            });          }                    if (this.settingsBackdrop) {            this.settingsBackdrop.addEventListener('click', () => {              this.settingsPanel.classList.remove('active');              this.settingsBackdrop.classList.remove('active');            });          }                    if (this.regionSelect) {            this.regionSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-region-${this.regionSelect.value}`, name: 'Region', label: this.regionSelect.options[this.regionSelect.selectedIndex].text });              this.updateURLParams();              this.updatePriceDropdownCurrency();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.retailerSelect) {            this.retailerSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-merchant-${this.retailerSelect.value}`, name: 'Retailer', label: this.retailerSelect.options[this.retailerSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.offerTypeSelect) {            this.offerTypeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-offertype-${this.offerTypeSelect.value}`, name: 'Offer Type', label: this.offerTypeSelect.options[this.offerTypeSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.viewModeSelect) {            this._prevViewMode = this.viewModeSelect.value;            this.viewModeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-viewmode-${this.viewModeSelect.value}`, name: 'View Mode', label: this.viewModeSelect.options[this.viewModeSelect.selectedIndex].text });                            // Reset all active toggles and filters to prevent config carry-over              this.selectedBrands = [];              if (this.brandTrigger) this.brandTrigger.innerText = 'Select Brands';              if (this.brandDropdown) {                const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                chks.forEach(chk => { chk.checked = false; });              }              if (this.priceFilter) this.priceFilter.value = 'all';              if (this.customPriceMin) this.customPriceMin.value = '';              if (this.customPriceMax) this.customPriceMax.value = '';              if (this.sortSelect) this.sortSelect.value = this.viewModeSelect.value === 'savings_squad' ? 'date_desc' : 'discount_desc';              if (this.discountFilter) this.discountFilter.value = '0';              if (this.retailerSelect) this.retailerSelect.value = '';              if (this.offerTypeSelect) this.offerTypeSelect.value = '';              if (this.rowsSelect) this.rowsSelect.value = '12';              if (this.categoryFilter) this.categoryFilter.value = 'all';              this.activeDealTag = null;              this.updateURLParams();              this.applyLayoutMode();                            if (this.getViewMode() === 'savings_squad' || this._prevViewMode === 'savings_squad') {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }              this._prevViewMode = this.viewModeSelect.value;            });          }                    if (this.rowsSelect) {            this.rowsSelect.addEventListener('change', () => {              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.dealModeToggle) {            this.dealModeToggle.addEventListener('change', () => {              this.updateURLParams();              this.render();            });          }          if (this.editorModeToggle) {             this.editorModeToggle.addEventListener('change', (e) => {                this.editorMode = e.target.checked;                this.render();                this.updateFloatingCopyBar();             });          }          if (this.editorCopyBtn) {             this.editorCopyBtn.addEventListener('click', () => {                this.copySelectedDealsToCMS();             });          }          if (this.editorClearBtn) {             this.editorClearBtn.addEventListener('click', () => {                this.selectedDeals.clear();                this.render();                this.updateFloatingCopyBar();             });          }          if (this.grid) {            this.grid.addEventListener('change', (e) => {               if (e.target.classList.contains('tg-df-deal-checkbox')) {                  const dealId = e.target.getAttribute('data-id');                  if (e.target.checked) {                     const dealObj = this.deals.find(d => d.id === dealId);                     if (dealObj) this.selectedDeals.set(dealId, dealObj);                  } else {                     this.selectedDeals.delete(dealId);                  }                  this.updateFloatingCopyBar();               }            });            this.grid.addEventListener('click', (e) => {              const dealCard = e.target.closest('[data-action="deal-click"]');              const similarCard = e.target.closest('[data-action="view-similar-click"]');              const cardLink = dealCard || similarCard;              if (cardLink) {                const productName = cardLink.getAttribute('data-product-name');                const merchantName = cardLink.getAttribute('data-merchant-name');                const productId = cardLink.getAttribute('data-analytics-id');                const price = parseFloat(cardLink.getAttribute('data-price')) || null;                const prevPriceStr = cardLink.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = cardLink.getAttribute('data-original-link');                const finalHref = cardLink.href || cardLink.getAttribute('href') || '';                let actualRevenueId = cardLink.getAttribute('data-revenue-id');                const revMatch = finalHref.match(/(?:subId1|xcust|clickref|ascsubtag)=[^&]*?(\d{18,20})(?:&|$)/i);                if (revMatch && revMatch[1]) {                  actualRevenueId = revMatch[1];                }                const rewrittenLink = finalHref;                const revenueId = actualRevenueId;                const index = parseInt(cardLink.getAttribute('data-index'), 10) || 0;                const inStock = cardLink.getAttribute('data-in-stock') === 'true';                const totalText = cardLink.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: cardLink.getAttribute('data-model-id') || null,                    matchId: cardLink.getAttribute('data-match-id') || null,                    brand: cardLink.getAttribute('data-model-brand') || null,                    parent: cardLink.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: cardLink.getAttribute('data-merchant-id') || null,                    network: cardLink.getAttribute('data-merchant-network') || null,                    url: cardLink.getAttribute('data-merchant-url') || null,                    name: merchantName                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: normalizeCurrency(this.escapeHTML(cardLink.getAttribute('data-currency') || '$'))                };                if (dealCard) {                  trackDealClick(trackingParams);                } else {                  trackViewSimilarClick(trackingParams);                }              }              const couponsBtn = e.target.closest('[data-action="coupons-click"]');              if (couponsBtn) {                trackElementInteraction({                  id: 'product-card-show-coupons',                  name: 'Coupons',                  label: `Product card coupons: ${couponsBtn.getAttribute('data-merchant')}`                });              }            });          }          this.setupScrollListeners();        }        setupScrollListeners() {          const containers = [             this.root.querySelector('.tg-df-carousel-roundels'),             this.root.querySelector('.tg-df-carousel-filters-wrap'),             this.root.querySelector('#tg-df-grid')          ];                    containers.forEach(container => {             if (!container) return;                          const checkScroll = () => {                if (!container.parentElement) return;                const leftBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-left');                const rightBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-right');                                if (leftBtn) {                   if (container.scrollLeft <= 5) leftBtn.style.display = 'none';                   else leftBtn.style.display = 'flex';                }                                if (rightBtn) {                   if (container.scrollWidth <= container.clientWidth) {                       rightBtn.style.display = 'none';                   } else if (container.scrollLeft >= container.scrollWidth - container.clientWidth - 5) {                       rightBtn.style.display = 'none';                   } else {                       rightBtn.style.display = 'flex';                   }                }             };                          container.addEventListener('scroll', checkScroll);             checkScroll();                          window.addEventListener('resize', checkScroll);                          const observer = new MutationObserver(checkScroll);             observer.observe(container, { childList: true, subtree: true, characterData: false });          });        }        get widgetTypeName() {          const mode = this.viewModeSelect ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');          switch(mode) {              case 'carousel': return 'Carousel';              case 'savings_squad': return 'Savings Squad';              case 'grid': return 'Grid';              case 'row': return 'Row';              default: return 'Auto Collection';          }        }        getRowsLimit() {          if (this.rowsSelect && this.rowsSelect.value) return parseInt(this.rowsSelect.value, 10);          let configSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {             configSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {             configSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(configSource);          if (params.has('rows')) return parseInt(params.get('rows'), 10) || 12;          return 12;        }        getAreaCode() {          if (this.regionSelect && this.regionSelect.value) {            if (this.regionSelect.value === 'auto') return null;            return this.regionSelect.value;          }          let area = null;          try {            const locale = window.navigator.language || window.navigator.userLanguage;            if (locale && locale.includes('-')) {              area = locale.split('-')[1].toUpperCase();            } else if (locale && locale.length === 2) {              if (locale.toUpperCase() === 'EN') { area = 'US'; }              else { area = locale.toUpperCase(); }            }          } catch (e) { /* Ignore */ }                    // Map to known valid options or fallback to US          const valid = ['US', 'GB', 'CA', 'AU', 'DE', 'FR', 'IT'];          if (area === 'UK') area = 'GB';          if (valid.includes(area)) {             return area;          }          return 'US';        }                async loadCarouselSpreadsheet() {          try {              const parseCSVRow = (str) => {                  let result = [], cur = '', inQuotes = false;                  for (let i = 0; i < str.length; i++) {                      let char = str[i];                      if (inQuotes) {                          if (char === '"') {                              if (str[i + 1] === '"') { cur += '"'; i++; }                              else { inQuotes = false; }                          } else { cur += char; }                      } else {                          if (char === '"') { inQuotes = true; }                          else if (char === ',') { result.push(cur); cur = ''; }                          else { cur += char; }                      }                  }                  result.push(cur); return result;              };              const parseCSV = (str) => {                  const rows = []; let curRow = '', inQuotes = false;                  for (let i = 0; i < str.length; i++) {                      let char = str[i];                      if (char === '"') inQuotes = !inQuotes;                      if ((char === '\n' || char === '\r') && !inQuotes) {                          if (char === '\r' && str[i+1] === '\n') i++;                          if (curRow) rows.push(parseCSVRow(curRow));                          curRow = '';                      } else { curRow += char; }                  }                  if (curRow) rows.push(parseCSVRow(curRow));                  return rows;              };              const preloadedCSV = decodeURIComponent(escape(atob("LCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNQ0KUm91bmRlbCB0ZXh0LEFsbCxUVnMsRm9vdHdlYXIsQXBwYXJlbCxNYXR0cmVzZXMsQXBwbGlhbmNlcyxXZWFyYWJsZSB0ZWNoLEhlYWRwaG9uZXMsU21hcnQgSG9tZSxTcGVha2VycyxMYXB0b3BzLFRhYmxldHMsQ29tcHV0aW5nLFBob25lcyxHYW1pbmcsTGVnbw0KUm91bmRlbCBpbWFnZSxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Nob3AtYXNzZXRzL2Nhcm91c2VsL2FpLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Nob3AtYXNzZXRzL2Nhcm91c2VsL3R2cy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvN2IzYTIyNGIwNzk2M2M2MjdiNmI5MDliZDc4MzM4MzZlMDJmZjgxOS5qcGcud2VicCxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy84NGRhYzVkNDhlZDJkNDQ4NTU5ZWJhNjdhY2U4MzE0Y2M2N2NjZDk0LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vc2hvcC1hc3NldHMvY2Fyb3VzZWwvbWF0dHJlc3Nlcy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvNzY4ZTk3Y2ViMDcxODAxZmFlMjA5MTBkMDgyMGIxNmY3NDdhZjkzOS5qcGcud2VicCxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Nob3AtYXNzZXRzL2Nhcm91c2VsL3dlbGxuZXNzLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Nob3AtYXNzZXRzL2Nhcm91c2VsL2hlYWRwaG9uZXMuanBnLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzg5NTM1YmVlYmUyMGRiYmQ0YTM0NmQ2ZDZiZGZlOTFkOGE4ODRhMjEuanBnLndlYnAsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9zaG9wLWFzc2V0cy9jYXJvdXNlbC9hdWRpby5qcGcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9zaG9wLWFzc2V0cy9jYXJvdXNlbC9sYXB0b3BzLmpwZyxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy8yMzk3NTY0ZWQ3YTVmZjk0N2U5YjZiMzBlNTRmNDc0OTRiODQxZjg5LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vc2hvcC1hc3NldHMvY2Fyb3VzZWwvY29tcHV0aW5nLmpwZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Nob3AtYXNzZXRzL2Nhcm91c2VsL3Bob25lcy5wbmcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9zaG9wLWFzc2V0cy9jYXJvdXNlbC9nYW1pbmcucG5nLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzRmNmM2MjFjYWMwYmMxYTg1ZDU5M2UzNTk0YmE1YjM0OWVmZmQyOTIuanBnLndlYnANClNlYXJjaCBRdWVyeSxFdmVyeXRoaW5nLFRlbGV2aXNpb25zLCJTbmVha2VycywgcnVubmluZyBzaG9lcywgc2FuZGFscyIsQ2xvdGhpbmcsTWF0dHJlc3NlcyxIb21lIEFwcGxpYW5jZXMsV2VhcmFibGVzICYgRml0bmVzcyBUZWNoLEhlYWRwaG9uZXMsSG9tZSBUZWNoLFNwZWFrZXJzLExhcHRvcHMsVGFibGV0cyxDb21wdXRpbmcsUGhvbmVzLEdhbWluZyxDb25zdHJ1Y3Rpb24gVG95cw0KRGlzY291bnQgQW1vdW50LG1pbiA1JSxtaW4gMTAlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUNClByaWNlIFJhbmdlLCwsLCxtaW4gJDQwMCwsLCxtaW4gJDI1LCxtaW4gJDMwMCwsLG1pbiAkMTAwLCwNCkJyYW5kIFNlbGVjdGlvbiwsLCwsLCwsLCwsLCwsLCwNCkZpbHRlciBidXR0b25zLCwsLCwsLCwsLCwsLCwsLA0KMSxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMNCjIsQW1hem9uIGRlYWxzLFVuZGVyICQxMDAwLDUwJSBvZmYsQWRpZGFzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsNTAlIG9mZixBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscw0KMyxPdmVyICQ0MDAsVW5kZXIgJDUwMCxIb2thLE5pa2UsU2FhdHZhLE5pbmphLDQwJSBvZmYsSkxhYiwsSkJMLERlbGwsLEFzdXMsQXBwbGUsQ29uc29sZXMsU3RhciBXYXJzDQo0LFVuZGVyICQxMDAwLDUwJSBvZmYsU2tlY2hlcnMsVW5kZXIgQXJtb3VyLEhlbGl4LFNoYXJrLEdhcm1pbixBbmtlciBTb3VuZGNvcmUsUmluZyxTb25vcyxBcHBsZSxBcHBsZSxUUC1saW5rLFNhbXN1bmcsQWNjZXNzb3JpZXMsVW5kZXIgJDI1DQo1LFVuZGVyICQ1MDAsTEcsQXNpY3MsQ29sdW1iaWEsRHJlYW1DbG91ZCxLZXVyaWcsQXBwbGUsU29ueSxHb3ZlZSxUcmliaXQsTGVub3ZvLFNhbXN1bmcsRWVybyxHb29nbGUsR2FtZXMsVW5kZXIgJDUwDQo2LDUwJSBvZmYsU2Ftc3VuZyxOaWtlLFBhdGFnb25pYSxOZWN0YXIsRGUnTG9uZ2hpLEFtYXpmaXQsQXBwbGUsS2FzYSBzbWFydCxTb255LEFsaWVud2FyZSxUQ0wsTmV0Z2VhcixNb3Rvcm9sYSxOaW50ZW5kbyxCb3RhbmljYWxzDQo3LEFtYXpvbixIaXNlbnNlLE5ldyBCYWxhbmNlLEFyYyd0ZXJ5eCxUZW1wdXItcGVkaWMsRHlzb24sRml0Yml0LEJlYXRzLFBoaWxpcHMgSHVlLEFua2VyLEFjZXIsT25lUGx1cyxEZWxsLE9uZVBsdXMsU29ueSxEaXNuZXkNCjgsQXBwbGUsVENMLEFkaWRhcyxDYXJoYXJ0dCxCZWFyLEJpc3NlbGwsU2Ftc3VuZyxFYXJmdW4sQmxpbmssQmVhdHMsTVNJLE1pY3Jvc29mdCxBY2VyLE5vdGhpbmcsWGJveCxNYXJ2ZWwNCjksLFNvbnksU2F1Y29ueSxUaGUgTm9ydGggRmFjZSxTaWVuYSxOdXRyaWJ1bGxldCxPdXJhLFNhbXN1bmcsR29vZ2xlIE5lc3QgLE1hcnNoYWxsLFNhbXN1bmcsTGVub3ZvLExlbm92bywsLFBva2Vtb24NCjEwLCxSb2t1LEJpcmtlbnN0b2NrLENSWiBZb2dhLFdpbmtCZWRzLEJsYWNrIGFuZCBEZWNrZXIsUmluZ2Nvbm4sQ01GLEV1ZnksU2Ftc3VuZyxNaWNyb3NvZnQsUmVNYXJrYWJsZSxBbGllbndhcmUsLCwNCjExLCwsQnJvb2tzLFRoZSBHeW0gUGVvcGxlLEJyb29rbHluIGJlZGRpbmcsTmVzcHJlc3NvLCwxTW9yZSxBcmxvLCxSYXplciwsQ29yc2FpciwsLA0KMTIsLCxDcm9jcywsRWlnaHQgU2xlZXAsQ3Vpc2luYXJ0LCxKQkwsLCwsLEhQLCwsDQpOb3RlcywsLCwsLCwsLCwsLCwsLCwNCiwsIlByaW9yaXRpc2UgYmlnZ2VzdCAlLyQgZGlzY291bnQsIFR2cyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiB0aGUgbW9zdCBwb3B1bGFyIGV2ZW4gaWYgdGhleSBhcmUgc3RpbGwgZXhwZW5zaXZlIiwiTm8gcGF0dGVybiB0byBwcmljaW5nL2Rpc2NvdW50LCByZWFkZXJzIG1haW5seSBzaG9wIGJ5IGJyYW5kL3JlY29nbmlzYWJsZSBzaG9lcyIsIk5vIHBhdHRlcm4gdG8gcHJpY2luZy9kaXNjb3VudCwgcmVhZGVycyBtYWlubHkgc2hvcCBieSBicmFuZCIsIkEgbGFiZWwgd2lsbCBkZWZpbml0ZWx5IGhlbHAgaGVyZSBlLmcuIGJlc3QgZm9yIHNpZGUgc2xlZXBlciwgYmVzdCBtZW1vcnkgZm9hbSIsIkFwcGxpYW5jZXMgaXMgYSBiaWcgY2F0ZWdvcnksIGlzIGl0IHBvc3NpYmxlIHRvIHNwbGl0IGludG8ga2l0Y2hlbiBhcHBsaWFuY2VzLCBmbG9vcmNhcmUsIGFpciBoZWFsdGgvY29vbGluZz8gT3Igc2ltaWxhciIsIkZvY3VzIG9uIHZhbHVlIGZvciBtb25leSwgR2FybWlucyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiBwb3B1bGFyIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIHN0aWxsICQ1MDAiLCwsLCxJbmNsdWRlIEtpbmRsZXMsSSB3b3VsZCBpbmNsdWRlIHdpZmkgcm91dGVycyBoZXJlIGluc3RlYWQgb2Ygc21hcnQgaG9tZSxDYW4gd2Ugc3VyZmFjZSBwaG9uZSBwcm92aWRlciBkZWFscz8gVC1tb2JpbGUgYW5kIHZlcml6b24gd291bGQgbWFrZSBhIGxvdCBtb3JlIG1vbmV5IHRoYW4gQW1hem9uLCwNCiwsaGF2aW5nIGEgJ2Jlc3QgZm9yJyBsYWJlbCB3b3VsZCBiZSBoZWxwZnVsIGUuZy4gYmVzdCBmb3IgYnJpZ2h0IHJvb20sQ2FuIHdlIHN0b3Aga2lkcyBzaG9lcyBmcm9tIHB1bGxpbmcgdGhyb3VnaD8sIldpbGwgdGhpcyBpbmNsdWRlIGFjY2Vzc29yaWVzIGUuZy4gY2FwcywgYmFncywgaWYgc28gbWFrZSBzdXJlIHRoZXNlIGFyZSBtaXhlZCB0aHJvdWdob3V0IGNsb3RoaW5nIGRlYWxzIixXaWxsIHRoaXMgaW5jbHVkZSB0b3BwZXJzIGFuZCBwaWxsb3dzPyBTZWVpbmcgbW9yZSBtb21lbnR1bSB3aXRoIHRoaXMgY2F0ZWdvcnkgcmVjZW50bHkgc28gYSBiZWRkaW5nIHRhYiBtaWdodCB3b3JrLCwiTmVlZCB0byBtYWtlIHN1cmUgYmFuZHMsIHNjcmVlbiBwcm90ZWN0b3JzIGV0Yy4gZG9uJ3QgcHVsbCBpbnRvIGhlcmUiLCwsLCwsLCwsDQosLCJQcmlvcml0aXNlIDY1JycgYW5kIDU1JyBpbmNoIFRWcywgdGhlbiBiaWdnZXIgc2NyZWVucyBiZWZvcmUgdGhlIHNtYWxsZXIgc2l6ZXMiLCwsUXVlZW4gaXMgdGhlIG1vc3QgcG9wdWxhciBzaXplIGluIHRoZSBVUyAtIHByaW9yaXRpc2UgZGVhbHMgZm9yIHRoaXMgc2l6ZSwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpDYXRlZ29yaWVzIHRvIGNvbnNpZGVyLCxQcm9kdWN0cyBpbmNsdWRlZCwsLCwsLCwsLCwsLCwsDQpVbmRlciAkNTA/LCxBaXIgdGFncywsLCwsLCwsLCwsLCwsDQosLFBvcnRhYmxlIGNoYXJnZXJzL3dpcmVsZXNzIGNoYXJnZXJzLCwsLCwsLCwsLCwsLCwNCiwsIldhdGVyIGJvdHRsZXMgKHN0YW5sZXlzLCBPd2FsYSwgSHlkcm8gZmxhc2ssIFlldGkpIiwsLCwsLCwsLCwsLCwsDQosLEhhbmQgaGVsZCBmYW5zLCwsLCwsLCwsLCwsLCwNCiwsLCwsLCwsLCwsLCwsLCwNCmhvbWUgb2ZmaWNlLCxvZmZpY2UgY2hhaXJzLCwsLCwsLCwsLCwsLCwNCiwsc3RhbmRpbmcgZGVza3MsLCwsLCwsLCwsLCwsLA0KLCxtb25pdG9ycywsLCwsLCwsLCwsLCwsDQosLEtleWJvYXJkcywsLCwsLCwsLCwsLCwsDQosLGRvY2tpbmcgc3RhdGlvbiwsLCwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpHYW1pbmcsLENvbnNvbGVzLCwsLCwsLCwsLCwsLCwNCiwsQWNjZXNzb3JpZXMsLCwsLCwsLCwsLCwsLA0KLCxHYW1lcywsLCwsLCwsLCwsLCwsDQosLENvdWxkIGluY2x1ZGUgTGVnbz8sLCwsLCwsLCwsLCwsLA==")));              const text = preloadedCSV;              const parsed = parseCSV(text);                            const rowsByName = {};              let filterStart = -1;              parsed.forEach((rc, i) => {                 if (rc && rc.length > 0 && rc[0]) rowsByName[rc[0]] = rc;                 if (rc && rc.length > 0 && rc[0] === 'Filter buttons') filterStart = i;              });                            const cols = [];              if(rowsByName['Roundel text']) {                const headerRow = rowsByName['Roundel text'];                for(let col = 1; col < headerRow.length; col++) {                   let label = headerRow[col];                   if (!label) continue;                                      let q = rowsByName['Search Query'] && rowsByName['Search Query'][col] ? rowsByName['Search Query'][col] : '';                   let img = rowsByName['Roundel image'] && rowsByName['Roundel image'][col] ? rowsByName['Roundel image'][col] : '';                   let ds = rowsByName['Discount Amount'] && rowsByName['Discount Amount'][col] ? rowsByName['Discount Amount'][col] : '';                   let pr = rowsByName['Price Range'] && rowsByName['Price Range'][col] ? rowsByName['Price Range'][col] : '';                   let rt = rowsByName['Retailer'] && rowsByName['Retailer'][col] ? rowsByName['Retailer'][col] : '';                   let ot = rowsByName['Offer Type'] && rowsByName['Offer Type'][col] ? rowsByName['Offer Type'][col] : '';                                      let filters = [];                   if(filterStart > 0) {                     for(let r = filterStart + 1; r < parsed.length; r++) {                         if(!parsed[r] || parsed[r][0] === 'Notes' || parsed[r][0] === 'Categories to consider') break;                         let f = parsed[r][col];                         if(f) filters.push(f);                     }                   }                   cols.push({ label, img, q, ds, pr, rt, ot, filters });                }              }              this.carouselData = cols;              if (this.carouselData && this.carouselData.length > 0) {                 const isMatched = this.carouselData.some(c => c.q === this.currentQuery || c.label === this.currentQuery);                 if (!isMatched) {                    const first = this.carouselData[0];                    this.currentQuery = first.q || first.label;                    if (this.priceFilter) this.priceFilter.value = 'all';                    if (this.customPriceMin) this.customPriceMin.value = '';                    if (this.customPriceMax) this.customPriceMax.value = '';                    let dPr = first.pr || 'all';                    if (typeof dPr === 'string' && dPr !== 'all') {                       let prLower = dPr.toLowerCase();                       if (prLower.includes('min') || prLower.includes('over')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else if (prLower.includes('max') || prLower.includes('under')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       }                    }                    let dAm = '0';                    if(first.ds && typeof first.ds === 'string') {                       let m = first.ds.match(/(\d+)/);                       if(m) dAm = m[1];                    }                    if (this.discountFilter) this.discountFilter.value = dAm;                    if (this.offerTypeSelect) this.offerTypeSelect.value = first.ot || '';                    if (this.retailerSelect) this.retailerSelect.value = first.rt || '';                    this.selectedBrands = [];                    if (this.brandDropdown) {                        const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                        chks.forEach(chk => chk.checked = false);                    }                    if (this.searchInput) this.searchInput.value = this.currentQuery;                 }              }              this.renderCarouselUI();          } catch(e){ console.warn(e); }        }                renderCarouselUI() {           const roundelWrapper = this.root.querySelector('.tg-df-carousel-roundels');           if(!roundelWrapper || !this.carouselData) return;                      let html = '';           this.carouselData.forEach(r => {              const q = r.q || r.label;              const isActive = (this.currentQuery === q || this.currentQuery === r.label) ? 'active' : '';              const imgHtml = r.img ? `\x3Cimg src="${r.img}" alt="${r.label}" />` : `\x3Csvg width="32" height="32" fill="#1F69FF" viewBox="0 0 24 24">\x3Cpath d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/>\x3C/svg>`;              html += `                \x3Cdiv class="tg-df-roundel tg-df-carousel-cat ${isActive}" data-label="${this.escapeHTML(r.label)}">                  \x3Cdiv class="tg-df-roundel-img-box">${imgHtml}\x3C/div>                  \x3Cspan class="tg-df-roundel-label">${this.escapeHTML(r.label)}\x3C/span>                \x3C/div>              `;           });           roundelWrapper.innerHTML = html;                      // Rebind clicks           const roundels = this.root.querySelectorAll('.tg-df-carousel-cat');           roundels.forEach(rNode => {             rNode.addEventListener('click', () => {                const r = this.carouselData.find(c => c.label === rNode.getAttribute('data-label'));                 if(!r) return;                                  if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: r.label,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = r.q || r.label;                const labelTitle = this.root.querySelector('#tg-df-carousel-title-label');                if (labelTitle) labelTitle.textContent = 'Best ' + this.currentQuery;                if (this.priceFilter) this.priceFilter.value = 'all';                if (this.customPriceMin) this.customPriceMin.value = '';                if (this.customPriceMax) this.customPriceMax.value = '';                let dPr = r.pr || 'all';                if (typeof dPr === 'string' && dPr !== 'all') {                   let prLower = dPr.toLowerCase();                   if (prLower.includes('min') || prLower.includes('over')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMin) this.customPriceMin.value = m[1];                   } else if (prLower.includes('max') || prLower.includes('under')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMax) this.customPriceMax.value = m[1];                   }                }                                let discountAmount = '0';                if(r.ds && typeof r.ds === 'string') {                   let m = r.ds.match(/(\d+)/);                   if(m) discountAmount = m[1];                }                if (this.discountFilter) this.discountFilter.value = discountAmount;                if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                                // Clear brands                    this.selectedBrands = [];                    if (this.brandDropdown) {                    const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                    chks.forEach(chk => chk.checked = false);                }                                if (this.searchInput) this.searchInput.value = this.currentQuery;                                roundels.forEach(ro => ro.classList.remove('active'));                if (rNode) rNode.classList.add('active');                                this.renderCarouselFilters(r);                this.fetchDeals(this.currentQuery);             });           });                      // Auto-highlight active           const activeR = this.carouselData.find(c => c.q === this.currentQuery || c.label === this.currentQuery);           if(activeR) this.renderCarouselFilters(activeR);        }                renderCarouselFilters(r) {           const filtersWrap = this.root.querySelector('.tg-df-carousel-filters-wrap');           if(!filtersWrap) return;                      let html = `\x3Cbutton class="tg-df-carousel-filter-btn" data-type="all">All\x3C/button>`;                      r.filters.forEach(f => {              let fL = f.toLowerCase();              let icon = '';              let logic = `data-type="custom" data-v="${this.escapeHTML(f)}"`;              if (fL === 'amazon deals' || fL === 'prime deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>`;              } else if (fL === 'lightning deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>`;              } else {                 if (fL.includes('lightning')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-zap">\x3Cpolygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2">\x3C/polygon>\x3C/svg>`;                 } else if (fL.includes('% off')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>`;                 } else if (fL.includes('under') || fL.includes('min ')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>`;                 }                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>${icon} ${this.escapeHTML(f)}\x3C/button>`;              }           });                      filtersWrap.innerHTML = html;                      const btns = filtersWrap.querySelectorAll('button');           btns.forEach(b => {             b.addEventListener('click', () => {                const type = b.getAttribute('data-type');                if (type === 'custom') {                   const v = b.getAttribute('data-v');                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-custom-${(v||'').toLowerCase().replace(/[^a-z0-9]+/g, '-')}`, name: 'Custom Filter', label: v });                }                if (type === 'all') {                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: 'filter-clear-all', name: 'Clear all', label: 'Clear all filters' });                   // reset everything                   btns.forEach(btn => btn.classList.remove('active'));                   b.classList.add('active');                                      // Reset prices                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   if (this.brandDropdown) {                     const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                     chks.forEach(chk => chk.checked = false);                   }                } else {                   const v = b.getAttribute('data-v');                   const fL = v.toLowerCase();                                      let mapRet = ['amazon', 'walmart', 'best buy', 'target', 'john lewis', 'currys', 'argos'];                   const getCategory = (s) => {                      if (s === 'lightning deals' || s === 'amazon deals' || s === 'prime deals') return 'offer';                      if (s.includes('% off')) return 'discount';                      if (s.includes('under') || s.includes('over') || s.includes('min') || s.includes('max')) return 'price';                      if (mapRet.includes(s)) return 'retailer';                      return 'brand';                   };                   const cat = getCategory(fL);                   const wasActive = b.classList.contains('active');                   if (cat !== 'brand') {                      btns.forEach(btn => {                          if (btn === b) return;                          if (btn.getAttribute('data-type') === 'all') return;                          const bV = btn.getAttribute('data-v');                          if (!bV) return;                          if (getCategory(bV.toLowerCase()) === cat) btn.classList.remove('active');                      });                   }                   if (wasActive) b.classList.remove('active');                   else b.classList.add('active');                   let anyActive = Array.from(btns).some(btn => btn !== btns[0] && btn.classList.contains('active'));                   if (!anyActive) {                       btns[0].click();                       return;                   } else {                       btns[0].classList.remove('active');                   }                                      if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   btns.forEach(btn => {                       if (!btn.classList.contains('active') || btn.getAttribute('data-type') === 'all') return;                       const vv = btn.getAttribute('data-v');                       const vl = vv.toLowerCase();                                              if (vl === 'lightning deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_lightning';                       } else if (vl === 'amazon deals' || vl === 'prime deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_prime';                       } else if (vl.includes('% off')) {                          let m = vl.match(/(\d+)%/);                          if (m && this.discountFilter) this.discountFilter.value = m[1];                       } else if (vl.includes('under') || vl.includes('max')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       } else if (vl.includes('min') || vl.includes('over')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else {                          let foundR = mapRet.find(x => x === vl);                          if (foundR) {                             let realR = ['Amazon', 'Walmart', 'Best Buy', 'Target', 'John Lewis', 'Currys', 'Argos'].find(x => x.toLowerCase() === vl);                             if (this.retailerSelect) this.retailerSelect.value = realR;                          } else {                             this.selectedBrands.push(vv);                          }                       }                   });                                      if (this.brandDropdown) {                       const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                       chks.forEach(c => c.checked = this.selectedBrands.includes(c.value));                   }                                      if (r.pr && typeof r.pr === 'string') {                       let prL = r.pr.toLowerCase();                       if (prL.includes('under $')) {                           let m = prL.match(/under \$(\d+)/i);                           if (m && this.customPriceMax && !this.customPriceMax.value) this.customPriceMax.value = m[1];                       }                   }                }                                this.fetchDeals(this.currentQuery);             });           });                      // default to highlighting first           btns[0].classList.add('active');        }async fetchDeals(query, append = false) {          if (!append) {             this.showLoading();             this.deals = [];             this.displayLimit = this.getRowsLimit();          } else {             this.displayLimit += this.getRowsLimit();          }                    try {            if (this.getViewMode() === 'savings_squad') {               await this.fetchSavingsSquad(append);            } else {               if (this.isBroadQuery(query)) {                 await this.fetchAdviserDeals(query, append);               } else {                 await this.fetchHawkDeals(query, append);                 if (this.deals.length === 0) {                   await this.fetchAdviserDeals(query, append);                 }               }            }          } catch (error) {            console.warn("[Tom's Guide Widget] Fetch error:", error);            this.showError();          }        }        async fetchSavingsSquad() {          let topArticles = this.airedaleArticles;          if (!topArticles) {            const airedaleUrl = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`;            let res;            try {               res = await fetch(airedaleUrl);            } catch(e) {               try { res = await fetch(`https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`); } catch (err) { console.warn("Fallback fetch failed", err); return; }            }            if (!res.ok) throw new Error('Airedale API Error');            const articles = await res.json();            topArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);            this.airedaleArticles = topArticles;                        let tagCounts = {};            topArticles.forEach((a) => {              let articleTags = new Set();              if (a.articlecategory && Array.isArray(a.articlecategory)) {                 a.articlecategory.forEach((t) => articleTags.add(t));              }              articleTags.forEach(t => {                 tagCounts[t] = (tagCounts[t] || 0) + 1;              });            });                        this.airedaleTags = Object.keys(tagCounts).sort((a, b) => tagCounts[b] - tagCounts[a]);            this.airedaleTagCounts = tagCounts;          }                    let targetArticles = topArticles;          if (this.activeDealTag) {             const cleanTag = this.activeDealTag.toLowerCase().replace(/&/g, '').replace(/[^a-z0-9]+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');             const encodedTag = encodeURIComponent(cleanTag);             const url = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50&articleCategoryHandle=${encodedTag}`;             try {                const res = await fetch(url);                if (res.ok) {                   const articles = await res.json();                   targetArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);                }             } catch(e) {                console.warn("Failed to fetch by activeDealTag", e);             }          }          let extractedDeals = [];          let dynamicBrandsCounts = {};                    targetArticles.forEach((article) => {             if (!article.articlepage) return;                          let pageData = [];             try {                pageData = JSON.parse(article.articlepage[0]);             } catch(e){ console.warn(e); }                          const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');                          savingsSquad.forEach((block, idx) => {                const data = block.data || {};                const isFeatured = block.type === 'featured-product';                                const link = data.link || {};                const priceObj = data.price || {};                const image = data.image || {};                                if (data.brand) {                   data.brand = data.brand.replace(/^\d+\.\s*/, '').trim();                   dynamicBrandsCounts[data.brand] = (dynamicBrandsCounts[data.brand] || 0) + 1;                }                const externalUrl = isFeatured ? data.url : (link.href || null);                let summaryTitle = isFeatured ? (data.name || data.brand) : (data.productName || link.label || article.articlename);                let description = isFeatured ? (data.strapline || '') : (data.text || '');                                if (!isFeatured && !data.productName && data.text) {                   const brSplit = data.text.split(new RegExp('\x3Cbr\\s*\\/?\\x3E', 'i'));                   if (brSplit.length > 1) {                     summaryTitle = brSplit[0].replace(/<[^>]+>/g, '').trim();                     description = brSplit.slice(1).join(' ').replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').trim();                   } else {                     const match = data.text.match(/\x3Cstrong>(.*?)<\/strong>/);                     if (match) {                       summaryTitle = match[1].replace(/<[^>]+>/g, '').trim();                       if (summaryTitle.endsWith(':')) summaryTitle = summaryTitle.slice(0, -1);                     }                   }                }                                let imageUrl = isFeatured ? image.mos : (image.src || null);                if (imageUrl && imageUrl.startsWith('//')) imageUrl = 'https:' + imageUrl;                                description = description.replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').replace(/View Deal$/i, '').trim();                                let merchantName = data.retailer || '';                if (!merchantName && externalUrl) {                   try {                     merchantName = new URL(externalUrl).hostname.replace('www.', '').split('.')[0];                     merchantName = merchantName.charAt(0).toUpperCase() + merchantName.slice(1);                   }catch(e){ console.warn(e); }                }                if (!merchantName) merchantName = 'Retailer';                const q = (this.currentQuery || '').toLowerCase();                const activeTagLogic = (this.activeDealTag || '').toLowerCase();                if (q.length > 2 && q !== activeTagLogic) {                   const searchTarget = `${summaryTitle || ''} ${description || ''}`.toLowerCase();                   if (!searchTarget.includes(q)) return;                }                let rawPrice = 0;                let rawMsrp = 0;                let currencyStr = '$';                if (isFeatured) {                   rawPrice = typeof data.salePrice === 'number' && data.salePrice > 0 ? data.salePrice : (typeof data.price === 'number' ? data.price : 0);                   rawMsrp = typeof data.salePrice === 'number' && typeof data.price === 'number' && data.price > data.salePrice ? data.price : 0;                   currencyStr = data.currency === 'GBP' ? '£' : '$';                } else {                   rawPrice = priceObj.amount ? parseFloat(priceObj.amount) : 0;                   rawMsrp = priceObj.amountWas ? parseFloat(priceObj.amountWas) : 0;                   currencyStr = priceObj.currency === 'GBP' ? '£' : '$';                }                                let savingAmt = 0;                let savingLabel = '';                if (rawPrice > 0 && rawMsrp > rawPrice) {                   savingAmt = parseFloat((rawMsrp - rawPrice).toFixed(2));                   savingLabel = `Save ${currencyStr}${savingAmt}`;                }                                // Apply Brand filter                if (this.selectedBrands && this.selectedBrands.length > 0) {                   const itemBrand = (data.brand || '').toLowerCase();                   const hasMatch = this.selectedBrands.some(sb => sb.toLowerCase() === itemBrand);                   if (!hasMatch) return;                }                // Apply Price filter                let priceFilterVal = null;                const min = this.customPriceMin ? this.customPriceMin.value : '';                const max = this.customPriceMax ? this.customPriceMax.value : '';                if (min || max) {                   priceFilterVal = `${min}_${max}`;                } else if (this.priceFilter && this.priceFilter.value !== 'all') {                   priceFilterVal = this.priceFilter.value;                }                if (priceFilterVal && rawPrice > 0) {                   if (priceFilterVal === 'under50' && rawPrice >= 50) return;                   if (priceFilterVal === 'over50' && rawPrice <= 50) return;                   if (priceFilterVal === 'over30' && rawPrice <= 30) return;                   if (priceFilterVal === 'over500' && rawPrice <= 500) return;                   if (priceFilterVal.includes('_')) {                      const parts = priceFilterVal.split('_');                      const min = parseFloat(parts[0]);                      const max = parseFloat(parts[1]);                      if (!isNaN(min) && rawPrice < min) return;                      if (!isNaN(max) && rawPrice > max) return;                   }                }                // Apply Discount filter                if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {                   const requiredDiscount = parseInt(this.discountFilter.value);                   if (!isNaN(requiredDiscount) && requiredDiscount > 0) {                      if (!rawMsrp || rawMsrp <= rawPrice) return;                      const ratio = Math.round((1 - (rawPrice / rawMsrp)) * 100);                      if (ratio < requiredDiscount) return;                   }                }                                extractedDeals.push({                   id: `airedale-${article.id || Math.random()}-${idx}`,                   url: externalUrl,                   image: imageUrl,                   fallbackImage: imageUrl,                   title: summaryTitle,                   brand: data.brand || '',                   productName: data.productName || '',                   merchant: merchantName,                   rawPrice: rawPrice,                   rawMsrp: rawMsrp,                   price: rawPrice > 0 ? rawPrice.toString() : '',                   msrp: rawMsrp > 0 ? rawMsrp.toString() : '',                   currency: currencyStr,                   isCheckPrice: !rawPrice,                   savingLabel: savingLabel,                   savingType: rawMsrp > rawPrice ? 'amount' : 'none',                   isPrime: false,                   starRating: null,                   description: description,                   text: data.text || ''                });             });          });                    const airedaleBrandsList = Object.keys(dynamicBrandsCounts).map(b => ({              formatted_value: b,              count: dynamicBrandsCounts[b]          })).sort((a,b) => b.count - a.count);                    if (this.getViewMode() === 'savings_squad') {             this.populateBrandDropdown(airedaleBrandsList.slice(0, 15));             if (this.brandFilterWrapper) {                if (airedaleBrandsList.length === 0) {                    this.brandFilterWrapper.style.display = 'none';                } else {                    this.brandFilterWrapper.style.display = 'flex';                }             }          }                    this.deals = extractedDeals;          this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.getFilteredDeals().slice(0, this.displayLimit), this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        isBroadQuery(query) {          const q = query.toLowerCase();          const intentModifiers = ['deals', 'best', 'sale', 'under', 'cheap', 'offers', 'discount'];          return intentModifiers.some(term => q.includes(term));        }        async fetchHawkDeals(query, append = false) {          const url = new URL(this.apiUrl);          url.searchParams.append('model_name', query);          const areaCode = this.getAreaCode();          if (areaCode) {            url.searchParams.append('area', areaCode);          }                    if (append && this.deals.length > 0) {            url.searchParams.append('offset', this.deals.length.toString());          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.append('filter_merchant_name', this.retailerSelect.value);          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.append('filter_label[text_brand]', this.selectedBrands.join(','));          }                    let priceVal = null;          const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             priceVal = `${min}_${max}`;          } else if (this.priceFilter && this.priceFilter.value !== 'all') {             priceVal = this.priceFilter.value;          }          if (priceVal) {            if (priceVal === 'under50') {              url.searchParams.append('filter_max_price', '50');            } else if (priceVal === 'over50') {              url.searchParams.append('filter_min_price', '50');            } else if (priceVal === 'over30') {              url.searchParams.append('filter_min_price', '30');            } else if (priceVal === 'over500') {              url.searchParams.append('filter_min_price', '500');            } else if (priceVal.includes('_')) {              const parts = priceVal.split('_');              if (parts[0]) url.searchParams.append('filter_min_price', parts[0]);              if (parts[1]) url.searchParams.append('filter_max_price', parts[1]);            }          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {              const ratio = (100 - v) / 100;              url.searchParams.append('min_discount_ratio', ratio.toString());            }          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.append('offer', this.offerTypeSelect.value);          }                    url.searchParams.append('filter_product_types', 'deals');                    url.searchParams.append('rows', this.getRowsLimit().toString());          let response;          try {             response = await fetch(url.toString());          } catch(e) {             if (window.location.protocol === 'file:') {                console.warn("[Tom's Guide Widget] fetch from file:// blocked by local CORS policy, falling back to Adviser mock.");                await this.fetchAdviserDeals(query);                return;             }             console.warn("Hawk fetch failed", e);             this.deals = [];             this.render();             return;          }          if (!response.ok) {            throw new Error('Hawk API Response Error');          }          const rawData = await response.json();          // Safely locate data array from potentially wrapped response          let offers = [];          let modelInfoArray = [];                    let brandFilterData = null;          if (rawData && rawData.widget && rawData.widget.data && Array.isArray(rawData.widget.data.filters)) {             brandFilterData = rawData.widget.data.filters.find(f => f.type === 'label_text_brand');          } else if (rawData && rawData.data && Array.isArray(rawData.data.filters)) {             brandFilterData = rawData.data.filters.find(f => f.type === 'label_text_brand');          }          if (brandFilterData && Array.isArray(brandFilterData.values) && brandFilterData.values.length > 0) {             this.populateBrandDropdown(brandFilterData.values);          } else {             if (this.brandFilterWrapper && this.selectedBrands.length === 0) {                this.brandFilterWrapper.style.display = 'none';             }          }                    if (rawData && rawData.widget && rawData.widget.data) {            if (Array.isArray(rawData.widget.data.offers)) offers = rawData.widget.data.offers;            if (rawData.widget.data.model_info && typeof rawData.widget.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.widget.data.model_info) ? rawData.widget.data.model_info : Object.values(rawData.widget.data.model_info);            }          } else if (rawData && rawData.data) {            if (Array.isArray(rawData.data.offers)) offers = rawData.data.offers;            if (rawData.data.model_info && typeof rawData.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.data.model_info) ? rawData.data.model_info : Object.values(rawData.data.model_info);            }          } else {            if (Array.isArray(rawData)) offers = rawData;            else if (rawData && Array.isArray(rawData.offers)) offers = rawData.offers;            else if (rawData && rawData.offers && Array.isArray(rawData.offers.offer)) offers = rawData.offers.offer;            else if (rawData && rawData.offers) offers = [].concat(rawData.offers);                        if (rawData && rawData.model_info && typeof rawData.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.model_info) ? rawData.model_info : Object.values(rawData.model_info);            }          }          let modelDetails = {};          modelInfoArray.forEach(m => {            const mId = m.model_id || m.id;            if (mId) {              modelDetails[mId] = {                score: m.score != null ? parseFloat(m.score) : null,                brand: m.brand || null,                parent: (m.parents && Array.isArray(m.parents) && m.parents.length > 0) ? m.parents[0].name : null              };            }          });          offers.forEach(item => {            let data = { ...item };            const mId = data.model_id;            if (mId && modelDetails[mId]) {              data.review_score = modelDetails[mId].score;              data.model_brand = modelDetails[mId].brand;              data.model_parent = modelDetails[mId].parent;            } else {              data.review_score = null;            }                        let itemOffers = [];            if (Array.isArray(item.offers)) itemOffers = item.offers;            else if (Array.isArray(item.offer)) itemOffers = item.offer;            else if (item.offers && typeof item.offers === 'object') itemOffers = [item.offers];            else if (item.offer && typeof item.offer === 'object') itemOffers = [item.offer];            if (itemOffers.length > 0) {              itemOffers.forEach(subItem => {                let subData = { ...item, ...subItem };                const subId = subData.model_id;                if (subId && modelDetails[subId]) {                  subData.review_score = modelDetails[subId].score;                  subData.model_brand = modelDetails[subId].brand;                  subData.model_parent = modelDetails[subId].parent;                } else if (data.review_score != null) {                  subData.review_score = data.review_score;                }                if (subData.merchant && typeof subData.merchant === 'object') {                  subData.merchant_name = subData.merchant.name;                }                this.deals.push(this.extractDealData(subData));              });              return;            }                        if (item.merchant && typeof item.merchant === 'object') {              data.merchant_name = item.merchant.name;            }                        this.deals.push(this.extractDealData(data));          });                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.getFilteredDeals().slice(0, this.displayLimit), 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.getFilteredDeals().slice(0, this.displayLimit), 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: this.decodeHTML(item.name || item.title || item.model_name || item.product_name || 'Unknown Product'),            brand: this.decodeHTML(item.brand || ''),            productName: this.decodeHTML(item.model_name || item.product_name || item.name || ''),            merchant: this.decodeHTML(item.merchant_name || item.merchant || item.retailer || 'Retailer'),            price: item.price !== undefined ? String(item.price) : '0.00',            currency: this.decodeHTML(rawCurrency),            msrp: item.was_price || item.msrp || item.original_price || null,            rawPrice: rawPrice,            rawMsrp: rawMsrp,            hasWasPrice: (item.was_price !== undefined && item.was_price !== null),            isCheckPrice: isCheckPrice,            savingLabel: savingLabel,            isPrime: isPrime,            starRating: starRating > 0 ? starRating : null,            modelId: item.model_id || '',            productKey: item.product_key || '',            merchantId: (item.merchant && typeof item.merchant === 'object') ? item.merchant.id || '' : '',            matchId: item.match_id || '',            merchantNetwork: (item.merchant && typeof item.merchant === 'object') ? item.merchant.an || '' : '',            merchantUrl: (item.merchant && typeof item.merchant === 'object') ? item.merchant.url || '' : '',            modelBrand: item.model_brand || item.brand || '',            modelParent: item.model_parent || ''          };        }        sortData() {          const sortVal = this.sortSelect ? this.sortSelect.value : (this.getViewMode() === 'savings_squad' ? 'date_desc' : 'discount_desc');          if (sortVal === 'price_asc') {            this.deals.sort((a, b) => a.rawPrice - b.rawPrice);          } else if (sortVal === 'price_desc') {            this.deals.sort((a, b) => b.rawPrice - a.rawPrice);          } else if (sortVal === 'discount_desc') {            this.deals.sort((a, b) => {              const aDiscount = a.rawMsrp > a.rawPrice ? (a.rawMsrp - a.rawPrice) : 0;              const bDiscount = b.rawMsrp > b.rawPrice ? (b.rawMsrp - b.rawPrice) : 0;              return bDiscount - aDiscount;            });          } else if (sortVal === 'date_desc') {             this.deals.sort((a, b) => {                let dateA = 0;                let dateB = 0;                if (a && a.modifiedDate) {                   const valA = Array.isArray(a.modifiedDate) ? a.modifiedDate[0] : a.modifiedDate;                   dateA = new Date(valA).getTime();                   if (isNaN(dateA)) dateA = 0;                }                if (b && b.modifiedDate) {                   const valB = Array.isArray(b.modifiedDate) ? b.modifiedDate[0] : b.modifiedDate;                   dateB = new Date(valB).getTime();                   if (isNaN(dateB)) dateB = 0;                }                return dateB - dateA;             });          }        }        getFilteredDeals() {          let filteredDeals = [...this.deals];                    if (this.dealModeToggle && this.dealModeToggle.checked) {            filteredDeals = filteredDeals.filter(d => d.hasWasPrice || (d.msrp && d.rawMsrp > d.rawPrice));          }                    return filteredDeals;        }        showLoading() {          const _div = '<' + '/div>';          const skeletonCardHtml = `            \x3Cdiv class="tg-df-card">              \x3Cdiv class="tg-df-card-image-box">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-img">${_div}              ${_div}              \x3Cdiv class="tg-df-card-body">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-card-footer mt-auto">                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="height:24px;">${_div}                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text" style="height:44px; margin-top:8px;">${_div}                ${_div}              ${_div}            ${_div}`;          this.grid.innerHTML = Array(4).fill(skeletonCardHtml).join('');        }        showError() {          const _div = '<' + '/div>';          this.grid.innerHTML = `\x3Cdiv class="tg-df-message">            An error occurred while finding deals. Please check your connection and try again.          ${_div}`;        }        escapeHTML(str) {          if (!str) return '';          return String(str).replace(/[&<>'"]/g, tag => ({              '&': '&', '<': '<', '>': '>', "'": ''', '"': '"'          }[tag] || tag));        }                bindCouponButtons() {          const btns = this.root.querySelectorAll('.tg-df-tag-coupons');          btns.forEach(btn => {            btn.addEventListener('click', (e) => {              e.preventDefault();              e.stopPropagation();              const merchant = btn.getAttribute('data-merchant');              this.openVouchersModal(merchant);            });          });                    const closeBtn = this.root.querySelector('#tg-df-vouchers-close');          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (closeBtn) {            closeBtn.onclick = () => this.closeVouchersModal();          }          if (backdrop) {            backdrop.onclick = (e) => {              if (e.target === backdrop) this.closeVouchersModal();            };          }        }                closeVouchersModal() {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (backdrop) backdrop.classList.remove('active');        }                async checkMerchantsCouponsBulk(merchants) {          if (!merchants || merchants.length === 0) return {};          const controller = new AbortController();          const timeoutId = setTimeout(() => controller.abort(), 4000);          try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchants.join(','));            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '120');            url.searchParams.append('origin', 'widgets-clientside');                        let res; try { res = await fetch(url.toString(), { signal: controller.signal }); } catch (e) { return {}; }            clearTimeout(timeoutId);            if (!res.ok) return {};            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        const foundMerchants = new Set();            offers.forEach(o => {              let mName = o.merchant_name || o.merchant || o.retailer;              if (mName && typeof mName === 'object') mName = mName.name;              if (mName) foundMerchants.add(String(mName).toLowerCase());            });            const resultMap = {};            merchants.forEach(m => {              if (m) resultMap[m] = foundMerchants.has(String(m).toLowerCase());            });            return resultMap;          } catch (e) {            return {};          }        }                async openVouchersModal(merchantName) {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          const title = this.root.querySelector('#tg-df-vouchers-title');          const content = this.root.querySelector('#tg-df-vouchers-content');                    if (!backdrop || !content) return;                    // HACK: Hide closing tags          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h4 = '<' + '/h4>';          const _svg = '<' + '/svg>';          const _circle = '<' + '/circle>';          const _polyline = '<' + '/polyline>';          const _rect = '<' + '/rect>';          const _path = '<' + '/path>';                    title.innerText = `${merchantName} Coupons & Deals`;          content.innerHTML = `\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}                               \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}`;          backdrop.classList.add('active');                    try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchantName);            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '50');            url.searchParams.append('origin', 'widgets-clientside');                        const res = await fetch(url.toString());            if (!res.ok) throw new Error('API Error');            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        if (offers.length === 0) {              content.innerHTML = `\x3Cdiv class="tg-df-message">No vouchers currently available for ${this.escapeHTML(merchantName)}.${_div}`;              return;            }                        content.innerHTML = offers.map((v, idx) => {              let offerObj = v;              if (v.offers && v.offers.offer) {                offerObj = Array.isArray(v.offers.offer) ? v.offers.offer[0] : v.offers.offer;              } else if (v.offer) {                offerObj = Array.isArray(v.offer) ? v.offer[0] : v.offer;              }              let logoUrl = v.logo_url || offerObj.logo_url || '';              if (!logoUrl && v.merchant) {                if (Array.isArray(v.merchant) && v.merchant.length > 0) logoUrl = v.merchant[0].logo_url || '';                else logoUrl = v.merchant.logo_url || '';              }                            const offerName = offerObj.name || offerObj.title || v.name || v.title || 'Special Offer';              const endTime = offerObj.end_time || v.end_time || '';              const linkUrl = offerObj.link || offerObj.url || v.link || v.url || '#';                            let foundVoucherCode = '';              const findVoucherCode = (obj) => {                if (!obj || typeof obj !== 'object') return;                if (obj.type === 'voucher_code' && obj.display_value) {                  foundVoucherCode = obj.display_value;                  return;                }                if (Array.isArray(obj)) {                  for (const item of obj) {                    findVoucherCode(item);                    if (foundVoucherCode) return;                  }                } else {                  for (const k in obj) {                    if (Object.prototype.hasOwnProperty.call(obj, k)) {                      findVoucherCode(obj[k]);                      if (foundVoucherCode) return;                    }                  }                }              };              findVoucherCode(offerObj);              if (!foundVoucherCode) findVoucherCode(v);                            const voucherCode = foundVoucherCode || offerObj.voucher_code || v.voucher_code || '';              const codeHtml = voucherCode ? `\x3Cspan class="tg-df-voucher-code" data-action="copy-code" data-code="${this.escapeHTML(voucherCode)}" title="Copy to clipboard">                \x3Cspan class="tg-df-voucher-code-text">${this.escapeHTML(voucherCode)}${_span}                \x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-left:6px;flex-shrink:0;" class="tg-df-voucher-copy-icon">                  \x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">${_rect}                  \x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">${_path}                ${_svg}              ${_span}` : '';                            const logoHtml = logoUrl                 ? `\x3Cimg src="${this.escapeHTML(logoUrl)}" alt="${this.escapeHTML(offerName)}" class="tg-df-voucher-logo" />`                 : `\x3Cdiv class="tg-df-voucher-logo" style="background:#e2e8f0;">${_div}`;                            let expiryHtml = '';              if (endTime) {                let dStr = endTime;                if (!isNaN(dStr) && String(dStr).length === 10) dStr = Number(dStr) * 1000;                const d = new Date(dStr);                if (!isNaN(d.getTime())) {                  const options = { year: 'numeric', month: 'short', day: 'numeric' };                  expiryHtml = `                    \x3Cdiv class="tg-df-voucher-expiry">                      \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                        \x3Ccircle cx="12" cy="12" r="10">${_circle}                        \x3Cpolyline points="12 6 12 12 16 14">${_polyline}                      ${_svg}                      Expires ${d.toLocaleDateString(undefined, options)}                    ${_div}`;                }              }              const revenueIdVal = generateRevenueId(linkUrl, offerName, merchantName, null);              const rewrittenLinkUrl = rewriteAffiliateLink(linkUrl, area, revenueIdVal);              return `                \x3Ca href="${this.escapeHTML(rewrittenLinkUrl)}" target="_blank" rel="noopener nofollow" class="tg-df-voucher-item"                  data-action="voucher-click"                  data-product-name="${this.escapeHTML(offerName)}"                  data-merchant-name="${this.escapeHTML(merchantName)}"                  data-analytics-id="${this.escapeHTML(offerObj.offer_id || offerObj.id || v.id || '')}"                  data-price=""                  data-previous-price=""                  data-original-link="${this.escapeHTML(linkUrl)}"                  data-revenue-id="${revenueIdVal}"                  data-index="${idx}"                  data-total="${offers.length}"                  data-in-stock="true"                  data-currency="USD"                  data-model-id="${this.escapeHTML(offerObj.model_id || v.model_id || offerObj.id || v.id || '')}"                  data-merchant-id="${this.escapeHTML(offerObj.merchant_id || offerObj.merchant?.id || '')}"                >                  ${logoHtml}                  \x3Cdiv class="tg-df-voucher-content">                    \x3Ch4 class="tg-df-voucher-title">${this.escapeHTML(offerName)}${_h4}                    ${codeHtml}                    ${expiryHtml}                  ${_div}                ${_a}              `;            }).join('');                        // Attach copy functionality            const copyBtns = content.querySelectorAll('[data-action="copy-code"]');            copyBtns.forEach(btn => {              btn.addEventListener('click', async (e) => {                e.preventDefault();                e.stopPropagation();                                const code = btn.getAttribute('data-code');                if (!code) return;                                try {                  const copyToClipboard = async (text) => {                     if (window.navigator.clipboard && window.isSecureContext) {                        try { await window.navigator.clipboard.writeText(text); return; } catch (e) {}                     }                     const textArea = document.createElement("textarea");                     textArea.value = text;                     textArea.style.position = "fixed";                     document.body.appendChild(textArea);                     textArea.focus();                     textArea.select();                     document.execCommand('copy');                     textArea.remove();                  };                  await copyToClipboard(code);                                    // Visual feedback                  btn.classList.add('copied');                  const textSpan = btn.querySelector('.tg-df-voucher-code-text');                  const iconSvg = btn.querySelector('.tg-df-voucher-copy-icon');                                    const origText = textSpan.innerText;                  const origIcon = iconSvg.innerHTML;                                    textSpan.innerText = 'Copied!';                  iconSvg.innerHTML = `\x3Cpolyline points="20 6 9 17 4 12">${_polyline}`;                                    setTimeout(() => {                    if (btn) {                      btn.classList.remove('copied');                      if (textSpan) textSpan.innerText = origText;                      if (iconSvg) iconSvg.innerHTML = origIcon;                    }                  }, 2000);                                    trackElementInteraction({                    id: 'voucher-code-copy',                    name: 'Copy Voucher Code',                    label: `Copied ${code} for ${merchantName}`                  });                } catch (err) {                  console.warn('Failed to copy text: ', err);                }              });            });            // Attach voucher click tracking            const voucherBtns = content.querySelectorAll('[data-action="voucher-click"]');            voucherBtns.forEach(btn => {              btn.addEventListener('click', (e) => {                if (e.target.closest('[data-action="copy-code"]')) return;                                const productName = btn.getAttribute('data-product-name');                const merchantNameAttr = btn.getAttribute('data-merchant-name');                const productId = btn.getAttribute('data-analytics-id');                const price = parseFloat(btn.getAttribute('data-price')) || null;                const prevPriceStr = btn.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = btn.getAttribute('data-original-link');                const finalHref = btn.href || btn.getAttribute('href') || '';                let actualRevenueId = btn.getAttribute('data-revenue-id');                const revMatch = finalHref.match(/(?:subId1|xcust|clickref|ascsubtag)=[^&]*?(\d{18,20})(?:&|$)/i);                if (revMatch && revMatch[1]) {                  actualRevenueId = revMatch[1];                }                const rewrittenLink = finalHref;                const revenueId = actualRevenueId;                const index = parseInt(btn.getAttribute('data-index'), 10) || 0;                const inStock = btn.getAttribute('data-in-stock') === 'true';                const totalText = btn.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: btn.getAttribute('data-model-id') || null,                    matchId: btn.getAttribute('data-match-id') || null,                    brand: btn.getAttribute('data-model-brand') || null,                    parent: btn.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: btn.getAttribute('data-merchant-id') || null,                    network: btn.getAttribute('data-merchant-network') || null,                    url: btn.getAttribute('data-merchant-url') || null,                    name: merchantNameAttr                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: btn.getAttribute('data-currency') || 'USD'                };                if (typeof trackDealClick === 'function') {                  trackDealClick(trackingParams);                }              });            });                                  } catch (e) {            console.warn(e);            content.innerHTML = `\x3Cdiv class="tg-df-message">Failed to load vouchers.${_div}`;          }        }        render() {          try {            if (this.getViewMode() === 'savings_squad' && this.airedaleTags.length > 0) {              if (this.categoryFilterWrapper) {                 this.categoryFilterWrapper.style.display = 'flex';              }              if (this.categoryFilter) {                 const _option = '<' + '/option>';                 let optionsHtml = `\x3Coption value="all">All Categories${_option}`;                 this.airedaleTags.forEach(tag => {                    const isSelected = this.activeDealTag === tag ? 'selected' : '';                    optionsHtml += `\x3Coption value="${this.escapeHTML(tag)}" ${isSelected}>${this.escapeHTML(tag)} (${this.airedaleTagCounts[tag] || 0})${_option}`;                 });                 this.categoryFilter.innerHTML = optionsHtml;                 this.categoryFilter.value = this.activeDealTag || 'all';              }            } else {               if (this.categoryFilterWrapper) {                  this.categoryFilterWrapper.style.display = 'none';               }            }            const displayDeals = this.getFilteredDeals();          // HACK: Hide closing tags from the CMS HTML sanitizer so it doesn't strip them during in-page injection          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h3 = '<' + '/h3>';          const _p = '<' + '/p>';          const _strong = '<' + '/strong>';          const _sup = '<' + '/sup>';          const _button = '<' + '/button>';          if (displayDeals.length === 0) {            if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {              if (this.deals.length > 0) {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No deals match your selected filters.                ${_div}`;              } else if (this.getViewMode() === 'savings_squad' && this.currentQuery.length <= 2) {                 // Do not show "no exact matches" if query is empty for savings_squad                 this.grid.innerHTML = '';              } else {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No exact matches found for "\x3Cstrong>${this.escapeHTML(this.currentQuery)}${_strong}". Try adjusting your search term.                ${_div}`;              }            } else {              this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                Search product or category names to discover the best deals from across the web.              ${_div}`;            }            return;          }          let dealsHtml = displayDeals.slice(0, this.displayLimit).map((deal, index) => {            try {               const currencySym = this.escapeHTML(deal.currency);               const isoCurrencyCode = normalizeCurrency(currencySym);               const escapedPrice = this.escapeHTML(deal.price);               const escapedMsrp = this.escapeHTML(deal.msrp);               const areaCode = this.getAreaCode();                              const revenueId = generateRevenueId(deal.url, deal.title, deal.merchant, null);               const originalLink = deal.url;               const rewrittenLink = rewriteAffiliateLink(deal.url, areaCode, revenueId);                        const productCategoryName = 'deals';            const dataAttr = `              data-action="${deal.isCheckPrice ? 'view-similar-click' : 'deal-click'}"              data-analytics-id="${this.escapeHTML(deal.externalProductId || deal.id || '')}"              data-product-name="${this.escapeHTML(deal.title)}"              data-merchant-name="${this.escapeHTML(deal.merchant)}"              data-price="${deal.rawPrice || ''}"              data-previous-price="${deal.rawMsrp || ''}"              data-original-link="${this.escapeHTML(originalLink)}"              data-revenue-id="${revenueId}"              data-index="${index}"              data-total="${displayDeals.length}"              data-in-stock="${deal.inStock !== false}"              data-currency="${this.escapeHTML(isoCurrencyCode)}"              data-model-id="${this.escapeHTML(deal.modelId || '')}"              data-product-key="${this.escapeHTML(deal.productKey || '')}"              data-merchant-id="${this.escapeHTML(deal.merchantId || '')}"            `;                        let priceGroupHtml = '';            let isSavingsSquadMode = this.getViewMode() === 'savings_squad';            let ctaText = 'View Deal';            let formattedPrice = '';            let msrpHtml = '';                        if (deal.isCheckPrice) {              ctaText = isSavingsSquadMode ? 'View Deal' : 'Check Price';              if (isSavingsSquadMode) {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-merchant-wrapper">                    \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                  \x3Cdiv class="tg-df-card-price-group">                  ${_div}                `;              } else {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-merchant-wrapper">                    \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                  \x3Cdiv class="tg-df-card-price-group">                    \x3Cspan class="tg-df-card-price" style="font-size: 15px; font-weight: 500; font-style: italic;">See price at retailer${_span}                  ${_div}                `;              }            } else {              // Format Price              formattedPrice = escapedPrice.includes(currencySym)                 ? escapedPrice                 : `${currencySym}${escapedPrice}`;                              // Format MSRP              msrpHtml = deal.msrp && deal.rawMsrp > deal.rawPrice                ? `\x3Cspan class="tg-df-card-msrp">${escapedMsrp.includes(currencySym) ? escapedMsrp : currencySym + escapedMsrp}${_span}`                : '';                              priceGroupHtml = `                \x3Cdiv class="tg-df-card-merchant-wrapper">                  \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                ${_div}                \x3Cdiv class="tg-df-card-price-group">                  ${isSavingsSquadMode ? '' : `                  \x3Cspan class="tg-df-card-price">${formattedPrice}${_span}                  ${msrpHtml}                  `}                ${_div}              `;            }                        const discountBadgeHtml = deal.savingLabel && !deal.isCheckPrice              ? `\x3Cspan class="tg-df-card-discount-badge">${this.escapeHTML(deal.savingLabel)}${_span}`              : '';                          // HACK for CMS            const _button = '<' + '/button>';            const _svg = '<' + '/svg>';            const _path = '<' + '/path>';            const _rect = '<' + '/rect>';            const _circle = '<' + '/circle>';            const _polyline = '<' + '/polyline>';            const _line = '<' + '/line>';                        let badgesHtml = '';            const primeBadge = deal.isPrime ? `              \x3Cspan class="tg-df-tag tg-df-tag-prime">                \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="currentColor">                  \x3Cpath d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z">${_path}                ${_svg} Prime              ${_span}            ` : '';                        const couponsBadge = deal.merchant && deal.merchant.toLowerCase().includes('amazon') ? '' : `              \x3Cdiv class="tg-df-coupon-wrapper" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:inline-flex; align-items:center;">                \x3Cdiv class="tg-df-coupon-spinner">${_div}                \x3Cbutton type="button" class="tg-df-tag tg-df-tag-coupons" data-action="coupons-click" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:none;">                  \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                    \x3Cpath d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z">${_path}                    \x3Cline x1="7" y1="7" x2="7.01" y2="7">${_line}                  ${_svg} Coupons                ${_button}              ${_div}            `;                        // Note: We always add coupons badge if there's a chance, but to allow 3-line titles we check wrapper display state            badgesHtml = `              \x3Cdiv class="tg-df-card-badges">                ${primeBadge}                ${couponsBadge}              ${_div}            `;            const _linearGradient = '<' + '/linearGradient>';            const _polygon = '<' + '/polygon>';            const _stop = '<' + '/stop>';            const _defs = '<' + '/defs>';                        let starHtml = '';            if (deal.starRating) {              let rating = deal.starRating;                            if (rating > 0) {                const fullStars = Math.floor(rating);                const halfStar = (rating - fullStars) >= 0.5 ? 1 : 0;                const emptyStars = Math.max(0, 5 - fullStars - halfStar);                const blue = '#1f69ff'; // Tom's guide brand color from VIEW DEAL button                const gray = '#cbd5e1';                                const starSvgFull = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="${blue}" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                const gradId = 'half_grad_' + Math.floor(Math.random()*1000000);                const starSvgHalf = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cdefs>\x3ClinearGradient id="${gradId}" x1="0" x2="1" y1="0" y2="0">\x3Cstop offset="50%" stop-color="${blue}">${_stop}\x3Cstop offset="50%" stop-color="transparent">${_stop}${_linearGradient}${_defs}                  \x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26" fill="url(#${gradId})">${_polygon}${_svg}`;                                  const starSvgEmpty = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="${gray}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                let stars = [];                for (let i=0; i<fullStars; i++) stars.push(starSvgFull);                if (halfStar) stars.push(starSvgHalf);                for (let i=0; i<emptyStars; i++) stars.push(starSvgEmpty);                                starHtml = `\x3Cdiv class="tg-df-card-stars" style="display:flex;align-items:center;margin-bottom:8px;font-size:13px;font-weight:600;color:var(--tg-df-text-muted);">                  \x3Cspan style="margin-right:6px;">Tom's Guide:${_span}                  \x3Cdiv style="display:flex;gap:2px;">                    ${stars.join('')}                  ${_div}                ${_div}`;              }            }            let htmlOutput = '';            if (isSavingsSquadMode) {              htmlOutput += `              \x3Cdiv class="hawk-deal-widget-container tg-df-mobile-only" data-collapsible="true">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''} style="margin-bottom: 10px;">` : ''}                \x3Cdiv class="hawk-deal-widget-wrap">                  \x3Cdiv class="hawk-deal-widget-image-container">                    \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" rel="sponsored noopener" target="_blank" class="hawk-affiliate-link-deal-widget" ${dataAttr}>                      \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="hawk-lazy-image-deal-widget" loading="lazy" width="140" height="160" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                    ${_a}                  ${_div}                  \x3Cdiv class="hawk-deal-widget-text-cta-container">                    \x3Cdiv class="hawk-deal-widget-text-body-container">                      \x3Cdiv class="hawk-deal-widget-text-body-main">                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          ${deal.isCheckPrice ? `                            \x3Cspan class="hawk-deal-widget-title-product-title">${this.escapeHTML(deal.title)}${_span}                          ` : `                            \x3Cspan class="hawk-deal-widget-title-product-title">${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_span}                          `}                        ${_a}                        ${!deal.isCheckPrice && deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan class="hawk-deal-widget-title-was-price">was ${currencySym}${escapedMsrp}${_span}                          ${_a}                        ` : ''}                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          \x3Cspan class="hawk-deal-widget-title-retailer-price">                            ${!deal.isCheckPrice ? `                              \x3Cspan class="hawk-deal-widget-title-price">now ${formattedPrice}${_span}                              \x3Cspan class="hawk-deal-widget-title-retailer"> at ${this.escapeHTML(deal.merchant)}${_span}                            ` : `                              \x3Cspan class="hawk-deal-widget-title-price">See price at ${this.escapeHTML(deal.merchant)}${_span}                            `}                          ${_span}                        ${_a}                        ${deal.description ? `\x3Cdiv class="hawk-deal-widget-text-body-description">\x3Cp>${this.escapeHTML(deal.description)}${_p}${_div}` : ''}                      ${_div}                    ${_div}                    \x3Cdiv class="hawk-deal-widget-footer">                      \x3Cdiv class="hawk-deal-widget-button-wrapper">                        \x3Cdiv class="hawk-deal-widget-preferred-partner-wrapper">                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-deal-button" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan>${deal.isCheckPrice ? 'Check Price' : 'View Deal'}${_span}                          ${_a}                        ${_div}                      ${_div}                    ${_div}                  ${_div}                ${_div}              ${_div}              `;            }            htmlOutput += `              \x3Cdiv class="tg-df-card ${isSavingsSquadMode ? 'tg-df-desktop-only' : ''}">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''}>` : ''}                \x3Cdiv class="tg-df-card-image-box">                  ${discountBadgeHtml}                  \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" style="display: flex; align-items: center; justify-content: center; width: 100%; height: 100%;">                    \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="tg-df-card-image" loading="lazy" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                  ${_a}                ${_div}                \x3Cdiv class="tg-df-card-body">                  ${starHtml}                  ${badgesHtml}                  \x3Ch3 class="tg-df-card-title tg-df-custom-savings-squad-title" title="${this.escapeHTML(deal.title)}">                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit;">                      ${isSavingsSquadMode                         ? (deal.isCheckPrice                             ? (deal.title && deal.title.includes(':')                                 ? `\x3Cstrong>${this.escapeHTML(deal.title.substring(0, deal.title.indexOf(':') + 1))}${_strong}\x3Cspan style="color: #1f69ff; font-weight: normal;">${this.escapeHTML(deal.title.substring(deal.title.indexOf(':') + 1))}${_span}`                                : this.escapeHTML(deal.title)                              )                             : `\x3Cstrong>${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_strong} ${deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `\x3Cspan style="color: #d0021b; text-decoration: line-through; font-weight: normal; margin-right: 4px;">was ${currencySym}${escapedMsrp}${_span} ` : ''}\x3Cspan style="color: #1f69ff; font-weight: normal;">now ${formattedPrice} at ${this.escapeHTML(deal.merchant)}${_span}`                          )                        : this.escapeHTML(deal.title)                      }                    ${_a}                  ${_h3}                  ${deal.description ? `\x3Cp style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 12px; line-height: 1.4;">${this.escapeHTML(deal.description)}${_p}` : ''}                  \x3Cdiv class="tg-df-card-footer">                    ${priceGroupHtml}                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" class="tg-df-card-cta ${isSavingsSquadMode ? 'tg-df-cta-savings-squad' : ''}" style="text-decoration: none;">${ctaText}${_a}                  ${_div}                ${_div}              ${_div}            `;                        return htmlOutput;            } catch (e) {               console.log("Error rendering deal in map for index", index, typeof deal === 'object' ? JSON.stringify(deal) : deal, "MSG:", e.message);               return '';            }          }).join('');                    if (displayDeals.length > this.displayLimit || ((this.getViewMode() === 'carousel' || this.getViewMode() === 'auto') && displayDeals.length > 0 && displayDeals.length % ((this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12) === 0)) {            if (this.getViewMode() === 'carousel') {               dealsHtml += `                 \x3Cbutton type="button" class="tg-df-load-more-card tg-df-load-more">                   \x3Csvg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-bottom: 8px;">\x3Cpath d="M5 12h14">\x3C/path>\x3Cpath d="m12 5 7 7-7 7">\x3C/path>\x3C/svg>                   Load More                 ${_button}               `;            } else {               dealsHtml += `                 \x3Cdiv style="width: 100%; display: flex; justify-content: center; margin-top: 16px; grid-column: 1 / -1;">                   \x3Cbutton type="button" class="tg-df-tag-outline tg-df-load-more" style="padding: 8px 24px; border-radius: 100px; font-weight: 600; font-size: 14px; cursor: pointer; display: flex; align-items: center;">Load More${_button}                 ${_div}               `;            }          }                    this.grid.innerHTML = dealsHtml;          // Inject JSON-LD          try {            let targetNode = this.hostContainer || document.head;            let jsonLdScript = targetNode.querySelector('#tg-df-json-ld-' + this.widgetId);            if (!jsonLdScript) {                jsonLdScript = document.createElement('script');                jsonLdScript.type = 'application/ld+json';                jsonLdScript.id = 'tg-df-json-ld-' + this.widgetId;                targetNode.appendChild(jsonLdScript);            }            const jsonLdData = {              "@context": "https://schema.org",              "@type": "ItemList",              "itemListElement": displayDeals.slice(0, this.displayLimit).map((deal, index) => {                 let isoCurrency = "USD";                 if (deal.currency === '£') isoCurrency = "GBP";                 else if (deal.currency === '€') isoCurrency = "EUR";                 else if (deal.currency === 'A$') isoCurrency = "AUD";                 else if (deal.currency === 'CA$') isoCurrency = "CAD";                 const areaCode = typeof this.getAreaCode === 'function' ? this.getAreaCode() : 'US';                 const revenueId = typeof generateRevenueId === 'function' ? generateRevenueId(deal.url, deal.title, deal.merchant, null) : '';                 const rewrittenLink = typeof rewriteAffiliateLink === 'function' ? rewriteAffiliateLink(deal.url, areaCode, revenueId) : deal.url;                 return {                   "@type": "ListItem",                   "position": index + 1,                   "item": {                     "@type": "Product",                     "name": deal.title,                     "image": deal.image || "",                     "description": deal.description || "",                     "brand": {                       "@type": "Brand",                       "name": deal.brand || ""                     },                     "offers": {                       "@type": "Offer",                       "priceCurrency": isoCurrency,                       "price": deal.rawPrice || 0,                       "url": rewrittenLink,                       "seller": {                         "@type": "Organization",                         "name": deal.merchant || ""                       }                     }                   }                 };              }).filter(item => item.item.name)            };            jsonLdScript.textContent = JSON.stringify(jsonLdData);          } catch(e) { console.warn("JSON-LD generation failed", e); }                    let gridWrapper = this.grid.parentElement;          if (gridWrapper && gridWrapper.classList.contains('tg-df-grid-wrapper')) {             let rightChevron = gridWrapper.querySelector('.tg-df-carousel-scroll-right');             let leftChevron = gridWrapper.querySelector('.tg-df-carousel-scroll-left');             if (this.getViewMode() === 'carousel') {                 // The observer set up in setupScrollListeners handles visibility.                 if (rightChevron) rightChevron.style.display = 'flex';                 if (leftChevron) leftChevron.style.display = 'none'; // reset correctly             } else {                 if (rightChevron) rightChevron.style.display = 'none';                 if (leftChevron) leftChevron.style.display = 'none';             }          }                    const loadMoreBtn = this.grid.querySelector('.tg-df-load-more');          if (loadMoreBtn) {            loadMoreBtn.addEventListener('click', async () => {              if (typeof trackElementInteraction === 'function') {                trackElementInteraction({ id: 'load-more', name: 'Load more', label: 'Load More Results' });              }              if (displayDeals.length <= this.displayLimit) {                 loadMoreBtn.innerHTML = `                  <svg class="tg-df-spinner" style="width: 16px; height: 16px; display: inline-block; vertical-align: middle; margin-right: 8px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M12 2v4m0 12v4M4.93 4.93l2.83 2.83m8.48 8.48l2.83 2.83M2 12h4m12 0h4M4.93 19.07l2.83-2.83m8.48-8.48l2.83-2.83"/></svg>                  Loading...                 `;                 loadMoreBtn.disabled = true;                 await this.fetchDeals(this.currentQuery, true);              } else {                 this.displayLimit += this.getRowsLimit();                 this.render();              }            });          }                      this.bindCouponButtons();            this.checkAndUpdateCoupons();                        // Allow hawklinks.js to discover and rewrite our widget links             // by appending the .article-body class and manually triggering processArticle.            let container = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (container && !container.classList.contains('article-body')) {               container.classList.add('article-body');            }            setTimeout(() => {               if (this.grid && !this.grid.classList.contains('article-body')) this.grid.classList.add('article-body');               document.dispatchEvent(new CustomEvent('processArticle', { detail: { element: this.root } }));            }, 50);          } catch(e) {            console.warn("Widget render error", e);          }        }                async checkAndUpdateCoupons() {          const wrappers = Array.from(this.root.querySelectorAll('.tg-df-coupon-wrapper'));          if (wrappers.length === 0) return;                    const merchants = [...new Set(wrappers.map(w => w.getAttribute('data-merchant')).filter(Boolean))];          if (merchants.length === 0) return;          const couponResultsMap = await this.checkMerchantsCouponsBulk(merchants);                    for (const merchant of merchants) {            const hasCoupons = !!couponResultsMap[merchant];            const merchantWrappers = wrappers.filter(w => w.getAttribute('data-merchant') === merchant);            merchantWrappers.forEach(wrapper => {              const spinner = wrapper.querySelector('.tg-df-coupon-spinner');              const btn = wrapper.querySelector('.tg-df-tag-coupons');                            if (spinner) spinner.style.display = 'none';                            if (hasCoupons && btn) {                btn.style.display = 'inline-flex';              } else if (!hasCoupons) {                wrapper.style.display = 'none';              }            });          }        }        updateFloatingCopyBar() {          if (!this.editorBar || !this.editorSelectedCount) return;          if (this.editorMode && this.selectedDeals.size > 0) {            this.editorBar.style.display = 'flex';            this.editorSelectedCount.innerText = this.selectedDeals.size;          } else {            this.editorBar.style.display = 'none';          }        }        async copySelectedDealsToCMS() {           function htmlToSlate(htmlString) {              if (!htmlString) return [{ type: 'paragraph', children: [{ text: '' }] }];              let doc;              if (typeof window !== 'undefined' && window.DOMParser) {                 doc = new DOMParser().parseFromString(htmlString, 'text/html');              } else {                 doc = document.implementation.createHTMLDocument('');                 doc.body.innerHTML = htmlString;              }                            function parseNode(node, marks = {}) {                  if (node.nodeType === 3) {                      const text = node.textContent;                      if (!text) return null;                      return { text: text, ...marks };                  }                  if (node.nodeType === 1) {                      const tagName = node.tagName.toLowerCase();                      if (tagName === 'br') {                          return { type: 'line-break', children: [{ text: '' }] };                      }                      if (tagName === 'p') {                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return { type: 'paragraph', children };                      }                      if (tagName === 'strong' || tagName === 'b') {                          const newMarks = { ...marks, bold: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'em' || tagName === 'i') {                          const newMarks = { ...marks, italic: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'a') {                          const href = node.getAttribute('href') || '';                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return {                              type: 'link',                              url: href,                              isNoFollow: (node.getAttribute('rel') || '').includes('nofollow'),                              isSponsored: (node.getAttribute('rel') || '').includes('sponsored'),                              isOpenNewTab: node.getAttribute('target') === '_blank',                              isPreventDataRewrite: false,                              children: children                          };                      }                      return Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                  }                  return null;              }                            let blocksArray = [];              let currentParagraphChildren = [];              function flushParagraph() {                  if (currentParagraphChildren.length > 0) {                      blocksArray.push({ type: 'paragraph', children: currentParagraphChildren });                      currentParagraphChildren = [];                  }              }              Array.from(doc.body.childNodes).forEach(node => {                  const parsed = parseNode(node, {});                  const parsedItems = Array.isArray(parsed) ? parsed : (parsed ? [parsed] : []);                  parsedItems.forEach(item => {                      if (item.type === 'paragraph') {                          flushParagraph();                          blocksArray.push(item);                      } else {                          currentParagraphChildren.push(item);                      }                  });              });              flushParagraph();              if (blocksArray.length === 0) {                  blocksArray = [{ type: 'paragraph', children: [{ text: '' }] }];              }              return blocksArray;           }           const blocks = [];                      this.editorCopyBtn.innerHTML = '\x3Cspan class="tg-df-coupon-spinner" style="display:inline-block; margin-right:8px; border-top-color:#fff;">' + '<' + '/span> Copying...';           for (const deal of Array.from(this.selectedDeals.values())) {              const url = deal.url;              const merchant = deal.merchant;              const title = deal.title;              const image = deal.image;              const currentPrice = deal.currency + deal.rawPrice;              const wasPrice = deal.hasWasPrice && deal.rawMsrp > deal.rawPrice ? deal.currency + deal.rawMsrp : '';                            let couponsChildren = [];              try {                  const area = this.getAreaCode();                  const apiUrl = new URL('https://search-api.fie.future.net.uk/widget.php');                  apiUrl.searchParams.append('model_name', 'Everything');                  apiUrl.searchParams.append('language', 'en-GB');                  apiUrl.searchParams.append('area', area);                  apiUrl.searchParams.append('combine_product_types', '1');                  apiUrl.searchParams.append('filter_merchant_name', merchant);                  apiUrl.searchParams.append('all_filters', 'false');                  apiUrl.searchParams.append('exclude_unlabelled', 'false');                  apiUrl.searchParams.append('include_specs', 'false');                  apiUrl.searchParams.append('sort', 'voucher');                  apiUrl.searchParams.append('distinct_merchants', 'natural');                  apiUrl.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');                  apiUrl.searchParams.append('rows', '3');                  apiUrl.searchParams.append('origin', 'widgets-clientside');                                    let res; try { res = await fetch(apiUrl.toString()); } catch (e) { return; }                  if (res.ok) {                      const data = await res.json();                      let offers = [];                      if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {                        offers = data.widget.data.offers;                      } else if (data && data.data && Array.isArray(data.data.offers)) {                        offers = data.data.offers;                      }                                            if (offers.length > 0) {                          couponsChildren.push({ text: "Also check out these coupons: ", bold: true });                          offers.slice(0, 3).forEach((offer, idx) => {                              const actualOffer = offer.offer || offer;                              const offerName = actualOffer.name || actualOffer.title || offer.model_name || offer.title || offer.name || 'Coupon';                              const linkUrl = actualOffer.link || actualOffer.url || actualOffer.offer_link || '#';                              couponsChildren.push({ type: "line-break", children: [{ text: "" }] });                              couponsChildren.push({ text: "🎟️ " });                              couponsChildren.push({                                  type: "link",                                  url: linkUrl,                                  isNoFollow: true,                                  isSponsored: false,                                  isOpenNewTab: true,                                  isPreventDataRewrite: false,                                  children: [{ text: offerName, bold: true }]                              });                          });                      }                  }              } catch (err) {                  console.warn('Failed to fetch coupons for', merchant, err);              }              let descriptionValue = [];              if (deal.text) {                 descriptionValue = htmlToSlate(deal.text);              } else {                 const dealDescriptions = [                   `Don't miss out on this fantastic deal for the ${title}. It is currently available at ${merchant} for a highly competitive price.`,                   `We've spotted an excellent price drop on the ${title}. Grab it now at ${merchant} before it's gone.`,                   `The ${title} is currently seeing a generous discount over at ${merchant}. This is a perfect time to buy if you've been holding out.`,                   `If you're in the market for the ${title}, ${merchant} has just the deal for you.`,                   `Score the ${title} for less at ${merchant} right now. This is a rare chance to save big.`,                   `Upgrade your setup with the ${title}, now available at a stellar price via ${merchant}.`                 ];                 const randomDescription = dealDescriptions[Math.floor(Math.random() * dealDescriptions.length)];                 descriptionValue = [                    { type: "paragraph", children: [{ text: randomDescription }] }                 ];              }                            if (couponsChildren.length > 0) {                 let lastBlock = descriptionValue[descriptionValue.length - 1];                 if (lastBlock && lastBlock.type === 'paragraph') {                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ text: "Also check out these coupons: ", bold: true });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children = lastBlock.children.concat(couponsChildren);                 } else {                     descriptionValue.push({                         type: "paragraph",                         children: [                             { type: "line-break", children: [{ text: "" }] },                             { type: "line-break", children: [{ text: "" }] },                             { text: "Also check out these coupons: ", bold: true },                             { type: "line-break", children: [{ text: "" }] },                             ...couponsChildren                         ]                     });                 }              }              function normalizeCurrencyToISO(symbol) {                const map = { '£': 'GBP', '$': 'USD', 'A$': 'AUD', 'CA$': 'CAD', '€': 'EUR' };                return map[symbol] || symbol;              }              const isoCurrency = normalizeCurrencyToISO(deal.currency);              blocks.push({                 id: (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'cms-' + Date.now() + Math.random(),                 blockTypeName: "deal",                 excludeFrom: [],                 collapsible: false,                 props: {                    description: {                       value: descriptionValue,                       touched: false,                       validationMessage: ""                    },                    image: {                       value: {                          credit: [{ type: "paragraph", children: [{ text: merchant }] }],                          dateCreated: Date.now(),                          dateModified: Date.now(),                          distribution: [],                          fileSize: 0,                          height: 1000,                          id: deal.id,                          imageRights: "",                          src: image,                          name: title + ".jpg",                          tags: [],                          width: 1000                       },                       touched: false,                       validationMessage: ""                    },                    showDealButton: { value: true, touched: false, validationMessage: "" },                    isPreferredPartner: { value: false, touched: false, validationMessage: "" },                    linkHref: { value: url, touched: false, validationMessage: "" },                    linkLabel: { value: "", touched: false, validationMessage: "" },                    linkIsNoFollow: { value: true, touched: false, validationMessage: "" },                    linkIsSponsored: { value: false, touched: false, validationMessage: "" },                    linkIsOpenNewWindow: { value: true, touched: false, validationMessage: "" },                    customPromoFlags: { value: [], touched: false, validationMessage: "" },                    showStarDeal: { value: false, touched: false, validationMessage: "" },                    savingType: { value: "none", touched: false, validationMessage: "" },                    starDealPromoFlag: { value: "", touched: false, validationMessage: "" },                    showEditorsChoice: { value: false, touched: false, validationMessage: "" },                    editorsChoiceTitle: { value: "", touched: false, validationMessage: "" },                    hawkPriceCurrency: { value: { value: isoCurrency, label: isoCurrency }, touched: false, validationMessage: "" },                    hawkPrice: { value: deal.hasWasPrice ? String(deal.rawMsrp) : String(deal.rawPrice), touched: false, validationMessage: "" },                    hawkSalePrice: { value: String(deal.rawPrice), touched: false, validationMessage: "" },                    lastCheckedPriceDate: { value: "", touched: false, validationMessage: "" },                    hawkModel: { touched: false, validationMessage: "" },                    productId: { value: "", touched: false, validationMessage: "" },                    voucherId: { value: "", touched: false, validationMessage: "" },                    brand: { value: deal.brand || merchant, touched: false, validationMessage: "" },                    productName: { value: title, touched: false, validationMessage: "" },                    label: { value: "", touched: false, validationMessage: "" },                    retailer: { value: merchant, touched: false, validationMessage: "" },                    priceCheckError: false                 },                 failedFetchError: ""              });           }           const payload = {              type: "articleBuilderPages",              data: blocks           };           const jsonStr = JSON.stringify(payload);                      if (navigator.clipboard && navigator.clipboard.writeText) {              navigator.clipboard.writeText(jsonStr).then(() => {                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              }).catch(err => {                 console.warn('Failed to copy text: ', err);                 alert('Failed to copy deals to clipboard. See console.');              });           } else {              // Fallback              const textArea = document.createElement("textarea");              textArea.value = jsonStr;              document.body.appendChild(textArea);              textArea.focus();              textArea.select();              try {                 document.execCommand('copy');                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              } catch (err) {                 console.warn('Fallback: Oops, unable to copy', err);                 alert('Fallback: Failed to copy deals to clipboard.');              }              document.body.removeChild(textArea);           }        }      }      // Initialize the Widget      if (document.readyState === 'loading') {        document.addEventListener('DOMContentLoaded', () => new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer }));      } else {        new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer });      }    })();  </script></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/forget-iphone-duo-prime-day-just-knocked-usd400-off-galaxy-z-fold-8-ultra</link>
                                                                            <description>
                            <![CDATA[ iPhone Duo hasn't even been released yet, but Samsung has already dropped the price of Z Fold 8 Ultra and Z Fold 8, saving you hundreds of dollars compared to Apple's foldable. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">xG9VwEaZrLznh7qQZdYHWK</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/MT3j8Vh9uh4PJdSURfLQm8-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 06 Oct 2026 11:18:30 +0000</pubDate>                                                                                                                                <updated>Tue, 06 Oct 2026 13:30:58 +0000</updated>
                                                                                                                                            <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/MT3j8Vh9uh4PJdSURfLQm8-1920-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Samsung Galaxy Z Fold 8 with Prime Day deal tag]]></media:description>                                                            <media:text><![CDATA[Samsung Galaxy Z Fold 8 with Prime Day deal tag]]></media:text>
                                <media:title type="plain"><![CDATA[Samsung Galaxy Z Fold 8 with Prime Day deal tag]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/MT3j8Vh9uh4PJdSURfLQm8-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The iPhone Duo is set to arrive later this month, but before you go ahead and pre-order Apple's first foldable you should be aware that Samsung's latest folding phones have just had a hefty discount thanks to Prime Day. These discounts take the price of both the passport-shaped Galaxy Z Fold 8 and the larger Z Fold 8 Ultra a few hundred dollars below what Apple is charging.</p><p>Normally costing $2,099, Amazon has knocked the price of the<a href="https://www.amazon.com/dp/B0H12DXK8J" target="_blank" rel="nofollow"> Galaxy Z Fold 8 Ultra down to $1,699 for a 256GB model</a>. That's a saving of over $400, and $300 less than the iPhone Duo is set to cost. Meanwhile, the <a href="https://www.amazon.com/Samsung-Galaxy-Unlocked-Android-Smartphone/dp/B0H12M2TY4" target="_blank" rel="nofollow">Galaxy Z Fold 8 has now dropped to $1,549</a>, which is $350 less than the usual $1,899 price tag. </p><div class="product"><a data-dimension112="6253e418-c170-11f1-b6a1-6f234d2c7e33" data-action="Deal Block" data-label="Galaxy Z Fold 8" data-dimension48="Galaxy Z Fold 8" data-dimension25="$1549" href="https://www.amazon.com/Samsung-Galaxy-Unlocked-Android-Smartphone/dp/B0H12M2TY4" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1327px;"><p class="vanilla-image-block" style="padding-top:64.28%;"><img id="9Rhpe6TtrVFSNo9Vtn27Tm" name="Galaxy Z Fold 8 Ultra deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/9Rhpe6TtrVFSNo9Vtn27Tm-1920-80.jpg" mos="" align="middle" fullscreen="" width="1327" height="853" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p>If you want the closest thing Samsung has to an iPhone Duo, but at a much lower price point, then check out this Galaxy Z Fold 8 deal. The passport-shaped Samsung foldable has two cameras, a 7.6-inch foldable display, 5.5-inch cover display and all the AI features you could dream off. It's all wrapped up in a design that's lighter and thinner than Apple's foldable.<a class="view-deal button" href="https://www.amazon.com/Samsung-Galaxy-Unlocked-Android-Smartphone/dp/B0H12M2TY4" target="_blank" rel="nofollow" data-dimension112="6253e418-c170-11f1-b6a1-6f234d2c7e33" data-action="Deal Block" data-label="Galaxy Z Fold 8" data-dimension48="Galaxy Z Fold 8" data-dimension25="$1549">View Deal</a></p></div><div class="product"><a data-dimension112="6253e486-c170-11f1-8227-794e236ca5b1" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra" data-dimension48="Galaxy Z Fold 8 Ultra" data-dimension25="$1699" href="https://www.amazon.com/dp/B0H12DXK8J" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:954px;"><p class="vanilla-image-block" style="padding-top:98.95%;"><img id="4EngEpxMLxWVDrp7aAo2xi" name="Galaxy Z Fold 8 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/4EngEpxMLxWVDrp7aAo2xi-1920-80.jpg" mos="" align="middle" fullscreen="" width="954" height="944" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0H12DXK8J" target="_blank" rel="nofollow" data-dimension112="6253e486-c170-11f1-8227-794e236ca5b1" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra" data-dimension48="Galaxy Z Fold 8 Ultra" data-dimension25="$1699">Galaxy Z Fold 8 Ultra: was $2099 now $1699</a></strong><br />If you want a larger screen than the Z Fold 8 and iPhone Duo, or want an actual telephoto lens, then the Z Fold 8 Ultra could be the foldable for you. It has everything the Z Fold 8 offers, plus a larger 8-inch screen and 6.5-inch cover display, plus a 200MP main camera lens. <a class="view-deal button" href="https://www.amazon.com/dp/B0H12DXK8J" target="_blank" rel="nofollow" data-dimension112="6253e486-c170-11f1-8227-794e236ca5b1" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra" data-dimension48="Galaxy Z Fold 8 Ultra" data-dimension25="$1699">View Deal</a></p></div><p>Both Samsung foldables are powerful, offer strong battery life and feature bright anti-reflective screens that let you enjoy all the extra space regardless of the environment. Plus, Samsung has been working hard to reduce the appearance of the crease, and while not completely invisible it is much harder to see than with previous devices.</p><p>Both Samsung foldables are thinner and lighter than the iPhone Duo, while also offering better multitasking, DeX desktop mode and now a much lower price tag. Not to mention the fact that Samsung has a clear advantage when it comes to AI features, on account of its own head start and collaborative efforts with Google.</p><p>The <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Z Fold 8 Ultra</a> also has the added benefit of including a 200MP main camera and a third camera lens, a 10MP telephoto shooter with 3x optical zoom. But the regular Fold 8 is the one to get if you prefer a more compact design and wider main display.</p><p><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-vs-samsung-galaxy-z-fold-8-7-ways-apples-foldable-beats-its-rival-from-ip68-to-faster-charging-and-more">There are some downsides</a>, though. The main one is that Samsung doesn't offer stylus support on its latest foldables, whereas Apple does with the Apple Pencil. In addition, Apple offers faster charging, MagSafe support, IP68 dust resistance and vapor chamber cooling for improved performance. The Z Fold 8 also lacks the ability to detect the way the screen and hinge are positioned, which both the Ultra (as Flex View) and iPhone Duo offer.</p><p>There's a lot to love about foldable phones, but the prices have always been particularly excessive. With that in mind, the ability to save such a considerable amount of money on two of the latest foldables, and so soon after they first released, is a deal that most people can't afford to miss out on. </p><h3 class="article-body__section" id="section-shop-more-deals"><span>Shop more deals</span></h3><ul><li><strong></strong><a href="https://www.amazon.com/primebigdealdays?" target="_blank" rel="nofollow"><strong>See all deals in the Prime Day sale</strong></a><strong></strong></li><li><strong></strong><a href="https://www.amazon.com/amazonprime" target="_blank" rel="nofollow"><strong>Sign up for Amazon Prime</strong></a><strong></strong></li></ul><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=tablets&amp;brands=Amazon&amp;min_discount_ratio=0.95&amp;widget_title=Top+Deals+Handpicked+by+Our+Editors&amp;widget_subtitle=Discover+the+best+discounts+currently+available%2C+curated+daily+by+the+Tom%27s+Guide+Savings+Squad.&amp;bg_color=transparent" data-vizualizer-embed="true"></div>    <script>    /**     * Tom's Guide Deals Finder - Vanilla JS Encapsulated Engine     */    (function() {      // --- Freyr Analytics Adapter ---      function initAnalytics() {        window.dataLayer = window.dataLayer || [];        window.googletag = window.googletag || {};        window.googletag.cmd = window.googletag.cmd || [];        window.hawk = window.hawk || { analytics: { freyr: [] } };        window.hawk.analytics = window.hawk.analytics || { freyr: [] };        window.hawk.analytics.freyr = window.hawk.analytics.freyr || [];        window.freyr = window.freyr || { cmd: [] };        const scriptSrc = 'https://freyr.futurecdn.net/freyr.js';        const hostname = typeof window !== 'undefined' ? window.location.hostname : '';        const isTestEnv = typeof window.navigator !== 'undefined' && (window.navigator.webdriver || window.navigator.userAgent.includes('Headless'));        const shouldSendRealAnalytics = !isTestEnv && hostname && hostname !== 'localhost' && hostname !== '127.0.0.1' && !hostname.includes('run.app');        if (shouldSendRealAnalytics && !document.querySelector(`script[src="${scriptSrc}"]`)) {          const script = document.createElement('script');          script.src = scriptSrc;          script.async = true;          document.head.appendChild(script);        }      }      function storeEventForDebug(name, data) {        if (!window.hawk || !window.hawk.analytics || !window.hawk.analytics.freyr) return;        window.hawk.analytics.freyr.push({ name, data });        try {          if (typeof window !== 'undefined' && window.localStorage) {            window.localStorage.setItem("hawk", JSON.stringify(window.hawk));          }        } catch (e) {          // Ignore storage issues        }        try {          window.dispatchEvent(new CustomEvent("hawk-analytics-update"));        } catch (e) {}      }      function sendToFreyr(eventName, data) {        if (typeof window === 'undefined') return;        window.freyr = window.freyr || { cmd: [] };        window.freyr.cmd.push(() => {          if (window.freyr && window.freyr.pushAndUpdate) {            window.freyr.pushAndUpdate(eventName, data);          }        });      }      function sendEvent(event, skip = false) {        try {          storeEventForDebug(event.name, event.data);          if (!skip) {            sendToFreyr(event.name, event.data);          }        } catch (e) {          // Ensure tracking errors don't surface to the user        }      }      function getCookie(name) {        try {          const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));          return match ? match[2] : null;        } catch (e) {          return null;        }      }      function normalizeCurrency(symbol) {        const map = {          '£': 'GBP',          '$': 'USD',          'A$': 'AUD',          'CA$': 'CAD',          '€': 'EUR'        };        return map[symbol] || symbol;      }      function trackElementInteraction(props) {        sendEvent({          name: 'elementInteraction',          data: {            element: {              action: props.action || "click",              id: props.id || undefined,              class: props.class || undefined,              name: props.name || undefined,              text: props.text || undefined,              label: props.label || undefined,              container: props.container || undefined,              url: props.url || undefined,              articleId: props.articleId || undefined            }          }        });      }      function generateRevenueId(url, productName, merchantName, modelId) {        const str = `${window.location.href}|${productName}|${merchantName}|${modelId || ''}|${new Date().toDateString()}|tomsguide`;        let hash = 0;        for (let i = 0; i < str.length; i++) {          const char = str.charCodeAt(i);          hash = ((hash << 5) - hash) + char;          hash = hash & hash;        }        let numericStr = Math.abs(hash).toString();        while (numericStr.length < 19) {          numericStr += Math.floor(Math.random() * 10).toString();        }        return numericStr.substring(0, 19);      }      function rewriteAffiliateLink(url, territory, revenueId) {        if (!url) return url;        const t = (territory || 'gb').toLowerCase();        return url.replace(/hawk-custom-tracking/g, `tomsguide-${t}-${revenueId}`);      }      function trackHawkEvent(params) {        const { clickType, widgetId, productCategoryName, product, productsArray, zeroBasedProductIndexOrNull, totalDealsOrProducts, areaClicked, merchant, revenueId, isoCurrencyCode, queryName, widgetTypeName } = params;        const data = {          event: "hawkEvent",          category: "Affiliates",          affiliate: {            action: {              type: clickType,              id: widgetId,              event: clickType === "appeared" ? "viewed" : "Click from",              timestamp: Date.now()            },            component: {              flag: "Editor",              product: productCategoryName || "deals",              category: `Signal Deal Finder ${widgetTypeName || "Carousel"} widget`,              type: clickType === "appeared" ? "review" : "signal product",              label: queryName || (product ? (product.name || "") : ""),              index: zeroBasedProductIndexOrNull === null || zeroBasedProductIndexOrNull === undefined ? -1 : zeroBasedProductIndexOrNull,              linkCount: totalDealsOrProducts || 0,              blockLayout: "",              areaClicked: areaClicked || ""            }          },          products: productsArray || (product && merchant ? [            {              product: {                primary: {                  id: product.id || product.matchId || null,                  name: product.name,                  type: "deal",                  price: product.price,                  previousPrice: product.previousPrice || null,                  currency: isoCurrencyCode || "USD",                  preorder: false,                  labels: [],                  link: product.link,                  originalLink: product.originalLink || null,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: null,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: product.globalId || null,                  inStock: product.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: isoCurrencyCode || "USD"                }              },              merchant: {                id: merchant.id || null,                name: merchant.name,                url: merchant.url || null,                network: merchant.network || null              },              model: {                id: product.modelId || null,                brand: product.brand || null,                name: product.name,                parent: product.parent || null              }            }          ] : []),          reviews: [],          _clear: true,          "gtm.uniqueEventId": Date.now() % 10000        };        sendEvent({ name: 'hawkEvent', data });      }      function trackDealClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card" });      }      function trackViewSimilarClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card View Similar" });      }      function trackPriceComparisonClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Price Comparison" });      }      function trackReviewClick(params) {        trackHawkEvent({ ...params, clickType: "review", areaClicked: "Signal Product Card Review Link" });      }      function trackShare(params) {        trackHawkEvent({ ...params, clickType: "share", areaClicked: "Signal Product Card Share" });      }      function trackDealsAppeared(widgetId, deals, revenueId, currency, queryName, widgetTypeName) {         if (!deals || deals.length === 0) return;                  const productsArray = deals.slice(0, 50).map((deal) => {            let voucherPct = null;            let rawPrice = parseFloat(deal.rawPrice) || parseFloat(deal.price) || null;            let rawMsrp = parseFloat(deal.rawMsrp) || parseFloat(deal.msrp) || null;            if (rawMsrp > rawPrice && rawPrice > 0) {              voucherPct = Math.round((1 - (rawPrice / rawMsrp)) * 100);            }            let numId = null;            if (deal.externalProductId && !isNaN(parseInt(deal.externalProductId))) {              numId = parseInt(deal.externalProductId);            } else if (deal.id && !isNaN(parseInt(deal.id))) {              numId = parseInt(deal.id);            } else {              numId = deal.matchId || null;            }            return {              product: {                primary: {                  id: numId,                  name: deal.productName || deal.title || "",                  type: "deal",                  price: rawPrice,                  previousPrice: rawMsrp,                  currency: currency || 'USD',                  preorder: false,                  labels: deal.modelBrand || deal.brand ? [                     { type: "brand", value: deal.modelBrand || deal.brand }                  ] : [],                  link: deal.url,                  originalLink: deal.url,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: voucherPct,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: deal.productKey || null,                  inStock: deal.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: currency || 'USD'                }              },              merchant: {                id: deal.merchantId ? parseInt(deal.merchantId) : null,                name: deal.merchant || "Retailer",                url: deal.merchantUrl || null,                network: deal.merchantNetwork || null              },              model: {                id: deal.modelId ? parseInt(deal.modelId) : null,                brand: deal.modelBrand || deal.brand || null,                name: deal.productName || deal.title || "",                parent: deal.modelParent || null              }            };         });                  trackHawkEvent({             clickType: "appeared",             widgetId: widgetId,             productCategoryName: "deals",             zeroBasedProductIndexOrNull: null,             totalDealsOrProducts: deals.length,             productsArray: productsArray,             queryName: queryName,             widgetTypeName: widgetTypeName         });      }      // 1. Setup Shadow DOM Sandbox      const currentScript = document.currentScript;      let hostContainer = null;      let template = null;            if (currentScript) {        let prev = currentScript.previousElementSibling;        while (prev) {          if (prev.tagName === 'TEMPLATE' && prev.classList.contains('tg-df-widget-template')) {            template = prev;          } else if (prev.tagName === 'DIV' && prev.classList.contains('tg-df-widget-host') && !prev.hasAttribute('data-initialized')) {            hostContainer = prev;            break;          }          prev = prev.previousElementSibling;        }      }            // Fallbacks in case script is deferred      if (!hostContainer) {        const hosts = document.querySelectorAll('.tg-df-widget-host:not([data-initialized])');        if (hosts.length > 0) hostContainer = hosts[0];      }            // Safely embedded template for CMS environments      const rawTemplate = `  \x3Cstyle>    /* --- Shadow DOM Base Reset --- */    *, *::before, *::after {      box-sizing: border-box;    }    img, picture, svg, video {      max-width: 100%;      height: auto;      display: block;    }    /*       1. Scoped CSS for Tom's Guide Deals Widget       All classes are prefixed with \`tg-df-\` to prevent CMS style leakage.    */    .tg-df-container {      container-type: inline-size;      container-name: tg-df;      --tg-df-blue: #1F69FF;      --tg-df-blue-hover: #004d8c;      --tg-df-text: #222222;      --tg-df-text-muted: #555555;      --tg-df-bg: #ffffff;      --tg-df-bg-secondary: #f4f4f4;      --tg-df-border: #e2e8f0;      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;      color: var(--tg-df-text);      background-color: transparent;       width: 100%;      max-width: 1200px;      margin: 0 auto;      padding-bottom: 24px;    }    .tg-df-container *, .tg-df-container *::before, .tg-df-container *::after {      margin: 0;      padding: 0;      box-sizing: border-box;    }    .tg-df-container img {      border: none;      margin: 0;      padding: 0;    }    .tg-df-container a {      text-decoration: none;      color: inherit;    }    /*       2. Search & Filter Bar    */    .tg-df-controls {      display: flex;      flex-direction: column;      align-items: center;      gap: 20px;      margin-bottom: 32px;      width: 100%;    }    .tg-df-top-bar {      display: flex;      width: 100%;      max-width: 760px;      gap: 12px;      align-items: center;    }    .tg-df-search-wrapper {      position: relative;      flex: 1;      width: 100%;      box-shadow: 0 8px 24px rgba(0,0,0,0.06);      border-radius: 40px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      z-index: 100;    }    .tg-df-autocomplete-dropdown {      position: absolute;      top: calc(100% + 4px);      left: 0;      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      max-height: 300px;      overflow-y: auto;      z-index: 200;      display: none;    }    .tg-df-autocomplete-dropdown.active {      display: block;    }    .tg-df-autocomplete-item {      padding: 12px 24px;      cursor: pointer;      font-size: 14px;      color: var(--tg-df-text);      transition: background 0.1s ease;    }    .tg-df-autocomplete-item:hover {      background: var(--tg-df-bg-secondary);    }    .tg-df-search-input {      width: 100%;      padding: 16px 64px 16px 24px;      font-size: 16px;      border: 2px solid transparent;      border-radius: 40px;      outline: none;      transition: border-color 0.2s ease, box-shadow 0.2s ease;      color: var(--tg-df-text);      background: transparent;    }    .tg-df-search-input:focus {      border-color: transparent;      box-shadow: 0 0 0 3px rgba(0, 108, 196, 0.15);    }    .tg-df-search-input::placeholder {      color: #999999;    }        .tg-df-search-btn {      position: absolute;      right: 8px;      top: 50%;      transform: translateY(-50%);      width: 40px;      height: 40px;      border-radius: 50%;      background: #222;      border: none;      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: background 0.2s ease;    }        .tg-df-search-btn:hover {      background: #000;    }    .tg-df-search-icon {      width: 16px;      height: 16px;      fill: #fff;    }    .tg-df-settings-wrapper {      position: relative;    }        .tg-df-settings-btn {      width: 48px;      height: 48px;      border-radius: 50%;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      box-shadow: 0 4px 12px rgba(0,0,0,0.04);      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: all 0.2s ease;      color: var(--tg-df-text-muted);      flex-shrink: 0;    }    .tg-df-settings-btn:hover {      background: var(--tg-df-bg-secondary);      border-color: #0000ff;      color: var(--tg-df-text);    }    .tg-df-settings-btn svg {      width: 24px;      height: 24px;      fill: currentColor;    }    .tg-df-settings-dropdown {      position: absolute;      top: calc(100% + 8px);      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      width: 280px;      padding: 20px;      display: none;      z-index: 100;      flex-direction: column;      gap: 20px;    }    .tg-df-settings-dropdown.active {      display: flex;    }        .tg-df-settings-dropdown-backdrop {      display: none;      position: fixed;      inset: 0;      z-index: 99;    }        .tg-df-settings-dropdown-backdrop.active {      display: block;    }    .tg-df-setting-item {      display: flex;      flex-direction: column;      gap: 10px;    }    .tg-df-setting-label {      font-size: 11px;      font-weight: 700;      color: var(--tg-df-text-muted);      text-transform: uppercase;      letter-spacing: 0.5px;    }        .tg-df-region-select {        padding: 10px 12px;        border-radius: 8px;        border: 1px solid var(--tg-df-border);        font-size: 15px;        outline: none;        background: var(--tg-df-bg-secondary);        color: var(--tg-df-text);        cursor: pointer;        width: 100%;    }    .tg-df-toggle {        position: relative;        display: inline-block;        width: 44px;        height: 24px;        flex-shrink: 0;    }    .tg-df-toggle input {        opacity: 0;        width: 0;        height: 0;    }    .tg-df-slider {        position: absolute;        cursor: pointer;        top: 0; left: 0; right: 0; bottom: 0;        background-color: #ccc;        transition: .2s;        border-radius: 24px;    }    .tg-df-slider:before {        position: absolute;        content: "";        height: 18px;        width: 18px;        left: 3px;        bottom: 3px;        background-color: white;        transition: .2s;        border-radius: 50%;    }    .tg-df-toggle input:checked + .tg-df-slider {        background-color: #1F69FF;    }    .tg-df-toggle input:checked + .tg-df-slider:before {        transform: translateX(20px);    }    .tg-df-dl-row {        flex-direction: row;        align-items: center;        justify-content: space-between;    }    .tg-df-dl-row-text {        font-size: 14px;        font-weight: 600;        color: var(--tg-df-text);    }    .tg-df-dl-row-subtext {        font-size: 12px;        font-weight: 400;        line-height: 1.3;        color: var(--tg-df-text-muted);        margin-top: 4px;        display: block;    }    .tg-df-filters {      display: flex;      gap: 12px;      justify-content: center;      flex-wrap: wrap;    }    .tg-df-sort-wrapper {      position: relative;      display: flex;      align-items: center;    }        .tg-df-sort-icon {      position: absolute;      left: 14px;      width: 14px;      height: 14px;      fill: var(--tg-df-text-muted);      pointer-events: none;    }    .tg-df-sort-select, .tg-df-filter-select {      padding: 10px 36px 10px 38px;      font-size: 14px;      border: 1px solid var(--tg-df-border);      border-radius: 100px;      outline: none;      appearance: none;      background-color: var(--tg-df-bg-secondary);      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 12 12'%3E%3Cpath fill='%23555555' d='M6 8L1 3h10z'/%3E%3C/svg%3E");      background-repeat: no-repeat;      background-position: right 14px center;      color: var(--tg-df-text);      cursor: pointer;      font-weight: 500;      transition: all 0.2s ease;    }        .tg-df-price-input::-webkit-outer-spin-button,    .tg-df-price-input::-webkit-inner-spin-button {      -webkit-appearance: none;      margin: 0;    }    .tg-df-price-input {      -moz-appearance: textfield;    }    .tg-df-sort-select:hover, .tg-df-filter-select:hover {      background-color: #e2e8f0;    }    .tg-df-multiselect-container {      position: relative;    }        .tg-df-multiselect-trigger {      display: block;      background: #fff;      user-select: none;      width: 100%;      overflow: hidden;      white-space: nowrap;      text-overflow: ellipsis;    }        .tg-df-multiselect-dropdown {      display: none;      position: absolute;      top: calc(100% + 4px);      left: 0;      width: 100%;      min-width: 220px;      max-height: 300px;      overflow-y: auto;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);      z-index: 100;      padding: 8px 0;    }    .tg-df-multiselect-dropdown.active {      display: block;    }    .tg-df-ms-option {      padding: 8px 16px;      display: flex;      align-items: center;      gap: 8px;      cursor: pointer;      font-size: 14px;    }    .tg-df-ms-option:hover {      background-color: var(--tg-df-bg-secondary);    }        .tg-df-ms-option input {      cursor: pointer;      accent-color: #1f69ff;    }    .tg-df-sort-select:focus, .tg-df-filter-select:focus {      border-color: #0000ff;      box-shadow: 0 0 0 3px rgba(0, 0, 255, 0.2);      background-color: var(--tg-df-bg);    }    /*       3. Deal Grid Layout    */    .tg-df-grid.tg-df-grid-auto {      padding-top: 24px;    }    .tg-df-grid, .tg-df-grid.layout-grid {      display: grid;      grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));      gap: 10px;    }    .tg-df-grid.layout-row {      grid-template-columns: 1fr;      gap: 16px;    }        .tg-df-grid.layout-row .tg-df-card {      flex-direction: row;      align-items: stretch;      height: auto;      box-shadow: none;      border-bottom: 1px solid var(--tg-df-border);    }    .tg-df-grid.layout-row .tg-df-card:hover {      box-shadow: none;    }    .tg-df-grid.layout-row .tg-df-card-image-box {      width: 140px;      min-width: 140px;      aspect-ratio: 3/4;      border-right: none;      padding: 16px 16px 16px 32px;    }    .tg-df-grid.layout-row .tg-df-card-body {      padding: 16px;      justify-content: space-between;    }    .tg-df-grid.layout-row .tg-df-card-title {      font-size: 15px;      margin-bottom: 16px;    }    .tg-df-grid.layout-row .tg-df-card-stars { margin-bottom: 8px; }    .tg-df-grid.layout-row .tg-df-card-footer {      flex-direction: column;      align-items: flex-start;      gap: 0;    }    .tg-df-grid.layout-row .tg-df-card-merchant-pill {      margin-bottom: 4px;    }    .tg-df-grid.layout-row .tg-df-card-price-group {      margin-bottom: 8px;    }    .tg-df-grid.layout-row .tg-df-price-group {      width: auto;    }    .tg-df-grid.layout-row .tg-df-card-cta {      width: 100%;      max-width: 200px;      padding: 10px 24px;      font-size: 13px;      flex-shrink: 0;      text-align: center;      justify-content: center;    }    /*       4. Deal Card Design    */    .tg-df-card {      position: relative;      display: flex;      flex-direction: column;      background-color: #ffffff;      border-radius: 0;      overflow: hidden;      transition: transform 0.2s ease, box-shadow 0.2s ease;      text-decoration: none;      color: inherit;      height: 100%;      box-shadow: 0 0 16px rgba(0, 0, 0, 0.08);      border: 1px solid var(--tg-df-border);    }    .tg-df-card:hover {      box-shadow: 0 0 24px rgba(0, 0, 0, 0.12);    }    .tg-df-card-image-box {      width: 100%;      aspect-ratio: 3/4;      background-color: #f8f8f8;      display: flex;      align-items: center;      justify-content: center;      position: relative;      overflow: hidden;      padding: 32px;      flex: 0 0 auto;    }    .tg-df-card-image {      max-width: 100%;      max-height: 100%;      width: auto;      height: auto;      object-fit: contain;      mix-blend-mode: multiply; /* Helps white background images blend into secondary bg */      transition: transform 0.3s ease;    }    .tg-df-card:hover .tg-df-card-image {      transform: scale(1.05); /* Zoom in on hover */    }    .tg-df-card-discount-badge {      position: absolute;      top: 12px;      left: 12px;      background: #dc2626; /* Red */      color: #ffffff;      padding: 6px 8px;      font-size: 11px;      font-weight: 500;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      z-index: 10;    }        .tg-df-card-merchant-pill {      display: block;      padding: 0;      font-size: 11px;      font-weight: 600;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      color: var(--tg-df-text-muted);      margin-bottom: 8px;      white-space: nowrap;      overflow: hidden;      text-overflow: ellipsis;    }    .tg-df-card-body {      padding: 16px;      display: flex;      flex-direction: column;      flex-grow: 1;      min-width: 0;    }    .tg-df-card-badges {      display: flex;      flex-wrap: wrap;      gap: 6px;      margin-bottom: 8px;    }    .tg-df-tag {      display: inline-flex;      align-items: center;      padding: 4px 6px;      font-size: 11px;      font-weight: 700;      text-transform: uppercase;      border-radius: 4px;      gap: 4px;    }    .tg-df-tag-prime {      background-color: #00A8E1;      color: #fff;    }    .tg-df-tag-coupons {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-coupons:hover {      background-color: #e2e8f0;    }        .tg-df-tag-outline {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-outline:hover {      background-color: #e2e8f0;    }        @keyframes tg-df-spin {      0% { transform: rotate(0deg); }      100% { transform: rotate(360deg); }    }    .tg-df-coupon-spinner {      border: 2px solid #e2e8f0;      border-top: 2px solid #3b82f6;      border-radius: 50%;      width: 14px;      height: 14px;      animation: tg-df-spin 1s linear infinite;      margin: 4px 8px;      display: inline-block;    }        /* Vouchers Modal */    .tg-df-modal-backdrop {      position: fixed;      top: 0; left: 0; right: 0; bottom: 0;      background: rgba(0,0,0,0.5);      z-index: 10000;      display: flex;      align-items: center;      justify-content: center;      opacity: 0;      pointer-events: none;      transition: opacity 0.3s;    }    .tg-df-modal-backdrop.active {      opacity: 1;      pointer-events: auto;    }    .tg-df-modal {      background: #fff;      border-radius: 12px;      width: 90%;      max-width: 400px;      max-height: 80vh;      display: flex;      flex-direction: column;      box-shadow: 0 10px 40px rgba(0,0,0,0.2);      transform: translateY(20px);      transition: transform 0.3s;    }    .tg-df-modal-backdrop.active .tg-df-modal {      transform: translateY(0);    }    .tg-df-modal-header {      padding: 16px;      border-bottom: 1px solid #e2e8f0;      display: flex;      align-items: center;      justify-content: space-between;    }    .tg-df-modal-title {      font-size: 16px;      font-weight: 600;      margin: 0;    }    .tg-df-modal-close {      background: none;      border: none;      cursor: pointer;      padding: 4px;      color: #64748b;    }    .tg-df-modal-body {      padding: 16px;      overflow-y: auto;    }    .tg-df-voucher-item {      padding: 12px;      border: 1px dashed #cbd5e1;      border-radius: 8px;      margin-bottom: 10px;      background: #f8fafc;      display: flex;      align-items: center;      gap: 12px;      text-decoration: none;      color: inherit;      transition: background-color 0.2s, border-color 0.2s;    }    .tg-df-voucher-item:hover {      background: #f1f5f9;      border-color: #94a3b8;    }    .tg-df-voucher-item:last-child {      margin-bottom: 0;    }    .tg-df-voucher-logo {      width: 48px;      height: 48px;      object-fit: contain;      border-radius: 4px;      background: #fff;      border: 1px solid #e2e8f0;      flex-shrink: 0;    }    .tg-df-voucher-content {      flex: 1;      min-width: 0;    }    .tg-df-voucher-title {      font-size: 14px;      font-weight: 600;      margin: 0 0 4px 0;      line-height: 1.3;      color: #0f172a;    }    .tg-df-voucher-expiry {      font-size: 12px;      color: #64748b;      display: flex;      align-items: center;      gap: 4px;      margin-top: 6px;    }    .tg-df-voucher-code {      display: inline-flex;      align-items: center;      background: #f1f5f9;      border: 1px dashed #cbd5e1;      padding: 6px 10px;      font-family: monospace;      font-weight: 700;      font-size: 14px;      color: #0f172a;      border-radius: 4px;      margin-top: 8px;      cursor: pointer;      transition: all 0.2s ease;    }    .tg-df-voucher-code:hover {      background: #e2e8f0;      border-color: #94a3b8;    }    .tg-df-voucher-code.copied {      background: #ecfdf5;      border-color: #10b981;      color: #10b981;    }    .tg-df-voucher-cta {      display: inline-block;      margin-top: 8px;      font-size: 13px;      font-weight: 600;      color: #2563eb;      text-decoration: none;    }    .tg-df-card-title {      font-size: 15px;      font-weight: 400;      line-height: 1.4;      margin: 0 0 12px 0;      color: var(--tg-df-text);      display: -webkit-box;      -webkit-line-clamp: 2;      -webkit-box-orient: vertical;      overflow: hidden;    }    .tg-df-card-footer {      margin-top: auto;      display: flex;      flex-direction: column;      width: 100%;    }    .tg-df-card-price-group {      display: flex;      flex-direction: row;      align-items: center;      gap: 8px;      margin-bottom: 12px;    }    .tg-df-card-price {      font-size: 16px;      font-weight: 700;      color: #dc2626; /* Red price */      line-height: 1;    }        .tg-df-card-msrp {      font-size: 13px;      color: var(--tg-df-text-muted);      text-decoration: line-through;    }    .tg-df-container .tg-df-card-cta {      display: flex;      align-items: center;      justify-content: center;      width: 100%;      box-sizing: border-box;      background-color: #1f69ff;      color: #ffffff;      font-size: 12px;      font-weight: 700;      text-transform: uppercase;      letter-spacing: 0.5px;      padding: 12px 16px;      border-radius: 0;      border: none;      cursor: pointer;      transition: background-color 0.2s ease;    }    .tg-df-card:hover .tg-df-card-cta,    .tg-df-card-cta:hover {      background-color: #1555cc;    }    .tg-df-container .tg-df-card-cta.tg-df-cta-savings-squad {      background-color: #3c8d0d;    }    .tg-df-card:hover .tg-df-card-cta.tg-df-cta-savings-squad,    .tg-df-card-cta.tg-df-cta-savings-squad:hover {      background-color: #2b6509;    }    /*       5. State & Skeleton Styles    */    .tg-df-message {      grid-column: 1 / -1;      text-align: center;      padding: 48px 24px;      color: var(--tg-df-text-muted);      font-size: 16px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;    }    @keyframes tg-df-shimmer {      0% { background-position: -200% 0; }      100% { background-position: 200% 0; }    }    .tg-df-skeleton {      background: linear-gradient(90deg, var(--tg-df-bg-secondary) 25%, #e2e8f0 50%, var(--tg-df-bg-secondary) 75%);      background-size: 200% 100%;      animation: tg-df-shimmer 1.5s infinite;      border-radius: 4px;    }    .tg-df-skeleton-img {      width: 100%;      height: 100%;      position: absolute;      top: 0; left: 0;    }        .tg-df-skeleton-text {      height: 16px;      margin-bottom: 8px;      width: 100%;    }    .tg-df-skeleton-text.short { width: 40%; }    .tg-df-skeleton-text.title { height: 20px; margin-bottom: 16px; }    /* Editor Floating Bar & Elements */    .tg-df-editor-bar {      position: sticky;      top: 0;      z-index: 1000;      background: #111827;      color: #fff;      padding: 12px 16px;      border-radius: 8px;      margin-bottom: 16px;      display: flex;      align-items: center;      justify-content: space-between;      box-shadow: 0 4px 12px rgba(0,0,0,0.15);    }    .tg-df-editor-bar-text {      font-weight: 600;      font-size: 14px;    }    .tg-df-editor-copy-btn {      background: #10b981;      color: #fff;      padding: 6px 16px;      border: none;      border-radius: 4px;      font-weight: 600;      cursor: pointer;      display: flex;      align-items: center;      font-size: 13px;    }    .tg-df-editor-copy-btn:hover { background: #059669; }        .tg-df-deal-checkbox {      position: absolute;      top: 12px;      right: 12px;      z-index: 10;      width: 20px;      height: 20px;      cursor: pointer;      pointer-events: auto;    }    /*       6. Mobile List View (Stacks into a cleaner horizontal row/list)    */    @container tg-df (max-width: 599px) {      .tg-df-controls {        padding: 0 16px;      }            .tg-df-top-bar {        width: 100%;      }            .tg-df-settings-dropdown {        position: fixed;        top: auto;        bottom: 0;        left: 0;        right: 0;        width: 100%;        border-radius: 20px 20px 0 0;        padding: 24px;        box-shadow: 0 -8px 32px rgba(0,0,0,0.15);        z-index: 1000;        border: none;        border-top: 1px solid var(--tg-df-border);      }            .tg-df-settings-dropdown-backdrop.active {        background: rgba(0,0,0,0.4);      }            .tg-df-search-wrapper {        box-shadow: 0 0 16px rgba(0,0,0,0.08);      }            .tg-df-filters {        width: calc(100% + 32px);        margin: 0 -16px;        padding: 0 16px 4px 16px;        display: flex;        justify-content: flex-start;        gap: 8px;        flex-wrap: nowrap;        overflow-x: auto;        -webkit-overflow-scrolling: touch;        scrollbar-width: none;      }      .tg-df-filters::after {        content: "";        display: block;        flex: 0 0 8px;      }      .tg-df-filters::-webkit-scrollbar {        display: none;      }            .tg-df-sort-wrapper {        flex: 0 0 max(42%, 130px);        min-width: 0;      }      .tg-df-sort-wrapper.tg-df-price-range-wrapper {        flex: 0 0 auto;        min-width: max-content;      }            .tg-df-sort-select, .tg-df-filter-select {        width: 100%;        text-align: left;        padding: 10px 24px 10px 32px;        background-position: right 8px center;        text-overflow: ellipsis;        white-space: nowrap;        overflow: hidden;      }      .tg-df-sort-icon {        left: 10px;      }      .tg-df-grid:not(.layout-grid):not(.layout-row),      .tg-df-grid.layout-row {        grid-template-columns: 1fr;        gap: 16px;      }            .tg-df-grid.tg-df-grid-auto {        padding-top: 24px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card,      .tg-df-grid.layout-row .tg-df-card {        flex-direction: row;        align-items: stretch;        height: auto;        box-shadow: none; /* simple line on mobile if preferred, or keep */        border-bottom: 1px solid var(--tg-df-border);      }      .tg-df-grid.tg-df-grid-auto .tg-df-card:hover,      .tg-df-grid.layout-row .tg-df-card:hover {        box-shadow: none;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-image-box,      .tg-df-grid.layout-row .tg-df-card-image-box {        width: 120px;        min-width: 120px;        aspect-ratio: 3/4;        border-right: none;        padding: 12px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-body,      .tg-df-grid.layout-row .tg-df-card-body {        padding: 12px;        justify-content: space-between;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-title,      .tg-df-grid.layout-row .tg-df-card-title {        font-size: 14px;        margin-bottom: 12px;        -webkit-line-clamp: 3;      }      /* Single column mobile grid override */      .tg-df-grid.layout-grid {        grid-template-columns: 1fr;        gap: 16px;      }      .tg-df-grid.layout-grid .tg-df-card-image-box {        padding: 12px;      }      .tg-df-grid.layout-grid .tg-df-card-body {        padding: 10px;      }      .tg-df-grid.layout-grid .tg-df-card-title {        font-size: 13px;        -webkit-line-clamp: 3;        margin-bottom: 8px;      }      .tg-df-grid.layout-grid .tg-df-card-price {        font-size: 14px;      }            .tg-df-card-footer {        flex-direction: column;        align-items: stretch;        gap: 0;        width: 100%;        min-width: 0;      }      .tg-df-card-merchant-pill {        margin-bottom: 4px;      }      .tg-df-card-price-group {        flex: 1 1 auto;        margin-bottom: 8px;      }      .tg-df-card-price {        font-size: 16px;      }      .tg-df-card-msrp {        display: block;       }      .tg-df-grid.layout-row .tg-df-card-cta,      .tg-df-container .tg-df-card-cta {        width: 100%;        max-width: none;        min-width: 0;        box-sizing: border-box;        padding: 8px 16px;        font-size: 12px;        flex: 0 0 auto;        text-align: center;        white-space: normal;        line-height: 1.2;      }    }    .tg-df-container.is-carousel {      min-height: 760px;      background-color: #E7F0FF;      padding: 0 0 24px 0;      border-radius: 24px;    }    .tg-df-container.is-carousel.hide-header-details {      min-height: 480px;    }    /*       7. Carousel View Mode    */    .tg-df-container .tg-df-carousel-host {      /* Layout is now handled by container wrapper */    }    .tg-df-container .tg-df-carousel-eyebrow {      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      padding: 24px 16px 0 16px;      display: none;    }    .tg-df-container .tg-df-carousel-query-title {      color: #011535;      font-size: 28px;      font-weight: 600;      padding: 0 16px 24px 16px;      line-height: 1.2;      display: none;    }    .tg-df-container .tg-df-carousel-blue-box {      background-color: transparent;      border-radius: 0;      padding: 24px 24px 0 24px;      margin: 0;      color: #1F69FF;          position: relative;      overflow: hidden;    }    .tg-df-container .tg-df-carousel-bg-circle-1 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-2 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-3 {      display: none;    }    .tg-df-container .tg-df-carousel-box-content {      position: relative;      z-index: 10;    }    .tg-df-container .tg-df-carousel-box-eyebrow {      background-color: transparent;      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      display: inline-block;      padding: 0;      border-radius: 0;    }    .tg-df-container .tg-df-carousel-box-title {      font-size: 28px;      font-weight: 600;      line-height: 1.2;      margin-top: 8px;      color: #1e293b;    }    .tg-df-container .tg-df-countdown-wrapper {      position: absolute;      top: 0;      right: 0;      display: flex;      flex-direction: column;      align-items: flex-end;      gap: 12px;      transform: scale(0.67);      transform-origin: top right;    }    .tg-df-container .tg-df-countdown-title {      font-size: 16px;      text-align: center;      width: 100%;      font-weight: 600;      color: #011535;      margin: 0;    }    .tg-df-container .tg-df-countdown-blocks {      display: flex;      gap: 16px;    }    .tg-df-container .tg-df-countdown-item {      display: flex;      flex-direction: column;      align-items: center;      gap: 4px;    }    .tg-df-container .tg-df-countdown-box {      width: 59px;      height: 59px;      background: #03FE9E;      border-radius: 15px;      display: flex;      align-items: center;      justify-content: center;    }    .tg-df-container .tg-df-countdown-num {      font-family: 'Inter', sans-serif;      font-weight: 700;      font-size: 20px;      line-height: normal;      color: #011535;    }    .tg-df-container .tg-df-countdown-label {      font-family: 'Inter', sans-serif;      font-weight: 500;      font-size: 16px;      line-height: normal;      color: #1e293b;      text-transform: uppercase;    }    .tg-df-container .tg-df-carousel-box-subtitle {      font-size: 16px;      margin-top: 8px;      font-weight: 300;      color: #1e293b;      line-height: 24px;    }    .tg-df-container .tg-df-carousel-roundels-wrapper {      position: relative;      margin-top: 24px;      margin-left: -24px;      margin-right: -24px;    }    .tg-df-container .tg-df-carousel-roundels {      display: flex;      gap: 16px;      overflow-x: auto;            scrollbar-width: none;      padding-top: 12px;      padding-bottom: 24px;      padding-left: 24px;      padding-right: 24px;      margin-left: 0;      margin-right: 0;    }        .tg-df-container .tg-df-carousel-scroll-left,    .tg-df-container .tg-df-carousel-scroll-right {      position: absolute;      top: 50%;      transform: translateY(-50%);      height: 36px;      width: 36px;      display: flex;      align-items: center;      justify-content: center;      border-radius: 50%;      background-color: #ffffff;      border: 1px solid #e2e8f0;      box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);      color: #1F69FF;      cursor: pointer;      transition: all 0.2s;      margin-top: -4px;      z-index: 20;    }    .tg-df-container .tg-df-carousel-scroll-left { left: 8px; }    .tg-df-container .tg-df-carousel-scroll-right { right: 8px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left { left: 0px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right { right: 0px; }    .tg-df-carousel-filters-outer { margin-left: -24px; margin-right: -24px; padding-left: 24px; padding-right: 24px; }    @container tg-df (max-width: 599px) { .tg-df-carousel-filters-outer { margin-left: -16px; margin-right: -16px; padding-left: 16px; padding-right: 16px; } }        .tg-df-container .tg-df-carousel-scroll-left:hover,    .tg-df-container .tg-df-carousel-scroll-right:hover {      background-color: #f8fafc;      border-color: #cbd5e1;    }        .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-left,    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right,    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left,    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right {      background-color: rgba(255, 255, 255, 0.4);      border: none;      box-shadow: none;      backdrop-filter: blur(4px);      -webkit-backdrop-filter: blur(4px);    }    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-left { left: 0; }    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right { right: 0; }    .tg-df-grid-wrapper .tg-df-carousel-scroll-left { left: 0; }    .tg-df-grid-wrapper .tg-df-carousel-scroll-right { right: 0; }        .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-left:hover,    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right:hover {      background-color: rgba(255, 255, 255, 0.6);      border: none;    }    .tg-df-container .tg-df-carousel-roundels::-webkit-scrollbar {      display: none;    }    .tg-df-container .tg-df-carousel-roundels::after {      content: "";      flex: 0 0 32px;    }    .tg-df-container .tg-df-roundel {      display: flex;      flex-direction: column;      align-items: center;      gap: 8px;      cursor: pointer;      min-width: 120px;      flex-shrink: 0;    }    .tg-df-container .tg-df-roundel-img-box {      width: 120px;      height: 120px;      border-radius: 50%;      background: white;      display: flex;      align-items: center;      justify-content: center;      overflow: hidden;      box-shadow: 0px 3px 14px 0px rgba(30, 41, 59, 0.08);      transition: box-shadow 0.2s;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box img {      transform: scale(1.08);    }    .tg-df-container .tg-df-roundel-img-box img {      width: 100%;      height: 100%;      object-fit: contain;      padding: 10px;      box-sizing: border-box;      transition: transform 0.3s ease;    }    .tg-df-container .tg-df-roundel-label {      font-size: 13px;      font-weight: 400;      color: #1e293b;      text-align: center;      transition: font-weight 0.2s;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-label {      font-weight: 700;    }    .tg-df-container .tg-df-carousel-filters-label {      font-size: 16px;      font-weight: 400;      color: #1e293b;      white-space: nowrap;      margin-right: 4px;    }    .tg-df-container .tg-df-carousel-filters-wrap {      display: flex;      align-items: center;      flex-wrap: nowrap;      gap: 8px;      margin-top: 8px;      overflow-x: auto;      scrollbar-width: none;      -webkit-overflow-scrolling: touch;      padding-bottom: 8px;      margin-left: -24px;      margin-right: -24px;      padding-left: 24px;      padding-right: 24px;    }    .tg-df-container .tg-df-carousel-filters-wrap::-webkit-scrollbar {      display: none;    }        .tg-df-container .tg-df-carousel-filter-btn img,    .tg-df-container .tg-df-carousel-filter-btn picture {      height: 20px;      width: 20px;      object-fit: contain;      object-position: center;      display: inline-flex;      align-items: center;      justify-content: center;      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn picture img {      margin-right: 0;      height: 100%;      width: 100%;    }    .tg-df-container .tg-df-carousel-filter-btn img.active-img,    .tg-df-container .tg-df-carousel-filter-btn picture:has(.active-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.inactive-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.inactive-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.active-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.active-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.active-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.active-img) {      display: inline-flex;    }    .tg-df-container .tg-df-carousel-filter-btn {      background: #ffffff;      border: 2px solid #1e293b;      color: #1e293b;      border-radius: 24px;      padding: 6px 16px;      font-size: 14px;      font-weight: 600;      cursor: pointer;      transition: all 0.2s;      flex-shrink: 0;      white-space: nowrap;      display: inline-flex;      align-items: center;      justify-content: center;      min-height: 36px;      box-sizing: border-box;    }    .tg-df-container .tg-df-carousel-filter-btn svg {      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn:hover {      background: #1e293b;      color: white;      border-color: #1e293b;    }    .tg-df-container .tg-df-carousel-filter-btn.active {      background: #1e293b;      color: white;      border-color: #1e293b;    }        .tg-df-grid.carousel-compact {      display: flex;      flex-wrap: nowrap;      overflow-x: auto;      gap: 16px;      padding: 16px 24px;      align-items: stretch;      scrollbar-width: none;    }    .tg-df-grid.carousel-compact::after {      content: "";      flex: 0 0 32px;    }    .tg-df-grid-wrapper {      position: relative;    }    .tg-df-grid.carousel-compact::-webkit-scrollbar {      display: none;    }    .tg-df-grid.carousel-compact .tg-df-load-more-card {      flex: 0 0 auto;      width: 100px;      border-radius: 15px;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      border: 2px solid #1e293b;      background: white;      color: #1e293b;      display: flex;      flex-direction: column;      justify-content: center;      align-items: center;      font-weight: 600;      font-size: 14px;      cursor: pointer;      padding: 16px;      text-align: center;      transition: all 0.2s;    }    .tg-df-grid.carousel-compact .tg-df-load-more-card:hover {      background: #1e293b;      color: white;    }    .tg-df-grid.carousel-compact .tg-df-card {      flex: 0 0 auto;      width: 200px;      min-height: auto;      height: auto;      display: flex;      flex-direction: column;      border-radius: 15px;      border: none;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      overflow: visible;    }    .tg-df-grid.carousel-compact .tg-df-card-image-box {      padding: 12px;      background-color: transparent;      border-radius: 15px 15px 0 0;      height: 130px;    }    .tg-df-grid.carousel-compact .tg-df-card-image {      mix-blend-mode: normal;    }    .tg-df-grid.carousel-compact .tg-df-card-discount-badge {      border-radius: 0;      top: 0px;      left: 0px;      padding: 4px 8px;      font-size: 11px;    }    .tg-df-grid.carousel-compact .tg-df-card-body {      padding: 8px 12px 12px 12px;    }    .tg-df-grid.carousel-compact .tg-df-card-title {      font-size: 14px;      font-weight: 400;      -webkit-line-clamp: 2;      margin-bottom: 8px;      color: #011535;    }    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):not(:has(.tg-df-tag-prime)):not(:has(.tg-df-coupon-wrapper:not([style*="none"]))) > .tg-df-card-title,    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):has(> .tg-df-card-title:first-child) > .tg-df-card-title {      -webkit-line-clamp: 3;    }    .tg-df-grid.carousel-compact .tg-df-card-cta {      border-radius: 5px;      padding: 8px 10px;      margin-top: 4px;      background-color: #1F69FF;    }    .tg-df-grid.carousel-compact .tg-df-card-price-group {      margin-bottom: 2px;    }    .tg-df-grid.carousel-compact .tg-df-card-merchant-pill {      margin-bottom: 2px;    }    @container tg-df (max-width: 599px) {      .tg-df-container .tg-df-carousel-blue-box-title {        font-size: 24px;      }      .tg-df-container .tg-df-countdown-title {        display: none;      }      .tg-df-container .tg-df-countdown-wrapper {        position: absolute;        top: 0;        right: 0;        align-items: flex-end;        transform: scale(0.45);        transform-origin: top right;      }      .tg-df-container .tg-df-roundel {        min-width: 88px;      }      .tg-df-container .tg-df-roundel-img-box {        width: 88px;        height: 88px;      }    }    /* REPLICA BLOCK STYLES */    .tg-df-grid.layout-replica-2 { grid-template-columns: repeat(2, 1fr) !important; gap: 20px; }    .tg-df-grid.layout-replica-1 { grid-template-columns: 1fr !important; gap: 20px; }        .tg-df-container .hawk-deal-widget-container { border-bottom: 1px solid #e5e7eb; display: flex; flex-direction: column; margin: 0; padding: 20px 0; box-sizing: border-box; font-family: inherit; }    .tg-df-container .hawk-deal-widget-wrap { display: flex; flex-direction: row; align-items: flex-start; width: 100%; gap: 24px; }    .tg-df-container .hawk-deal-widget-image-container { display: flex; flex-shrink: 0; justify-content: center; width: 160px; height: 160px; align-items: center; background: white; margin-bottom: 0px; }    .tg-df-container .hawk-deal-widget-title-product-title { color: #111827; font-size: 18px; font-weight: 700; line-height: 1.4; display: inline; }    .tg-df-container .hawk-deal-widget-title-price { font-size: 18px; font-weight: 700; line-height: 1.4; white-space: nowrap; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-price-now { font-weight: 700; }    .tg-df-container .hawk-deal-widget-title-retailer-price:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-title-retailer { font-size: 18px; font-weight: 700; line-height: 1.4; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-was-price { color: #dc2626; font-size: 16px; font-weight: 500; line-height: 1.4; text-decoration: line-through; white-space: nowrap; margin-left: 8px; margin-right: 8px; }    .tg-df-container .hawk-deal-widget-text-body-container { position: relative; width: 100%; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-text-body-main { font-size: 16px; width: 100%; margin-bottom: 12px; }    .tg-df-container .hawk-deal-widget-text-body-description { display: block; font-size: 15px; margin-top: 12px; color: #4b5563; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-body-description p { margin: 0; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-cta-container { display: flex; flex-direction: column; gap: 12px; width: 100%; flex: 1; min-width: 0; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-footer { display: flex; justify-content: flex-end; width: 100%; margin-top: auto; }    .tg-df-container .hawk-deal-widget-button-wrapper { display: flex; flex-direction: column; align-items: flex-end; justify-content: flex-end; width: 100%; }    .tg-df-container .hawk-deal-widget-preferred-partner-wrapper { display: flex; flex-direction: row; }        @container tg-df (min-width: 600px) {      .tg-df-mobile-only { display: none !important; }    }    @container tg-df (max-width: 599px) {      .tg-df-desktop-only { display: none !important; }      .tg-df-grid.layout-replica-2 { grid-template-columns: 1fr !important; }      .tg-df-grid.savings-squad-cards { grid-template-columns: 1fr !important; display: flex; flex-direction: column; }    }    .tg-df-grid.savings-squad-cards .tg-df-card-title {      -webkit-line-clamp: unset !important;      display: block !important;      overflow: visible !important;    }    @container tg-df (max-width: 500px) {      .tg-df-container .hawk-deal-widget-wrap { display: block; }      .tg-df-container .hawk-deal-widget-image-container { display: block; float: left; margin: 0 16px 8px 0; width: 120px; max-width: 120px; height: auto; align-items: normal; justify-content: normal; }      .tg-df-container .hawk-deal-widget-text-cta-container { display: block; text-align: left; }      .tg-df-container .hawk-deal-widget-footer { display: block; margin-top: 16px; clear: both; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper .hawk-deal-widget-preferred-partner-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-affiliate-link-deal-button { box-sizing: border-box !important; display: flex !important; max-width: none !important; width: 100% !important; margin: 0 !important; }    }        .tg-df-container .hawk-affiliate-link-deal-button {       align-items: center; background-color: #5aaf0b; box-sizing: border-box; color: #ffffff !important; display: flex; font-size: 14px; font-weight: 700; justify-content: center; letter-spacing: 0.5px; line-height: 1; min-width: 160px; padding: 14px 24px; text-align: center; text-decoration: none; text-transform: uppercase; width: 100%; word-break: normal; border-radius: 4px; border: 0; transition: background-color 0.2s;     }    .tg-df-container .hawk-affiliate-link-deal-button:hover { background-color: #4a9109; text-decoration: none; }    .tg-df-container .hawk-lazy-image-deal-widget { display: block; height: auto; margin: auto; max-height: 160px; max-width: 100%; mix-blend-mode: multiply; object-fit: contain; }    .tg-df-container .hawk-deal-widget-text-cta-container a { color: #2563eb; text-decoration: none; display: inline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:has(.hawk-deal-widget-title-product-title) { color: #111827; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-product-title,    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-retailer-price { text-decoration: underline; }  \x3C/style>  \x3C!-- Widget Container --\x3E  \x3Cdiv class="tg-df-container" id="signal-deals-finder-root">    \x3C!-- Editor Floating Bar --\x3E    \x3Cdiv class="tg-df-editor-bar" id="tg-df-editor-bar" style="display:none;">      \x3Cdiv class="tg-df-editor-bar-text" style="display: flex; align-items: center;">        \x3Cspan id="tg-df-selected-count">0\x3C/span>\x26nbsp;Deals Selected        \x3Cbutton class="tg-df-editor-clear-btn" id="tg-df-editor-clear" type="button" style="margin-left: 12px; font-size: 13px; color: #9ca3af; background: none; border: none; cursor: pointer; text-decoration: underline;">Clear All\x3C/button>      \x3C/div>      \x3Cbutton class="tg-df-editor-copy-btn" id="tg-df-editor-copy" type="button">        \x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">\x3C/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">\x3C/path>\x3C/svg>        Copy to CMS      \x3C/button>    \x3C/div>    \x3Cdiv class="tg-df-carousel-host" id="tg-df-carousel-host" style="display: none;">      \x3Cdiv class="tg-df-carousel-eyebrow">DEAL FINDER\x3C/div>      \x3Cdiv class="tg-df-carousel-query-title" id="tg-df-carousel-title-label">Best Deals\x3C/div>            \x3Cdiv class="tg-df-carousel-blue-box">        \x3Cdiv class="tg-df-carousel-bg-circle-1" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-2" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-3" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-box-content">          \x3Cdiv class="tg-df-countdown-wrapper" id="tg-df-countdown-wrapper" style="display:none;">            \x3Cdiv class="tg-df-countdown-title" id="tg-df-countdown-title">Prime Day starts in\x3C/div>            \x3Cdiv class="tg-df-countdown-blocks">              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-days">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">DAYS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-hrs">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">HRS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-min">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">MIN\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-sec">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">SEC\x3C/div>\x3C/div>            \x3C/div>          \x3C/div>          \x3Cdiv class="tg-df-carousel-box-eyebrow">DEAL FINDER\x3C/div>          \x3Cdiv class="tg-df-carousel-box-title">Find Deals Fast\x3C/div>          \x3Cdiv class="tg-df-carousel-box-subtitle">The latest deals from the biggest retailers, all in one place\x3C/div>                    \x3Cdiv class="tg-df-carousel-roundels-wrapper">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-roundels">            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>          \x3C/div>          \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-carousel-filters-outer" style="position: relative;">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-filters-wrap">                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="0">All\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_lightning">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_prime">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-d="10">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 10% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="15">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 15% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="25">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 25% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-pr="under50">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>            Under $50\x3C/button>        \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3C/div>    \x3C/div>    \x3C/div>      \x3C!-- Search & Filter Controls --\x3E    \x3Cdiv class="tg-df-controls" id="tg-df-controls" style="display:flex;">      \x3Cdiv class="tg-df-top-bar">        \x3Cdiv class="tg-df-search-wrapper">          \x3Cinput type="text" class="tg-df-search-input" placeholder="Search for deals, products, or brands...">          \x3Cbutton type="button" class="tg-df-search-btn" aria-label="Search">              \x3Csvg class="tg-df-search-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">                \x3Cpath d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/>              \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-autocomplete-dropdown" id="tg-df-autocomplete">\x3C/div>        \x3C/div>                \x3Cdiv class="tg-df-settings-wrapper">          \x3Cbutton type="button" class="tg-df-settings-btn" aria-label="Settings" id="tg-df-settings-toggle">            \x3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20">                \x3Cpath d="M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.06-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.73 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.06.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .43-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.49-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z"/>            \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-settings-dropdown-backdrop" id="tg-df-settings-backdrop">\x3C/div>          \x3Cdiv class="tg-df-settings-dropdown" id="tg-df-settings-panel">            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Search Region\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-region-select">                \x3Coption value="auto">🌍 Auto-detect\x3C/option>                \x3Coption value="US">🇺🇸 United States (US)\x3C/option>                \x3Coption value="GB">🇬🇧 United Kingdom (UK)\x3C/option>                \x3Coption value="CA">🇨🇦 Canada (CA)\x3C/option>                \x3Coption value="AU">🇦🇺 Australia (AU)\x3C/option>                \x3Coption value="DE">🇩🇪 Germany (DE)\x3C/option>                \x3Coption value="FR">🇫🇷 France (FR)\x3C/option>                \x3Coption value="IT">🇮🇹 Italy (IT)\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Retailer\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-retailer-select">                \x3Coption value="">All Retailers\x3C/option>                \x3Coption value="Amazon">Amazon\x3C/option>                \x3Coption value="Walmart">Walmart\x3C/option>                \x3Coption value="Best Buy">Best Buy\x3C/option>                \x3Coption value="Target">Target\x3C/option>                \x3Coption value="John Lewis">John Lewis\x3C/option>                \x3Coption value="Currys">Currys\x3C/option>                \x3Coption value="Argos">Argos\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Offer Type\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-offer-type-select">                \x3Coption value="">All Offers\x3C/option>                \x3Coption value="amazon_prime">Amazon Prime\x3C/option>                \x3Coption value="recommended_promo">Recommended Promo\x3C/option>                \x3Coption value="amazon_lightning">Amazon Lightning Deal\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Result Count\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-rows-select">                \x3Coption value="3">3 Items\x3C/option>                \x3Coption value="4">4 Items\x3C/option>                \x3Coption value="6">6 Items\x3C/option>                \x3Coption value="8">8 Items\x3C/option>                \x3Coption value="12" selected>12 Items\x3C/option>                \x3Coption value="24">24 Items\x3C/option>                \x3Coption value="48">48 Items\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item tg-df-dl-row">              \x3Cdiv>                \x3Cspan class="tg-df-dl-row-text">Deal Mode\x3C/span>                \x3Cspan class="tg-df-dl-row-subtext">Only show products with active offers or previous prices (was_price)\x3C/span>              \x3C/div>              \x3Clabel class="tg-df-toggle">                \x3Cinput type="checkbox" id="tg-df-deal-mode">                \x3Cspan class="tg-df-slider">\x3C/span>              \x3C/label>            \x3C/div>            \x3Cdiv class="tg-df-setting-item tg-df-dl-row">              \x3Cdiv>                \x3Cspan class="tg-df-dl-row-text">Editor Mode\x3C/span>                \x3Cspan class="tg-df-dl-row-subtext">Enable multi-select to copy deals to CMS\x3C/span>              \x3C/div>              \x3Clabel class="tg-df-toggle">                \x3Cinput type="checkbox" id="tg-df-editor-mode">                \x3Cspan class="tg-df-slider">\x3C/span>              \x3C/label>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">View Mode\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-view-mode-select">                \x3Coption value="auto">Auto Collection\x3C/option>                \x3Coption value="carousel">Carousel\x3C/option>                \x3Coption value="savings_squad">Savings Squad\x3C/option>                \x3Coption value="grid">Grid (Columns)\x3C/option>                \x3Coption value="row">Row (List)\x3C/option>              \x3C/select>            \x3C/div>          \x3C/div>        \x3C/div>      \x3C/div>      \x3Cdiv class="tg-df-filters">        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-category-filter-wrapper" style="display: none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-category-filter" aria-label="Category">            \x3Coption value="all">All Categories\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-multiselect-container" id="tg-df-brand-filter-wrapper" style="display:none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M4.25 5.61C6.27 8.2 10 13 10 13v6c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-6s3.72-4.8 5.74-7.39A.998.998 0 0 0 18.95 4H5.04c-.83 0-1.3.95-.79 1.61z"/>          \x3C/svg>          \x3Cdiv class="tg-df-filter-select tg-df-multiselect-trigger" id="tg-df-brand-trigger" tabindex="0">            Any Brand          \x3C/div>          \x3Cdiv class="tg-df-multiselect-dropdown" id="tg-df-brand-dropdown">            \x3C!-- Populated via script --\x3E          \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M9 3L5 6.99h3V14h2V6.99h3L9 3zm7 14.01V10h-2v7.01h-3L15 21l4-3.99h-3z"/>          \x3C/svg>          \x3Cselect class="tg-df-sort-select" aria-label="Sort Deals">            \x3Coption value="date_desc">Newest First\x3C/option>            \x3Coption value="best_match">Sort by: Match\x3C/option>            \x3Coption value="price_asc">Price Low to High\x3C/option>            \x3Coption value="price_desc">Price High to Low\x3C/option>            \x3Coption value="discount_desc">Biggest Discount\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-price-range-wrapper" id="tg-df-custom-price-wrapper" style="display: flex; align-items:center; justify-content:center; padding: 10px 20px; gap: 8px; border: 1px solid var(--tg-df-border); border-radius: 100px; background-color: var(--tg-df-bg);">          \x3Cspan style="font-size:14px; font-weight:500; color:var(--tg-df-text-primary);">Price\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-min" placeholder="Min" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">          \x3Cspan style="color:var(--tg-df-text-muted)">-\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-max" placeholder="Max" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-legacy-price-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-price-filter" aria-label="Filter Prices">            \x3Coption value="all">All Prices\x3C/option>            \x3Coption value="under50">Under $50\x3C/option>            \x3Coption value="50_100">$50 - $100\x3C/option>            \x3Coption value="100_200">$100 - $200\x3C/option>            \x3Coption value="200_500">$200 - $500\x3C/option>            \x3Coption value="over500">Over $500\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-discount-filter-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-discount-filter" aria-label="Discount Amount">            \x3Coption value="all">Any discount\x3C/option>            \x3Coption value="5">Min 5%\x3C/option>            \x3Coption value="10">Min 10%\x3C/option>            \x3Coption value="15">Min 15%\x3C/option>            \x3Coption value="20">Min 20%\x3C/option>            \x3Coption value="25">Min 25%\x3C/option>            \x3Coption value="30">Min 30%\x3C/option>            \x3Coption value="40">Min 40%\x3C/option>            \x3Coption value="50">Min 50%\x3C/option>            \x3Coption value="60">Min 60%\x3C/option>            \x3Coption value="70">Min 70%\x3C/option>          \x3C/select>        \x3C/div>      \x3C/div>    \x3C/div>    \x3C!-- Deals Grid Wrapper --\x3E    \x3Cdiv class="tg-df-grid-wrapper tg-df-carousel-cards-wrapper" id="tg-df-grid-wrapper">      \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3Cdiv class="tg-df-grid" id="tg-df-grid">        \x3C!-- Content populated by JavaScript --\x3E      \x3C/div>      \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>    \x3C/div>        \x3C!-- Vouchers Modal --\x3E    \x3Cdiv class="tg-df-modal-backdrop" id="tg-df-vouchers-modal">      \x3Cdiv class="tg-df-modal">        \x3Cdiv class="tg-df-modal-header">          \x3Ch3 class="tg-df-modal-title" id="tg-df-vouchers-title">Available Coupons & Deals\x3C/h3>          \x3Cbutton class="tg-df-modal-close" id="tg-df-vouchers-close">            \x3Csvg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">              \x3Cline x1="18" y1="6" x2="6" y2="18">\x3C/line>              \x3Cline x1="6" y1="6" x2="18" y2="18">\x3C/line>            \x3C/svg>          \x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-modal-body" id="tg-df-vouchers-content">          \x3C!-- Vouchers injected here --\x3E        \x3C/div>      \x3C/div>    \x3C/div>  \x3C/div>`;      if (!template) {        template = document.createElement('template');        template.innerHTML = rawTemplate;      }      let shadowRoot = null;      if (hostContainer && template) {        hostContainer.setAttribute('data-initialized', 'true');        shadowRoot = hostContainer.attachShadow({ mode: 'open' });        shadowRoot.appendChild(template.content.cloneNode(true));      }      class DealsFinderWidget {        constructor(config) {          this.rootNode = config.rootNode || document;          this.hostContainer = config.hostContainer || null;          this.rootId = config.rootId || 'signal-deals-finder-root';          this.root = this.rootNode.querySelector('#' + this.rootId);          if (!this.root) return;          this.widgetId = (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'widget-' + Date.now() + '-' + Math.random().toString(36).slice(2);          this.grid = this.root.querySelector('#tg-df-grid');          this.tagsContainer = this.root.querySelector('#tg-df-tags-container');          this.categoryFilter = this.root.querySelector('#tg-df-category-filter');          this.categoryFilterWrapper = this.root.querySelector('#tg-df-category-filter-wrapper');          this.searchInput = this.root.querySelector('.tg-df-search-input');          this.autocompleteDropdown = this.root.querySelector('#tg-df-autocomplete');          this.sortSelect = this.root.querySelector('.tg-df-sort-select');          this.searchBtn = this.root.querySelector('.tg-df-search-btn');                    this.settingsToggle = this.root.querySelector('#tg-df-settings-toggle');          this.settingsPanel = this.root.querySelector('#tg-df-settings-panel');          this.settingsBackdrop = this.root.querySelector('#tg-df-settings-backdrop');          this.regionSelect = this.root.querySelector('#tg-df-region-select');          this.retailerSelect = this.root.querySelector('#tg-df-retailer-select');          this.offerTypeSelect = this.root.querySelector('#tg-df-offer-type-select');          this.viewModeSelect = this.root.querySelector('#tg-df-view-mode-select');          this.rowsSelect = this.root.querySelector('#tg-df-rows-select');          this.dealModeToggle = this.root.querySelector('#tg-df-deal-mode');          this.editorModeToggle = this.root.querySelector('#tg-df-editor-mode');          this.priceFilter = this.root.querySelector('#tg-df-price-filter');          this.discountFilter = this.root.querySelector('#tg-df-discount-filter');                    this.editorBar = this.root.querySelector('#tg-df-editor-bar');          this.editorSelectedCount = this.root.querySelector('#tg-df-selected-count');          this.editorCopyBtn = this.root.querySelector('#tg-df-editor-copy');          this.editorClearBtn = this.root.querySelector('#tg-df-editor-clear');                    this.apiUrl = 'https://search-api.fie.future.net.uk/widget.php';          this.deals = [];          this.displayLimit = 12;          this.airedaleArticles = null;          this.airedaleTags = [];          this.airedaleTagCounts = {};          this.activeDealTag = null;          this.selectedBrands = [];          this.currentQuery = '';          this.editorMode = this.hostContainer ? this.hostContainer.hasAttribute('data-editor-mode') : false;          this.viewModeOverride = this.hostContainer ? this.hostContainer.getAttribute('data-view-mode') : null;          this.selectedDeals = new Map();                    this.brandFilterWrapper = this.root.querySelector('#tg-df-brand-filter-wrapper');          this.brandTrigger = this.root.querySelector('#tg-df-brand-trigger');          this.brandDropdown = this.root.querySelector('#tg-df-brand-dropdown');                    this.customPriceWrapper = this.root.querySelector('#tg-df-custom-price-wrapper');          this.customPriceMin = this.root.querySelector('#tg-df-custom-price-min');          this.customPriceMax = this.root.querySelector('#tg-df-custom-price-max');          this.legacyPriceWrapper = this.root.querySelector('#tg-df-legacy-price-wrapper');          this.discountFilterWrapper = this.root.querySelector('#tg-df-discount-filter-wrapper');          this.initResizeObserver();          this.init();            if (['carousel', 'carousel-compact', 'auto', 'grid', 'row'].includes(this.getViewMode())) { this.loadCarouselSpreadsheet(); }        }        getViewMode() {          if (this.viewModeOverride && (!this.editorMode || !this.viewModeSelect)) {            return this.viewModeOverride;          }          return (this.viewModeSelect && this.viewModeSelect.value) ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');        }        applyLayoutMode() {          if (!this.grid) return;          const mode = this.getViewMode();          this.grid.classList.remove('layout-row', 'layout-grid', 'tg-df-grid-auto', 'carousel-compact', 'layout-replica-1', 'layout-replica-2');                    const carouselHost = this.root.querySelector('#tg-df-carousel-host');          const controlsDiv = this.root.querySelector('#tg-df-controls');          if (mode === 'carousel' || mode === 'auto' || mode === 'grid' || mode === 'row') {             if (mode === 'carousel') this.grid.classList.add('carousel-compact');             if (carouselHost) carouselHost.style.display = 'block';             if (controlsDiv) controlsDiv.style.display = 'none';             if (this.root.classList.contains('tg-df-container') && mode === 'carousel') {               this.root.classList.add('is-carousel');             } else if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          } else {             if (carouselHost) carouselHost.style.display = 'none';             if (controlsDiv) controlsDiv.style.display = 'flex';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          }          if (mode === 'grid') {            this.grid.classList.add('layout-grid');          } else if (mode === 'row') {            this.grid.classList.add('layout-row');          } else if (mode === 'savings_squad') {            this.grid.classList.add('tg-df-grid-auto', 'savings-squad-cards');          } else if (mode !== 'carousel') {            this.grid.classList.add('tg-df-grid-auto');          }                    const settingsWrapper = this.root.querySelector('.tg-df-settings-wrapper');          if (settingsWrapper) {            settingsWrapper.style.display = mode === 'auto' ? 'none' : 'block';          }          if (this.customPriceWrapper) {             this.customPriceWrapper.style.display = mode === 'auto' ? 'flex' : 'none';          }          if (this.legacyPriceWrapper) {             this.legacyPriceWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }          if (this.discountFilterWrapper) {             this.discountFilterWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }        }        initResizeObserver() {          try {            if (window.parent === window) return;          } catch (e) {            // cross origin frame check threw          }          const emitHeight = () => {            try {              const height = document.documentElement.scrollHeight || document.body.scrollHeight;              const msg = { type: 'embed-size', height: height };              if (window.parent && window.parent !== window) {                window.parent.postMessage(msg, '*');                window.parent.postMessage(JSON.stringify({ ...msg, sentinel: 'amp' }), '*');              }            } catch (e) {}          };                    if (window.ResizeObserver) {            try {              const ro = new ResizeObserver(() => emitHeight());              ro.observe(document.body);              if (this.root) ro.observe(this.root);            } catch(e){ console.warn(e); }          }          window.addEventListener('resize', emitHeight);          setTimeout(emitHeight, 300);        }        initCountdown() {          this.cdWrapper = this.root.querySelector('#tg-df-countdown-wrapper');                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          this.showCountdown = params.get('show_countdown') === 'true';          const showHeaderDetails = params.get('show_header_details') !== 'false';          const eyebrow = this.root.querySelector('.tg-df-carousel-box-eyebrow');          const title = this.root.querySelector('.tg-df-carousel-box-title');          const subtitle = this.root.querySelector('.tg-df-carousel-box-subtitle');          if (!showHeaderDetails) {            let containerElement = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (containerElement) containerElement.classList.add('hide-header-details');            if (eyebrow) eyebrow.style.display = 'none';            if (title) title.style.display = 'none';            if (subtitle) subtitle.style.display = 'none';          }          if (!this.cdWrapper) return;          this.cdTitle = this.root.querySelector('#tg-df-countdown-title');          this.cdDays = this.root.querySelector('#tg-df-cd-days');          this.cdHrs = this.root.querySelector('#tg-df-cd-hrs');          this.cdMin = this.root.querySelector('#tg-df-cd-min');          this.cdSec = this.root.querySelector('#tg-df-cd-sec');          this.updateCountdown();          this.cdInterval = setInterval(() => this.updateCountdown(), 1000);        }        updateCountdown() {          if (!this.cdWrapper) return;          if (!this.showCountdown) {            this.cdWrapper.style.display = 'none';            return;          }          const area = this.getAreaCode();          let offset = '-04:00';          if (['DE', 'FR', 'IT', 'ES', 'NL'].includes(area)) {             offset = '+02:00';          } else if (['GB', 'IE', 'UK'].includes(area)) {             offset = '+01:00';          }          const startTime = new Date('2026-06-23T00:00:00' + offset).getTime();          const endTime = new Date('2026-06-26T00:00:00' + offset).getTime();          const now = Date.now();          let targetTime = 0;          if (now < startTime) {             targetTime = startTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day starts in';             this.cdWrapper.style.display = 'flex';          } else if (now < endTime) {             targetTime = endTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day ends in';             this.cdWrapper.style.display = 'flex';          } else {             this.cdWrapper.style.display = 'none';             if (this.cdInterval) clearInterval(this.cdInterval);             return;          }          const diff = Math.max(0, targetTime - now);          const d = Math.floor(diff / (1000 * 60 * 60 * 24));          const h = Math.floor((diff / (1000 * 60 * 60)) % 24);          const m = Math.floor((diff / 1000 / 60) % 60);          const s = Math.floor((diff / 1000) % 60);          if (this.cdDays) this.cdDays.textContent = d;          if (this.cdHrs) this.cdHrs.textContent = h;          if (this.cdMin) this.cdMin.textContent = m;          if (this.cdSec) this.cdSec.textContent = s;        }        init() {          this.initCountdown();          try {            initAnalytics();          } catch (e) {            console.warn('Deals Widget Analytics Error:', e);          }                    this.bindEvents();                    let initialQuery = '';                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          let initialViewMode = params.get('view_mode');          if (!params.has('search') && !params.has('q') && !params.has('query') && initialViewMode !== 'savings_squad') {             initialQuery = 'Everything';             if (this.discountFilter && !params.has('min_discount_ratio')) {               this.discountFilter.value = '5';             }          }          const website = params.get('website') || 'tomsguide';          this.website = website;          if (website === 'techradar') {            const squadHeader = this.root.querySelector('.tg-df-savings-squad-header');            if (squadHeader) {               const pic = squadHeader.querySelector('picture');               if (pic) pic.style.display = 'none';            }            const style = document.createElement('style');            style.innerHTML = `              .tg-df-container .hawk-affiliate-link-deal-button, .tg-df-container .tg-df-card-cta { background-color: #5DAF08 !important; }              .tg-df-container .hawk-affiliate-link-deal-button:hover, .tg-df-container .tg-df-card-cta:hover { background-color: #4a8c06 !important; }            `;            this.root.appendChild(style);          }                    if (this.regionSelect) {            this.regionSelect.value = params.get('region') || 'auto';            this.updatePriceDropdownCurrency();          }                    if (this.retailerSelect && params.has('retailer')) {            this.retailerSelect.value = params.get('retailer');          }                    if (params.has('brands')) {            const b = params.get('brands');            if (b) {              this.selectedBrands = b.split(',');            }          }                    if (this.offerTypeSelect && params.has('offer_type')) {            this.offerTypeSelect.value = params.get('offer_type');          }          if (params.has('bg_color')) {            const bg = params.get('bg_color');            if (bg === 'white') {              this.root.style.setProperty('background-color', '#ffffff', 'important');            } else if (bg === 'transparent') {              this.root.style.setProperty('background-color', 'transparent', 'important');            } else if (bg === 'light_blue') {              this.root.style.setProperty('background-color', '#E7F0FF', 'important');            }          } else {             this.root.style.removeProperty('background-color');          }                    if (params.has('view_mode')) {            if (this.viewModeSelect) {              this.viewModeSelect.value = params.get('view_mode');            } else {              this.viewModeOverride = params.get('view_mode');            }          }          if (this.rowsSelect && params.has('rows')) {            this.rowsSelect.value = params.get('rows');          }          if (params.has('price')) {            const priceVal = params.get('price');            if (this.priceFilter) {               // Try assigning it directly to select. If it's not present implicitly ignores               this.priceFilter.value = priceVal;            }            if (priceVal.includes('_')) {               const parts = priceVal.split('_');               if (this.customPriceMin && parts[0]) this.customPriceMin.value = parts[0];               if (this.customPriceMax && parts[1]) this.customPriceMax.value = parts[1];            }          }          if (this.discountFilter && params.has('min_discount_ratio')) {            // Need to convert back from ratio (e.g. 0.8) to select value (e.g. "20")            const ratioStr = params.get('min_discount_ratio');            const ratioFloat = parseFloat(ratioStr);            if (!isNaN(ratioFloat)) {               const percentage = Math.round((1 - ratioFloat) * 100);               this.discountFilter.value = percentage.toString();            }          }          if (this.sortSelect) {            this.sortSelect.value = params.get('sort') || 'discount_desc';          }          if (this.dealModeToggle && params.has('deal_mode')) {            this.dealModeToggle.checked = params.get('deal_mode') === 'true' || params.get('deal_mode') === '1';          }                    // Re-apply layout after params have updated control values          this.applyLayoutMode();                    if (params.get('search')) {            initialQuery = params.get('search');          } else if (params.get('q')) {            initialQuery = params.get('q');          } else if (params.get('query')) {            initialQuery = params.get('query');          }                    this.currentQuery = initialQuery;          if (this.searchInput) {            this.searchInput.value = this.currentQuery;          }                    if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {            this.fetchDeals(this.currentQuery);          } else {            this.render();          }        }        updatePriceDropdownCurrency() {          if (!this.priceFilter || !this.regionSelect) return;          const currencySymbols = {            'US': '$',            'GB': '£',            'CA': '$CA',            'AU': '$AU',            'DE': '€',            'FR': '€',            'IT': '€',          };          const area = this.getAreaCode();          const cur = currencySymbols[area || 'US'] || '$';                    const options = this.priceFilter.options;          for (let i = 0; i < options.length; i++) {            const opt = options[i];            if (opt.value === 'all') {              opt.innerText = 'All Prices';            } else if (opt.value === 'under50') {              opt.innerText = `Under ${cur}50`;            } else if (opt.value === '50_100') {              opt.innerText = `${cur}50 - ${cur}100`;            } else if (opt.value === '100_200') {              opt.innerText = `${cur}100 - ${cur}200`;            } else if (opt.value === '200_500') {              opt.innerText = `${cur}200 - ${cur}500`;            } else if (opt.value === 'over500') {              opt.innerText = `Over ${cur}500`;            }          }        }        populateBrandDropdown(values) {          if (!this.brandDropdown || !this.brandFilterWrapper) return;          this.brandFilterWrapper.style.display = 'flex'; // show the wrapper                    let html = '';          const allChecked = this.selectedBrands.length === 0 ? 'checked' : '';          const _div = '<' + '/div>';          const _span = '<' + '/span>';          html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="" ${allChecked} class="tg-df-brand-chk"> Any Brand${_div}`;                    values.forEach(v => {             if (!v.formatted_value || v.formatted_value === 'Any Brand') return;             const isChecked = this.selectedBrands.includes(v.formatted_value) ? 'checked' : '';             html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="${this.escapeHTML(v.formatted_value)}" ${isChecked} class="tg-df-brand-chk"> ${this.escapeHTML(v.formatted_value)} \x3Cspan style="color:var(--tg-df-text-muted);font-size:12px">(${v.count || 0})${_span}${_div}`;          });                    this.brandDropdown.innerHTML = html;                    // Re-bind listeners          const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');          chks.forEach(chk => {            chk.addEventListener('change', (e) => {              const val = e.target.value;              if (val === '') {                this.selectedBrands = [];              } else {                if (e.target.checked) {                   if (!this.selectedBrands.includes(val)) this.selectedBrands.push(val);                } else {                   this.selectedBrands = this.selectedBrands.filter(b => b !== val);                }              }                            if (this.selectedBrands.length === 0) {                 this.brandTrigger.innerText = 'Any Brand';              } else if (this.selectedBrands.length === 1) {                 this.brandTrigger.innerText = this.selectedBrands[0];              } else {                 this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;              }                            // Only call API if changed from UI interactions              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.updateURLParams();                 this.fetchDeals(this.currentQuery);              }            });          });                    // Update button text on load          if (this.selectedBrands.length === 0) {             this.brandTrigger.innerText = 'Any Brand';          } else if (this.selectedBrands.length === 1) {             this.brandTrigger.innerText = this.selectedBrands[0];          } else {             this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;          }        }        updateURLParams() {          const url = new URL(window.location);          if (this.currentQuery && this.currentQuery !== 'Gaming laptops') {            url.searchParams.set('q', this.currentQuery);          } else {            url.searchParams.delete('q');            url.searchParams.delete('search');            url.searchParams.delete('query');          }                    if (this.regionSelect && this.regionSelect.value !== 'auto') {            url.searchParams.set('region', this.regionSelect.value);          } else {            url.searchParams.delete('region');          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.set('retailer', this.retailerSelect.value);          } else {            url.searchParams.delete('retailer');          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.set('brands', this.selectedBrands.join(','));          } else {            url.searchParams.delete('brands');          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.set('offer_type', this.offerTypeSelect.value);          } else {            url.searchParams.delete('offer_type');          }                    if (this.viewModeSelect && this.viewModeSelect.value !== 'auto') {            url.searchParams.set('view_mode', this.viewModeSelect.value);          } else {            url.searchParams.delete('view_mode');          }                    if (this.rowsSelect && this.rowsSelect.value !== '12') {            url.searchParams.set('rows', this.rowsSelect.value);          } else {            url.searchParams.delete('rows');          }                    const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             url.searchParams.set('price', `${min}_${max}`);          } else if (this.priceFilter && this.priceFilter.value !== 'all') {            url.searchParams.set('price', this.priceFilter.value);          } else {            url.searchParams.delete('price');          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {               const ratio = (100 - v) / 100;               url.searchParams.set('min_discount_ratio', ratio.toString());            }          } else {            url.searchParams.delete('min_discount_ratio');          }                    if (this.sortSelect && this.sortSelect.value !== 'discount_desc') {            url.searchParams.set('sort', this.sortSelect.value);          } else {            url.searchParams.delete('sort');          }                    if (this.dealModeToggle && this.dealModeToggle.checked) {            url.searchParams.set('deal_mode', 'true');          } else {            url.searchParams.delete('deal_mode');          }                    window.history.replaceState({}, '', url);        }        bindEvents() {          const roundels = this.root.querySelectorAll('.tg-df-carousel-cat.original-hardcoded');          roundels.forEach(r => {             r.addEventListener('click', () => {                const q = r.getAttribute('data-query');                const pr = r.getAttribute('data-pr');                if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: q,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = q;                const label = this.root.querySelector('#tg-df-carousel-title-label');                if (label) label.textContent = 'Best ' + q;                if (this.priceFilter) this.priceFilter.value = pr || 'all';                if (this.discountFilter) this.discountFilter.value = '5';                if (this.searchInput) this.searchInput.value = q;                                roundels.forEach(ro => ro.classList.remove('active'));                r.classList.add('active');                this.fetchDeals(this.currentQuery);             });          });          const discBtns = this.root.querySelectorAll('.tg-df-carousel-filter-btn');          discBtns.forEach(b => {             b.addEventListener('click', () => {                const d = b.getAttribute('data-d');                const pr = b.getAttribute('data-pr');                const ot = b.getAttribute('data-ot');                let label = b.innerText ? b.innerText.trim() : '';                let filterType = 'unknown';                let filterVal = 'unknown';                if (d !== null) { filterType = 'discount'; filterVal = d; }                else if (pr !== null) { filterType = 'price'; filterVal = pr; }                else if (ot !== null) { filterType = 'offertype'; filterVal = ot; }                if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-${filterType}-${filterVal}`, name: 'Filter Button', label: label });                                if (d !== null) {                   if (this.discountFilter) this.discountFilter.value = this.discountFilter.value === d ? '0' : d;                } else if (pr !== null) {                   if (this.priceFilter) this.priceFilter.value = this.priceFilter.value === pr ? 'all' : pr;                } else if (ot !== null) {                   if (this.offerTypeSelect) this.offerTypeSelect.value = this.offerTypeSelect.value === ot ? 'all' : ot;                } else {                   if (this.discountFilter) this.discountFilter.value = '0';                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.offerTypeSelect) this.offerTypeSelect.value = 'all';                }                if (d === null && pr === null && ot === null && b.getAttribute("data-type") !== "custom") {                   discBtns.forEach(ro => ro.classList.remove('active'));                   b.classList.add('active');                } else if (b.getAttribute("data-type") !== "custom") {                   // Only operate on hardcoded buttons (those without data-type)                   discBtns.forEach(ro => {                      if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active');                   });                                      let makeActive = true;                   if (d !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-d') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (pr !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-pr') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (ot !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-ot') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   }                                      if (makeActive) b.classList.add('active');                                      // Check if anything is active, if not activate "All"                   let anyActive = false;                   discBtns.forEach(ro => { if (ro.classList.contains('active') && ro.getAttribute('data-type') !== 'custom') anyActive = true; });                   if (!anyActive) {                       discBtns.forEach(ro => { if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.add('active'); });                   }                }                                this.fetchDeals(this.currentQuery);             });          });          if (this.brandTrigger && this.brandDropdown) {            this.brandTrigger.addEventListener('click', () => {              this.brandDropdown.classList.toggle('active');            });            document.addEventListener('click', (e) => {              if (this.brandFilterWrapper && !e.composedPath().includes(this.brandFilterWrapper)) {                this.brandDropdown.classList.remove('active');              }            });          }          let debounceTimer;          if(this.searchInput) {            this.searchInput.addEventListener('input', (e) => {              clearTimeout(debounceTimer);              const query = e.target.value.trim();              this.currentQuery = query;              if (this.getViewMode() === 'savings_squad' && this.autocompleteDropdown && this.airedaleTags && query.length > 0) {                 const matches = this.airedaleTags.filter(t => t.toLowerCase().includes(query.toLowerCase()) && t.toLowerCase() !== query.toLowerCase()).slice(0, 5);                 if (matches.length > 0) {                    this.autocompleteDropdown.innerHTML = matches.map(m => `\x3Cdiv class="tg-df-autocomplete-item" data-tag="${this.escapeHTML(m)}">${this.escapeHTML(m)}<` + `/div>`).join('');                    this.autocompleteDropdown.classList.add('active');                 } else {                    this.autocompleteDropdown.classList.remove('active');                 }              } else if (this.autocompleteDropdown) {                 this.autocompleteDropdown.classList.remove('active');              }              debounceTimer = setTimeout(() => {                this.updateURLParams();                if (query.length > 2) {                  this.fetchDeals(query);                } else if (query.length === 0) {                  this.deals = [];                  this.render();                }              }, 400);            });            this.searchInput.addEventListener('keypress', (e) => {              if (e.key === 'Enter') {                if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');                clearTimeout(debounceTimer);                const query = e.target.value.trim();                this.currentQuery = query;                this.activeDealTag = null;                trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                this.updateURLParams();                if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                   this.fetchDeals(query);                }              }            });          }          if (this.autocompleteDropdown) {             this.autocompleteDropdown.addEventListener('click', (e) => {                const item = e.target.closest('.tg-df-autocomplete-item');                if (item) {                   const tag = item.getAttribute('data-tag');                   this.currentQuery = tag;                   if (this.searchInput) this.searchInput.value = tag;                   this.activeDealTag = tag;                   this.autocompleteDropdown.classList.remove('active');                   this.updateURLParams();                   this.fetchDeals(tag);                }             });             document.addEventListener('click', (e) => {               if (this.autocompleteDropdown && this.searchInput && !e.composedPath().includes(this.searchInput) && !e.composedPath().includes(this.autocompleteDropdown)) {                 this.autocompleteDropdown.classList.remove('active');               }             });          }          if (this.searchBtn) {            this.searchBtn.addEventListener('click', () => {              if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');              clearTimeout(debounceTimer);              const query = this.searchInput.value.trim();              trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });              this.activeDealTag = null;              this.currentQuery = query;              this.updateURLParams();              if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.fetchDeals(query);              }            });          }          if(this.sortSelect) this.sortSelect.addEventListener('change', () => {            trackElementInteraction({ id: `sort-option-${this.sortSelect.value}`, name: 'Sort', label: `Sort: ${this.sortSelect.options[this.sortSelect.selectedIndex].text}` });            this.updateURLParams();            if (this.deals.length > 0) {              this.sortData();              this.render();            }          });                    const priceFilter = this.root.querySelector('#tg-df-price-filter');          if (priceFilter) {            this.priceFilter = priceFilter;            this.priceFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-price-${this.priceFilter.value}`, name: 'Price', label: this.priceFilter.options[this.priceFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          const updateCustomPrice = () => {             this.updateURLParams();             if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);             } else {                this.render();             }          };          if (this.customPriceMin) {             this.customPriceMin.addEventListener('change', updateCustomPrice);             this.customPriceMin.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          if (this.customPriceMax) {             this.customPriceMax.addEventListener('change', updateCustomPrice);             this.customPriceMax.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          const discountFilter = this.root.querySelector('#tg-df-discount-filter');          if (discountFilter) {            this.discountFilter = discountFilter;            this.discountFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-discount-${this.discountFilter.value}`, name: 'Discount', label: this.discountFilter.options[this.discountFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          if (this.categoryFilter) {            this.categoryFilter.addEventListener('change', (e) => {               const val = e.target.value === 'all' ? null : e.target.value;               this.activeDealTag = val;               this.fetchSavingsSquad();            });          }                    if (this.settingsToggle) {            this.settingsToggle.addEventListener('click', () => {              const o = this.settingsPanel.classList.toggle('active');              this.settingsBackdrop.classList.toggle('active');              if (o) trackElementInteraction({ id: 'filter-open', name: 'Filters', label: 'Open filters' });            });          }                    if (this.settingsBackdrop) {            this.settingsBackdrop.addEventListener('click', () => {              this.settingsPanel.classList.remove('active');              this.settingsBackdrop.classList.remove('active');            });          }                    if (this.regionSelect) {            this.regionSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-region-${this.regionSelect.value}`, name: 'Region', label: this.regionSelect.options[this.regionSelect.selectedIndex].text });              this.updateURLParams();              this.updatePriceDropdownCurrency();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.retailerSelect) {            this.retailerSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-merchant-${this.retailerSelect.value}`, name: 'Retailer', label: this.retailerSelect.options[this.retailerSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.offerTypeSelect) {            this.offerTypeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-offertype-${this.offerTypeSelect.value}`, name: 'Offer Type', label: this.offerTypeSelect.options[this.offerTypeSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.viewModeSelect) {            this._prevViewMode = this.viewModeSelect.value;            this.viewModeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-viewmode-${this.viewModeSelect.value}`, name: 'View Mode', label: this.viewModeSelect.options[this.viewModeSelect.selectedIndex].text });                            // Reset all active toggles and filters to prevent config carry-over              this.selectedBrands = [];              if (this.brandTrigger) this.brandTrigger.innerText = 'Select Brands';              if (this.brandDropdown) {                const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                chks.forEach(chk => { chk.checked = false; });              }              if (this.priceFilter) this.priceFilter.value = 'all';              if (this.customPriceMin) this.customPriceMin.value = '';              if (this.customPriceMax) this.customPriceMax.value = '';              if (this.sortSelect) this.sortSelect.value = this.viewModeSelect.value === 'savings_squad' ? 'date_desc' : 'discount_desc';              if (this.discountFilter) this.discountFilter.value = '0';              if (this.retailerSelect) this.retailerSelect.value = '';              if (this.offerTypeSelect) this.offerTypeSelect.value = '';              if (this.rowsSelect) this.rowsSelect.value = '12';              if (this.categoryFilter) this.categoryFilter.value = 'all';              this.activeDealTag = null;              this.updateURLParams();              this.applyLayoutMode();                            if (this.getViewMode() === 'savings_squad' || this._prevViewMode === 'savings_squad') {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }              this._prevViewMode = this.viewModeSelect.value;            });          }                    if (this.rowsSelect) {            this.rowsSelect.addEventListener('change', () => {              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.dealModeToggle) {            this.dealModeToggle.addEventListener('change', () => {              this.updateURLParams();              this.render();            });          }          if (this.editorModeToggle) {             this.editorModeToggle.addEventListener('change', (e) => {                this.editorMode = e.target.checked;                this.render();                this.updateFloatingCopyBar();             });          }          if (this.editorCopyBtn) {             this.editorCopyBtn.addEventListener('click', () => {                this.copySelectedDealsToCMS();             });          }          if (this.editorClearBtn) {             this.editorClearBtn.addEventListener('click', () => {                this.selectedDeals.clear();                this.render();                this.updateFloatingCopyBar();             });          }          if (this.grid) {            this.grid.addEventListener('change', (e) => {               if (e.target.classList.contains('tg-df-deal-checkbox')) {                  const dealId = e.target.getAttribute('data-id');                  if (e.target.checked) {                     const dealObj = this.deals.find(d => d.id === dealId);                     if (dealObj) this.selectedDeals.set(dealId, dealObj);                  } else {                     this.selectedDeals.delete(dealId);                  }                  this.updateFloatingCopyBar();               }            });            this.grid.addEventListener('click', (e) => {              const dealCard = e.target.closest('[data-action="deal-click"]');              const similarCard = e.target.closest('[data-action="view-similar-click"]');              const cardLink = dealCard || similarCard;              if (cardLink) {                const productName = cardLink.getAttribute('data-product-name');                const merchantName = cardLink.getAttribute('data-merchant-name');                const productId = cardLink.getAttribute('data-analytics-id');                const price = parseFloat(cardLink.getAttribute('data-price')) || null;                const prevPriceStr = cardLink.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = cardLink.getAttribute('data-original-link');                const finalHref = cardLink.href || cardLink.getAttribute('href') || '';                let actualRevenueId = cardLink.getAttribute('data-revenue-id');                const revMatch = finalHref.match(/(?:subId1|xcust|clickref|ascsubtag)=[^&]*?(\d{18,20})(?:&|$)/i);                if (revMatch && revMatch[1]) {                  actualRevenueId = revMatch[1];                }                const rewrittenLink = finalHref;                const revenueId = actualRevenueId;                const index = parseInt(cardLink.getAttribute('data-index'), 10) || 0;                const inStock = cardLink.getAttribute('data-in-stock') === 'true';                const totalText = cardLink.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: cardLink.getAttribute('data-model-id') || null,                    matchId: cardLink.getAttribute('data-match-id') || null,                    brand: cardLink.getAttribute('data-model-brand') || null,                    parent: cardLink.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: cardLink.getAttribute('data-merchant-id') || null,                    network: cardLink.getAttribute('data-merchant-network') || null,                    url: cardLink.getAttribute('data-merchant-url') || null,                    name: merchantName                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: normalizeCurrency(this.escapeHTML(cardLink.getAttribute('data-currency') || '$'))                };                if (dealCard) {                  trackDealClick(trackingParams);                } else {                  trackViewSimilarClick(trackingParams);                }              }              const couponsBtn = e.target.closest('[data-action="coupons-click"]');              if (couponsBtn) {                trackElementInteraction({                  id: 'product-card-show-coupons',                  name: 'Coupons',                  label: `Product card coupons: ${couponsBtn.getAttribute('data-merchant')}`                });              }            });          }          this.setupScrollListeners();        }        setupScrollListeners() {          const containers = [             this.root.querySelector('.tg-df-carousel-roundels'),             this.root.querySelector('.tg-df-carousel-filters-wrap'),             this.root.querySelector('#tg-df-grid')          ];                    containers.forEach(container => {             if (!container) return;                          const checkScroll = () => {                if (!container.parentElement) return;                const leftBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-left');                const rightBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-right');                                if (leftBtn) {                   if (container.scrollLeft <= 5) leftBtn.style.display = 'none';                   else leftBtn.style.display = 'flex';                }                                if (rightBtn) {                   if (container.scrollWidth <= container.clientWidth) {                       rightBtn.style.display = 'none';                   } else if (container.scrollLeft >= container.scrollWidth - container.clientWidth - 5) {                       rightBtn.style.display = 'none';                   } else {                       rightBtn.style.display = 'flex';                   }                }             };                          container.addEventListener('scroll', checkScroll);             checkScroll();                          window.addEventListener('resize', checkScroll);                          const observer = new MutationObserver(checkScroll);             observer.observe(container, { childList: true, subtree: true, characterData: false });          });        }        get widgetTypeName() {          const mode = this.viewModeSelect ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');          switch(mode) {              case 'carousel': return 'Carousel';              case 'savings_squad': return 'Savings Squad';              case 'grid': return 'Grid';              case 'row': return 'Row';              default: return 'Auto Collection';          }        }        getRowsLimit() {          if (this.rowsSelect && this.rowsSelect.value) return parseInt(this.rowsSelect.value, 10);          let configSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {             configSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {             configSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(configSource);          if (params.has('rows')) return parseInt(params.get('rows'), 10) || 12;          return 12;        }        getAreaCode() {          if (this.regionSelect && this.regionSelect.value) {            if (this.regionSelect.value === 'auto') return null;            return this.regionSelect.value;          }          let area = null;          try {            const locale = window.navigator.language || window.navigator.userLanguage;            if (locale && locale.includes('-')) {              area = locale.split('-')[1].toUpperCase();            } else if (locale && locale.length === 2) {              if (locale.toUpperCase() === 'EN') { area = 'US'; }              else { area = locale.toUpperCase(); }            }          } catch (e) { /* Ignore */ }                    // Map to known valid options or fallback to US          const valid = ['US', 'GB', 'CA', 'AU', 'DE', 'FR', 'IT'];          if (area === 'UK') area = 'GB';          if (valid.includes(area)) {             return area;          }          return 'US';        }                async loadCarouselSpreadsheet() {          try {              const parseCSVRow = (str) => {                  let result = [], cur = '', inQuotes = false;                  for (let i = 0; i < str.length; i++) {                      let char = str[i];                      if (inQuotes) {                          if (char === '"') {                              if (str[i + 1] === '"') { cur += '"'; i++; }                              else { inQuotes = false; }                          } else { cur += char; }                      } else {                          if (char === '"') { inQuotes = true; }                          else if (char === ',') { result.push(cur); cur = ''; }                          else { cur += char; }                      }                  }                  result.push(cur); return result;              };              const parseCSV = (str) => {                  const rows = []; let curRow = '', inQuotes = false;                  for (let i = 0; i < str.length; i++) {                      let char = str[i];                      if (char === '"') inQuotes = !inQuotes;                      if ((char === '\n' || char === '\r') && !inQuotes) {                          if (char === '\r' && str[i+1] === '\n') i++;                          if (curRow) rows.push(parseCSVRow(curRow));                          curRow = '';                      } else { curRow += char; }                  }                  if (curRow) rows.push(parseCSVRow(curRow));                  return rows;              };              const preloadedCSV = decodeURIComponent(escape(atob("LCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNQ0KUm91bmRlbCB0ZXh0LEFsbCxUVnMsRm9vdHdlYXIsQXBwYXJlbCxNYXR0cmVzZXMsQXBwbGlhbmNlcyxXZWFyYWJsZSB0ZWNoLEhlYWRwaG9uZXMsU21hcnQgSG9tZSxTcGVha2VycyxMYXB0b3BzLFRhYmxldHMsQ29tcHV0aW5nLFBob25lcyxHYW1pbmcsTGVnbw0KUm91bmRlbCBpbWFnZSxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Nob3AtYXNzZXRzL2Nhcm91c2VsL2FpLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Nob3AtYXNzZXRzL2Nhcm91c2VsL3R2cy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvN2IzYTIyNGIwNzk2M2M2MjdiNmI5MDliZDc4MzM4MzZlMDJmZjgxOS5qcGcud2VicCxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy84NGRhYzVkNDhlZDJkNDQ4NTU5ZWJhNjdhY2U4MzE0Y2M2N2NjZDk0LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vc2hvcC1hc3NldHMvY2Fyb3VzZWwvbWF0dHJlc3Nlcy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvNzY4ZTk3Y2ViMDcxODAxZmFlMjA5MTBkMDgyMGIxNmY3NDdhZjkzOS5qcGcud2VicCxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Nob3AtYXNzZXRzL2Nhcm91c2VsL3dlbGxuZXNzLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Nob3AtYXNzZXRzL2Nhcm91c2VsL2hlYWRwaG9uZXMuanBnLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzg5NTM1YmVlYmUyMGRiYmQ0YTM0NmQ2ZDZiZGZlOTFkOGE4ODRhMjEuanBnLndlYnAsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9zaG9wLWFzc2V0cy9jYXJvdXNlbC9hdWRpby5qcGcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9zaG9wLWFzc2V0cy9jYXJvdXNlbC9sYXB0b3BzLmpwZyxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy8yMzk3NTY0ZWQ3YTVmZjk0N2U5YjZiMzBlNTRmNDc0OTRiODQxZjg5LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vc2hvcC1hc3NldHMvY2Fyb3VzZWwvY29tcHV0aW5nLmpwZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Nob3AtYXNzZXRzL2Nhcm91c2VsL3Bob25lcy5wbmcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9zaG9wLWFzc2V0cy9jYXJvdXNlbC9nYW1pbmcucG5nLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzRmNmM2MjFjYWMwYmMxYTg1ZDU5M2UzNTk0YmE1YjM0OWVmZmQyOTIuanBnLndlYnANClNlYXJjaCBRdWVyeSxFdmVyeXRoaW5nLFRlbGV2aXNpb25zLCJTbmVha2VycywgcnVubmluZyBzaG9lcywgc2FuZGFscyIsQ2xvdGhpbmcsTWF0dHJlc3NlcyxIb21lIEFwcGxpYW5jZXMsV2VhcmFibGVzICYgRml0bmVzcyBUZWNoLEhlYWRwaG9uZXMsSG9tZSBUZWNoLFNwZWFrZXJzLExhcHRvcHMsVGFibGV0cyxDb21wdXRpbmcsUGhvbmVzLEdhbWluZyxDb25zdHJ1Y3Rpb24gVG95cw0KRGlzY291bnQgQW1vdW50LG1pbiA1JSxtaW4gMTAlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUNClByaWNlIFJhbmdlLCwsLCxtaW4gJDQwMCwsLCxtaW4gJDI1LCxtaW4gJDMwMCwsLG1pbiAkMTAwLCwNCkJyYW5kIFNlbGVjdGlvbiwsLCwsLCwsLCwsLCwsLCwNCkZpbHRlciBidXR0b25zLCwsLCwsLCwsLCwsLCwsLA0KMSxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMNCjIsQW1hem9uIGRlYWxzLFVuZGVyICQxMDAwLDUwJSBvZmYsQWRpZGFzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsNTAlIG9mZixBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscw0KMyxPdmVyICQ0MDAsVW5kZXIgJDUwMCxIb2thLE5pa2UsU2FhdHZhLE5pbmphLDQwJSBvZmYsSkxhYiwsSkJMLERlbGwsLEFzdXMsQXBwbGUsQ29uc29sZXMsU3RhciBXYXJzDQo0LFVuZGVyICQxMDAwLDUwJSBvZmYsU2tlY2hlcnMsVW5kZXIgQXJtb3VyLEhlbGl4LFNoYXJrLEdhcm1pbixBbmtlciBTb3VuZGNvcmUsUmluZyxTb25vcyxBcHBsZSxBcHBsZSxUUC1saW5rLFNhbXN1bmcsQWNjZXNzb3JpZXMsVW5kZXIgJDI1DQo1LFVuZGVyICQ1MDAsTEcsQXNpY3MsQ29sdW1iaWEsRHJlYW1DbG91ZCxLZXVyaWcsQXBwbGUsU29ueSxHb3ZlZSxUcmliaXQsTGVub3ZvLFNhbXN1bmcsRWVybyxHb29nbGUsR2FtZXMsVW5kZXIgJDUwDQo2LDUwJSBvZmYsU2Ftc3VuZyxOaWtlLFBhdGFnb25pYSxOZWN0YXIsRGUnTG9uZ2hpLEFtYXpmaXQsQXBwbGUsS2FzYSBzbWFydCxTb255LEFsaWVud2FyZSxUQ0wsTmV0Z2VhcixNb3Rvcm9sYSxOaW50ZW5kbyxCb3RhbmljYWxzDQo3LEFtYXpvbixIaXNlbnNlLE5ldyBCYWxhbmNlLEFyYyd0ZXJ5eCxUZW1wdXItcGVkaWMsRHlzb24sRml0Yml0LEJlYXRzLFBoaWxpcHMgSHVlLEFua2VyLEFjZXIsT25lUGx1cyxEZWxsLE9uZVBsdXMsU29ueSxEaXNuZXkNCjgsQXBwbGUsVENMLEFkaWRhcyxDYXJoYXJ0dCxCZWFyLEJpc3NlbGwsU2Ftc3VuZyxFYXJmdW4sQmxpbmssQmVhdHMsTVNJLE1pY3Jvc29mdCxBY2VyLE5vdGhpbmcsWGJveCxNYXJ2ZWwNCjksLFNvbnksU2F1Y29ueSxUaGUgTm9ydGggRmFjZSxTaWVuYSxOdXRyaWJ1bGxldCxPdXJhLFNhbXN1bmcsR29vZ2xlIE5lc3QgLE1hcnNoYWxsLFNhbXN1bmcsTGVub3ZvLExlbm92bywsLFBva2Vtb24NCjEwLCxSb2t1LEJpcmtlbnN0b2NrLENSWiBZb2dhLFdpbmtCZWRzLEJsYWNrIGFuZCBEZWNrZXIsUmluZ2Nvbm4sQ01GLEV1ZnksU2Ftc3VuZyxNaWNyb3NvZnQsUmVNYXJrYWJsZSxBbGllbndhcmUsLCwNCjExLCwsQnJvb2tzLFRoZSBHeW0gUGVvcGxlLEJyb29rbHluIGJlZGRpbmcsTmVzcHJlc3NvLCwxTW9yZSxBcmxvLCxSYXplciwsQ29yc2FpciwsLA0KMTIsLCxDcm9jcywsRWlnaHQgU2xlZXAsQ3Vpc2luYXJ0LCxKQkwsLCwsLEhQLCwsDQpOb3RlcywsLCwsLCwsLCwsLCwsLCwNCiwsIlByaW9yaXRpc2UgYmlnZ2VzdCAlLyQgZGlzY291bnQsIFR2cyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiB0aGUgbW9zdCBwb3B1bGFyIGV2ZW4gaWYgdGhleSBhcmUgc3RpbGwgZXhwZW5zaXZlIiwiTm8gcGF0dGVybiB0byBwcmljaW5nL2Rpc2NvdW50LCByZWFkZXJzIG1haW5seSBzaG9wIGJ5IGJyYW5kL3JlY29nbmlzYWJsZSBzaG9lcyIsIk5vIHBhdHRlcm4gdG8gcHJpY2luZy9kaXNjb3VudCwgcmVhZGVycyBtYWlubHkgc2hvcCBieSBicmFuZCIsIkEgbGFiZWwgd2lsbCBkZWZpbml0ZWx5IGhlbHAgaGVyZSBlLmcuIGJlc3QgZm9yIHNpZGUgc2xlZXBlciwgYmVzdCBtZW1vcnkgZm9hbSIsIkFwcGxpYW5jZXMgaXMgYSBiaWcgY2F0ZWdvcnksIGlzIGl0IHBvc3NpYmxlIHRvIHNwbGl0IGludG8ga2l0Y2hlbiBhcHBsaWFuY2VzLCBmbG9vcmNhcmUsIGFpciBoZWFsdGgvY29vbGluZz8gT3Igc2ltaWxhciIsIkZvY3VzIG9uIHZhbHVlIGZvciBtb25leSwgR2FybWlucyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiBwb3B1bGFyIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIHN0aWxsICQ1MDAiLCwsLCxJbmNsdWRlIEtpbmRsZXMsSSB3b3VsZCBpbmNsdWRlIHdpZmkgcm91dGVycyBoZXJlIGluc3RlYWQgb2Ygc21hcnQgaG9tZSxDYW4gd2Ugc3VyZmFjZSBwaG9uZSBwcm92aWRlciBkZWFscz8gVC1tb2JpbGUgYW5kIHZlcml6b24gd291bGQgbWFrZSBhIGxvdCBtb3JlIG1vbmV5IHRoYW4gQW1hem9uLCwNCiwsaGF2aW5nIGEgJ2Jlc3QgZm9yJyBsYWJlbCB3b3VsZCBiZSBoZWxwZnVsIGUuZy4gYmVzdCBmb3IgYnJpZ2h0IHJvb20sQ2FuIHdlIHN0b3Aga2lkcyBzaG9lcyBmcm9tIHB1bGxpbmcgdGhyb3VnaD8sIldpbGwgdGhpcyBpbmNsdWRlIGFjY2Vzc29yaWVzIGUuZy4gY2FwcywgYmFncywgaWYgc28gbWFrZSBzdXJlIHRoZXNlIGFyZSBtaXhlZCB0aHJvdWdob3V0IGNsb3RoaW5nIGRlYWxzIixXaWxsIHRoaXMgaW5jbHVkZSB0b3BwZXJzIGFuZCBwaWxsb3dzPyBTZWVpbmcgbW9yZSBtb21lbnR1bSB3aXRoIHRoaXMgY2F0ZWdvcnkgcmVjZW50bHkgc28gYSBiZWRkaW5nIHRhYiBtaWdodCB3b3JrLCwiTmVlZCB0byBtYWtlIHN1cmUgYmFuZHMsIHNjcmVlbiBwcm90ZWN0b3JzIGV0Yy4gZG9uJ3QgcHVsbCBpbnRvIGhlcmUiLCwsLCwsLCwsDQosLCJQcmlvcml0aXNlIDY1JycgYW5kIDU1JyBpbmNoIFRWcywgdGhlbiBiaWdnZXIgc2NyZWVucyBiZWZvcmUgdGhlIHNtYWxsZXIgc2l6ZXMiLCwsUXVlZW4gaXMgdGhlIG1vc3QgcG9wdWxhciBzaXplIGluIHRoZSBVUyAtIHByaW9yaXRpc2UgZGVhbHMgZm9yIHRoaXMgc2l6ZSwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpDYXRlZ29yaWVzIHRvIGNvbnNpZGVyLCxQcm9kdWN0cyBpbmNsdWRlZCwsLCwsLCwsLCwsLCwsDQpVbmRlciAkNTA/LCxBaXIgdGFncywsLCwsLCwsLCwsLCwsDQosLFBvcnRhYmxlIGNoYXJnZXJzL3dpcmVsZXNzIGNoYXJnZXJzLCwsLCwsLCwsLCwsLCwNCiwsIldhdGVyIGJvdHRsZXMgKHN0YW5sZXlzLCBPd2FsYSwgSHlkcm8gZmxhc2ssIFlldGkpIiwsLCwsLCwsLCwsLCwsDQosLEhhbmQgaGVsZCBmYW5zLCwsLCwsLCwsLCwsLCwNCiwsLCwsLCwsLCwsLCwsLCwNCmhvbWUgb2ZmaWNlLCxvZmZpY2UgY2hhaXJzLCwsLCwsLCwsLCwsLCwNCiwsc3RhbmRpbmcgZGVza3MsLCwsLCwsLCwsLCwsLA0KLCxtb25pdG9ycywsLCwsLCwsLCwsLCwsDQosLEtleWJvYXJkcywsLCwsLCwsLCwsLCwsDQosLGRvY2tpbmcgc3RhdGlvbiwsLCwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpHYW1pbmcsLENvbnNvbGVzLCwsLCwsLCwsLCwsLCwNCiwsQWNjZXNzb3JpZXMsLCwsLCwsLCwsLCwsLA0KLCxHYW1lcywsLCwsLCwsLCwsLCwsDQosLENvdWxkIGluY2x1ZGUgTGVnbz8sLCwsLCwsLCwsLCwsLA==")));              const text = preloadedCSV;              const parsed = parseCSV(text);                            const rowsByName = {};              let filterStart = -1;              parsed.forEach((rc, i) => {                 if (rc && rc.length > 0 && rc[0]) rowsByName[rc[0]] = rc;                 if (rc && rc.length > 0 && rc[0] === 'Filter buttons') filterStart = i;              });                            const cols = [];              if(rowsByName['Roundel text']) {                const headerRow = rowsByName['Roundel text'];                for(let col = 1; col < headerRow.length; col++) {                   let label = headerRow[col];                   if (!label) continue;                                      let q = rowsByName['Search Query'] && rowsByName['Search Query'][col] ? rowsByName['Search Query'][col] : '';                   let img = rowsByName['Roundel image'] && rowsByName['Roundel image'][col] ? rowsByName['Roundel image'][col] : '';                   let ds = rowsByName['Discount Amount'] && rowsByName['Discount Amount'][col] ? rowsByName['Discount Amount'][col] : '';                   let pr = rowsByName['Price Range'] && rowsByName['Price Range'][col] ? rowsByName['Price Range'][col] : '';                   let rt = rowsByName['Retailer'] && rowsByName['Retailer'][col] ? rowsByName['Retailer'][col] : '';                   let ot = rowsByName['Offer Type'] && rowsByName['Offer Type'][col] ? rowsByName['Offer Type'][col] : '';                                      let filters = [];                   if(filterStart > 0) {                     for(let r = filterStart + 1; r < parsed.length; r++) {                         if(!parsed[r] || parsed[r][0] === 'Notes' || parsed[r][0] === 'Categories to consider') break;                         let f = parsed[r][col];                         if(f) filters.push(f);                     }                   }                   cols.push({ label, img, q, ds, pr, rt, ot, filters });                }              }              this.carouselData = cols;              if (this.carouselData && this.carouselData.length > 0) {                 const isMatched = this.carouselData.some(c => c.q === this.currentQuery || c.label === this.currentQuery);                 if (!isMatched) {                    const first = this.carouselData[0];                    this.currentQuery = first.q || first.label;                    if (this.priceFilter) this.priceFilter.value = 'all';                    if (this.customPriceMin) this.customPriceMin.value = '';                    if (this.customPriceMax) this.customPriceMax.value = '';                    let dPr = first.pr || 'all';                    if (typeof dPr === 'string' && dPr !== 'all') {                       let prLower = dPr.toLowerCase();                       if (prLower.includes('min') || prLower.includes('over')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else if (prLower.includes('max') || prLower.includes('under')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       }                    }                    let dAm = '0';                    if(first.ds && typeof first.ds === 'string') {                       let m = first.ds.match(/(\d+)/);                       if(m) dAm = m[1];                    }                    if (this.discountFilter) this.discountFilter.value = dAm;                    if (this.offerTypeSelect) this.offerTypeSelect.value = first.ot || '';                    if (this.retailerSelect) this.retailerSelect.value = first.rt || '';                    this.selectedBrands = [];                    if (this.brandDropdown) {                        const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                        chks.forEach(chk => chk.checked = false);                    }                    if (this.searchInput) this.searchInput.value = this.currentQuery;                 }              }              this.renderCarouselUI();          } catch(e){ console.warn(e); }        }                renderCarouselUI() {           const roundelWrapper = this.root.querySelector('.tg-df-carousel-roundels');           if(!roundelWrapper || !this.carouselData) return;                      let html = '';           this.carouselData.forEach(r => {              const q = r.q || r.label;              const isActive = (this.currentQuery === q || this.currentQuery === r.label) ? 'active' : '';              const imgHtml = r.img ? `\x3Cimg src="${r.img}" alt="${r.label}" />` : `\x3Csvg width="32" height="32" fill="#1F69FF" viewBox="0 0 24 24">\x3Cpath d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/>\x3C/svg>`;              html += `                \x3Cdiv class="tg-df-roundel tg-df-carousel-cat ${isActive}" data-label="${this.escapeHTML(r.label)}">                  \x3Cdiv class="tg-df-roundel-img-box">${imgHtml}\x3C/div>                  \x3Cspan class="tg-df-roundel-label">${this.escapeHTML(r.label)}\x3C/span>                \x3C/div>              `;           });           roundelWrapper.innerHTML = html;                      // Rebind clicks           const roundels = this.root.querySelectorAll('.tg-df-carousel-cat');           roundels.forEach(rNode => {             rNode.addEventListener('click', () => {                const r = this.carouselData.find(c => c.label === rNode.getAttribute('data-label'));                 if(!r) return;                                  if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: r.label,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = r.q || r.label;                const labelTitle = this.root.querySelector('#tg-df-carousel-title-label');                if (labelTitle) labelTitle.textContent = 'Best ' + this.currentQuery;                if (this.priceFilter) this.priceFilter.value = 'all';                if (this.customPriceMin) this.customPriceMin.value = '';                if (this.customPriceMax) this.customPriceMax.value = '';                let dPr = r.pr || 'all';                if (typeof dPr === 'string' && dPr !== 'all') {                   let prLower = dPr.toLowerCase();                   if (prLower.includes('min') || prLower.includes('over')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMin) this.customPriceMin.value = m[1];                   } else if (prLower.includes('max') || prLower.includes('under')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMax) this.customPriceMax.value = m[1];                   }                }                                let discountAmount = '0';                if(r.ds && typeof r.ds === 'string') {                   let m = r.ds.match(/(\d+)/);                   if(m) discountAmount = m[1];                }                if (this.discountFilter) this.discountFilter.value = discountAmount;                if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                                // Clear brands                    this.selectedBrands = [];                    if (this.brandDropdown) {                    const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                    chks.forEach(chk => chk.checked = false);                }                                if (this.searchInput) this.searchInput.value = this.currentQuery;                                roundels.forEach(ro => ro.classList.remove('active'));                if (rNode) rNode.classList.add('active');                                this.renderCarouselFilters(r);                this.fetchDeals(this.currentQuery);             });           });                      // Auto-highlight active           const activeR = this.carouselData.find(c => c.q === this.currentQuery || c.label === this.currentQuery);           if(activeR) this.renderCarouselFilters(activeR);        }                renderCarouselFilters(r) {           const filtersWrap = this.root.querySelector('.tg-df-carousel-filters-wrap');           if(!filtersWrap) return;                      let html = `\x3Cbutton class="tg-df-carousel-filter-btn" data-type="all">All\x3C/button>`;                      r.filters.forEach(f => {              let fL = f.toLowerCase();              let icon = '';              let logic = `data-type="custom" data-v="${this.escapeHTML(f)}"`;              if (fL === 'amazon deals' || fL === 'prime deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>`;              } else if (fL === 'lightning deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>`;              } else {                 if (fL.includes('lightning')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-zap">\x3Cpolygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2">\x3C/polygon>\x3C/svg>`;                 } else if (fL.includes('% off')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>`;                 } else if (fL.includes('under') || fL.includes('min ')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>`;                 }                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>${icon} ${this.escapeHTML(f)}\x3C/button>`;              }           });                      filtersWrap.innerHTML = html;                      const btns = filtersWrap.querySelectorAll('button');           btns.forEach(b => {             b.addEventListener('click', () => {                const type = b.getAttribute('data-type');                if (type === 'custom') {                   const v = b.getAttribute('data-v');                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-custom-${(v||'').toLowerCase().replace(/[^a-z0-9]+/g, '-')}`, name: 'Custom Filter', label: v });                }                if (type === 'all') {                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: 'filter-clear-all', name: 'Clear all', label: 'Clear all filters' });                   // reset everything                   btns.forEach(btn => btn.classList.remove('active'));                   b.classList.add('active');                                      // Reset prices                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   if (this.brandDropdown) {                     const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                     chks.forEach(chk => chk.checked = false);                   }                } else {                   const v = b.getAttribute('data-v');                   const fL = v.toLowerCase();                                      let mapRet = ['amazon', 'walmart', 'best buy', 'target', 'john lewis', 'currys', 'argos'];                   const getCategory = (s) => {                      if (s === 'lightning deals' || s === 'amazon deals' || s === 'prime deals') return 'offer';                      if (s.includes('% off')) return 'discount';                      if (s.includes('under') || s.includes('over') || s.includes('min') || s.includes('max')) return 'price';                      if (mapRet.includes(s)) return 'retailer';                      return 'brand';                   };                   const cat = getCategory(fL);                   const wasActive = b.classList.contains('active');                   if (cat !== 'brand') {                      btns.forEach(btn => {                          if (btn === b) return;                          if (btn.getAttribute('data-type') === 'all') return;                          const bV = btn.getAttribute('data-v');                          if (!bV) return;                          if (getCategory(bV.toLowerCase()) === cat) btn.classList.remove('active');                      });                   }                   if (wasActive) b.classList.remove('active');                   else b.classList.add('active');                   let anyActive = Array.from(btns).some(btn => btn !== btns[0] && btn.classList.contains('active'));                   if (!anyActive) {                       btns[0].click();                       return;                   } else {                       btns[0].classList.remove('active');                   }                                      if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   btns.forEach(btn => {                       if (!btn.classList.contains('active') || btn.getAttribute('data-type') === 'all') return;                       const vv = btn.getAttribute('data-v');                       const vl = vv.toLowerCase();                                              if (vl === 'lightning deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_lightning';                       } else if (vl === 'amazon deals' || vl === 'prime deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_prime';                       } else if (vl.includes('% off')) {                          let m = vl.match(/(\d+)%/);                          if (m && this.discountFilter) this.discountFilter.value = m[1];                       } else if (vl.includes('under') || vl.includes('max')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       } else if (vl.includes('min') || vl.includes('over')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else {                          let foundR = mapRet.find(x => x === vl);                          if (foundR) {                             let realR = ['Amazon', 'Walmart', 'Best Buy', 'Target', 'John Lewis', 'Currys', 'Argos'].find(x => x.toLowerCase() === vl);                             if (this.retailerSelect) this.retailerSelect.value = realR;                          } else {                             this.selectedBrands.push(vv);                          }                       }                   });                                      if (this.brandDropdown) {                       const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                       chks.forEach(c => c.checked = this.selectedBrands.includes(c.value));                   }                                      if (r.pr && typeof r.pr === 'string') {                       let prL = r.pr.toLowerCase();                       if (prL.includes('under $')) {                           let m = prL.match(/under \$(\d+)/i);                           if (m && this.customPriceMax && !this.customPriceMax.value) this.customPriceMax.value = m[1];                       }                   }                }                                this.fetchDeals(this.currentQuery);             });           });                      // default to highlighting first           btns[0].classList.add('active');        }async fetchDeals(query, append = false) {          if (!append) {             this.showLoading();             this.deals = [];             this.displayLimit = this.getRowsLimit();          } else {             this.displayLimit += this.getRowsLimit();          }                    try {            if (this.getViewMode() === 'savings_squad') {               await this.fetchSavingsSquad(append);            } else {               if (this.isBroadQuery(query)) {                 await this.fetchAdviserDeals(query, append);               } else {                 await this.fetchHawkDeals(query, append);                 if (this.deals.length === 0) {                   await this.fetchAdviserDeals(query, append);                 }               }            }          } catch (error) {            console.warn("[Tom's Guide Widget] Fetch error:", error);            this.showError();          }        }        async fetchSavingsSquad() {          let topArticles = this.airedaleArticles;          if (!topArticles) {            const airedaleUrl = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`;            let res;            try {               res = await fetch(airedaleUrl);            } catch(e) {               try { res = await fetch(`https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`); } catch (err) { console.warn("Fallback fetch failed", err); return; }            }            if (!res.ok) throw new Error('Airedale API Error');            const articles = await res.json();            topArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);            this.airedaleArticles = topArticles;                        let tagCounts = {};            topArticles.forEach((a) => {              let articleTags = new Set();              if (a.articlecategory && Array.isArray(a.articlecategory)) {                 a.articlecategory.forEach((t) => articleTags.add(t));              }              articleTags.forEach(t => {                 tagCounts[t] = (tagCounts[t] || 0) + 1;              });            });                        this.airedaleTags = Object.keys(tagCounts).sort((a, b) => tagCounts[b] - tagCounts[a]);            this.airedaleTagCounts = tagCounts;          }                    let targetArticles = topArticles;          if (this.activeDealTag) {             const cleanTag = this.activeDealTag.toLowerCase().replace(/&/g, '').replace(/[^a-z0-9]+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');             const encodedTag = encodeURIComponent(cleanTag);             const url = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50&articleCategoryHandle=${encodedTag}`;             try {                const res = await fetch(url);                if (res.ok) {                   const articles = await res.json();                   targetArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);                }             } catch(e) {                console.warn("Failed to fetch by activeDealTag", e);             }          }          let extractedDeals = [];          let dynamicBrandsCounts = {};                    targetArticles.forEach((article) => {             if (!article.articlepage) return;                          let pageData = [];             try {                pageData = JSON.parse(article.articlepage[0]);             } catch(e){ console.warn(e); }                          const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');                          savingsSquad.forEach((block, idx) => {                const data = block.data || {};                const isFeatured = block.type === 'featured-product';                                const link = data.link || {};                const priceObj = data.price || {};                const image = data.image || {};                                if (data.brand) {                   data.brand = data.brand.replace(/^\d+\.\s*/, '').trim();                   dynamicBrandsCounts[data.brand] = (dynamicBrandsCounts[data.brand] || 0) + 1;                }                const externalUrl = isFeatured ? data.url : (link.href || null);                let summaryTitle = isFeatured ? (data.name || data.brand) : (data.productName || link.label || article.articlename);                let description = isFeatured ? (data.strapline || '') : (data.text || '');                                if (!isFeatured && !data.productName && data.text) {                   const brSplit = data.text.split(new RegExp('\x3Cbr\\s*\\/?\\x3E', 'i'));                   if (brSplit.length > 1) {                     summaryTitle = brSplit[0].replace(/<[^>]+>/g, '').trim();                     description = brSplit.slice(1).join(' ').replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').trim();                   } else {                     const match = data.text.match(/\x3Cstrong>(.*?)<\/strong>/);                     if (match) {                       summaryTitle = match[1].replace(/<[^>]+>/g, '').trim();                       if (summaryTitle.endsWith(':')) summaryTitle = summaryTitle.slice(0, -1);                     }                   }                }                                let imageUrl = isFeatured ? image.mos : (image.src || null);                if (imageUrl && imageUrl.startsWith('//')) imageUrl = 'https:' + imageUrl;                                description = description.replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').replace(/View Deal$/i, '').trim();                                let merchantName = data.retailer || '';                if (!merchantName && externalUrl) {                   try {                     merchantName = new URL(externalUrl).hostname.replace('www.', '').split('.')[0];                     merchantName = merchantName.charAt(0).toUpperCase() + merchantName.slice(1);                   }catch(e){ console.warn(e); }                }                if (!merchantName) merchantName = 'Retailer';                const q = (this.currentQuery || '').toLowerCase();                const activeTagLogic = (this.activeDealTag || '').toLowerCase();                if (q.length > 2 && q !== activeTagLogic) {                   const searchTarget = `${summaryTitle || ''} ${description || ''}`.toLowerCase();                   if (!searchTarget.includes(q)) return;                }                let rawPrice = 0;                let rawMsrp = 0;                let currencyStr = '$';                if (isFeatured) {                   rawPrice = typeof data.salePrice === 'number' && data.salePrice > 0 ? data.salePrice : (typeof data.price === 'number' ? data.price : 0);                   rawMsrp = typeof data.salePrice === 'number' && typeof data.price === 'number' && data.price > data.salePrice ? data.price : 0;                   currencyStr = data.currency === 'GBP' ? '£' : '$';                } else {                   rawPrice = priceObj.amount ? parseFloat(priceObj.amount) : 0;                   rawMsrp = priceObj.amountWas ? parseFloat(priceObj.amountWas) : 0;                   currencyStr = priceObj.currency === 'GBP' ? '£' : '$';                }                                let savingAmt = 0;                let savingLabel = '';                if (rawPrice > 0 && rawMsrp > rawPrice) {                   savingAmt = parseFloat((rawMsrp - rawPrice).toFixed(2));                   savingLabel = `Save ${currencyStr}${savingAmt}`;                }                                // Apply Brand filter                if (this.selectedBrands && this.selectedBrands.length > 0) {                   const itemBrand = (data.brand || '').toLowerCase();                   const hasMatch = this.selectedBrands.some(sb => sb.toLowerCase() === itemBrand);                   if (!hasMatch) return;                }                // Apply Price filter                let priceFilterVal = null;                const min = this.customPriceMin ? this.customPriceMin.value : '';                const max = this.customPriceMax ? this.customPriceMax.value : '';                if (min || max) {                   priceFilterVal = `${min}_${max}`;                } else if (this.priceFilter && this.priceFilter.value !== 'all') {                   priceFilterVal = this.priceFilter.value;                }                if (priceFilterVal && rawPrice > 0) {                   if (priceFilterVal === 'under50' && rawPrice >= 50) return;                   if (priceFilterVal === 'over50' && rawPrice <= 50) return;                   if (priceFilterVal === 'over30' && rawPrice <= 30) return;                   if (priceFilterVal === 'over500' && rawPrice <= 500) return;                   if (priceFilterVal.includes('_')) {                      const parts = priceFilterVal.split('_');                      const min = parseFloat(parts[0]);                      const max = parseFloat(parts[1]);                      if (!isNaN(min) && rawPrice < min) return;                      if (!isNaN(max) && rawPrice > max) return;                   }                }                // Apply Discount filter                if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {                   const requiredDiscount = parseInt(this.discountFilter.value);                   if (!isNaN(requiredDiscount) && requiredDiscount > 0) {                      if (!rawMsrp || rawMsrp <= rawPrice) return;                      const ratio = Math.round((1 - (rawPrice / rawMsrp)) * 100);                      if (ratio < requiredDiscount) return;                   }                }                                extractedDeals.push({                   id: `airedale-${article.id || Math.random()}-${idx}`,                   url: externalUrl,                   image: imageUrl,                   fallbackImage: imageUrl,                   title: summaryTitle,                   brand: data.brand || '',                   productName: data.productName || '',                   merchant: merchantName,                   rawPrice: rawPrice,                   rawMsrp: rawMsrp,                   price: rawPrice > 0 ? rawPrice.toString() : '',                   msrp: rawMsrp > 0 ? rawMsrp.toString() : '',                   currency: currencyStr,                   isCheckPrice: !rawPrice,                   savingLabel: savingLabel,                   savingType: rawMsrp > rawPrice ? 'amount' : 'none',                   isPrime: false,                   starRating: null,                   description: description,                   text: data.text || ''                });             });          });                    const airedaleBrandsList = Object.keys(dynamicBrandsCounts).map(b => ({              formatted_value: b,              count: dynamicBrandsCounts[b]          })).sort((a,b) => b.count - a.count);                    if (this.getViewMode() === 'savings_squad') {             this.populateBrandDropdown(airedaleBrandsList.slice(0, 15));             if (this.brandFilterWrapper) {                if (airedaleBrandsList.length === 0) {                    this.brandFilterWrapper.style.display = 'none';                } else {                    this.brandFilterWrapper.style.display = 'flex';                }             }          }                    this.deals = extractedDeals;          this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.getFilteredDeals().slice(0, this.displayLimit), this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        isBroadQuery(query) {          const q = query.toLowerCase();          const intentModifiers = ['deals', 'best', 'sale', 'under', 'cheap', 'offers', 'discount'];          return intentModifiers.some(term => q.includes(term));        }        async fetchHawkDeals(query, append = false) {          const url = new URL(this.apiUrl);          url.searchParams.append('model_name', query);          const areaCode = this.getAreaCode();          if (areaCode) {            url.searchParams.append('area', areaCode);          }                    if (append && this.deals.length > 0) {            url.searchParams.append('offset', this.deals.length.toString());          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.append('filter_merchant_name', this.retailerSelect.value);          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.append('filter_label[text_brand]', this.selectedBrands.join(','));          }                    let priceVal = null;          const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             priceVal = `${min}_${max}`;          } else if (this.priceFilter && this.priceFilter.value !== 'all') {             priceVal = this.priceFilter.value;          }          if (priceVal) {            if (priceVal === 'under50') {              url.searchParams.append('filter_max_price', '50');            } else if (priceVal === 'over50') {              url.searchParams.append('filter_min_price', '50');            } else if (priceVal === 'over30') {              url.searchParams.append('filter_min_price', '30');            } else if (priceVal === 'over500') {              url.searchParams.append('filter_min_price', '500');            } else if (priceVal.includes('_')) {              const parts = priceVal.split('_');              if (parts[0]) url.searchParams.append('filter_min_price', parts[0]);              if (parts[1]) url.searchParams.append('filter_max_price', parts[1]);            }          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {              const ratio = (100 - v) / 100;              url.searchParams.append('min_discount_ratio', ratio.toString());            }          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.append('offer', this.offerTypeSelect.value);          }                    url.searchParams.append('filter_product_types', 'deals');                    url.searchParams.append('rows', this.getRowsLimit().toString());          let response;          try {             response = await fetch(url.toString());          } catch(e) {             if (window.location.protocol === 'file:') {                console.warn("[Tom's Guide Widget] fetch from file:// blocked by local CORS policy, falling back to Adviser mock.");                await this.fetchAdviserDeals(query);                return;             }             console.warn("Hawk fetch failed", e);             this.deals = [];             this.render();             return;          }          if (!response.ok) {            throw new Error('Hawk API Response Error');          }          const rawData = await response.json();          // Safely locate data array from potentially wrapped response          let offers = [];          let modelInfoArray = [];                    let brandFilterData = null;          if (rawData && rawData.widget && rawData.widget.data && Array.isArray(rawData.widget.data.filters)) {             brandFilterData = rawData.widget.data.filters.find(f => f.type === 'label_text_brand');          } else if (rawData && rawData.data && Array.isArray(rawData.data.filters)) {             brandFilterData = rawData.data.filters.find(f => f.type === 'label_text_brand');          }          if (brandFilterData && Array.isArray(brandFilterData.values) && brandFilterData.values.length > 0) {             this.populateBrandDropdown(brandFilterData.values);          } else {             if (this.brandFilterWrapper && this.selectedBrands.length === 0) {                this.brandFilterWrapper.style.display = 'none';             }          }                    if (rawData && rawData.widget && rawData.widget.data) {            if (Array.isArray(rawData.widget.data.offers)) offers = rawData.widget.data.offers;            if (rawData.widget.data.model_info && typeof rawData.widget.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.widget.data.model_info) ? rawData.widget.data.model_info : Object.values(rawData.widget.data.model_info);            }          } else if (rawData && rawData.data) {            if (Array.isArray(rawData.data.offers)) offers = rawData.data.offers;            if (rawData.data.model_info && typeof rawData.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.data.model_info) ? rawData.data.model_info : Object.values(rawData.data.model_info);            }          } else {            if (Array.isArray(rawData)) offers = rawData;            else if (rawData && Array.isArray(rawData.offers)) offers = rawData.offers;            else if (rawData && rawData.offers && Array.isArray(rawData.offers.offer)) offers = rawData.offers.offer;            else if (rawData && rawData.offers) offers = [].concat(rawData.offers);                        if (rawData && rawData.model_info && typeof rawData.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.model_info) ? rawData.model_info : Object.values(rawData.model_info);            }          }          let modelDetails = {};          modelInfoArray.forEach(m => {            const mId = m.model_id || m.id;            if (mId) {              modelDetails[mId] = {                score: m.score != null ? parseFloat(m.score) : null,                brand: m.brand || null,                parent: (m.parents && Array.isArray(m.parents) && m.parents.length > 0) ? m.parents[0].name : null              };            }          });          offers.forEach(item => {            let data = { ...item };            const mId = data.model_id;            if (mId && modelDetails[mId]) {              data.review_score = modelDetails[mId].score;              data.model_brand = modelDetails[mId].brand;              data.model_parent = modelDetails[mId].parent;            } else {              data.review_score = null;            }                        let itemOffers = [];            if (Array.isArray(item.offers)) itemOffers = item.offers;            else if (Array.isArray(item.offer)) itemOffers = item.offer;            else if (item.offers && typeof item.offers === 'object') itemOffers = [item.offers];            else if (item.offer && typeof item.offer === 'object') itemOffers = [item.offer];            if (itemOffers.length > 0) {              itemOffers.forEach(subItem => {                let subData = { ...item, ...subItem };                const subId = subData.model_id;                if (subId && modelDetails[subId]) {                  subData.review_score = modelDetails[subId].score;                  subData.model_brand = modelDetails[subId].brand;                  subData.model_parent = modelDetails[subId].parent;                } else if (data.review_score != null) {                  subData.review_score = data.review_score;                }                if (subData.merchant && typeof subData.merchant === 'object') {                  subData.merchant_name = subData.merchant.name;                }                this.deals.push(this.extractDealData(subData));              });              return;            }                        if (item.merchant && typeof item.merchant === 'object') {              data.merchant_name = item.merchant.name;            }                        this.deals.push(this.extractDealData(data));          });                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.getFilteredDeals().slice(0, this.displayLimit), 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.getFilteredDeals().slice(0, this.displayLimit), 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: this.decodeHTML(item.name || item.title || item.model_name || item.product_name || 'Unknown Product'),            brand: this.decodeHTML(item.brand || ''),            productName: this.decodeHTML(item.model_name || item.product_name || item.name || ''),            merchant: this.decodeHTML(item.merchant_name || item.merchant || item.retailer || 'Retailer'),            price: item.price !== undefined ? String(item.price) : '0.00',            currency: this.decodeHTML(rawCurrency),            msrp: item.was_price || item.msrp || item.original_price || null,            rawPrice: rawPrice,            rawMsrp: rawMsrp,            hasWasPrice: (item.was_price !== undefined && item.was_price !== null),            isCheckPrice: isCheckPrice,            savingLabel: savingLabel,            isPrime: isPrime,            starRating: starRating > 0 ? starRating : null,            modelId: item.model_id || '',            productKey: item.product_key || '',            merchantId: (item.merchant && typeof item.merchant === 'object') ? item.merchant.id || '' : '',            matchId: item.match_id || '',            merchantNetwork: (item.merchant && typeof item.merchant === 'object') ? item.merchant.an || '' : '',            merchantUrl: (item.merchant && typeof item.merchant === 'object') ? item.merchant.url || '' : '',            modelBrand: item.model_brand || item.brand || '',            modelParent: item.model_parent || ''          };        }        sortData() {          const sortVal = this.sortSelect ? this.sortSelect.value : (this.getViewMode() === 'savings_squad' ? 'date_desc' : 'discount_desc');          if (sortVal === 'price_asc') {            this.deals.sort((a, b) => a.rawPrice - b.rawPrice);          } else if (sortVal === 'price_desc') {            this.deals.sort((a, b) => b.rawPrice - a.rawPrice);          } else if (sortVal === 'discount_desc') {            this.deals.sort((a, b) => {              const aDiscount = a.rawMsrp > a.rawPrice ? (a.rawMsrp - a.rawPrice) : 0;              const bDiscount = b.rawMsrp > b.rawPrice ? (b.rawMsrp - b.rawPrice) : 0;              return bDiscount - aDiscount;            });          } else if (sortVal === 'date_desc') {             this.deals.sort((a, b) => {                let dateA = 0;                let dateB = 0;                if (a && a.modifiedDate) {                   const valA = Array.isArray(a.modifiedDate) ? a.modifiedDate[0] : a.modifiedDate;                   dateA = new Date(valA).getTime();                   if (isNaN(dateA)) dateA = 0;                }                if (b && b.modifiedDate) {                   const valB = Array.isArray(b.modifiedDate) ? b.modifiedDate[0] : b.modifiedDate;                   dateB = new Date(valB).getTime();                   if (isNaN(dateB)) dateB = 0;                }                return dateB - dateA;             });          }        }        getFilteredDeals() {          let filteredDeals = [...this.deals];                    if (this.dealModeToggle && this.dealModeToggle.checked) {            filteredDeals = filteredDeals.filter(d => d.hasWasPrice || (d.msrp && d.rawMsrp > d.rawPrice));          }                    return filteredDeals;        }        showLoading() {          const _div = '<' + '/div>';          const skeletonCardHtml = `            \x3Cdiv class="tg-df-card">              \x3Cdiv class="tg-df-card-image-box">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-img">${_div}              ${_div}              \x3Cdiv class="tg-df-card-body">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-card-footer mt-auto">                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="height:24px;">${_div}                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text" style="height:44px; margin-top:8px;">${_div}                ${_div}              ${_div}            ${_div}`;          this.grid.innerHTML = Array(4).fill(skeletonCardHtml).join('');        }        showError() {          const _div = '<' + '/div>';          this.grid.innerHTML = `\x3Cdiv class="tg-df-message">            An error occurred while finding deals. Please check your connection and try again.          ${_div}`;        }        escapeHTML(str) {          if (!str) return '';          return String(str).replace(/[&<>'"]/g, tag => ({              '&': '&', '<': '<', '>': '>', "'": ''', '"': '"'          }[tag] || tag));        }                bindCouponButtons() {          const btns = this.root.querySelectorAll('.tg-df-tag-coupons');          btns.forEach(btn => {            btn.addEventListener('click', (e) => {              e.preventDefault();              e.stopPropagation();              const merchant = btn.getAttribute('data-merchant');              this.openVouchersModal(merchant);            });          });                    const closeBtn = this.root.querySelector('#tg-df-vouchers-close');          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (closeBtn) {            closeBtn.onclick = () => this.closeVouchersModal();          }          if (backdrop) {            backdrop.onclick = (e) => {              if (e.target === backdrop) this.closeVouchersModal();            };          }        }                closeVouchersModal() {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (backdrop) backdrop.classList.remove('active');        }                async checkMerchantsCouponsBulk(merchants) {          if (!merchants || merchants.length === 0) return {};          const controller = new AbortController();          const timeoutId = setTimeout(() => controller.abort(), 4000);          try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchants.join(','));            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '120');            url.searchParams.append('origin', 'widgets-clientside');                        let res; try { res = await fetch(url.toString(), { signal: controller.signal }); } catch (e) { return {}; }            clearTimeout(timeoutId);            if (!res.ok) return {};            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        const foundMerchants = new Set();            offers.forEach(o => {              let mName = o.merchant_name || o.merchant || o.retailer;              if (mName && typeof mName === 'object') mName = mName.name;              if (mName) foundMerchants.add(String(mName).toLowerCase());            });            const resultMap = {};            merchants.forEach(m => {              if (m) resultMap[m] = foundMerchants.has(String(m).toLowerCase());            });            return resultMap;          } catch (e) {            return {};          }        }                async openVouchersModal(merchantName) {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          const title = this.root.querySelector('#tg-df-vouchers-title');          const content = this.root.querySelector('#tg-df-vouchers-content');                    if (!backdrop || !content) return;                    // HACK: Hide closing tags          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h4 = '<' + '/h4>';          const _svg = '<' + '/svg>';          const _circle = '<' + '/circle>';          const _polyline = '<' + '/polyline>';          const _rect = '<' + '/rect>';          const _path = '<' + '/path>';                    title.innerText = `${merchantName} Coupons & Deals`;          content.innerHTML = `\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}                               \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}`;          backdrop.classList.add('active');                    try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchantName);            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '50');            url.searchParams.append('origin', 'widgets-clientside');                        const res = await fetch(url.toString());            if (!res.ok) throw new Error('API Error');            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        if (offers.length === 0) {              content.innerHTML = `\x3Cdiv class="tg-df-message">No vouchers currently available for ${this.escapeHTML(merchantName)}.${_div}`;              return;            }                        content.innerHTML = offers.map((v, idx) => {              let offerObj = v;              if (v.offers && v.offers.offer) {                offerObj = Array.isArray(v.offers.offer) ? v.offers.offer[0] : v.offers.offer;              } else if (v.offer) {                offerObj = Array.isArray(v.offer) ? v.offer[0] : v.offer;              }              let logoUrl = v.logo_url || offerObj.logo_url || '';              if (!logoUrl && v.merchant) {                if (Array.isArray(v.merchant) && v.merchant.length > 0) logoUrl = v.merchant[0].logo_url || '';                else logoUrl = v.merchant.logo_url || '';              }                            const offerName = offerObj.name || offerObj.title || v.name || v.title || 'Special Offer';              const endTime = offerObj.end_time || v.end_time || '';              const linkUrl = offerObj.link || offerObj.url || v.link || v.url || '#';                            let foundVoucherCode = '';              const findVoucherCode = (obj) => {                if (!obj || typeof obj !== 'object') return;                if (obj.type === 'voucher_code' && obj.display_value) {                  foundVoucherCode = obj.display_value;                  return;                }                if (Array.isArray(obj)) {                  for (const item of obj) {                    findVoucherCode(item);                    if (foundVoucherCode) return;                  }                } else {                  for (const k in obj) {                    if (Object.prototype.hasOwnProperty.call(obj, k)) {                      findVoucherCode(obj[k]);                      if (foundVoucherCode) return;                    }                  }                }              };              findVoucherCode(offerObj);              if (!foundVoucherCode) findVoucherCode(v);                            const voucherCode = foundVoucherCode || offerObj.voucher_code || v.voucher_code || '';              const codeHtml = voucherCode ? `\x3Cspan class="tg-df-voucher-code" data-action="copy-code" data-code="${this.escapeHTML(voucherCode)}" title="Copy to clipboard">                \x3Cspan class="tg-df-voucher-code-text">${this.escapeHTML(voucherCode)}${_span}                \x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-left:6px;flex-shrink:0;" class="tg-df-voucher-copy-icon">                  \x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">${_rect}                  \x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">${_path}                ${_svg}              ${_span}` : '';                            const logoHtml = logoUrl                 ? `\x3Cimg src="${this.escapeHTML(logoUrl)}" alt="${this.escapeHTML(offerName)}" class="tg-df-voucher-logo" />`                 : `\x3Cdiv class="tg-df-voucher-logo" style="background:#e2e8f0;">${_div}`;                            let expiryHtml = '';              if (endTime) {                let dStr = endTime;                if (!isNaN(dStr) && String(dStr).length === 10) dStr = Number(dStr) * 1000;                const d = new Date(dStr);                if (!isNaN(d.getTime())) {                  const options = { year: 'numeric', month: 'short', day: 'numeric' };                  expiryHtml = `                    \x3Cdiv class="tg-df-voucher-expiry">                      \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                        \x3Ccircle cx="12" cy="12" r="10">${_circle}                        \x3Cpolyline points="12 6 12 12 16 14">${_polyline}                      ${_svg}                      Expires ${d.toLocaleDateString(undefined, options)}                    ${_div}`;                }              }              const revenueIdVal = generateRevenueId(linkUrl, offerName, merchantName, null);              const rewrittenLinkUrl = rewriteAffiliateLink(linkUrl, area, revenueIdVal);              return `                \x3Ca href="${this.escapeHTML(rewrittenLinkUrl)}" target="_blank" rel="noopener nofollow" class="tg-df-voucher-item"                  data-action="voucher-click"                  data-product-name="${this.escapeHTML(offerName)}"                  data-merchant-name="${this.escapeHTML(merchantName)}"                  data-analytics-id="${this.escapeHTML(offerObj.offer_id || offerObj.id || v.id || '')}"                  data-price=""                  data-previous-price=""                  data-original-link="${this.escapeHTML(linkUrl)}"                  data-revenue-id="${revenueIdVal}"                  data-index="${idx}"                  data-total="${offers.length}"                  data-in-stock="true"                  data-currency="USD"                  data-model-id="${this.escapeHTML(offerObj.model_id || v.model_id || offerObj.id || v.id || '')}"                  data-merchant-id="${this.escapeHTML(offerObj.merchant_id || offerObj.merchant?.id || '')}"                >                  ${logoHtml}                  \x3Cdiv class="tg-df-voucher-content">                    \x3Ch4 class="tg-df-voucher-title">${this.escapeHTML(offerName)}${_h4}                    ${codeHtml}                    ${expiryHtml}                  ${_div}                ${_a}              `;            }).join('');                        // Attach copy functionality            const copyBtns = content.querySelectorAll('[data-action="copy-code"]');            copyBtns.forEach(btn => {              btn.addEventListener('click', async (e) => {                e.preventDefault();                e.stopPropagation();                                const code = btn.getAttribute('data-code');                if (!code) return;                                try {                  const copyToClipboard = async (text) => {                     if (window.navigator.clipboard && window.isSecureContext) {                        try { await window.navigator.clipboard.writeText(text); return; } catch (e) {}                     }                     const textArea = document.createElement("textarea");                     textArea.value = text;                     textArea.style.position = "fixed";                     document.body.appendChild(textArea);                     textArea.focus();                     textArea.select();                     document.execCommand('copy');                     textArea.remove();                  };                  await copyToClipboard(code);                                    // Visual feedback                  btn.classList.add('copied');                  const textSpan = btn.querySelector('.tg-df-voucher-code-text');                  const iconSvg = btn.querySelector('.tg-df-voucher-copy-icon');                                    const origText = textSpan.innerText;                  const origIcon = iconSvg.innerHTML;                                    textSpan.innerText = 'Copied!';                  iconSvg.innerHTML = `\x3Cpolyline points="20 6 9 17 4 12">${_polyline}`;                                    setTimeout(() => {                    if (btn) {                      btn.classList.remove('copied');                      if (textSpan) textSpan.innerText = origText;                      if (iconSvg) iconSvg.innerHTML = origIcon;                    }                  }, 2000);                                    trackElementInteraction({                    id: 'voucher-code-copy',                    name: 'Copy Voucher Code',                    label: `Copied ${code} for ${merchantName}`                  });                } catch (err) {                  console.warn('Failed to copy text: ', err);                }              });            });            // Attach voucher click tracking            const voucherBtns = content.querySelectorAll('[data-action="voucher-click"]');            voucherBtns.forEach(btn => {              btn.addEventListener('click', (e) => {                if (e.target.closest('[data-action="copy-code"]')) return;                                const productName = btn.getAttribute('data-product-name');                const merchantNameAttr = btn.getAttribute('data-merchant-name');                const productId = btn.getAttribute('data-analytics-id');                const price = parseFloat(btn.getAttribute('data-price')) || null;                const prevPriceStr = btn.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = btn.getAttribute('data-original-link');                const finalHref = btn.href || btn.getAttribute('href') || '';                let actualRevenueId = btn.getAttribute('data-revenue-id');                const revMatch = finalHref.match(/(?:subId1|xcust|clickref|ascsubtag)=[^&]*?(\d{18,20})(?:&|$)/i);                if (revMatch && revMatch[1]) {                  actualRevenueId = revMatch[1];                }                const rewrittenLink = finalHref;                const revenueId = actualRevenueId;                const index = parseInt(btn.getAttribute('data-index'), 10) || 0;                const inStock = btn.getAttribute('data-in-stock') === 'true';                const totalText = btn.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: btn.getAttribute('data-model-id') || null,                    matchId: btn.getAttribute('data-match-id') || null,                    brand: btn.getAttribute('data-model-brand') || null,                    parent: btn.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: btn.getAttribute('data-merchant-id') || null,                    network: btn.getAttribute('data-merchant-network') || null,                    url: btn.getAttribute('data-merchant-url') || null,                    name: merchantNameAttr                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: btn.getAttribute('data-currency') || 'USD'                };                if (typeof trackDealClick === 'function') {                  trackDealClick(trackingParams);                }              });            });                                  } catch (e) {            console.warn(e);            content.innerHTML = `\x3Cdiv class="tg-df-message">Failed to load vouchers.${_div}`;          }        }        render() {          try {            if (this.getViewMode() === 'savings_squad' && this.airedaleTags.length > 0) {              if (this.categoryFilterWrapper) {                 this.categoryFilterWrapper.style.display = 'flex';              }              if (this.categoryFilter) {                 const _option = '<' + '/option>';                 let optionsHtml = `\x3Coption value="all">All Categories${_option}`;                 this.airedaleTags.forEach(tag => {                    const isSelected = this.activeDealTag === tag ? 'selected' : '';                    optionsHtml += `\x3Coption value="${this.escapeHTML(tag)}" ${isSelected}>${this.escapeHTML(tag)} (${this.airedaleTagCounts[tag] || 0})${_option}`;                 });                 this.categoryFilter.innerHTML = optionsHtml;                 this.categoryFilter.value = this.activeDealTag || 'all';              }            } else {               if (this.categoryFilterWrapper) {                  this.categoryFilterWrapper.style.display = 'none';               }            }            const displayDeals = this.getFilteredDeals();          // HACK: Hide closing tags from the CMS HTML sanitizer so it doesn't strip them during in-page injection          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h3 = '<' + '/h3>';          const _p = '<' + '/p>';          const _strong = '<' + '/strong>';          const _sup = '<' + '/sup>';          const _button = '<' + '/button>';          if (displayDeals.length === 0) {            if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {              if (this.deals.length > 0) {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No deals match your selected filters.                ${_div}`;              } else if (this.getViewMode() === 'savings_squad' && this.currentQuery.length <= 2) {                 // Do not show "no exact matches" if query is empty for savings_squad                 this.grid.innerHTML = '';              } else {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No exact matches found for "\x3Cstrong>${this.escapeHTML(this.currentQuery)}${_strong}". Try adjusting your search term.                ${_div}`;              }            } else {              this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                Search product or category names to discover the best deals from across the web.              ${_div}`;            }            return;          }          let dealsHtml = displayDeals.slice(0, this.displayLimit).map((deal, index) => {            try {               const currencySym = this.escapeHTML(deal.currency);               const isoCurrencyCode = normalizeCurrency(currencySym);               const escapedPrice = this.escapeHTML(deal.price);               const escapedMsrp = this.escapeHTML(deal.msrp);               const areaCode = this.getAreaCode();                              const revenueId = generateRevenueId(deal.url, deal.title, deal.merchant, null);               const originalLink = deal.url;               const rewrittenLink = rewriteAffiliateLink(deal.url, areaCode, revenueId);                        const productCategoryName = 'deals';            const dataAttr = `              data-action="${deal.isCheckPrice ? 'view-similar-click' : 'deal-click'}"              data-analytics-id="${this.escapeHTML(deal.externalProductId || deal.id || '')}"              data-product-name="${this.escapeHTML(deal.title)}"              data-merchant-name="${this.escapeHTML(deal.merchant)}"              data-price="${deal.rawPrice || ''}"              data-previous-price="${deal.rawMsrp || ''}"              data-original-link="${this.escapeHTML(originalLink)}"              data-revenue-id="${revenueId}"              data-index="${index}"              data-total="${displayDeals.length}"              data-in-stock="${deal.inStock !== false}"              data-currency="${this.escapeHTML(isoCurrencyCode)}"              data-model-id="${this.escapeHTML(deal.modelId || '')}"              data-product-key="${this.escapeHTML(deal.productKey || '')}"              data-merchant-id="${this.escapeHTML(deal.merchantId || '')}"            `;                        let priceGroupHtml = '';            let isSavingsSquadMode = this.getViewMode() === 'savings_squad';            let ctaText = 'View Deal';            let formattedPrice = '';            let msrpHtml = '';                        if (deal.isCheckPrice) {              ctaText = isSavingsSquadMode ? 'View Deal' : 'Check Price';              if (isSavingsSquadMode) {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-merchant-wrapper">                    \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                  \x3Cdiv class="tg-df-card-price-group">                  ${_div}                `;              } else {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-merchant-wrapper">                    \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                  \x3Cdiv class="tg-df-card-price-group">                    \x3Cspan class="tg-df-card-price" style="font-size: 15px; font-weight: 500; font-style: italic;">See price at retailer${_span}                  ${_div}                `;              }            } else {              // Format Price              formattedPrice = escapedPrice.includes(currencySym)                 ? escapedPrice                 : `${currencySym}${escapedPrice}`;                              // Format MSRP              msrpHtml = deal.msrp && deal.rawMsrp > deal.rawPrice                ? `\x3Cspan class="tg-df-card-msrp">${escapedMsrp.includes(currencySym) ? escapedMsrp : currencySym + escapedMsrp}${_span}`                : '';                              priceGroupHtml = `                \x3Cdiv class="tg-df-card-merchant-wrapper">                  \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                ${_div}                \x3Cdiv class="tg-df-card-price-group">                  ${isSavingsSquadMode ? '' : `                  \x3Cspan class="tg-df-card-price">${formattedPrice}${_span}                  ${msrpHtml}                  `}                ${_div}              `;            }                        const discountBadgeHtml = deal.savingLabel && !deal.isCheckPrice              ? `\x3Cspan class="tg-df-card-discount-badge">${this.escapeHTML(deal.savingLabel)}${_span}`              : '';                          // HACK for CMS            const _button = '<' + '/button>';            const _svg = '<' + '/svg>';            const _path = '<' + '/path>';            const _rect = '<' + '/rect>';            const _circle = '<' + '/circle>';            const _polyline = '<' + '/polyline>';            const _line = '<' + '/line>';                        let badgesHtml = '';            const primeBadge = deal.isPrime ? `              \x3Cspan class="tg-df-tag tg-df-tag-prime">                \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="currentColor">                  \x3Cpath d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z">${_path}                ${_svg} Prime              ${_span}            ` : '';                        const couponsBadge = deal.merchant && deal.merchant.toLowerCase().includes('amazon') ? '' : `              \x3Cdiv class="tg-df-coupon-wrapper" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:inline-flex; align-items:center;">                \x3Cdiv class="tg-df-coupon-spinner">${_div}                \x3Cbutton type="button" class="tg-df-tag tg-df-tag-coupons" data-action="coupons-click" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:none;">                  \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                    \x3Cpath d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z">${_path}                    \x3Cline x1="7" y1="7" x2="7.01" y2="7">${_line}                  ${_svg} Coupons                ${_button}              ${_div}            `;                        // Note: We always add coupons badge if there's a chance, but to allow 3-line titles we check wrapper display state            badgesHtml = `              \x3Cdiv class="tg-df-card-badges">                ${primeBadge}                ${couponsBadge}              ${_div}            `;            const _linearGradient = '<' + '/linearGradient>';            const _polygon = '<' + '/polygon>';            const _stop = '<' + '/stop>';            const _defs = '<' + '/defs>';                        let starHtml = '';            if (deal.starRating) {              let rating = deal.starRating;                            if (rating > 0) {                const fullStars = Math.floor(rating);                const halfStar = (rating - fullStars) >= 0.5 ? 1 : 0;                const emptyStars = Math.max(0, 5 - fullStars - halfStar);                const blue = '#1f69ff'; // Tom's guide brand color from VIEW DEAL button                const gray = '#cbd5e1';                                const starSvgFull = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="${blue}" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                const gradId = 'half_grad_' + Math.floor(Math.random()*1000000);                const starSvgHalf = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cdefs>\x3ClinearGradient id="${gradId}" x1="0" x2="1" y1="0" y2="0">\x3Cstop offset="50%" stop-color="${blue}">${_stop}\x3Cstop offset="50%" stop-color="transparent">${_stop}${_linearGradient}${_defs}                  \x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26" fill="url(#${gradId})">${_polygon}${_svg}`;                                  const starSvgEmpty = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="${gray}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                let stars = [];                for (let i=0; i<fullStars; i++) stars.push(starSvgFull);                if (halfStar) stars.push(starSvgHalf);                for (let i=0; i<emptyStars; i++) stars.push(starSvgEmpty);                                starHtml = `\x3Cdiv class="tg-df-card-stars" style="display:flex;align-items:center;margin-bottom:8px;font-size:13px;font-weight:600;color:var(--tg-df-text-muted);">                  \x3Cspan style="margin-right:6px;">Tom's Guide:${_span}                  \x3Cdiv style="display:flex;gap:2px;">                    ${stars.join('')}                  ${_div}                ${_div}`;              }            }            let htmlOutput = '';            if (isSavingsSquadMode) {              htmlOutput += `              \x3Cdiv class="hawk-deal-widget-container tg-df-mobile-only" data-collapsible="true">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''} style="margin-bottom: 10px;">` : ''}                \x3Cdiv class="hawk-deal-widget-wrap">                  \x3Cdiv class="hawk-deal-widget-image-container">                    \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" rel="sponsored noopener" target="_blank" class="hawk-affiliate-link-deal-widget" ${dataAttr}>                      \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="hawk-lazy-image-deal-widget" loading="lazy" width="140" height="160" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                    ${_a}                  ${_div}                  \x3Cdiv class="hawk-deal-widget-text-cta-container">                    \x3Cdiv class="hawk-deal-widget-text-body-container">                      \x3Cdiv class="hawk-deal-widget-text-body-main">                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          ${deal.isCheckPrice ? `                            \x3Cspan class="hawk-deal-widget-title-product-title">${this.escapeHTML(deal.title)}${_span}                          ` : `                            \x3Cspan class="hawk-deal-widget-title-product-title">${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_span}                          `}                        ${_a}                        ${!deal.isCheckPrice && deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan class="hawk-deal-widget-title-was-price">was ${currencySym}${escapedMsrp}${_span}                          ${_a}                        ` : ''}                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          \x3Cspan class="hawk-deal-widget-title-retailer-price">                            ${!deal.isCheckPrice ? `                              \x3Cspan class="hawk-deal-widget-title-price">now ${formattedPrice}${_span}                              \x3Cspan class="hawk-deal-widget-title-retailer"> at ${this.escapeHTML(deal.merchant)}${_span}                            ` : `                              \x3Cspan class="hawk-deal-widget-title-price">See price at ${this.escapeHTML(deal.merchant)}${_span}                            `}                          ${_span}                        ${_a}                        ${deal.description ? `\x3Cdiv class="hawk-deal-widget-text-body-description">\x3Cp>${this.escapeHTML(deal.description)}${_p}${_div}` : ''}                      ${_div}                    ${_div}                    \x3Cdiv class="hawk-deal-widget-footer">                      \x3Cdiv class="hawk-deal-widget-button-wrapper">                        \x3Cdiv class="hawk-deal-widget-preferred-partner-wrapper">                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-deal-button" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan>${deal.isCheckPrice ? 'Check Price' : 'View Deal'}${_span}                          ${_a}                        ${_div}                      ${_div}                    ${_div}                  ${_div}                ${_div}              ${_div}              `;            }            htmlOutput += `              \x3Cdiv class="tg-df-card ${isSavingsSquadMode ? 'tg-df-desktop-only' : ''}">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''}>` : ''}                \x3Cdiv class="tg-df-card-image-box">                  ${discountBadgeHtml}                  \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" style="display: flex; align-items: center; justify-content: center; width: 100%; height: 100%;">                    \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="tg-df-card-image" loading="lazy" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                  ${_a}                ${_div}                \x3Cdiv class="tg-df-card-body">                  ${starHtml}                  ${badgesHtml}                  \x3Ch3 class="tg-df-card-title tg-df-custom-savings-squad-title" title="${this.escapeHTML(deal.title)}">                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit;">                      ${isSavingsSquadMode                         ? (deal.isCheckPrice                             ? (deal.title && deal.title.includes(':')                                 ? `\x3Cstrong>${this.escapeHTML(deal.title.substring(0, deal.title.indexOf(':') + 1))}${_strong}\x3Cspan style="color: #1f69ff; font-weight: normal;">${this.escapeHTML(deal.title.substring(deal.title.indexOf(':') + 1))}${_span}`                                : this.escapeHTML(deal.title)                              )                             : `\x3Cstrong>${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_strong} ${deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `\x3Cspan style="color: #d0021b; text-decoration: line-through; font-weight: normal; margin-right: 4px;">was ${currencySym}${escapedMsrp}${_span} ` : ''}\x3Cspan style="color: #1f69ff; font-weight: normal;">now ${formattedPrice} at ${this.escapeHTML(deal.merchant)}${_span}`                          )                        : this.escapeHTML(deal.title)                      }                    ${_a}                  ${_h3}                  ${deal.description ? `\x3Cp style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 12px; line-height: 1.4;">${this.escapeHTML(deal.description)}${_p}` : ''}                  \x3Cdiv class="tg-df-card-footer">                    ${priceGroupHtml}                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" class="tg-df-card-cta ${isSavingsSquadMode ? 'tg-df-cta-savings-squad' : ''}" style="text-decoration: none;">${ctaText}${_a}                  ${_div}                ${_div}              ${_div}            `;                        return htmlOutput;            } catch (e) {               console.log("Error rendering deal in map for index", index, typeof deal === 'object' ? JSON.stringify(deal) : deal, "MSG:", e.message);               return '';            }          }).join('');                    if (displayDeals.length > this.displayLimit || ((this.getViewMode() === 'carousel' || this.getViewMode() === 'auto') && displayDeals.length > 0 && displayDeals.length % ((this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12) === 0)) {            if (this.getViewMode() === 'carousel') {               dealsHtml += `                 \x3Cbutton type="button" class="tg-df-load-more-card tg-df-load-more">                   \x3Csvg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-bottom: 8px;">\x3Cpath d="M5 12h14">\x3C/path>\x3Cpath d="m12 5 7 7-7 7">\x3C/path>\x3C/svg>                   Load More                 ${_button}               `;            } else {               dealsHtml += `                 \x3Cdiv style="width: 100%; display: flex; justify-content: center; margin-top: 16px; grid-column: 1 / -1;">                   \x3Cbutton type="button" class="tg-df-tag-outline tg-df-load-more" style="padding: 8px 24px; border-radius: 100px; font-weight: 600; font-size: 14px; cursor: pointer; display: flex; align-items: center;">Load More${_button}                 ${_div}               `;            }          }                    this.grid.innerHTML = dealsHtml;          // Inject JSON-LD          try {            let targetNode = this.hostContainer || document.head;            let jsonLdScript = targetNode.querySelector('#tg-df-json-ld-' + this.widgetId);            if (!jsonLdScript) {                jsonLdScript = document.createElement('script');                jsonLdScript.type = 'application/ld+json';                jsonLdScript.id = 'tg-df-json-ld-' + this.widgetId;                targetNode.appendChild(jsonLdScript);            }            const jsonLdData = {              "@context": "https://schema.org",              "@type": "ItemList",              "itemListElement": displayDeals.slice(0, this.displayLimit).map((deal, index) => {                 let isoCurrency = "USD";                 if (deal.currency === '£') isoCurrency = "GBP";                 else if (deal.currency === '€') isoCurrency = "EUR";                 else if (deal.currency === 'A$') isoCurrency = "AUD";                 else if (deal.currency === 'CA$') isoCurrency = "CAD";                 const areaCode = typeof this.getAreaCode === 'function' ? this.getAreaCode() : 'US';                 const revenueId = typeof generateRevenueId === 'function' ? generateRevenueId(deal.url, deal.title, deal.merchant, null) : '';                 const rewrittenLink = typeof rewriteAffiliateLink === 'function' ? rewriteAffiliateLink(deal.url, areaCode, revenueId) : deal.url;                 return {                   "@type": "ListItem",                   "position": index + 1,                   "item": {                     "@type": "Product",                     "name": deal.title,                     "image": deal.image || "",                     "description": deal.description || "",                     "brand": {                       "@type": "Brand",                       "name": deal.brand || ""                     },                     "offers": {                       "@type": "Offer",                       "priceCurrency": isoCurrency,                       "price": deal.rawPrice || 0,                       "url": rewrittenLink,                       "seller": {                         "@type": "Organization",                         "name": deal.merchant || ""                       }                     }                   }                 };              }).filter(item => item.item.name)            };            jsonLdScript.textContent = JSON.stringify(jsonLdData);          } catch(e) { console.warn("JSON-LD generation failed", e); }                    let gridWrapper = this.grid.parentElement;          if (gridWrapper && gridWrapper.classList.contains('tg-df-grid-wrapper')) {             let rightChevron = gridWrapper.querySelector('.tg-df-carousel-scroll-right');             let leftChevron = gridWrapper.querySelector('.tg-df-carousel-scroll-left');             if (this.getViewMode() === 'carousel') {                 // The observer set up in setupScrollListeners handles visibility.                 if (rightChevron) rightChevron.style.display = 'flex';                 if (leftChevron) leftChevron.style.display = 'none'; // reset correctly             } else {                 if (rightChevron) rightChevron.style.display = 'none';                 if (leftChevron) leftChevron.style.display = 'none';             }          }                    const loadMoreBtn = this.grid.querySelector('.tg-df-load-more');          if (loadMoreBtn) {            loadMoreBtn.addEventListener('click', async () => {              if (typeof trackElementInteraction === 'function') {                trackElementInteraction({ id: 'load-more', name: 'Load more', label: 'Load More Results' });              }              if (displayDeals.length <= this.displayLimit) {                 loadMoreBtn.innerHTML = `                  <svg class="tg-df-spinner" style="width: 16px; height: 16px; display: inline-block; vertical-align: middle; margin-right: 8px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M12 2v4m0 12v4M4.93 4.93l2.83 2.83m8.48 8.48l2.83 2.83M2 12h4m12 0h4M4.93 19.07l2.83-2.83m8.48-8.48l2.83-2.83"/></svg>                  Loading...                 `;                 loadMoreBtn.disabled = true;                 await this.fetchDeals(this.currentQuery, true);              } else {                 this.displayLimit += this.getRowsLimit();                 this.render();              }            });          }                      this.bindCouponButtons();            this.checkAndUpdateCoupons();                        // Allow hawklinks.js to discover and rewrite our widget links             // by appending the .article-body class and manually triggering processArticle.            let container = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (container && !container.classList.contains('article-body')) {               container.classList.add('article-body');            }            setTimeout(() => {               if (this.grid && !this.grid.classList.contains('article-body')) this.grid.classList.add('article-body');               document.dispatchEvent(new CustomEvent('processArticle', { detail: { element: this.root } }));            }, 50);          } catch(e) {            console.warn("Widget render error", e);          }        }                async checkAndUpdateCoupons() {          const wrappers = Array.from(this.root.querySelectorAll('.tg-df-coupon-wrapper'));          if (wrappers.length === 0) return;                    const merchants = [...new Set(wrappers.map(w => w.getAttribute('data-merchant')).filter(Boolean))];          if (merchants.length === 0) return;          const couponResultsMap = await this.checkMerchantsCouponsBulk(merchants);                    for (const merchant of merchants) {            const hasCoupons = !!couponResultsMap[merchant];            const merchantWrappers = wrappers.filter(w => w.getAttribute('data-merchant') === merchant);            merchantWrappers.forEach(wrapper => {              const spinner = wrapper.querySelector('.tg-df-coupon-spinner');              const btn = wrapper.querySelector('.tg-df-tag-coupons');                            if (spinner) spinner.style.display = 'none';                            if (hasCoupons && btn) {                btn.style.display = 'inline-flex';              } else if (!hasCoupons) {                wrapper.style.display = 'none';              }            });          }        }        updateFloatingCopyBar() {          if (!this.editorBar || !this.editorSelectedCount) return;          if (this.editorMode && this.selectedDeals.size > 0) {            this.editorBar.style.display = 'flex';            this.editorSelectedCount.innerText = this.selectedDeals.size;          } else {            this.editorBar.style.display = 'none';          }        }        async copySelectedDealsToCMS() {           function htmlToSlate(htmlString) {              if (!htmlString) return [{ type: 'paragraph', children: [{ text: '' }] }];              let doc;              if (typeof window !== 'undefined' && window.DOMParser) {                 doc = new DOMParser().parseFromString(htmlString, 'text/html');              } else {                 doc = document.implementation.createHTMLDocument('');                 doc.body.innerHTML = htmlString;              }                            function parseNode(node, marks = {}) {                  if (node.nodeType === 3) {                      const text = node.textContent;                      if (!text) return null;                      return { text: text, ...marks };                  }                  if (node.nodeType === 1) {                      const tagName = node.tagName.toLowerCase();                      if (tagName === 'br') {                          return { type: 'line-break', children: [{ text: '' }] };                      }                      if (tagName === 'p') {                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return { type: 'paragraph', children };                      }                      if (tagName === 'strong' || tagName === 'b') {                          const newMarks = { ...marks, bold: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'em' || tagName === 'i') {                          const newMarks = { ...marks, italic: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'a') {                          const href = node.getAttribute('href') || '';                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return {                              type: 'link',                              url: href,                              isNoFollow: (node.getAttribute('rel') || '').includes('nofollow'),                              isSponsored: (node.getAttribute('rel') || '').includes('sponsored'),                              isOpenNewTab: node.getAttribute('target') === '_blank',                              isPreventDataRewrite: false,                              children: children                          };                      }                      return Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                  }                  return null;              }                            let blocksArray = [];              let currentParagraphChildren = [];              function flushParagraph() {                  if (currentParagraphChildren.length > 0) {                      blocksArray.push({ type: 'paragraph', children: currentParagraphChildren });                      currentParagraphChildren = [];                  }              }              Array.from(doc.body.childNodes).forEach(node => {                  const parsed = parseNode(node, {});                  const parsedItems = Array.isArray(parsed) ? parsed : (parsed ? [parsed] : []);                  parsedItems.forEach(item => {                      if (item.type === 'paragraph') {                          flushParagraph();                          blocksArray.push(item);                      } else {                          currentParagraphChildren.push(item);                      }                  });              });              flushParagraph();              if (blocksArray.length === 0) {                  blocksArray = [{ type: 'paragraph', children: [{ text: '' }] }];              }              return blocksArray;           }           const blocks = [];                      this.editorCopyBtn.innerHTML = '\x3Cspan class="tg-df-coupon-spinner" style="display:inline-block; margin-right:8px; border-top-color:#fff;">' + '<' + '/span> Copying...';           for (const deal of Array.from(this.selectedDeals.values())) {              const url = deal.url;              const merchant = deal.merchant;              const title = deal.title;              const image = deal.image;              const currentPrice = deal.currency + deal.rawPrice;              const wasPrice = deal.hasWasPrice && deal.rawMsrp > deal.rawPrice ? deal.currency + deal.rawMsrp : '';                            let couponsChildren = [];              try {                  const area = this.getAreaCode();                  const apiUrl = new URL('https://search-api.fie.future.net.uk/widget.php');                  apiUrl.searchParams.append('model_name', 'Everything');                  apiUrl.searchParams.append('language', 'en-GB');                  apiUrl.searchParams.append('area', area);                  apiUrl.searchParams.append('combine_product_types', '1');                  apiUrl.searchParams.append('filter_merchant_name', merchant);                  apiUrl.searchParams.append('all_filters', 'false');                  apiUrl.searchParams.append('exclude_unlabelled', 'false');                  apiUrl.searchParams.append('include_specs', 'false');                  apiUrl.searchParams.append('sort', 'voucher');                  apiUrl.searchParams.append('distinct_merchants', 'natural');                  apiUrl.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');                  apiUrl.searchParams.append('rows', '3');                  apiUrl.searchParams.append('origin', 'widgets-clientside');                                    let res; try { res = await fetch(apiUrl.toString()); } catch (e) { return; }                  if (res.ok) {                      const data = await res.json();                      let offers = [];                      if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {                        offers = data.widget.data.offers;                      } else if (data && data.data && Array.isArray(data.data.offers)) {                        offers = data.data.offers;                      }                                            if (offers.length > 0) {                          couponsChildren.push({ text: "Also check out these coupons: ", bold: true });                          offers.slice(0, 3).forEach((offer, idx) => {                              const actualOffer = offer.offer || offer;                              const offerName = actualOffer.name || actualOffer.title || offer.model_name || offer.title || offer.name || 'Coupon';                              const linkUrl = actualOffer.link || actualOffer.url || actualOffer.offer_link || '#';                              couponsChildren.push({ type: "line-break", children: [{ text: "" }] });                              couponsChildren.push({ text: "🎟️ " });                              couponsChildren.push({                                  type: "link",                                  url: linkUrl,                                  isNoFollow: true,                                  isSponsored: false,                                  isOpenNewTab: true,                                  isPreventDataRewrite: false,                                  children: [{ text: offerName, bold: true }]                              });                          });                      }                  }              } catch (err) {                  console.warn('Failed to fetch coupons for', merchant, err);              }              let descriptionValue = [];              if (deal.text) {                 descriptionValue = htmlToSlate(deal.text);              } else {                 const dealDescriptions = [                   `Don't miss out on this fantastic deal for the ${title}. It is currently available at ${merchant} for a highly competitive price.`,                   `We've spotted an excellent price drop on the ${title}. Grab it now at ${merchant} before it's gone.`,                   `The ${title} is currently seeing a generous discount over at ${merchant}. This is a perfect time to buy if you've been holding out.`,                   `If you're in the market for the ${title}, ${merchant} has just the deal for you.`,                   `Score the ${title} for less at ${merchant} right now. This is a rare chance to save big.`,                   `Upgrade your setup with the ${title}, now available at a stellar price via ${merchant}.`                 ];                 const randomDescription = dealDescriptions[Math.floor(Math.random() * dealDescriptions.length)];                 descriptionValue = [                    { type: "paragraph", children: [{ text: randomDescription }] }                 ];              }                            if (couponsChildren.length > 0) {                 let lastBlock = descriptionValue[descriptionValue.length - 1];                 if (lastBlock && lastBlock.type === 'paragraph') {                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ text: "Also check out these coupons: ", bold: true });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children = lastBlock.children.concat(couponsChildren);                 } else {                     descriptionValue.push({                         type: "paragraph",                         children: [                             { type: "line-break", children: [{ text: "" }] },                             { type: "line-break", children: [{ text: "" }] },                             { text: "Also check out these coupons: ", bold: true },                             { type: "line-break", children: [{ text: "" }] },                             ...couponsChildren                         ]                     });                 }              }              function normalizeCurrencyToISO(symbol) {                const map = { '£': 'GBP', '$': 'USD', 'A$': 'AUD', 'CA$': 'CAD', '€': 'EUR' };                return map[symbol] || symbol;              }              const isoCurrency = normalizeCurrencyToISO(deal.currency);              blocks.push({                 id: (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'cms-' + Date.now() + Math.random(),                 blockTypeName: "deal",                 excludeFrom: [],                 collapsible: false,                 props: {                    description: {                       value: descriptionValue,                       touched: false,                       validationMessage: ""                    },                    image: {                       value: {                          credit: [{ type: "paragraph", children: [{ text: merchant }] }],                          dateCreated: Date.now(),                          dateModified: Date.now(),                          distribution: [],                          fileSize: 0,                          height: 1000,                          id: deal.id,                          imageRights: "",                          src: image,                          name: title + ".jpg",                          tags: [],                          width: 1000                       },                       touched: false,                       validationMessage: ""                    },                    showDealButton: { value: true, touched: false, validationMessage: "" },                    isPreferredPartner: { value: false, touched: false, validationMessage: "" },                    linkHref: { value: url, touched: false, validationMessage: "" },                    linkLabel: { value: "", touched: false, validationMessage: "" },                    linkIsNoFollow: { value: true, touched: false, validationMessage: "" },                    linkIsSponsored: { value: false, touched: false, validationMessage: "" },                    linkIsOpenNewWindow: { value: true, touched: false, validationMessage: "" },                    customPromoFlags: { value: [], touched: false, validationMessage: "" },                    showStarDeal: { value: false, touched: false, validationMessage: "" },                    savingType: { value: "none", touched: false, validationMessage: "" },                    starDealPromoFlag: { value: "", touched: false, validationMessage: "" },                    showEditorsChoice: { value: false, touched: false, validationMessage: "" },                    editorsChoiceTitle: { value: "", touched: false, validationMessage: "" },                    hawkPriceCurrency: { value: { value: isoCurrency, label: isoCurrency }, touched: false, validationMessage: "" },                    hawkPrice: { value: deal.hasWasPrice ? String(deal.rawMsrp) : String(deal.rawPrice), touched: false, validationMessage: "" },                    hawkSalePrice: { value: String(deal.rawPrice), touched: false, validationMessage: "" },                    lastCheckedPriceDate: { value: "", touched: false, validationMessage: "" },                    hawkModel: { touched: false, validationMessage: "" },                    productId: { value: "", touched: false, validationMessage: "" },                    voucherId: { value: "", touched: false, validationMessage: "" },                    brand: { value: deal.brand || merchant, touched: false, validationMessage: "" },                    productName: { value: title, touched: false, validationMessage: "" },                    label: { value: "", touched: false, validationMessage: "" },                    retailer: { value: merchant, touched: false, validationMessage: "" },                    priceCheckError: false                 },                 failedFetchError: ""              });           }           const payload = {              type: "articleBuilderPages",              data: blocks           };           const jsonStr = JSON.stringify(payload);                      if (navigator.clipboard && navigator.clipboard.writeText) {              navigator.clipboard.writeText(jsonStr).then(() => {                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              }).catch(err => {                 console.warn('Failed to copy text: ', err);                 alert('Failed to copy deals to clipboard. See console.');              });           } else {              // Fallback              const textArea = document.createElement("textarea");              textArea.value = jsonStr;              document.body.appendChild(textArea);              textArea.focus();              textArea.select();              try {                 document.execCommand('copy');                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              } catch (err) {                 console.warn('Fallback: Oops, unable to copy', err);                 alert('Fallback: Failed to copy deals to clipboard.');              }              document.body.removeChild(textArea);           }        }      }      // Initialize the Widget      if (document.readyState === 'loading') {        document.addEventListener('DOMContentLoaded', () => new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer }));      } else {        new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer });      }    })();  </script></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Samsung Galaxy S26 FE review: The perfect cure for Samsung's recent price hike frenzy ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The Samsung Galaxy S26 FE is a phone that sits in a very awkward position in Samsung's phone lineup. The phone is designed to be a lower cost alternative to the standard <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-review">Galaxy S26</a>, but it also faces increased competition from the, frankly excellent, mid-range <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-a57-review">Galaxy A57.</a> I've been questioning the need for a "Fan Edition" of Samsung's flagships, but with everything going on in the world it actually feels like a good mix of premium and affordable.</p><p>The price is the main factor for the S26 FE's success, especially now that Samsung has hiked prices for the rest of the Galaxy S26 series. On top of that you also have a lot of premium AI features, a solid (is imperfect) camera and a premium feel. However, that doesn't change the fact that the S26 FE has weak performance, and struggles to differentiate itself from both the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s25-fe-review">Galaxy S25 FE </a>and the cheaper Galaxy A57</p><p>Read our Samsung Galaxy S26 FE review to see whether this phone is right for you.</p><h2 class="article-body__section" id="section-samsung-galaxy-s26-fe-review-cheat-sheet"><span>Samsung Galaxy S26 FE review: Cheat Sheet</span></h2><ul><li><strong>What is it? </strong>The latest release in Samsung's long-running "Fan Edition" series, offering a lower price tag in exchange for slightly worse features than the standard Galaxy S26</li><li><strong>Who is it for? </strong>The people who can't justify spending the full $899 on a Galaxy S26, but don't want to deal with the larger compromises made on the cheaper Galaxy A57</li><li><strong>What does it cost? </strong>Prices for the S26 FE start at $699, for a model with 128GB of storage. A 256GB model is also available for $799, which is $200 lower than the 256GB Galaxy S26's newly-raised starting price.</li><li><strong>What do we like? </strong>The low starting price, the good battery life, solid camera quality and the number of premium AI features Samsung has included.</li><li><strong>What don't we like?</strong> The weak performance, the lack of upgrades compared to last year and the fact the Samsung Galaxy A57 isn't that far behind.</li></ul><h2 class="article-body__section" id="section-samsung-galaxy-s26-fe-review-specifications"><span>Samsung Galaxy S26 FE review: Specifications</span></h2><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Galaxy S26 FE</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>$699</p></td></tr><tr><td class="firstcol " ><p><strong>Release date</strong></p></td><td  ><p>September 4</p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>6.7-inch AMOLED (FHD+)</p></td></tr><tr><td class="firstcol " ><p><strong>Refresh rate</strong></p></td><td  ><p>120Hz</p></td></tr><tr><td class="firstcol " ><p><strong>Chipset</strong></p></td><td  ><p>Exynos 2500</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>8GB</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>128GB,  256GB</p></td></tr><tr><td class="firstcol " ><p><strong>Rear cameras</strong></p></td><td  ><p>50MP main (f/1.8), 12MP ultrawide (f/2.2), 8MP telephoto (f/2.4) with 3x optical zoom</p></td></tr><tr><td class="firstcol " ><p><strong>Front camera</strong></p></td><td  ><p>12MP (f/2.2)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery size</strong></p></td><td  ><p>4,900 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Charging speed</strong></p></td><td  ><p>45W wired, 15W wireless</p></td></tr><tr><td class="firstcol " ><p><strong>Size</strong></p></td><td  ><p>6.36 x 3.03 x 0.29 inches (161.6 x 76.9 x 7.4 mm)</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>6.81 ounces (193 grams)</p></td></tr><tr><td class="firstcol " ><p><strong>Colors</strong></p></td><td  ><p>Blueberry, Graphite, Pistachio</p></td></tr></tbody></table></div><h2 class="article-body__section" id="section-samsung-galaxy-s26-fe-review-the-ups"><span>Samsung Galaxy S26 FE review: The ups</span></h2><h2 id="699-starting-price">$699 starting price</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="QCieA8sWMFWrAohkRSWHkW" name="Galaxy S26 FE-2" alt="samsung galaxy s26 fe review shots" src="https://cdn.mos.cms.futurecdn.net/QCieA8sWMFWrAohkRSWHkW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>When I first went<a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-fe-review"> hands-on with the Galaxy S26 FE </a>I commented on the fact that the phone wasn't actually that much cheaper than the Galaxy S26. In fact, at the time, a 256GB S26 FE cost the same amount as a 256GB Galaxy S26. Things have changed since then, though, thanks to S<a href="https://www.tomsguide.com/phones/samsung-phones/all-three-galaxy-s27-models-tipped-for-price-hike-and-a-key-spec-for-the-s27-ultra-just-leaked">amsung hiking the price of the entire Galaxy S26 lineup</a> — except the Galaxy S26 FE.</p><p>This means that the cheapest Galaxy S26 is now $999, complete with 256GB of storage. Meanwhile the cheapest S26 FE is $699, while the larger 256GB storage option will set you back $799. That's a $200-$300 difference, depending on how much storage you actually require.</p><p>With the cost of entry suddenly much higher, that gives a huge advantage to the Galaxy S26 FE since it offers a lot of the same features as the Galaxy S26 but for a much lower price tag.</p><h2 id="premium-feeling-design">Premium-feeling 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="42GPZk9YWHpPdjA446KThW" name="Galaxy S26 FE-7" alt="samsung galaxy s26 fe review shots" src="https://cdn.mos.cms.futurecdn.net/42GPZk9YWHpPdjA446KThW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>I'll caveat this by saying that the Galaxy S26 FE is not as premium as past fan edition phones. The S25 FE has the same matte glass back as the Galaxy S25 FE, but that isn't the case with the S26 equivalents. Instead, the S26 FE has a glossy glass back that looks more like the Galaxy A57 — to the point where I struggle to tell them apart. </p><p>That said, the design is more premium than your typical cheap phone. There's a large 6.9-inch display (rated up to 1,900 nits), and a brushed metal frame that helps the phone avoid feeling like it's a cheap device. The same goes for the solid glass camera bump, which is a trait Samsung usually reserves for other Galaxy S-series devices.</p><p>There's some weight to the S26 FE that makes it feel like it's got some solid construction. While lightweight designs are all the rage in certain circles, the extra half ounce the S26 FE has over the A57 goes a long way. Not to mention that the weight is fairly evenly distributed, giving the phone a more balanced feel. The mid-range Samsung feels a little too light for its size, and doesn't balance as well, which means it feels a little more flimsy as a result.</p><h2 id="solid-ai-features">Solid 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="ZpLZgKww3FodYhpzabGRmW" name="Galaxy S26 FE-9" alt="samsung galaxy s26 fe review shots" src="https://cdn.mos.cms.futurecdn.net/ZpLZgKww3FodYhpzabGRmW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>It isn't a Samsung phone release without AI playing a key role in everything going forward, and the Galaxy S26 FE is no different. Samsung didn't add anything new and exclusive, which shouldn't surprise anyone, but it still added a bunch of Galaxy AI features we've tried and enjoyed on both the Galaxy S26 and the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Samsung Galaxy Z Fold 8.</a></p><p>Included here is <a href="https://www.tomsguide.com/phones/samsung-phones/i-tried-the-new-galaxy-ai-video-tracker-on-my-z-fold-8">My Fan Cam</a>, which follows human beings to turn existing video into something brand new, the literally-named <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-just-did-the-impossible-with-the-galaxy-s26-ultra-i-cant-decide-which-of-these-two-new-features-i-like-more">Horizontal Lock</a>, <a href="https://www.tomsguide.com/phones/samsung-phones/i-tested-this-galaxy-s26-ai-feature-to-scan-my-tax-documents-and-it-makes-my-scanner-obsolete">Samsung's Document Scanner,</a> <a href="https://www.tomsguide.com/phones/samsung-phones/i-tried-the-samsung-galaxy-s25-ultras-audio-eraser-and-it-beats-both-apple-and-google">Audio Eraser</a>, <a href="https://www.tomsguide.com/phones/i-tested-galaxy-s26-ultra-photo-assist-vs-pixel-10-pro-xl-ask-photos-heres-the-better-ai-photo-editor">Photo Assist's AI editing tools,</a> Now Brief and the contextually aware <a href="https://www.tomsguide.com/phones/samsung-phones/how-to-turn-on-galaxy-s26s-now-nudge-and-how-it-works">Now Nudge</a>, as well as the currently Samsung-exclusive <a href="https://www.tomsguide.com/opinion/circle-to-search-is-my-favorite-galaxy-s24-feature-if-samsung-and-google-dont-screw-it-up">Circle to Search</a> upgrade that lets you scan multiple objects at once.</p><p>All of which makes this a solid low-cost choice for those of you that want access to Galaxy AI features.</p><h2 id="good-battery-life">Good battery life</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="NGm4z9bEjvJgmm9rRwkGeW" name="Galaxy S26 FE-5" alt="samsung galaxy s26 fe review shots" src="https://cdn.mos.cms.futurecdn.net/NGm4z9bEjvJgmm9rRwkGeW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>We haven't been able to do our full battery life test on the Galaxy S26 FE just yet, but I have performed a rougher version to gauge just how much battery is lost when streaming video. That test involved streaming this YouTube video for three hours, with brightness set to 50%. For comparison's sake, I also ran the same test on the Samsung Galaxy S26 and Galaxy A57.</p><p>The Galaxy S26 FE was the worst of the three, which is bizarre considering it has a 4,900 mAh battery. At the end of the video stream it came out with 82%, compared to 85% on the 4,300 mAh Galaxy S26 and 87% on the 5,000 mAh Galaxy A57. That said, with an average battery loss of 6% per hour, that's not a huge amount of battery drain. </p><p>If that power consumption holds steady, it means the Galaxy S26 FE should last almost 17 hours in the same conditions. It's far from the best battery life we've seen, and logic dictates that the regular S26 should last 20 hours. But that should keep you going throughout the day.</p><p>As for charging, the Galaxy S26 FE promises up to 45W wired charging speeds. My USB-C power meter, paired with a 60W charging brick, saw the incoming power hit a high of 41W which is pretty close. As for actual recharging time, I found the S26 FE reached 39% after 15 minutes and 72% after half an hour. </p><p>That's faster than the S26 and A57, and only slightly behind the Galaxy S26 Ultra (77% in 30 minutes). The S26 FE hit 100% charge after 58 and a half minutes during my testing. This means that while the battery life could be better, at least you'll be able to recharge pretty quickly.</p><h2 id="camera-quality-is-mostly-good-for-the-price">Camera quality is (mostly) good for the price</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="5uowZSC6w5vq5opwQCLRhW" name="Galaxy S26 FE-4" alt="samsung galaxy s26 fe review shots" src="https://cdn.mos.cms.futurecdn.net/5uowZSC6w5vq5opwQCLRhW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Since the Galaxy S26 FE is designed to sit between the Galaxy A57 and Galaxy S26, I decided that the fairest way to test the cameras was to compare all three phones together. To get an idea of just how much of a difference there is when the phones themselves sit a few hundred dollars apart from one another.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/vvWz4QL6os4TmcUzt9cJLB-1920-80.jpg" alt="samsung galaxy s26 fe review" /><figcaption>Samsung Galaxy S26 FE<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/X6PC9VnpBdtbNApWnP6kiR-1920-80.jpg" alt="Samsung Galaxy S26 photo reviews for FE comparisson" /><figcaption>Samsung Galaxy S26<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/bz2ct4ZeMgwLFXeLAkNUvj-1920-80.jpg" alt="samsung galaxy a57 vs s26 fe photo comparisson" /><figcaption>Samsung Galaxy A57 <small role="credit">Future</small></figcaption></figure></figure><p>With the main camera lens, you can't see a whole lot of difference in the three, or at least you can't see them on my dog sitting in the foreground. At a glance the quality is generally pretty good, but if you look a little closer the A57 dips considerably compared to the S26 FE — which manages to capture more detail (especially in the background) and a higher quality. </p><p>It's a lot closer in quality to the standard S26, though I'd say the flagship model clinches it in terms of overall quality — despite the fact I can't see much difference on the dog.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/7HZtT9KffiatGDn2XZna3B-1920-80.jpg" alt="samsung galaxy s26 fe review" /><figcaption>Samsung Galaxy S26 FE<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/W6C6TNAACMAvB6LTcqXfBR-1920-80.jpg" alt="Samsung Galaxy S26 photo reviews for FE comparisson" /><figcaption>Samsung Galaxy S26<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/ADkZCx2ch5yUmXVDgTPNgj-1920-80.jpg" alt="samsung galaxy a57 vs s26 fe photo comparisson" /><figcaption>Samsung Galaxy A57 <small role="credit">Future</small></figcaption></figure></figure><p>The ultrawide lenses are easily the mostly evenly matched lenses on the three phones, and the quality is surprisingly uniform. I'd go so far as to say that the quality does improve as the price does, and both the S26 FE and S26 highlight the red spray paint a lot more clearly than the A57. However, the actual difference is not that noticeable unless you look super closely.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/sNMoE4cG3HgyqygF3YdpMB-1920-80.jpg" alt="samsung galaxy s26 fe review" /><figcaption>Samsung Galaxy S26 FE<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/YfKgDo5kT4HFoxtR8jAmhR-1920-80.jpg" alt="Samsung Galaxy S26 photo reviews for FE comparisson" /><figcaption>Samsung Galaxy S26<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/Xs43HpzEamRh4KKxDUm7xj-1920-80.jpg" alt="samsung galaxy a57 vs s26 fe photo comparisson" /><figcaption>Samsung Galaxy A57 <small role="credit">Future</small></figcaption></figure></figure><p>Sadly all three phones do a pretty poor job with zoom, no doubt thanks to the A57's lack of optical zoom and the S26 and FE's weak telephoto cameras. The S26 probably has the edge, especially since the S26 FE added a weird warm color hue to the photo, but none of them are particularly great when you crank magnification up to 3x.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/RyH5LazqbXoa6KfJQXtPaA-1920-80.jpg" alt="samsung galaxy s26 fe review" /><figcaption>Samsung Galaxy S26 FE<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/4zpksCZkXtnjaWjkvSRiwQ-1920-80.jpg" alt="Samsung Galaxy S26 photo reviews for FE comparisson" /><figcaption>Samsung Galaxy S26<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/NYMHdbdzprb4Dusif39AKj-1920-80.jpg" alt="samsung galaxy a57 vs s26 fe photo comparisson" /><figcaption>Samsung Galaxy A57 <small role="credit">Future</small></figcaption></figure></figure><p>Crank things up to 10x magnification and things are a lot worse. The A57 turned the tower into a fuzzy mess, while the S26 and S26 FE are more evenly matched — though not by a lot. The FE seemed to add a bunch of detail that the S26 didn't pick up. But considering the quality of the photo itself, I can't really say that's an improvement.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/w5BiVu5FVhb6wJu4TgNhaA-1920-80.jpg" alt="samsung galaxy s26 fe review" /><figcaption>Samsung Galaxy S26 FE<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/Q4Vria3EdVfAKVhhxmDYsQ-1920-80.jpg" alt="Samsung Galaxy S26 photo reviews for FE comparisson" /><figcaption>Samsung Galaxy S26<small role="credit">Future</small></figcaption></figure></figure><p>It's a similar story for both S26 models at 30x zoom — the maximum you can get on both these phones. The S26 FE looks a little washed out, and picked up darker coloring in the bricks, but the actual quality is on par with the standard S26. Though, this is not meant as a compliment.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/4zVycBQwcy7hZd2TAmWoMB-1920-80.jpg" alt="samsung galaxy s26 fe review" /><figcaption>Samsung Galaxy S26 FE<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/XxCQw2B7XzPe96N3ZmjzTR-1920-80.jpg" alt="Samsung Galaxy S26 photo reviews for FE comparisson" /><figcaption>Samsung Galaxy S26<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/kYkgyHKigTSczvsktoctpj-1920-80.jpg" alt="samsung galaxy a57 vs s26 fe photo comparisson" /><figcaption>Samsung Galaxy A57 <small role="credit">Future</small></figcaption></figure></figure><p>When it comes to selfies, things are much the same. The overall quality isn't bad, but the level of detail you get improves as the phones get more expensive. The A57 is blurrier and captures far less, while the S26 FE looks a little more like a competent photo. However the S26 captures it the best, and you can make out the individual hair strands a lot more easily. Alongside improved background details.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/XAdDhx7JvWWPPgrsBbxjnA-1920-80.jpg" alt="samsung galaxy s26 fe review" /><figcaption>Samsung Galaxy S26 FE<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/JmNoX3Vz3DoqGSjSzMQq3R-1920-80.jpg" alt="Samsung Galaxy S26 photo reviews for FE comparisson" /><figcaption>Samsung Galaxy S26<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/hMNgeaY2EaBXazvZSoFpXj-1920-80.jpg" alt="samsung galaxy a57 vs s26 fe photo comparisson" /><figcaption>Samsung Galaxy A57 <small role="credit">Future</small></figcaption></figure></figure><p>Weirdly, though, things are a little different when Portrait mode is involved. Somehow the quality on the A57 seems to have been ramped up, to the point where I'd say the sharpness of the photo exceeds that of the S26 FE. Even the S26 seems to be struggling to visualize my facial hair and various facial details that the S26 FE manages without issue.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/vKN2qhBJ7AJBxgVxR953zA-1920-80.jpg" alt="samsung galaxy s26 fe review" /><figcaption>Samsung Galaxy S26 FE<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/JS99GzFyVTB8NYbbDzAyQR-1920-80.jpg" alt="Samsung Galaxy S26 photo reviews for FE comparisson" /><figcaption>Samsung Galaxy S26<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/Lrk3pYB2pksrGoESL9zJij-1920-80.jpg" alt="samsung galaxy a57 vs s26 fe photo comparisson" /><figcaption>Samsung Galaxy A57 <small role="credit">Future</small></figcaption></figure></figure><p>Things are more or less back to normal with low light photography. The S26 comes out on top in the detail department, though the difference between it and the S26 FE is not that severe. The two certainly managed to capture a similar amount of light to illuminate the final product. As for the A57, the quality isn't there and the lighting has been processed in a way that makes the photo look a lot colder. Almost as though the tomato plant is being illuminated by fluorescent lights.</p><p>Overall I'd say the S26 FE sits in a comfortable position between the A57 and the Galaxy S26. The S26 certainly has the edge in most areas, but the quality difference isn't actually that severe compared to the S26 FE's camera. There's also a noticeable difference between the FE and the Galaxy A57, even though the A57 isn't a bad camera for its price tag. </p><h2 class="article-body__section" id="section-samsung-galaxy-s26-fe-review-the-downs"><span>Samsung Galaxy S26 FE review: The downs</span></h2><h2 id="minimal-hardware-upgrades">Minimal hardware upgrades</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="TKQnPRTkfTFqUX3jQWEAmW" name="Galaxy S26 FE-8" alt="samsung galaxy s26 fe review shots" src="https://cdn.mos.cms.futurecdn.net/TKQnPRTkfTFqUX3jQWEAmW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Like many phones, the Galaxy S26 FE doesn't have a whole lot to offer when it comes to actual upgrades. The differences in comparison to the Galaxy S25 FE are minimal, and the only tangible changes are the upgraded Exynos chipset and the glass enclosure around the rear camera lens.</p><p>The rest of the hardware is basically identical, which shows Samsung is leaning more onto the software upgrades to try and sell the S26 FE. That's not bad, per se, and the S26 FE does have a heck of a lot of useful features you'd normally only find on flagship phones. However, there's no telling how many of those will make their way to S25 FE at some point. </p><p>In that respect, the S26 FE doesn't feel like a "must-have" device. Not unless you have a super-old Fan Edition phone, or some kind of mid-ranger that desperately needs upgrading.</p><h2 id="middling-performance">Middling 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="GgBDE9LH5sg9HTudN2huDW" name="LISTGalaxy S26 FE-1-LIST" alt="samsung galaxy s26 fe review shots" src="https://cdn.mos.cms.futurecdn.net/GgBDE9LH5sg9HTudN2huDW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>When it comes to making phones cheap, compromises have to be made, and in the case of the Galaxy S26 FE Samsung appears to have nerfed the performance in a big way. The fact is, while the rest of the S26 series gets the custom Snapdragon 8 Elite Gen 5 for Galaxy chips (or the latest Exynos 2600), the S26 FE is stuck with the Exynos 2500 — a chip that debuted at the start of 2025.</p><p>Obviously this means that the phone does not have the same level of computing or graphics power as more expensive phones. </p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Geekbench 6 (Single/Multi)</strong></p></td><td  ><p><strong>Wild Life Extreme Unlimited (Score/FPS)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy S26 FE</strong></p></td><td  ><p>2,444 / 7,958</p></td><td  ><p>5,318 (31.85)</p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy S26 (Snapdragon)</strong></p></td><td  ><p>3.531 / 10,778</p></td><td  ><p>7,059 (42.27)</p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy S26 (Exynos)</strong></p></td><td  ><p>3,197 / 11,065</p></td><td  ><p>7,250  (43.42)</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 17e</strong></p></td><td  ><p>3,606 / 9,229</p></td><td  ><p>3,997 (23.9)</p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 10a</strong></p></td><td  ><p>1,694 / 4,501</p></td><td  ><p>2,667 (15.97)</p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy A57</strong></p></td><td  ><p>1,385 / 4,508</p></td><td  ><p>1,765 (10.57)</p></td></tr></tbody></table></div><p>As you can see, the Galaxy S26 FE trails quite far behind both variants of the Galaxy S26. Likewise it falls quite far behind the iPhone 17e, which is powered by Apple's A18 chipset. However, the older Apple chipset always struggled with the graphics side of things, which means it lags quite far behind the S26 FE in that area.</p><p>Performance is one area that the S26 FE truly beats out the A57. The mid-range phone's performance is very poor by comparison, especially where graphics are concerned. However, considering the A57 is $150 cheaper, that's not a huge surprise. In any case, if you were hoping for flagship performance from the Galaxy S26 FE, you are out of luck.</p><h2 id="the-a57-isn-39-t-too-far-behind">The A57 isn't too far behind</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="iXTaGrvCpggSdsLL3t9osi" name="Galaxy A57--3" alt="samsung galaxy a57 review images" src="https://cdn.mos.cms.futurecdn.net/iXTaGrvCpggSdsLL3t9osi-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Having tested both the Galaxy A57 and the Galaxy S26 FE, I can tell you that the lived experience of using both phones is very different. That said, the Galaxy A57 is still an excellent phone for its price, and on paper the differences between it and the Galaxy S26 FE are fairly minimal — especially for casual users who prioritize value and battery life over raw power.</p><p>While I personally think the extra $150 you pay for a Galaxy S26 FE is justifiable, my finances are different than yours — and Samsung is going a lot to make its mid-range phones a heck of a lot more appealing. To the point where it's essentially competing with itself on multiple fronts. Frankly, Samsung should have done more to help the S26 FE stand out on its own more, rather than being compared to lesser phones.</p><h2 class="article-body__section" id="section-samsung-galaxy-s26-fe-review-verdict"><span>Samsung Galaxy S26 FE 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="PcUMJw4EB7neFQeNu97yjW" name="Galaxy S26 FE-3" alt="samsung galaxy s26 fe review shots" src="https://cdn.mos.cms.futurecdn.net/PcUMJw4EB7neFQeNu97yjW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>I didn't have high hopes for the Samsung Galaxy S26 FE when Samsung first announced it. Personally, I felt as though the Fan Edition series was being awkwardly stuffed into a niche that didn't really need to be filled, to its own detriment. But actually using the phone, combined with Samsung's unceremonious price hike for the rest of the S26 series, has softened me up a bit. There's more to a phone than the basic hardware specs, and you don't really get to experience that without having it in your hand.</p><p>The Galaxy S26 FE offers a flagship experience that you just don't get on Samsung's cheaper phones right now. The experience has been nerfed slightly, in order to save money, but you still get a lot of the best parts of having a premium phone without the high price tag. Considering a regular Galaxy S26 now costs $999, the willingness to accept some of those compromises can now save you a bunch of extra money.</p><p>The lack of meaningful updates is not ideal, though, and if Samsung wants the Fan Edition series to continue long into the future, it's going to have to step up and not let it get <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-tipster-says-galaxy-z-flip-9-could-be-cancelled-heres-why-thats-a-terrible-idea">neglected and end up the same way as the Galaxy Z Flip lineup.</a></p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-fe-review-the-perfect-cure-for-samsungs-recent-price-hike-frenzy</link>
                                                                            <description>
                            <![CDATA[ The Samsung Galaxy S26 FE feels like an awkward release at first glance, but it may just be the low-cost flagship we need right now. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">7x8L4DQw44rH3LML3rDszH</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/eRNhEQXvoG7LJYhGiKVy6W-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 04 Oct 2026 04:45:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/eRNhEQXvoG7LJYhGiKVy6W-1920-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[samsung galaxy s26 fe review shots]]></media:description>                                                            <media:text><![CDATA[samsung galaxy s26 fe review shots]]></media:text>
                                <media:title type="plain"><![CDATA[samsung galaxy s26 fe review shots]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/eRNhEQXvoG7LJYhGiKVy6W-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The Samsung Galaxy S26 FE is a phone that sits in a very awkward position in Samsung's phone lineup. The phone is designed to be a lower cost alternative to the standard <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-review">Galaxy S26</a>, but it also faces increased competition from the, frankly excellent, mid-range <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-a57-review">Galaxy A57.</a> I've been questioning the need for a "Fan Edition" of Samsung's flagships, but with everything going on in the world it actually feels like a good mix of premium and affordable.</p><p>The price is the main factor for the S26 FE's success, especially now that Samsung has hiked prices for the rest of the Galaxy S26 series. On top of that you also have a lot of premium AI features, a solid (is imperfect) camera and a premium feel. However, that doesn't change the fact that the S26 FE has weak performance, and struggles to differentiate itself from both the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s25-fe-review">Galaxy S25 FE </a>and the cheaper Galaxy A57</p><p>Read our Samsung Galaxy S26 FE review to see whether this phone is right for you.</p><h2 class="article-body__section" id="section-samsung-galaxy-s26-fe-review-cheat-sheet"><span>Samsung Galaxy S26 FE review: Cheat Sheet</span></h2><ul><li><strong>What is it? </strong>The latest release in Samsung's long-running "Fan Edition" series, offering a lower price tag in exchange for slightly worse features than the standard Galaxy S26</li><li><strong>Who is it for? </strong>The people who can't justify spending the full $899 on a Galaxy S26, but don't want to deal with the larger compromises made on the cheaper Galaxy A57</li><li><strong>What does it cost? </strong>Prices for the S26 FE start at $699, for a model with 128GB of storage. A 256GB model is also available for $799, which is $200 lower than the 256GB Galaxy S26's newly-raised starting price.</li><li><strong>What do we like? </strong>The low starting price, the good battery life, solid camera quality and the number of premium AI features Samsung has included.</li><li><strong>What don't we like?</strong> The weak performance, the lack of upgrades compared to last year and the fact the Samsung Galaxy A57 isn't that far behind.</li></ul><h2 class="article-body__section" id="section-samsung-galaxy-s26-fe-review-specifications"><span>Samsung Galaxy S26 FE review: Specifications</span></h2><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Galaxy S26 FE</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>$699</p></td></tr><tr><td class="firstcol " ><p><strong>Release date</strong></p></td><td  ><p>September 4</p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>6.7-inch AMOLED (FHD+)</p></td></tr><tr><td class="firstcol " ><p><strong>Refresh rate</strong></p></td><td  ><p>120Hz</p></td></tr><tr><td class="firstcol " ><p><strong>Chipset</strong></p></td><td  ><p>Exynos 2500</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>8GB</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>128GB,  256GB</p></td></tr><tr><td class="firstcol " ><p><strong>Rear cameras</strong></p></td><td  ><p>50MP main (f/1.8), 12MP ultrawide (f/2.2), 8MP telephoto (f/2.4) with 3x optical zoom</p></td></tr><tr><td class="firstcol " ><p><strong>Front camera</strong></p></td><td  ><p>12MP (f/2.2)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery size</strong></p></td><td  ><p>4,900 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Charging speed</strong></p></td><td  ><p>45W wired, 15W wireless</p></td></tr><tr><td class="firstcol " ><p><strong>Size</strong></p></td><td  ><p>6.36 x 3.03 x 0.29 inches (161.6 x 76.9 x 7.4 mm)</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>6.81 ounces (193 grams)</p></td></tr><tr><td class="firstcol " ><p><strong>Colors</strong></p></td><td  ><p>Blueberry, Graphite, Pistachio</p></td></tr></tbody></table></div><h2 class="article-body__section" id="section-samsung-galaxy-s26-fe-review-the-ups"><span>Samsung Galaxy S26 FE review: The ups</span></h2><h2 id="699-starting-price">$699 starting price</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="QCieA8sWMFWrAohkRSWHkW" name="Galaxy S26 FE-2" alt="samsung galaxy s26 fe review shots" src="https://cdn.mos.cms.futurecdn.net/QCieA8sWMFWrAohkRSWHkW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>When I first went<a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-fe-review"> hands-on with the Galaxy S26 FE </a>I commented on the fact that the phone wasn't actually that much cheaper than the Galaxy S26. In fact, at the time, a 256GB S26 FE cost the same amount as a 256GB Galaxy S26. Things have changed since then, though, thanks to S<a href="https://www.tomsguide.com/phones/samsung-phones/all-three-galaxy-s27-models-tipped-for-price-hike-and-a-key-spec-for-the-s27-ultra-just-leaked">amsung hiking the price of the entire Galaxy S26 lineup</a> — except the Galaxy S26 FE.</p><p>This means that the cheapest Galaxy S26 is now $999, complete with 256GB of storage. Meanwhile the cheapest S26 FE is $699, while the larger 256GB storage option will set you back $799. That's a $200-$300 difference, depending on how much storage you actually require.</p><p>With the cost of entry suddenly much higher, that gives a huge advantage to the Galaxy S26 FE since it offers a lot of the same features as the Galaxy S26 but for a much lower price tag.</p><h2 id="premium-feeling-design">Premium-feeling 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="42GPZk9YWHpPdjA446KThW" name="Galaxy S26 FE-7" alt="samsung galaxy s26 fe review shots" src="https://cdn.mos.cms.futurecdn.net/42GPZk9YWHpPdjA446KThW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>I'll caveat this by saying that the Galaxy S26 FE is not as premium as past fan edition phones. The S25 FE has the same matte glass back as the Galaxy S25 FE, but that isn't the case with the S26 equivalents. Instead, the S26 FE has a glossy glass back that looks more like the Galaxy A57 — to the point where I struggle to tell them apart. </p><p>That said, the design is more premium than your typical cheap phone. There's a large 6.9-inch display (rated up to 1,900 nits), and a brushed metal frame that helps the phone avoid feeling like it's a cheap device. The same goes for the solid glass camera bump, which is a trait Samsung usually reserves for other Galaxy S-series devices.</p><p>There's some weight to the S26 FE that makes it feel like it's got some solid construction. While lightweight designs are all the rage in certain circles, the extra half ounce the S26 FE has over the A57 goes a long way. Not to mention that the weight is fairly evenly distributed, giving the phone a more balanced feel. The mid-range Samsung feels a little too light for its size, and doesn't balance as well, which means it feels a little more flimsy as a result.</p><h2 id="solid-ai-features">Solid 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="ZpLZgKww3FodYhpzabGRmW" name="Galaxy S26 FE-9" alt="samsung galaxy s26 fe review shots" src="https://cdn.mos.cms.futurecdn.net/ZpLZgKww3FodYhpzabGRmW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>It isn't a Samsung phone release without AI playing a key role in everything going forward, and the Galaxy S26 FE is no different. Samsung didn't add anything new and exclusive, which shouldn't surprise anyone, but it still added a bunch of Galaxy AI features we've tried and enjoyed on both the Galaxy S26 and the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Samsung Galaxy Z Fold 8.</a></p><p>Included here is <a href="https://www.tomsguide.com/phones/samsung-phones/i-tried-the-new-galaxy-ai-video-tracker-on-my-z-fold-8">My Fan Cam</a>, which follows human beings to turn existing video into something brand new, the literally-named <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-just-did-the-impossible-with-the-galaxy-s26-ultra-i-cant-decide-which-of-these-two-new-features-i-like-more">Horizontal Lock</a>, <a href="https://www.tomsguide.com/phones/samsung-phones/i-tested-this-galaxy-s26-ai-feature-to-scan-my-tax-documents-and-it-makes-my-scanner-obsolete">Samsung's Document Scanner,</a> <a href="https://www.tomsguide.com/phones/samsung-phones/i-tried-the-samsung-galaxy-s25-ultras-audio-eraser-and-it-beats-both-apple-and-google">Audio Eraser</a>, <a href="https://www.tomsguide.com/phones/i-tested-galaxy-s26-ultra-photo-assist-vs-pixel-10-pro-xl-ask-photos-heres-the-better-ai-photo-editor">Photo Assist's AI editing tools,</a> Now Brief and the contextually aware <a href="https://www.tomsguide.com/phones/samsung-phones/how-to-turn-on-galaxy-s26s-now-nudge-and-how-it-works">Now Nudge</a>, as well as the currently Samsung-exclusive <a href="https://www.tomsguide.com/opinion/circle-to-search-is-my-favorite-galaxy-s24-feature-if-samsung-and-google-dont-screw-it-up">Circle to Search</a> upgrade that lets you scan multiple objects at once.</p><p>All of which makes this a solid low-cost choice for those of you that want access to Galaxy AI features.</p><h2 id="good-battery-life">Good battery life</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="NGm4z9bEjvJgmm9rRwkGeW" name="Galaxy S26 FE-5" alt="samsung galaxy s26 fe review shots" src="https://cdn.mos.cms.futurecdn.net/NGm4z9bEjvJgmm9rRwkGeW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>We haven't been able to do our full battery life test on the Galaxy S26 FE just yet, but I have performed a rougher version to gauge just how much battery is lost when streaming video. That test involved streaming this YouTube video for three hours, with brightness set to 50%. For comparison's sake, I also ran the same test on the Samsung Galaxy S26 and Galaxy A57.</p><p>The Galaxy S26 FE was the worst of the three, which is bizarre considering it has a 4,900 mAh battery. At the end of the video stream it came out with 82%, compared to 85% on the 4,300 mAh Galaxy S26 and 87% on the 5,000 mAh Galaxy A57. That said, with an average battery loss of 6% per hour, that's not a huge amount of battery drain. </p><p>If that power consumption holds steady, it means the Galaxy S26 FE should last almost 17 hours in the same conditions. It's far from the best battery life we've seen, and logic dictates that the regular S26 should last 20 hours. But that should keep you going throughout the day.</p><p>As for charging, the Galaxy S26 FE promises up to 45W wired charging speeds. My USB-C power meter, paired with a 60W charging brick, saw the incoming power hit a high of 41W which is pretty close. As for actual recharging time, I found the S26 FE reached 39% after 15 minutes and 72% after half an hour. </p><p>That's faster than the S26 and A57, and only slightly behind the Galaxy S26 Ultra (77% in 30 minutes). The S26 FE hit 100% charge after 58 and a half minutes during my testing. This means that while the battery life could be better, at least you'll be able to recharge pretty quickly.</p><h2 id="camera-quality-is-mostly-good-for-the-price">Camera quality is (mostly) good for the price</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="5uowZSC6w5vq5opwQCLRhW" name="Galaxy S26 FE-4" alt="samsung galaxy s26 fe review shots" src="https://cdn.mos.cms.futurecdn.net/5uowZSC6w5vq5opwQCLRhW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Since the Galaxy S26 FE is designed to sit between the Galaxy A57 and Galaxy S26, I decided that the fairest way to test the cameras was to compare all three phones together. To get an idea of just how much of a difference there is when the phones themselves sit a few hundred dollars apart from one another.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/vvWz4QL6os4TmcUzt9cJLB-1920-80.jpg" alt="samsung galaxy s26 fe review" /><figcaption>Samsung Galaxy S26 FE<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/X6PC9VnpBdtbNApWnP6kiR-1920-80.jpg" alt="Samsung Galaxy S26 photo reviews for FE comparisson" /><figcaption>Samsung Galaxy S26<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/bz2ct4ZeMgwLFXeLAkNUvj-1920-80.jpg" alt="samsung galaxy a57 vs s26 fe photo comparisson" /><figcaption>Samsung Galaxy A57 <small role="credit">Future</small></figcaption></figure></figure><p>With the main camera lens, you can't see a whole lot of difference in the three, or at least you can't see them on my dog sitting in the foreground. At a glance the quality is generally pretty good, but if you look a little closer the A57 dips considerably compared to the S26 FE — which manages to capture more detail (especially in the background) and a higher quality. </p><p>It's a lot closer in quality to the standard S26, though I'd say the flagship model clinches it in terms of overall quality — despite the fact I can't see much difference on the dog.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/7HZtT9KffiatGDn2XZna3B-1920-80.jpg" alt="samsung galaxy s26 fe review" /><figcaption>Samsung Galaxy S26 FE<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/W6C6TNAACMAvB6LTcqXfBR-1920-80.jpg" alt="Samsung Galaxy S26 photo reviews for FE comparisson" /><figcaption>Samsung Galaxy S26<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/ADkZCx2ch5yUmXVDgTPNgj-1920-80.jpg" alt="samsung galaxy a57 vs s26 fe photo comparisson" /><figcaption>Samsung Galaxy A57 <small role="credit">Future</small></figcaption></figure></figure><p>The ultrawide lenses are easily the mostly evenly matched lenses on the three phones, and the quality is surprisingly uniform. I'd go so far as to say that the quality does improve as the price does, and both the S26 FE and S26 highlight the red spray paint a lot more clearly than the A57. However, the actual difference is not that noticeable unless you look super closely.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/sNMoE4cG3HgyqygF3YdpMB-1920-80.jpg" alt="samsung galaxy s26 fe review" /><figcaption>Samsung Galaxy S26 FE<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/YfKgDo5kT4HFoxtR8jAmhR-1920-80.jpg" alt="Samsung Galaxy S26 photo reviews for FE comparisson" /><figcaption>Samsung Galaxy S26<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/Xs43HpzEamRh4KKxDUm7xj-1920-80.jpg" alt="samsung galaxy a57 vs s26 fe photo comparisson" /><figcaption>Samsung Galaxy A57 <small role="credit">Future</small></figcaption></figure></figure><p>Sadly all three phones do a pretty poor job with zoom, no doubt thanks to the A57's lack of optical zoom and the S26 and FE's weak telephoto cameras. The S26 probably has the edge, especially since the S26 FE added a weird warm color hue to the photo, but none of them are particularly great when you crank magnification up to 3x.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/RyH5LazqbXoa6KfJQXtPaA-1920-80.jpg" alt="samsung galaxy s26 fe review" /><figcaption>Samsung Galaxy S26 FE<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/4zpksCZkXtnjaWjkvSRiwQ-1920-80.jpg" alt="Samsung Galaxy S26 photo reviews for FE comparisson" /><figcaption>Samsung Galaxy S26<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/NYMHdbdzprb4Dusif39AKj-1920-80.jpg" alt="samsung galaxy a57 vs s26 fe photo comparisson" /><figcaption>Samsung Galaxy A57 <small role="credit">Future</small></figcaption></figure></figure><p>Crank things up to 10x magnification and things are a lot worse. The A57 turned the tower into a fuzzy mess, while the S26 and S26 FE are more evenly matched — though not by a lot. The FE seemed to add a bunch of detail that the S26 didn't pick up. But considering the quality of the photo itself, I can't really say that's an improvement.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/w5BiVu5FVhb6wJu4TgNhaA-1920-80.jpg" alt="samsung galaxy s26 fe review" /><figcaption>Samsung Galaxy S26 FE<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/Q4Vria3EdVfAKVhhxmDYsQ-1920-80.jpg" alt="Samsung Galaxy S26 photo reviews for FE comparisson" /><figcaption>Samsung Galaxy S26<small role="credit">Future</small></figcaption></figure></figure><p>It's a similar story for both S26 models at 30x zoom — the maximum you can get on both these phones. The S26 FE looks a little washed out, and picked up darker coloring in the bricks, but the actual quality is on par with the standard S26. Though, this is not meant as a compliment.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/4zVycBQwcy7hZd2TAmWoMB-1920-80.jpg" alt="samsung galaxy s26 fe review" /><figcaption>Samsung Galaxy S26 FE<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/XxCQw2B7XzPe96N3ZmjzTR-1920-80.jpg" alt="Samsung Galaxy S26 photo reviews for FE comparisson" /><figcaption>Samsung Galaxy S26<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/kYkgyHKigTSczvsktoctpj-1920-80.jpg" alt="samsung galaxy a57 vs s26 fe photo comparisson" /><figcaption>Samsung Galaxy A57 <small role="credit">Future</small></figcaption></figure></figure><p>When it comes to selfies, things are much the same. The overall quality isn't bad, but the level of detail you get improves as the phones get more expensive. The A57 is blurrier and captures far less, while the S26 FE looks a little more like a competent photo. However the S26 captures it the best, and you can make out the individual hair strands a lot more easily. Alongside improved background details.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/XAdDhx7JvWWPPgrsBbxjnA-1920-80.jpg" alt="samsung galaxy s26 fe review" /><figcaption>Samsung Galaxy S26 FE<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/JmNoX3Vz3DoqGSjSzMQq3R-1920-80.jpg" alt="Samsung Galaxy S26 photo reviews for FE comparisson" /><figcaption>Samsung Galaxy S26<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/hMNgeaY2EaBXazvZSoFpXj-1920-80.jpg" alt="samsung galaxy a57 vs s26 fe photo comparisson" /><figcaption>Samsung Galaxy A57 <small role="credit">Future</small></figcaption></figure></figure><p>Weirdly, though, things are a little different when Portrait mode is involved. Somehow the quality on the A57 seems to have been ramped up, to the point where I'd say the sharpness of the photo exceeds that of the S26 FE. Even the S26 seems to be struggling to visualize my facial hair and various facial details that the S26 FE manages without issue.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/vKN2qhBJ7AJBxgVxR953zA-1920-80.jpg" alt="samsung galaxy s26 fe review" /><figcaption>Samsung Galaxy S26 FE<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/JS99GzFyVTB8NYbbDzAyQR-1920-80.jpg" alt="Samsung Galaxy S26 photo reviews for FE comparisson" /><figcaption>Samsung Galaxy S26<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/Lrk3pYB2pksrGoESL9zJij-1920-80.jpg" alt="samsung galaxy a57 vs s26 fe photo comparisson" /><figcaption>Samsung Galaxy A57 <small role="credit">Future</small></figcaption></figure></figure><p>Things are more or less back to normal with low light photography. The S26 comes out on top in the detail department, though the difference between it and the S26 FE is not that severe. The two certainly managed to capture a similar amount of light to illuminate the final product. As for the A57, the quality isn't there and the lighting has been processed in a way that makes the photo look a lot colder. Almost as though the tomato plant is being illuminated by fluorescent lights.</p><p>Overall I'd say the S26 FE sits in a comfortable position between the A57 and the Galaxy S26. The S26 certainly has the edge in most areas, but the quality difference isn't actually that severe compared to the S26 FE's camera. There's also a noticeable difference between the FE and the Galaxy A57, even though the A57 isn't a bad camera for its price tag. </p><h2 class="article-body__section" id="section-samsung-galaxy-s26-fe-review-the-downs"><span>Samsung Galaxy S26 FE review: The downs</span></h2><h2 id="minimal-hardware-upgrades">Minimal hardware upgrades</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="TKQnPRTkfTFqUX3jQWEAmW" name="Galaxy S26 FE-8" alt="samsung galaxy s26 fe review shots" src="https://cdn.mos.cms.futurecdn.net/TKQnPRTkfTFqUX3jQWEAmW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Like many phones, the Galaxy S26 FE doesn't have a whole lot to offer when it comes to actual upgrades. The differences in comparison to the Galaxy S25 FE are minimal, and the only tangible changes are the upgraded Exynos chipset and the glass enclosure around the rear camera lens.</p><p>The rest of the hardware is basically identical, which shows Samsung is leaning more onto the software upgrades to try and sell the S26 FE. That's not bad, per se, and the S26 FE does have a heck of a lot of useful features you'd normally only find on flagship phones. However, there's no telling how many of those will make their way to S25 FE at some point. </p><p>In that respect, the S26 FE doesn't feel like a "must-have" device. Not unless you have a super-old Fan Edition phone, or some kind of mid-ranger that desperately needs upgrading.</p><h2 id="middling-performance">Middling 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="GgBDE9LH5sg9HTudN2huDW" name="LISTGalaxy S26 FE-1-LIST" alt="samsung galaxy s26 fe review shots" src="https://cdn.mos.cms.futurecdn.net/GgBDE9LH5sg9HTudN2huDW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>When it comes to making phones cheap, compromises have to be made, and in the case of the Galaxy S26 FE Samsung appears to have nerfed the performance in a big way. The fact is, while the rest of the S26 series gets the custom Snapdragon 8 Elite Gen 5 for Galaxy chips (or the latest Exynos 2600), the S26 FE is stuck with the Exynos 2500 — a chip that debuted at the start of 2025.</p><p>Obviously this means that the phone does not have the same level of computing or graphics power as more expensive phones. </p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Geekbench 6 (Single/Multi)</strong></p></td><td  ><p><strong>Wild Life Extreme Unlimited (Score/FPS)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy S26 FE</strong></p></td><td  ><p>2,444 / 7,958</p></td><td  ><p>5,318 (31.85)</p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy S26 (Snapdragon)</strong></p></td><td  ><p>3.531 / 10,778</p></td><td  ><p>7,059 (42.27)</p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy S26 (Exynos)</strong></p></td><td  ><p>3,197 / 11,065</p></td><td  ><p>7,250  (43.42)</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 17e</strong></p></td><td  ><p>3,606 / 9,229</p></td><td  ><p>3,997 (23.9)</p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 10a</strong></p></td><td  ><p>1,694 / 4,501</p></td><td  ><p>2,667 (15.97)</p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy A57</strong></p></td><td  ><p>1,385 / 4,508</p></td><td  ><p>1,765 (10.57)</p></td></tr></tbody></table></div><p>As you can see, the Galaxy S26 FE trails quite far behind both variants of the Galaxy S26. Likewise it falls quite far behind the iPhone 17e, which is powered by Apple's A18 chipset. However, the older Apple chipset always struggled with the graphics side of things, which means it lags quite far behind the S26 FE in that area.</p><p>Performance is one area that the S26 FE truly beats out the A57. The mid-range phone's performance is very poor by comparison, especially where graphics are concerned. However, considering the A57 is $150 cheaper, that's not a huge surprise. In any case, if you were hoping for flagship performance from the Galaxy S26 FE, you are out of luck.</p><h2 id="the-a57-isn-39-t-too-far-behind">The A57 isn't too far behind</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="iXTaGrvCpggSdsLL3t9osi" name="Galaxy A57--3" alt="samsung galaxy a57 review images" src="https://cdn.mos.cms.futurecdn.net/iXTaGrvCpggSdsLL3t9osi-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Having tested both the Galaxy A57 and the Galaxy S26 FE, I can tell you that the lived experience of using both phones is very different. That said, the Galaxy A57 is still an excellent phone for its price, and on paper the differences between it and the Galaxy S26 FE are fairly minimal — especially for casual users who prioritize value and battery life over raw power.</p><p>While I personally think the extra $150 you pay for a Galaxy S26 FE is justifiable, my finances are different than yours — and Samsung is going a lot to make its mid-range phones a heck of a lot more appealing. To the point where it's essentially competing with itself on multiple fronts. Frankly, Samsung should have done more to help the S26 FE stand out on its own more, rather than being compared to lesser phones.</p><h2 class="article-body__section" id="section-samsung-galaxy-s26-fe-review-verdict"><span>Samsung Galaxy S26 FE 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="PcUMJw4EB7neFQeNu97yjW" name="Galaxy S26 FE-3" alt="samsung galaxy s26 fe review shots" src="https://cdn.mos.cms.futurecdn.net/PcUMJw4EB7neFQeNu97yjW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>I didn't have high hopes for the Samsung Galaxy S26 FE when Samsung first announced it. Personally, I felt as though the Fan Edition series was being awkwardly stuffed into a niche that didn't really need to be filled, to its own detriment. But actually using the phone, combined with Samsung's unceremonious price hike for the rest of the S26 series, has softened me up a bit. There's more to a phone than the basic hardware specs, and you don't really get to experience that without having it in your hand.</p><p>The Galaxy S26 FE offers a flagship experience that you just don't get on Samsung's cheaper phones right now. The experience has been nerfed slightly, in order to save money, but you still get a lot of the best parts of having a premium phone without the high price tag. Considering a regular Galaxy S26 now costs $999, the willingness to accept some of those compromises can now save you a bunch of extra money.</p><p>The lack of meaningful updates is not ideal, though, and if Samsung wants the Fan Edition series to continue long into the future, it's going to have to step up and not let it get <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-tipster-says-galaxy-z-flip-9-could-be-cancelled-heres-why-thats-a-terrible-idea">neglected and end up the same way as the Galaxy Z Flip lineup.</a></p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Pre-ordering iPhone Duo? 4 reasons to consider Galaxy Z Fold 8 first ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-hands-on-apple-nailed-it-and-just-put-everyone-else-on-notice"><u>iPhone Duo</u></a> is almost here, and there are lots of reasons to snatch up Apple’s first foldable phone come October 16 when pre-orders begin. It gives you a compact 5.4-inch phone and 7.6-inch mini tablet in one device, and it looks like an awesome option for those who want a more immersive viewing experience on the go along with dual-app multitasking — finally!</p><p>But as many in our comments have reminded me, Samsung has been making foldable phones for seven years. And that experience shows in the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win"><u>Galaxy Z Fold 8</u></a>. It has a similar passport-style design to the iPhone Duo, but it offers some pretty unique advantages over Apple’s device and could be the <a href="https://www.tomsguide.com/best-picks/best-foldable-phones"><u>best foldable phone</u></a> for you. If you’re on the fence about getting an iPhone Duo or Galaxy Z Fold 8, here’s where Samsung’s device could sway you.</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/EiAmyzzVhts" allowfullscreen=""></iframe></div></div><h2 id="1-it-s-considerably-thinner-and-lighter">1. It’s considerably thinner and lighter</h2><p>I only played around with the iPhone Duo for about an hour between various hands-on sessions, but it definitely feels heftier than the Galaxy Z Fold 8. Sure, the iPhone Duo is technically the “thinnest iPhone ever,” at just 5.2 mm unfolded. That’s even less than the <a href="https://www.tomsguide.com/phones/iphones/iphone-air-review"><u>iPhone Air</u></a>’s 5.64mm. However, the Galaxy Z Fold 8 is only 4.5 mm. </p><div class="product"><a data-dimension112="32275f7e-bde0-11f1-82e6-313effd2b2ae" data-action="Deal Block" data-label="Galaxy Z Fold 8" data-dimension48="Galaxy Z Fold 8" data-dimension25="$1649" href="https://www.bestbuy.com/product/samsung-galaxy-z-fold8-256gb-unlocked-graphite/JJGRF3FS98/sku/6681692" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1327px;"><p class="vanilla-image-block" style="padding-top:64.28%;"><img id="9Rhpe6TtrVFSNo9Vtn27Tm" name="Galaxy Z Fold 8 Ultra deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/9Rhpe6TtrVFSNo9Vtn27Tm-1920-80.jpg" mos="" align="middle" fullscreen="" width="1327" height="853" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p>The Galaxy Z Fold 8 is one of the best foldable phones we've tested, giving you a 5.5-inch cover display and a huge 7.6-inch main screen in a super light design. Samsung has also done a great job minimizing the crease. Key specs include a 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. In our <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win" data-dimension112="32275f7e-bde0-11f1-82e6-313effd2b2ae" data-action="Deal Block" data-label="Galaxy Z Fold 8" data-dimension48="Galaxy Z Fold 8" data-dimension25="$1649">Galaxy Z Fold 8 review</a>, we called it our favorite Android foldable to date. <a class="view-deal button" href="https://www.bestbuy.com/product/samsung-galaxy-z-fold8-256gb-unlocked-graphite/JJGRF3FS98/sku/6681692" target="_blank" rel="nofollow" data-dimension112="32275f7e-bde0-11f1-82e6-313effd2b2ae" data-action="Deal Block" data-label="Galaxy Z Fold 8" data-dimension48="Galaxy Z Fold 8" data-dimension25="$1649">View Deal</a></p></div><p>When folded, the iPhone Duo measures 11.3mm thick, compared to 9.7mm for the Fold 8. For context, the iPhone 18 Pro Max is 8.75mm thick. So while the Duo will slip into a pocket with ease, it will take up some room. </p><p>In addition, the iPhone Duo weighs 8.96 ounces or 254 grams, while the Fold 8 is a feather light 7.09 ounces (201 grams). Samsung’s foldable is even lighter than the regular iPhone 18 Pro (7.44 ounces), which has a relatively tiny 6.3 inch display compared to the 7.6-inch panel on the Fold 8.</p><h2 id="2-you-can-run-more-apps-at-once">2. You can run more apps at once</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="XFCxXSuM9ujaXaBT7dqk2g" name="iphone duo software-2" alt="iPhone Duo software" src="https://cdn.mos.cms.futurecdn.net/XFCxXSuM9ujaXaBT7dqk2g-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>I give Apple plenty of credit for making running two apps at once so seamless and intuitive on the iPhone Duo. You just select an app and then place it on the left or right side of the display. From there you can easily create app pairs and go back to them at any time. And it’s also a cinch to switch out apps; you just swipe up and go back to the home screen — it’s like having two distinct desktops.</p><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-1920-80.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="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>However, the Galaxy Z Fold 8 can let you run three tiled apps at the same time on screen. So, for example, I could have Gmail in one window, Slack in another and Spotify in another. It’s pretty cool. Plus, Samsung lets you put up to five floating windows on top. Now, eight apps at once seems like overkill to me, but it’s pretty amazing that you have that flexibility.</p><h2 id="3-gemini-ai-is-more-advanced">3. Gemini AI is more advanced</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3236px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="LGcJBsBE5WEHrumKKBqpSV" name="Galaxy Z Fold 8-40" alt="Galaxy Z Fold 8 shown in hand" src="https://cdn.mos.cms.futurecdn.net/LGcJBsBE5WEHrumKKBqpSV-1920-80.jpg" mos="" align="middle" fullscreen="" width="3236" height="1820" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p><a href="https://www.tomsguide.com/ai/siri-just-got-a-major-ai-upgrade-here-are-5-things-to-try-first"><u>Siri AI</u></a> is definitely improved in iOS 27, and it lets you do some pretty cool things on the iPhone Duo. You get better personal context understanding in all sorts of apps, including Messages and Notes. And there’s on-screen awareness, so you can say things like “add these items to my shopping list.” And I also appreciate that there’s finally a Siri mode in the camera app, so you don’t have to think about performing any shortcuts.</p><p>However, I think Galaxy AI and Gemini on the Galaxy Z Fold 8 are not only more advanced but more tailored to the foldable experience. For example, <a href="https://www.tomsguide.com/phones/samsung-phones/how-to-turn-on-galaxy-s26s-now-nudge-and-how-it-works"><u>Now Nudge</u></a> gives you suggestions in Messages for apps that you can open in split-screen mode, such as Calendar. </p><p>And Gemini itself is just more versatile than Siri AI. You can share your live camera video in real time and get advice and troubleshooting tips. I did this when trying to figure out how to clean out battery corrosion from an outdoor flood light.</p><h2 id="4-it-s-100-cheaper">4. It’s $100 cheaper</h2><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-1920-80.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>The Galaxy Fold 8 starts at $1,799, which is $100 less than the iPhone Duo. Plus, there are already some pretty good deals out there. At time of writing I found the <a href="https://www.bestbuy.com/product/samsung-galaxy-z-fold8-256gb-unlocked-graphite/JJGRF3FS98"><u>Fold 8 for just $1,649 on Best Buy</u></a>, which is $250 off.</p><p>I’m sure there will be plenty of <a href="https://www.tomsguide.com/phones/iphones/how-to-save-up-to-usd885-on-the-new-iphone-duo"><u>iPhone Duo pre-order deals</u></a> around Apple’s launch as well, so you should be able to get it at a discount. But as of now the Fold 8 is a better value.</p><h2 id="where-the-iphone-duo-wins">Where the iPhone Duo wins</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="5G5fArauMU9aMKnbuB9Dtb" name="iPhone duo edit 2" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/5G5fArauMU9aMKnbuB9Dtb-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>As good as Samsung’s foldable is, there are several ways the <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-vs-samsung-galaxy-z-fold-8-7-ways-apples-foldable-beats-its-rival-from-ip68-to-faster-charging-and-more"><u>iPhone Duo beats the Fold 8</u></a>. For example, the iPhone Duo offers an IP68 rating for durability, which means it’s protected from both water and dust. Samsung’s phone is only water resistant.</p><p>In addition, the iPhone Duo offers MagSafe built in for wireless charging, Apple Pencil support and vapor chamber cooling, which will presumably help with sustained performance for Apple’s <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-benchmarks-apple-just-built-the-most-powerful-phones-weve-ever-seen"><u>faster A20 chip</u></a>.</p><p>But Apple’s biggest advantage will likely come with software and apps. The iPhone Duo’s software can react based on the position of the hinge while the Fold 8 lacks Samsung’s Flex Mode. And I expect a sizable wave of Duo optimized apps at launch, including Slack, Netflix and Zoom.</p><h2 id="bottom-line">Bottom line</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="DFXjpwrQUPfAW54nMm3Zv9" name="Samsung Galaxy Z Fold 8" alt="In-hand image of Samsung Galaxy Z Fold 8 in folded mode" src="https://cdn.mos.cms.futurecdn.net/DFXjpwrQUPfAW54nMm3Zv9-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The iPhone Duo clearly has the most buzz, and it makes sense because Apple is entering a new category. But I wouldn’t overlook the Galaxy Z Fold 8. It feels so light and thin that it almost seems like Samsung cheated physics. And if you like the idea of multitasking on a big screen, the Fold 8 lets you run more apps at once. And while Siri is smarter than ever, Samsung and Google are in the lead with AI features.</p><p>So which foldable has your interest? Let us know in the comments.</p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/pre-ordering-iphone-duo-3-big-reasons-to-consider-galaxy-z-fold-8-first</link>
                                                                            <description>
                            <![CDATA[ The iPhone Duo looks great, but the Samsung Galaxy Z Fold 8 has some key advantages over Apple’s first foldable. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">Xr4iwawborCaiP3HNuhR3C</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/VGUHEv7t6SSUdQpiN4xMkf-1920-80.png" type="image/png" length="0"></enclosure>
                                                                        <pubDate>Fri, 02 Oct 2026 06:30:00 +0000</pubDate>                                                                                                                                <updated>Fri, 02 Oct 2026 18:35:06 +0000</updated>
                                                                                                                                            <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Mark Spoonauer ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/wtAspSzVfcKLB4JEd39AMo-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Mark Spoonauer is the global editor in chief of Tom&#039;s Guide and has covered technology for over 20 years. He oversees the direction of Tom&#039;s Guide and leads a team of over 25 journalists to bring you our expert buying guides, reviews, news, how-to articles, deals and other coverage.&lt;/p&gt;&lt;p&gt;Mark has a passion for covering all things mobile, having reviewed dozens of smartphones and other gadgets. He enjoys testing the top mobile devices and putting them up against each other in our in-depth face-offs. He also works hand in hand with our editors and testing team to continually improve how we evaluate products. &lt;/p&gt;&lt;p&gt;Having led Tom&#039;s Guide since 2013, Mark has focused on growing the core tech coverage of the site while also expanding into new areas, such as entertainment, fitness and home, recruiting talented writers and editors to help our readers figure out what to buy and how to get the most out of the products and services they use every day. &lt;/p&gt;&lt;p&gt;Mark has spoken at key industry events and appears regularly on TV to discuss the latest trends, including &lt;a href=&quot;https://cheddar.com/media/pixel-watch-gets-a-release-date-at-google-i-o-2022&quot;&gt;Cheddar&lt;/a&gt;, Fox 5, &lt;a href=&quot;https://www.foxbusiness.com/technology/apple-march-event-5g-iphone&quot;&gt;Fox Business&lt;/a&gt; and other outlets. Mark was previously editor in chief of Laptop Mag, and his work has appeared in Wired, Popular Science and Inc. Follow him on Twitter at @mspoonauer.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/png" url="https://cdn.mos.cms.futurecdn.net/VGUHEv7t6SSUdQpiN4xMkf-1920-80.png">
                                                            <media:credit><![CDATA[Apple/Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPhone Duo and Galaxy Z Fold 8]]></media:description>                                                            <media:text><![CDATA[iPhone Duo and Galaxy Z Fold 8]]></media:text>
                                <media:title type="plain"><![CDATA[iPhone Duo and Galaxy Z Fold 8]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/VGUHEv7t6SSUdQpiN4xMkf-1920-80.png" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-hands-on-apple-nailed-it-and-just-put-everyone-else-on-notice"><u>iPhone Duo</u></a> is almost here, and there are lots of reasons to snatch up Apple’s first foldable phone come October 16 when pre-orders begin. It gives you a compact 5.4-inch phone and 7.6-inch mini tablet in one device, and it looks like an awesome option for those who want a more immersive viewing experience on the go along with dual-app multitasking — finally!</p><p>But as many in our comments have reminded me, Samsung has been making foldable phones for seven years. And that experience shows in the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win"><u>Galaxy Z Fold 8</u></a>. It has a similar passport-style design to the iPhone Duo, but it offers some pretty unique advantages over Apple’s device and could be the <a href="https://www.tomsguide.com/best-picks/best-foldable-phones"><u>best foldable phone</u></a> for you. If you’re on the fence about getting an iPhone Duo or Galaxy Z Fold 8, here’s where Samsung’s device could sway you.</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/EiAmyzzVhts" allowfullscreen=""></iframe></div></div><h2 id="1-it-s-considerably-thinner-and-lighter">1. It’s considerably thinner and lighter</h2><p>I only played around with the iPhone Duo for about an hour between various hands-on sessions, but it definitely feels heftier than the Galaxy Z Fold 8. Sure, the iPhone Duo is technically the “thinnest iPhone ever,” at just 5.2 mm unfolded. That’s even less than the <a href="https://www.tomsguide.com/phones/iphones/iphone-air-review"><u>iPhone Air</u></a>’s 5.64mm. However, the Galaxy Z Fold 8 is only 4.5 mm. </p><div class="product"><a data-dimension112="32275f7e-bde0-11f1-82e6-313effd2b2ae" data-action="Deal Block" data-label="Galaxy Z Fold 8" data-dimension48="Galaxy Z Fold 8" data-dimension25="$1649" href="https://www.bestbuy.com/product/samsung-galaxy-z-fold8-256gb-unlocked-graphite/JJGRF3FS98/sku/6681692" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1327px;"><p class="vanilla-image-block" style="padding-top:64.28%;"><img id="9Rhpe6TtrVFSNo9Vtn27Tm" name="Galaxy Z Fold 8 Ultra deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/9Rhpe6TtrVFSNo9Vtn27Tm-1920-80.jpg" mos="" align="middle" fullscreen="" width="1327" height="853" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p>The Galaxy Z Fold 8 is one of the best foldable phones we've tested, giving you a 5.5-inch cover display and a huge 7.6-inch main screen in a super light design. Samsung has also done a great job minimizing the crease. Key specs include a 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. In our <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win" data-dimension112="32275f7e-bde0-11f1-82e6-313effd2b2ae" data-action="Deal Block" data-label="Galaxy Z Fold 8" data-dimension48="Galaxy Z Fold 8" data-dimension25="$1649">Galaxy Z Fold 8 review</a>, we called it our favorite Android foldable to date. <a class="view-deal button" href="https://www.bestbuy.com/product/samsung-galaxy-z-fold8-256gb-unlocked-graphite/JJGRF3FS98/sku/6681692" target="_blank" rel="nofollow" data-dimension112="32275f7e-bde0-11f1-82e6-313effd2b2ae" data-action="Deal Block" data-label="Galaxy Z Fold 8" data-dimension48="Galaxy Z Fold 8" data-dimension25="$1649">View Deal</a></p></div><p>When folded, the iPhone Duo measures 11.3mm thick, compared to 9.7mm for the Fold 8. For context, the iPhone 18 Pro Max is 8.75mm thick. So while the Duo will slip into a pocket with ease, it will take up some room. </p><p>In addition, the iPhone Duo weighs 8.96 ounces or 254 grams, while the Fold 8 is a feather light 7.09 ounces (201 grams). Samsung’s foldable is even lighter than the regular iPhone 18 Pro (7.44 ounces), which has a relatively tiny 6.3 inch display compared to the 7.6-inch panel on the Fold 8.</p><h2 id="2-you-can-run-more-apps-at-once">2. You can run more apps at once</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="XFCxXSuM9ujaXaBT7dqk2g" name="iphone duo software-2" alt="iPhone Duo software" src="https://cdn.mos.cms.futurecdn.net/XFCxXSuM9ujaXaBT7dqk2g-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>I give Apple plenty of credit for making running two apps at once so seamless and intuitive on the iPhone Duo. You just select an app and then place it on the left or right side of the display. From there you can easily create app pairs and go back to them at any time. And it’s also a cinch to switch out apps; you just swipe up and go back to the home screen — it’s like having two distinct desktops.</p><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-1920-80.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="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>However, the Galaxy Z Fold 8 can let you run three tiled apps at the same time on screen. So, for example, I could have Gmail in one window, Slack in another and Spotify in another. It’s pretty cool. Plus, Samsung lets you put up to five floating windows on top. Now, eight apps at once seems like overkill to me, but it’s pretty amazing that you have that flexibility.</p><h2 id="3-gemini-ai-is-more-advanced">3. Gemini AI is more advanced</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3236px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="LGcJBsBE5WEHrumKKBqpSV" name="Galaxy Z Fold 8-40" alt="Galaxy Z Fold 8 shown in hand" src="https://cdn.mos.cms.futurecdn.net/LGcJBsBE5WEHrumKKBqpSV-1920-80.jpg" mos="" align="middle" fullscreen="" width="3236" height="1820" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p><a href="https://www.tomsguide.com/ai/siri-just-got-a-major-ai-upgrade-here-are-5-things-to-try-first"><u>Siri AI</u></a> is definitely improved in iOS 27, and it lets you do some pretty cool things on the iPhone Duo. You get better personal context understanding in all sorts of apps, including Messages and Notes. And there’s on-screen awareness, so you can say things like “add these items to my shopping list.” And I also appreciate that there’s finally a Siri mode in the camera app, so you don’t have to think about performing any shortcuts.</p><p>However, I think Galaxy AI and Gemini on the Galaxy Z Fold 8 are not only more advanced but more tailored to the foldable experience. For example, <a href="https://www.tomsguide.com/phones/samsung-phones/how-to-turn-on-galaxy-s26s-now-nudge-and-how-it-works"><u>Now Nudge</u></a> gives you suggestions in Messages for apps that you can open in split-screen mode, such as Calendar. </p><p>And Gemini itself is just more versatile than Siri AI. You can share your live camera video in real time and get advice and troubleshooting tips. I did this when trying to figure out how to clean out battery corrosion from an outdoor flood light.</p><h2 id="4-it-s-100-cheaper">4. It’s $100 cheaper</h2><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-1920-80.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>The Galaxy Fold 8 starts at $1,799, which is $100 less than the iPhone Duo. Plus, there are already some pretty good deals out there. At time of writing I found the <a href="https://www.bestbuy.com/product/samsung-galaxy-z-fold8-256gb-unlocked-graphite/JJGRF3FS98"><u>Fold 8 for just $1,649 on Best Buy</u></a>, which is $250 off.</p><p>I’m sure there will be plenty of <a href="https://www.tomsguide.com/phones/iphones/how-to-save-up-to-usd885-on-the-new-iphone-duo"><u>iPhone Duo pre-order deals</u></a> around Apple’s launch as well, so you should be able to get it at a discount. But as of now the Fold 8 is a better value.</p><h2 id="where-the-iphone-duo-wins">Where the iPhone Duo wins</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="5G5fArauMU9aMKnbuB9Dtb" name="iPhone duo edit 2" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/5G5fArauMU9aMKnbuB9Dtb-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>As good as Samsung’s foldable is, there are several ways the <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-vs-samsung-galaxy-z-fold-8-7-ways-apples-foldable-beats-its-rival-from-ip68-to-faster-charging-and-more"><u>iPhone Duo beats the Fold 8</u></a>. For example, the iPhone Duo offers an IP68 rating for durability, which means it’s protected from both water and dust. Samsung’s phone is only water resistant.</p><p>In addition, the iPhone Duo offers MagSafe built in for wireless charging, Apple Pencil support and vapor chamber cooling, which will presumably help with sustained performance for Apple’s <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-benchmarks-apple-just-built-the-most-powerful-phones-weve-ever-seen"><u>faster A20 chip</u></a>.</p><p>But Apple’s biggest advantage will likely come with software and apps. The iPhone Duo’s software can react based on the position of the hinge while the Fold 8 lacks Samsung’s Flex Mode. And I expect a sizable wave of Duo optimized apps at launch, including Slack, Netflix and Zoom.</p><h2 id="bottom-line">Bottom line</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="DFXjpwrQUPfAW54nMm3Zv9" name="Samsung Galaxy Z Fold 8" alt="In-hand image of Samsung Galaxy Z Fold 8 in folded mode" src="https://cdn.mos.cms.futurecdn.net/DFXjpwrQUPfAW54nMm3Zv9-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The iPhone Duo clearly has the most buzz, and it makes sense because Apple is entering a new category. But I wouldn’t overlook the Galaxy Z Fold 8. It feels so light and thin that it almost seems like Samsung cheated physics. And if you like the idea of multitasking on a big screen, the Fold 8 lets you run more apps at once. And while Siri is smarter than ever, Samsung and Google are in the lead with AI features.</p><p>So which foldable has your interest? Let us know in the comments.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ All three Samsung Galaxy S26 phones just got a price hike — here's what you'll pay now ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Samsung has officially increased prices for nearly every single Galaxy S26 model, save for one. And one variant of the S26 Ultra is now $200 more expensive.</p><p>It's essentially the second price hike for the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-review">Galaxy S26</a> and <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-plus-review">S26 Plus </a>since both models received $100 increases at launch compared to the S25 versions.  At the time, the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review?utm_source=google&amp;utm_medium=h5d&amp;utm_campaign=h_tg_00265&amp;gad_source=1&amp;gad_campaignid=22446790454&amp;gbraid=0AAAAAqzfqMYUYOJH644gMM-7yoaUrC3zQ&amp;gclid=CjwKCAjwifjVBhBKEiwAYx4K9C1ClQ6gU72UdFLoWi-FBAP4ugPMmiTVAWlq4Q_0dtJEXmjlHLn-KBoCdSwQAvD_BwE">Galaxy S26 Ultra</a> models retained the same $1,299 starting cost.</p><p>Only the more recently announced <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-fe-review">Galaxy S26 FE</a> kept its launch price, though it is $50 more expensive than the S25 FE.</p><div ><table><caption>Samsung Galaxy S26 series starting prices</caption><thead><tr><th class="firstcol " ><p>Model</p></th><th  ><p>Old Price</p></th><th  ><p>New Price</p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Galaxy S26</strong></p></td><td  ><p>$899</p></td><td  ><p>$999</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy S26 Plus</strong></p></td><td  ><p>$1,099</p></td><td  ><p>$1,199</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy S26 Ultra</strong></p></td><td  ><p>$1,299</p></td><td  ><p>$1,399</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy S26 FE</strong></p></td><td  ><p>$699</p></td><td  ><p>No change</p></td></tr></tbody></table></div><p>The prices listed are for the starting 256GB versions of each model. The 512GB versions of the S26 and S26 Plus now costs $1,199 and $1,399, respectively. </p><p>The Ultra models are now $1,599 for the 512GB variant and $1,999 for the 1TB, a $200 increase over the previous price.</p><p>In March, Samsung <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-on-galaxy-s26-and-galaxy-s26-plus-usd100-price-hike-weve-packed-in-so-much-innovation">justified the first price increase</a> by emphasizing upgrades and innovation, though company executives also admitted the ongoing AI-created RAMageddon was to blame. Unfortunately, the RAM crisis isn't going away anytime soon, and <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">2027 is expected to be worse</a> by some than this year.</p><p>Next year's Galaxy S27 was just <a href="https://www.tomsguide.com/phones/samsung-phones/all-three-galaxy-s27-models-tipped-for-price-hike-and-a-key-spec-for-the-s27-ultra-just-leaked">tipped for a price hike</a>, but hopefully that's based on the original S26 prices and not these new ones.</p><h2 id="what-to-do-if-you-need-a-new-samsung-phone">What to do if you need a new Samsung phone</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4081px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="GK5hNnnCmuZ6u8oa8EHBT9" name="Galaxy S26 Ultra vs Galaxy S26" alt="Galaxy S26 Ultra vs Galaxy S26." src="https://cdn.mos.cms.futurecdn.net/GK5hNnnCmuZ6u8oa8EHBT9-1920-80.jpg" mos="" align="middle" fullscreen="" width="4081" height="2296" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / John Velasco)</span></figcaption></figure><p>If you are in the market for a smartphone, my recommendation is wait for sales and big discounts. Never pay full price. </p><p>Otherwise, Samsung offers cheaper, capable phones like its <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-a57-review">Galaxy A57 series </a>that starts at $549. In the meantime, <a href="https://www.amazon.com/dp/B0G4SZ6SJY" target="_blank">Amazon is still offering</a> the Galaxy S26 Ultra at the original price. That also includes some colors of <a href="https://www.amazon.com/dp/B0G4SYJK4G" target="_blank">the S26 </a>and the <a href="https://www.amazon.com/dp/B0G4SYZVKC" target="_blank">S26 Plus</a>.</p><p>Or, if you wait a week, <a href="https://www.tomsguide.com/sales-events/29-amazon-deals-already-50-percent-off-or-more-ahead-of-october-prime-day-shop-ring-asics-carhartt-and-more">Amazon's Prime Day sale</a> is scheduled to kick off on October 6, and that sale usually features deep discounts on everything, including Samsung's flagship phones.</p><p>Or there's Black Friday and Cyber Monday just after Thanksgiving. Either way, the infuriating trend of ever increasing smartphone prices continues.</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-review-wide-for-the-win"><strong>Samsung Galaxy Z Fold 8 review: The best Android foldable for most people</strong></a></li><li><a href="https://www.tomsguide.com/phones/i-checked-out-the-new-samsung-smarttag3-heres-why-this-tracker-could-be-a-game-changer"><strong>I checked out the new Samsung SmartTag3 — here’s why this tracker could be a game-changer</strong></a></li><li><a href="https://www.tomsguide.com/best-picks/best-samsung-phone"><strong>The best Samsung phone might not be the best for you — take our quiz to find out which you should buy</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/usd1-400-galaxy-s26-ultra-every-samsung-galaxy-s26-phone-just-got-a-price-hike</link>
                                                                            <description>
                            <![CDATA[ Nearly every Galaxy S26 phone just got a price hike. Here's what you'll pay now for a new Samsung handset. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">KzWMqL7wqzapJarBVgvGtL</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/s3XUvEEb34HgD8A5D8wyRM-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 01 Oct 2026 20:09:16 +0000</pubDate>                                                                                                                                <updated>Thu, 01 Oct 2026 21:40:10 +0000</updated>
                                                                                                                                            <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ scott.younker@futurenet.com (Scott Younker) ]]></author>                    <dc:creator><![CDATA[ Scott Younker ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/RZsUpqcJ6Uj2q83oCUwNhQ-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Scott Younker is the West Coast Reporter at Tom’s Guide. He covers all the latest tech news, including phones, computing and more. He’s been involved in tech since 2011 covering everything from cameras and swimming pool equipment to the latest gaming consoles and smart TVs. He is on a seemingly never ending hunt to build the easiest to use home media system. &lt;/p&gt;&lt;p&gt;Before Tom’s Guide, Scott worked for publications like &lt;em&gt;Digital Trends, Outdoor Photographer, Dead Beats Panel&lt;/em&gt;, and in a brief detour, &lt;em&gt;America’s Funniest Home Videos&lt;/em&gt;. Yes, he has seen more pratfalls, silly pets and ridiculous home movie fails than is reasonably healthy. &lt;/p&gt;&lt;p&gt;When not writing about the latest devices or advances in chipsets, be sure to ask about Scott about disc golf and sustainability, or just if you’re being cheeky, ask about his noodle arm. If you truly want to get nerdy, bring up board games and his ongoing losing streak. &lt;/p&gt;&lt;p&gt;Scott joined Tom&#039;s Guide in 2024 as the West Coast Reporter. He graduated from the School of Journalism at the University of Oregon with a degree in magazine journalism and a minor in communications. While there he blogged or wrote for several magazines including the Fluxx, Ethos and the Oregon Commentator. He briefly wrote and managed a moderately successful blog focused on web comics. &lt;br&gt;Send secure tips on Signal: scyo1.55.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/s3XUvEEb34HgD8A5D8wyRM-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Samsung Galaxy S26 Ultra shown in hand]]></media:description>                                                            <media:text><![CDATA[Samsung Galaxy S26 Ultra shown in hand]]></media:text>
                                <media:title type="plain"><![CDATA[Samsung Galaxy S26 Ultra shown in hand]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/s3XUvEEb34HgD8A5D8wyRM-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Samsung has officially increased prices for nearly every single Galaxy S26 model, save for one. And one variant of the S26 Ultra is now $200 more expensive.</p><p>It's essentially the second price hike for the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-review">Galaxy S26</a> and <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-plus-review">S26 Plus </a>since both models received $100 increases at launch compared to the S25 versions.  At the time, the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review?utm_source=google&amp;utm_medium=h5d&amp;utm_campaign=h_tg_00265&amp;gad_source=1&amp;gad_campaignid=22446790454&amp;gbraid=0AAAAAqzfqMYUYOJH644gMM-7yoaUrC3zQ&amp;gclid=CjwKCAjwifjVBhBKEiwAYx4K9C1ClQ6gU72UdFLoWi-FBAP4ugPMmiTVAWlq4Q_0dtJEXmjlHLn-KBoCdSwQAvD_BwE">Galaxy S26 Ultra</a> models retained the same $1,299 starting cost.</p><p>Only the more recently announced <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-fe-review">Galaxy S26 FE</a> kept its launch price, though it is $50 more expensive than the S25 FE.</p><div ><table><caption>Samsung Galaxy S26 series starting prices</caption><thead><tr><th class="firstcol " ><p>Model</p></th><th  ><p>Old Price</p></th><th  ><p>New Price</p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Galaxy S26</strong></p></td><td  ><p>$899</p></td><td  ><p>$999</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy S26 Plus</strong></p></td><td  ><p>$1,099</p></td><td  ><p>$1,199</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy S26 Ultra</strong></p></td><td  ><p>$1,299</p></td><td  ><p>$1,399</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy S26 FE</strong></p></td><td  ><p>$699</p></td><td  ><p>No change</p></td></tr></tbody></table></div><p>The prices listed are for the starting 256GB versions of each model. The 512GB versions of the S26 and S26 Plus now costs $1,199 and $1,399, respectively. </p><p>The Ultra models are now $1,599 for the 512GB variant and $1,999 for the 1TB, a $200 increase over the previous price.</p><p>In March, Samsung <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-on-galaxy-s26-and-galaxy-s26-plus-usd100-price-hike-weve-packed-in-so-much-innovation">justified the first price increase</a> by emphasizing upgrades and innovation, though company executives also admitted the ongoing AI-created RAMageddon was to blame. Unfortunately, the RAM crisis isn't going away anytime soon, and <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">2027 is expected to be worse</a> by some than this year.</p><p>Next year's Galaxy S27 was just <a href="https://www.tomsguide.com/phones/samsung-phones/all-three-galaxy-s27-models-tipped-for-price-hike-and-a-key-spec-for-the-s27-ultra-just-leaked">tipped for a price hike</a>, but hopefully that's based on the original S26 prices and not these new ones.</p><h2 id="what-to-do-if-you-need-a-new-samsung-phone">What to do if you need a new Samsung phone</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4081px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="GK5hNnnCmuZ6u8oa8EHBT9" name="Galaxy S26 Ultra vs Galaxy S26" alt="Galaxy S26 Ultra vs Galaxy S26." src="https://cdn.mos.cms.futurecdn.net/GK5hNnnCmuZ6u8oa8EHBT9-1920-80.jpg" mos="" align="middle" fullscreen="" width="4081" height="2296" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / John Velasco)</span></figcaption></figure><p>If you are in the market for a smartphone, my recommendation is wait for sales and big discounts. Never pay full price. </p><p>Otherwise, Samsung offers cheaper, capable phones like its <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-a57-review">Galaxy A57 series </a>that starts at $549. In the meantime, <a href="https://www.amazon.com/dp/B0G4SZ6SJY" target="_blank">Amazon is still offering</a> the Galaxy S26 Ultra at the original price. That also includes some colors of <a href="https://www.amazon.com/dp/B0G4SYJK4G" target="_blank">the S26 </a>and the <a href="https://www.amazon.com/dp/B0G4SYZVKC" target="_blank">S26 Plus</a>.</p><p>Or, if you wait a week, <a href="https://www.tomsguide.com/sales-events/29-amazon-deals-already-50-percent-off-or-more-ahead-of-october-prime-day-shop-ring-asics-carhartt-and-more">Amazon's Prime Day sale</a> is scheduled to kick off on October 6, and that sale usually features deep discounts on everything, including Samsung's flagship phones.</p><p>Or there's Black Friday and Cyber Monday just after Thanksgiving. Either way, the infuriating trend of ever increasing smartphone prices continues.</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-review-wide-for-the-win"><strong>Samsung Galaxy Z Fold 8 review: The best Android foldable for most people</strong></a></li><li><a href="https://www.tomsguide.com/phones/i-checked-out-the-new-samsung-smarttag3-heres-why-this-tracker-could-be-a-game-changer"><strong>I checked out the new Samsung SmartTag3 — here’s why this tracker could be a game-changer</strong></a></li><li><a href="https://www.tomsguide.com/best-picks/best-samsung-phone"><strong>The best Samsung phone might not be the best for you — take our quiz to find out which you should buy</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ All three Galaxy S27 models tipped for price hike — and a key spec for the S27 Ultra just leaked ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Everything seems to be getting more expensive, and that's especially true when it comes to phones and other electronics. Production and component costs are on the rise, particularly RAM and storage, and that means the price increases getting passed on to us. Sadly, it seems as though the Galaxy S27 might be the next big phone to hike prices.</p><p>We've already heard rumors that the S27 Ultra could get a $100 price increase, which would mean <strong>prices start at $1,400 for the S27 UIltra</strong> instead of the current $1,300. However, the latest murmurs from the rumor mill suggest that the entire Galaxy S27 lineup could get a price increase. Again.</p><h2 id="galaxy-s27-price-hikes-across-the-board">Galaxy S27 Price hikes across the board</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4764px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="VAHvBkwzBN4PiKFx8EcuoW" name="Samsung Galaxy S26 review" alt="Samsung Galaxy S26 held in the hand." src="https://cdn.mos.cms.futurecdn.net/VAHvBkwzBN4PiKFx8EcuoW-1920-80.jpg" mos="" align="middle" fullscreen="" width="4764" height="2680" 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 rumor itself comes from a blog on Korean social media site <a href="https://blog.naver.com/yeux1122/224426981973" target="_blank">Naver</a>, and specifically blames the alleged price hike on the extortionate cost of memory. Apparently, Samsung can't absorb the price increases the way it used to, and that means the cost of S27 models is going up in the Korean market. </p><p>This doesn't necessarily mean that prices will be going up in other regions. That said, if a Korean price hike is tied to RAMageddon costs, it seems unlikely that Samsung would give other markets a pass. Then again, stranger things have happened.</p><p><strong>The base price increase is said to be in the "higher 130,000 won range" which is roughly $95 at the current exchange rate. </strong>The cost to upgrade your storage is said to be going up as well, though the exact price change isn't detailed. </p><p>Currently, an upgrade from 256GB to 512GB is an extra $200, while S26 Ultra owners are expected to pay another $400 on top of that if they want a 1TB model — or $600 more than a 256GB model. </p><p>That's quite a lot, especially when those sorts of upgrades used to be as little as $100 in recent years. The prospect of another storage price increase cements my opinion that <a href="https://www.tomsguide.com/phones/high-storage-phones-are-feeling-more-like-a-scam-than-ever-how-to-avoid-overpaying">high storage phones are a scam.</a></p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-W3Yd8X"></div>                            </div>                            <script src="https://kwizly.com/embed/W3Yd8X.js" async=""></script><h2 id="the-s27-ultra-could-be-even-heavier-too">The S27 Ultra could be even heavier, too</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="LacgYzjqWKVkFAs6DKZ3ak" name="S27 Ultra render" alt="Samsung Galaxy S27 Ultra render" src="https://cdn.mos.cms.futurecdn.net/LacgYzjqWKVkFAs6DKZ3ak-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: @TechHome100)</span></figcaption></figure><p>The price isn't the only thing about the Galaxy S27 Ultra that could be increasing. A new rumor, courtesy of<a href="https://x.com/UniverseIce/status/2105251565951218031" target="_blank"> Ice Universe,</a> claims that the phone will weigh 218 grams (7.69 ounces), which is four grams more than the Galaxy S26 Ultra. However, the thickness will apparently stay the same 7.9mm (0.31-inches) for another year.</p><div class="see-more see-more--clipped"><figure><blockquote class="twitter-tweet hawk-ignore" data-lang="en" cite="https://twitter.com/cantworkitout/status/2105251565951218031"><p lang="en" dir="ltr">Galaxy S27 Ultra 7.9mm 218g<a href="https://twitter.com/cantworkitout/status/2105251565951218031">September 30, 2026</a></p></blockquote></figure><div class="see-more__filter"></div></div><p>Ice Universe has a solid track record when it comes to Samsung leaks, but there's always a chance that he's wrong. However, if we take them at their word, those few extra grams have to come from somewhere. The question is, what is causing the extra weight to be piled onto the phone? Especially with rumors claiming that Samsung is <a href="https://www.tomsguide.com/phones/samsung-phones/the-samsung-galaxy-s27-ultra-could-ditch-the-redundant-3x-zoom-for-this-much-bigger-camera-upgrade">removing features like the secondary telephoto lens</a>.</p><p>The most obvious answer could be the battery. Samsung is expected to <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-ultra-leak-reveals-silicon-carbon-battery-leap-but-also-a-camera-downgrade">utilize silicon carbon batteries</a>, just as it did with 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> series, allowing it to add more battery capacity into the same size. That would explain the lack of extra thickness, and the minimal weight increase. The battery itself is rumored to be 5,700 mAh, compared to S26 Ultra's 5,000 mAh power pack.</p><p>Samsung is also rumored to be adding magnets to the back of its phone, and facilitating the<a href="https://www.tomsguide.com/phones/what-is-qi2-wireless-charging"> full Qi2 wireless charging experience</a>. This would allow users to use magnetic chargers and accessories without using a special case, much like you can do on iPhones and recent Pixel flagships.</p><p>We don't know how heavy Qi2 or MagSafe magnets actually are, but they don't weigh nothing.</p><p>The Qi2-enabled <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-pro-xl-review">Pixel 10 Pro XL </a>was 11 grams heavier than the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-9-pro-xl-review">Pixel 9 Pro XL</a>, but the <a href="https://www.tomsguide.com/reviews/iphone-12-pro-max">iPhone 12 Pro Max</a> was just two grams heavier than the MagSafe-free<a href="https://www.tomsguide.com/reviews/iphone-11-pro-max"> iPhone 11 Pro Max</a>. </p><p>The Galaxy S27 series is expected to launch in early 2027, and in the meantime you can check out our story on <a href="https://www.tomsguide.com/phones/samsung-phones/5-ways-galaxy-s27-ultra-can-beat-the-iphone-18-pro-and-2-ways-apple-will-still-win">all the different ways it could beat the new iPhone 18 Pro.</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/phones/iphones/scammers-are-using-iphone-duo-pre-orders-to-try-and-steal-your-passwords-heres-how-to-stay-safe">Scammers are using iPhone Duo pre-orders to try and steal your passwords — here's how to stay safe</a></li><li><a href="https://www.tomsguide.com/phones/i-tore-my-living-room-apart-looking-for-the-apple-tv-remote-my-son-hid-but-this-hidden-iphone-feature-saved-the-day">I tore my living room apart looking for the Apple TV remote my son hid — until this iPhone feature saved the day</a></li><li><a href="https://www.tomsguide.com/phones/i-checked-out-the-new-samsung-smarttag3-heres-why-this-tracker-could-be-a-game-changer">I checked out the new Samsung SmartTag3 — here’s why this tracker could be a game-changer</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/all-three-galaxy-s27-models-tipped-for-price-hike-and-a-key-spec-for-the-s27-ultra-just-leaked</link>
                                                                            <description>
                            <![CDATA[ The Galaxy S27 Ultra could come with a higher price tag, and a heavier profile — here's what we know. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">cToohQswCUpTrEiph5TEpW</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/EKbAbDHJQJnhBVmx9jUbiC-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 01 Oct 2026 11:30:42 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/EKbAbDHJQJnhBVmx9jUbiC-1920-80.jpg">
                                                            <media:credit><![CDATA[Ice Universe]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Galaxy S27 Ultra render]]></media:description>                                                            <media:text><![CDATA[Galaxy S27 Ultra render]]></media:text>
                                <media:title type="plain"><![CDATA[Galaxy S27 Ultra render]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/EKbAbDHJQJnhBVmx9jUbiC-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Everything seems to be getting more expensive, and that's especially true when it comes to phones and other electronics. Production and component costs are on the rise, particularly RAM and storage, and that means the price increases getting passed on to us. Sadly, it seems as though the Galaxy S27 might be the next big phone to hike prices.</p><p>We've already heard rumors that the S27 Ultra could get a $100 price increase, which would mean <strong>prices start at $1,400 for the S27 UIltra</strong> instead of the current $1,300. However, the latest murmurs from the rumor mill suggest that the entire Galaxy S27 lineup could get a price increase. Again.</p><h2 id="galaxy-s27-price-hikes-across-the-board">Galaxy S27 Price hikes across the board</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4764px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="VAHvBkwzBN4PiKFx8EcuoW" name="Samsung Galaxy S26 review" alt="Samsung Galaxy S26 held in the hand." src="https://cdn.mos.cms.futurecdn.net/VAHvBkwzBN4PiKFx8EcuoW-1920-80.jpg" mos="" align="middle" fullscreen="" width="4764" height="2680" 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 rumor itself comes from a blog on Korean social media site <a href="https://blog.naver.com/yeux1122/224426981973" target="_blank">Naver</a>, and specifically blames the alleged price hike on the extortionate cost of memory. Apparently, Samsung can't absorb the price increases the way it used to, and that means the cost of S27 models is going up in the Korean market. </p><p>This doesn't necessarily mean that prices will be going up in other regions. That said, if a Korean price hike is tied to RAMageddon costs, it seems unlikely that Samsung would give other markets a pass. Then again, stranger things have happened.</p><p><strong>The base price increase is said to be in the "higher 130,000 won range" which is roughly $95 at the current exchange rate. </strong>The cost to upgrade your storage is said to be going up as well, though the exact price change isn't detailed. </p><p>Currently, an upgrade from 256GB to 512GB is an extra $200, while S26 Ultra owners are expected to pay another $400 on top of that if they want a 1TB model — or $600 more than a 256GB model. </p><p>That's quite a lot, especially when those sorts of upgrades used to be as little as $100 in recent years. The prospect of another storage price increase cements my opinion that <a href="https://www.tomsguide.com/phones/high-storage-phones-are-feeling-more-like-a-scam-than-ever-how-to-avoid-overpaying">high storage phones are a scam.</a></p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-W3Yd8X"></div>                            </div>                            <script src="https://kwizly.com/embed/W3Yd8X.js" async=""></script><h2 id="the-s27-ultra-could-be-even-heavier-too">The S27 Ultra could be even heavier, too</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="LacgYzjqWKVkFAs6DKZ3ak" name="S27 Ultra render" alt="Samsung Galaxy S27 Ultra render" src="https://cdn.mos.cms.futurecdn.net/LacgYzjqWKVkFAs6DKZ3ak-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: @TechHome100)</span></figcaption></figure><p>The price isn't the only thing about the Galaxy S27 Ultra that could be increasing. A new rumor, courtesy of<a href="https://x.com/UniverseIce/status/2105251565951218031" target="_blank"> Ice Universe,</a> claims that the phone will weigh 218 grams (7.69 ounces), which is four grams more than the Galaxy S26 Ultra. However, the thickness will apparently stay the same 7.9mm (0.31-inches) for another year.</p><div class="see-more see-more--clipped"><figure><blockquote class="twitter-tweet hawk-ignore" data-lang="en" cite="https://twitter.com/cantworkitout/status/2105251565951218031"><p lang="en" dir="ltr">Galaxy S27 Ultra 7.9mm 218g<a href="https://twitter.com/cantworkitout/status/2105251565951218031">September 30, 2026</a></p></blockquote></figure><div class="see-more__filter"></div></div><p>Ice Universe has a solid track record when it comes to Samsung leaks, but there's always a chance that he's wrong. However, if we take them at their word, those few extra grams have to come from somewhere. The question is, what is causing the extra weight to be piled onto the phone? Especially with rumors claiming that Samsung is <a href="https://www.tomsguide.com/phones/samsung-phones/the-samsung-galaxy-s27-ultra-could-ditch-the-redundant-3x-zoom-for-this-much-bigger-camera-upgrade">removing features like the secondary telephoto lens</a>.</p><p>The most obvious answer could be the battery. Samsung is expected to <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-ultra-leak-reveals-silicon-carbon-battery-leap-but-also-a-camera-downgrade">utilize silicon carbon batteries</a>, just as it did with 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> series, allowing it to add more battery capacity into the same size. That would explain the lack of extra thickness, and the minimal weight increase. The battery itself is rumored to be 5,700 mAh, compared to S26 Ultra's 5,000 mAh power pack.</p><p>Samsung is also rumored to be adding magnets to the back of its phone, and facilitating the<a href="https://www.tomsguide.com/phones/what-is-qi2-wireless-charging"> full Qi2 wireless charging experience</a>. This would allow users to use magnetic chargers and accessories without using a special case, much like you can do on iPhones and recent Pixel flagships.</p><p>We don't know how heavy Qi2 or MagSafe magnets actually are, but they don't weigh nothing.</p><p>The Qi2-enabled <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-pro-xl-review">Pixel 10 Pro XL </a>was 11 grams heavier than the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-9-pro-xl-review">Pixel 9 Pro XL</a>, but the <a href="https://www.tomsguide.com/reviews/iphone-12-pro-max">iPhone 12 Pro Max</a> was just two grams heavier than the MagSafe-free<a href="https://www.tomsguide.com/reviews/iphone-11-pro-max"> iPhone 11 Pro Max</a>. </p><p>The Galaxy S27 series is expected to launch in early 2027, and in the meantime you can check out our story on <a href="https://www.tomsguide.com/phones/samsung-phones/5-ways-galaxy-s27-ultra-can-beat-the-iphone-18-pro-and-2-ways-apple-will-still-win">all the different ways it could beat the new iPhone 18 Pro.</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/phones/iphones/scammers-are-using-iphone-duo-pre-orders-to-try-and-steal-your-passwords-heres-how-to-stay-safe">Scammers are using iPhone Duo pre-orders to try and steal your passwords — here's how to stay safe</a></li><li><a href="https://www.tomsguide.com/phones/i-tore-my-living-room-apart-looking-for-the-apple-tv-remote-my-son-hid-but-this-hidden-iphone-feature-saved-the-day">I tore my living room apart looking for the Apple TV remote my son hid — until this iPhone feature saved the day</a></li><li><a href="https://www.tomsguide.com/phones/i-checked-out-the-new-samsung-smarttag3-heres-why-this-tracker-could-be-a-game-changer">I checked out the new Samsung SmartTag3 — here’s why this tracker could be a game-changer</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Samsung Galaxy S27 Ultra may scrap the 10MP telephoto lens — and there's no word of a replacement ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The <a href="https://www.tomsguide.com/phones/samsung-phones/5-ways-galaxy-s27-ultra-can-beat-the-iphone-18-pro-and-2-ways-apple-will-still-win">Samsung Galaxy S27 Ultra</a> is coming next year, and we've already started hearing a bunch of rumors about the upcoming phone, including a redesign that could see the camera layout drastically change for the first time in several years. However, the latest leaks suggest Samsung will implement much grander changes than just the camera's look.</p><p>In fact, it now seems as though the new look could come at the expense of Samsung's trademark fourth camera lens — the secondary telephoto camera with 3x optical zoom. Or, at least, that's what long-time leaker Ice Universe <a href="https://x.com/UniverseIce/status/2104758778726109407" target="_blank">claims over on X</a>.</p><div class="see-more see-more--clipped"><figure><blockquote class="twitter-tweet hawk-ignore" data-lang="en" cite="https://twitter.com/cantworkitout/status/2104758778726109407"><p lang="en" dir="ltr">It is now confirmed that the Galaxy S27 Ultra will no longer have a 3× telephoto camera.This means its rear camera system will jump directly from the 1× main camera to the 5× telephoto camera.The main camera uses the ISOCELL HP6, essentially a Galaxy-customized version of the… https://t.co/qYGcdX93oy<a href="https://twitter.com/cantworkitout/status/2104758778726109407">September 29, 2026</a></p></blockquote></figure><div class="see-more__filter"></div></div><p>Ice Universe notes that the camera app will now jump from 1x magnification on the main lens, straight to 5x magnification on the soon-to-be-solo telephoto lens. So there's no optical magnification sitting between the two, though the main lens will presumably still offer the 2x "optical quality" digital zoom that's become so popular on flagship phones in recent years.</p><p>Ice has stuck with past claims that the telephoto camera itself will remain unchanged, with the same 5x 50MP lens that is currently available on the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review">Samsung Galaxy S26 Ultra</a>. This also means that the long-standing rumors that Samsung might offer some kind of <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s25-ultra-just-tipped-for-major-camera-change-what-you-need-to-know">variable optical zoom</a> presumably won't be happening next year. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XYdpAO"></div>                            </div>                            <script src="https://kwizly.com/embed/XYdpAO.js" async=""></script><h2 id="the-software-could-be-changing-too">The software could be changing too</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="LacgYzjqWKVkFAs6DKZ3ak" name="S27 Ultra render" alt="Samsung Galaxy S27 Ultra render" src="https://cdn.mos.cms.futurecdn.net/LacgYzjqWKVkFAs6DKZ3ak-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: @TechHome100)</span></figcaption></figure><p>Modern smartphone photography involves a lot more than having lots of megapixels or fancy lenses. The software is an integral part of the process, and the Galaxy S27 Ultra is tipped to make some big changes there as well.</p><p>This news also comes from<a href="https://x.com/UniverseIce/status/2104724003713933400" target="_blank"> Ice Universe</a>, which claims three changes are coming to how the S27 Ultra processes photos. The first of which is a shift from cooler color tones to something warmer. I have noticed this with Samsung cameras in recent years, and the color-temperature shift should make the final photos look closer to what rival camera phones offer.</p><div class="see-more see-more--clipped"><figure><blockquote class="twitter-tweet hawk-ignore" data-lang="en" cite="https://twitter.com/cantworkitout/status/2104724003713933400"><p lang="en" dir="ltr">Exclusive, detailed leak: Compared with the Galaxy S26 Ultra, the Galaxy S27 Ultra brings three very noticeable changes to its camera processing:1. The overall color tone has clearly shifted from cool to warmThis is the most obvious change, and something you can notice almost…<a href="https://twitter.com/cantworkitout/status/2104724003713933400">September 29, 2026</a></p></blockquote></figure><div class="see-more__filter"></div></div><p>Samsung is also set to include better highlight control for small, bright objects, such as illuminated text or far-off light sources. According to Ice, the S26 Ultra struggles to suppress these highlights, causing lost detail and overexposure in the final photo. The S27 Ultra should, in theory, control that extra brightness and preserve the clarity of the shot.</p><p>Finally, Samsung is supposedly working to reduce noise in dark areas and offer a smoother image all round. This makes perfect sense, since Samsung has done a lot of work improving low-light capabilities and reducing photo noise over the past couple of years, with the help of AI. So there's little reason to expect that it would suddenly stop without warning. </p><p>Overall, this should give us better photos with a cleaner picture across light and shadow, plus a warmer tone that doesn't look as harsh as the current cool-looking Samsung-processed photos.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide </span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-leak-reveals-a-bunch-of-standby-details-apple-didnt-tell-us-about-including-what-sounds-like-a-smart-home-display">iPhone Duo leak reveals a bunch of StandBy details Apple didn't tell us about — including what sounds like a smart home display</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/5-ways-galaxy-s27-ultra-can-beat-the-iphone-18-pro-and-2-ways-apple-will-still-win">5 ways Galaxy S27 Ultra can beat the iPhone 18 Pro — and 2 ways Apple will still win</a></li><li><a href="https://www.tomsguide.com/phones/iphones/the-real-reason-why-iphone-duo-will-beat-all-android-foldable-phones">The real reason why iPhone Duo will beat all Android foldable phones</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-ultra-may-scrap-the-10mp-telephoto-lens-and-theres-no-word-of-a-replacement</link>
                                                                            <description>
                            <![CDATA[ The Samsung Galaxy S27 Ultra could ditch one camera and change how it processes photos. Here's what we know. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">g5tBMj9w28M5K3fi6KUTBk</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/vbGrCLaZGfUvCojyg8YYUd-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 29 Sep 2026 12:02:45 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/vbGrCLaZGfUvCojyg8YYUd-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Samsung Galaxy S26 Ultra]]></media:description>                                                            <media:text><![CDATA[Samsung Galaxy S26 Ultra]]></media:text>
                                <media:title type="plain"><![CDATA[Samsung Galaxy S26 Ultra]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/vbGrCLaZGfUvCojyg8YYUd-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The <a href="https://www.tomsguide.com/phones/samsung-phones/5-ways-galaxy-s27-ultra-can-beat-the-iphone-18-pro-and-2-ways-apple-will-still-win">Samsung Galaxy S27 Ultra</a> is coming next year, and we've already started hearing a bunch of rumors about the upcoming phone, including a redesign that could see the camera layout drastically change for the first time in several years. However, the latest leaks suggest Samsung will implement much grander changes than just the camera's look.</p><p>In fact, it now seems as though the new look could come at the expense of Samsung's trademark fourth camera lens — the secondary telephoto camera with 3x optical zoom. Or, at least, that's what long-time leaker Ice Universe <a href="https://x.com/UniverseIce/status/2104758778726109407" target="_blank">claims over on X</a>.</p><div class="see-more see-more--clipped"><figure><blockquote class="twitter-tweet hawk-ignore" data-lang="en" cite="https://twitter.com/cantworkitout/status/2104758778726109407"><p lang="en" dir="ltr">It is now confirmed that the Galaxy S27 Ultra will no longer have a 3× telephoto camera.This means its rear camera system will jump directly from the 1× main camera to the 5× telephoto camera.The main camera uses the ISOCELL HP6, essentially a Galaxy-customized version of the… https://t.co/qYGcdX93oy<a href="https://twitter.com/cantworkitout/status/2104758778726109407">September 29, 2026</a></p></blockquote></figure><div class="see-more__filter"></div></div><p>Ice Universe notes that the camera app will now jump from 1x magnification on the main lens, straight to 5x magnification on the soon-to-be-solo telephoto lens. So there's no optical magnification sitting between the two, though the main lens will presumably still offer the 2x "optical quality" digital zoom that's become so popular on flagship phones in recent years.</p><p>Ice has stuck with past claims that the telephoto camera itself will remain unchanged, with the same 5x 50MP lens that is currently available on the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review">Samsung Galaxy S26 Ultra</a>. This also means that the long-standing rumors that Samsung might offer some kind of <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s25-ultra-just-tipped-for-major-camera-change-what-you-need-to-know">variable optical zoom</a> presumably won't be happening next year. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XYdpAO"></div>                            </div>                            <script src="https://kwizly.com/embed/XYdpAO.js" async=""></script><h2 id="the-software-could-be-changing-too">The software could be changing too</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="LacgYzjqWKVkFAs6DKZ3ak" name="S27 Ultra render" alt="Samsung Galaxy S27 Ultra render" src="https://cdn.mos.cms.futurecdn.net/LacgYzjqWKVkFAs6DKZ3ak-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: @TechHome100)</span></figcaption></figure><p>Modern smartphone photography involves a lot more than having lots of megapixels or fancy lenses. The software is an integral part of the process, and the Galaxy S27 Ultra is tipped to make some big changes there as well.</p><p>This news also comes from<a href="https://x.com/UniverseIce/status/2104724003713933400" target="_blank"> Ice Universe</a>, which claims three changes are coming to how the S27 Ultra processes photos. The first of which is a shift from cooler color tones to something warmer. I have noticed this with Samsung cameras in recent years, and the color-temperature shift should make the final photos look closer to what rival camera phones offer.</p><div class="see-more see-more--clipped"><figure><blockquote class="twitter-tweet hawk-ignore" data-lang="en" cite="https://twitter.com/cantworkitout/status/2104724003713933400"><p lang="en" dir="ltr">Exclusive, detailed leak: Compared with the Galaxy S26 Ultra, the Galaxy S27 Ultra brings three very noticeable changes to its camera processing:1. The overall color tone has clearly shifted from cool to warmThis is the most obvious change, and something you can notice almost…<a href="https://twitter.com/cantworkitout/status/2104724003713933400">September 29, 2026</a></p></blockquote></figure><div class="see-more__filter"></div></div><p>Samsung is also set to include better highlight control for small, bright objects, such as illuminated text or far-off light sources. According to Ice, the S26 Ultra struggles to suppress these highlights, causing lost detail and overexposure in the final photo. The S27 Ultra should, in theory, control that extra brightness and preserve the clarity of the shot.</p><p>Finally, Samsung is supposedly working to reduce noise in dark areas and offer a smoother image all round. This makes perfect sense, since Samsung has done a lot of work improving low-light capabilities and reducing photo noise over the past couple of years, with the help of AI. So there's little reason to expect that it would suddenly stop without warning. </p><p>Overall, this should give us better photos with a cleaner picture across light and shadow, plus a warmer tone that doesn't look as harsh as the current cool-looking Samsung-processed photos.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide </span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-leak-reveals-a-bunch-of-standby-details-apple-didnt-tell-us-about-including-what-sounds-like-a-smart-home-display">iPhone Duo leak reveals a bunch of StandBy details Apple didn't tell us about — including what sounds like a smart home display</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/5-ways-galaxy-s27-ultra-can-beat-the-iphone-18-pro-and-2-ways-apple-will-still-win">5 ways Galaxy S27 Ultra can beat the iPhone 18 Pro — and 2 ways Apple will still win</a></li><li><a href="https://www.tomsguide.com/phones/iphones/the-real-reason-why-iphone-duo-will-beat-all-android-foldable-phones">The real reason why iPhone Duo will beat all Android foldable phones</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 5 ways Galaxy S27 Ultra can beat the iPhone 18 Pro — and 2 ways Apple will still win ]]></title>
                                                                                                <dc:content><![CDATA[ <p>There are a lot of things to love about the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-and-pro-max-review">iPhone 18 Pro and iPhone 18 Pro Max,</a> but they definitely are not perfect. There are things that Apple's latest flagships are missing, and that could give Samsung an advantage with the release of the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-ultra-design-leaked-and-it-could-cause-the-most-intense-wave-of-criticism-in-galaxy-history">Galaxy S27 Ultra</a> next year. </p><p>Success over Apple isn't guaranteed, but with Galaxy S27 Ultra rumors arriving pretty regularly, we're getting a good idea of what the next Samsung flagship could offer. There could be some pretty big changes, including a brand new design that ditches the vertical camera array of the last several generations of Galaxy phones. </p><p>That's only scratching the surface. These 5 things in particular could help the Samsung Galaxy S27 Ultra beat the iPhone 18 Pro — but there are two ways Apple could stay on top.</p><h3 class="article-body__section" id="section-a-bigger-battery"><span>A bigger battery</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3755px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="iGGyvv7a4hQPrn26YbFnid" name="Galaxy S26 Ultra 24 hours-11" alt="Samsung Galaxy S26 Ultra" src="https://cdn.mos.cms.futurecdn.net/iGGyvv7a4hQPrn26YbFnid-1920-80.jpg" mos="" align="middle" fullscreen="" width="3755" height="2112" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Samsung already proved that it has what it takes to boost battery capacity without affecting the design of the device — as we saw with the <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-vs-fold-8-ultra-vs-flip-8-battery-tests-silicon-carbon-pays-off">Galaxy Z Fold 8 Ultra's 5,000 mAh silicon carbon battery</a>. Rumor has it that Samsung could utilize the same tech in the S27 Ultra, which makes total sense considering how long the Ultra models have been stuck with 5,000 mAh batteries</p><p>Regulator documents have already revealed that <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-ultra-leak-reveals-silicon-carbon-battery-leap-but-also-a-camera-downgrade">Samsung could add a 5,700 mAh battery to the phone</a>. That's a 14% increase over the<a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review"> Galaxy S26 Ultra</a>, and while it's nowhere near as large as the 7,300 mAh <a href="https://www.tomsguide.com/phones/oneplus-phones/oneplus-15-review">OnePlus 15</a>, it's still a noticeable jump in available power. That should hopefully increase the overall battery life. That said, we won't know whether it will exceed the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-max-and-18-pro-battery-life-tested-the-results-are-surprising">iPhone 18 Pro Max's 18 hours and 27 minutes</a>. </p><p>That would require an extra two hours of battery life on Samsung's part, so it better get to work on the efficiency side of things.</p><h3 class="article-body__section" id="section-an-improved-privacy-display"><span>An improved privacy display</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="f7xgeogiw6KvPnUbLtRM34" name="Galaxy S26 Ultra privacy screen LIST (1)" alt="Samsung Galaxy S26 Ultra front view and profile" src="https://cdn.mos.cms.futurecdn.net/f7xgeogiw6KvPnUbLtRM34-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-has-the-worlds-first-privacy-display-heres-how-it-works">Privacy Display</a> is the S26 Ultra's stand-out feature, but it wasn't perfect, and what we really want to see are some improvements to the technology. We'd hope that means brighter overall displays, even when Privacy Display is turned off, and more versatile use of the dimmed sections of the screen.</p><p>The latter may be coming true, with leaker <a href="https://x.com/UniverseIce/status/2103074330351751491?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E2103074330351751491%7Ctwgr%5E25a2a2ada5c14def33c245f770f969839de48b85%7Ctwcon%5Es1_&amp;ref_url=https%3A%2F%2Fwww.androidauthority.com%2Fsamsung-galaxy-s27-ultra-split-screen-privacy-display-3715094%2F">Ice Universe</a> claiming that Samsung will adopt a feature that Xiaomi included on the newly-released 18 Pro — a split-screen privacy display. This feature would work in tandem with the S27 Ultra's multitasking, and would expand or contract according to how big the different windows are. The other window is fully lit and visible.</p><h3 class="article-body__section" id="section-s-pen"><span>S Pen</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="UfraPifaz2CpXLbJKJYqDY" name="S Pen S26 Ultra" alt="Samsung Galaxy S26 Ultra S Pen" src="https://cdn.mos.cms.futurecdn.net/UfraPifaz2CpXLbJKJYqDY-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>While the <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-hands-on-apple-nailed-it-and-just-put-everyone-else-on-notice">iPhone Duo </a>is set to <a href="https://www.tomsguide.com/phones/iphones/steve-jobs-said-there-would-never-be-an-iphone-stylus-but-iphone-duo-just-proved-him-wrong-and-itll-be-a-better-device-for-it">get Apple Pencil support,</a> the iPhone 18 Pro does not. The Samsung Galaxy S27 Ultra is <a href="https://www.etnews.com/20260320000126" target="_blank">likely to stick</a> with the same level of S Pen support Samsung has offered for the past several years.</p><p>We're not expecting any major changes with the S27 Ultra's S Pen. This means you shouldn't expect to see the <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-s25-ultra-confusion-samsung-now-says-you-can-buy-bluetooth-s-pen-separately">return of Bluetooth or other more advanced functionality</a> we have seen in previous years. But even the simplest S Pen around is something that Apple doesn't offer on its flagship. So if you like to use a stylus to draw, take notes or make fine photo edits, the S27 Ultra is a more appealing device.</p><h3 class="article-body__section" id="section-better-camera-hardware"><span>Better camera hardware</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2715px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="vbGrCLaZGfUvCojyg8YYUd" name="Galaxy S26 Ultra 24 hours-12" alt="Samsung Galaxy S26 Ultra" src="https://cdn.mos.cms.futurecdn.net/vbGrCLaZGfUvCojyg8YYUd-1920-80.jpg" mos="" align="middle" fullscreen="" width="2715" height="1527" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Ultra-tier Galaxy phones already have superior camera hardware, thanks to the 200MP main sensor, but things could be getting even better with the S27 Ultra — in the front and back of the phone. </p><p>The first upgrade rumor is the addition of<a href="https://www.galaxyclub.nl/samsung/galaxy-s27/"> a 16MP selfie camera</a>, which would be a notable upgrade from the 12MP shooter on the S26 Ultra. While that's still a little bit less than the 18MP Center Stage camera on iPhone 18 Pro, it's still a welcome upgrade. However, Samsung could jump ahead with rumors of a large sensor on the telephoto lens.</p><p>Some rumors suggest that Samsung <a href="https://go.skimresources.com/?id=803X112721&amp;xs=1&amp;url=https://x.com/phonefuturist/status/2094046496362483863&amp;xcust=4-0-3238643-1-0-0-0-0&amp;sref=https://www.techadvisor.com/article/3238643/galaxy-s27-ultra-the-camera-upgrade-debate-rolls-on.html" target="_blank">could offer a larger</a> 1/1.9-inch telephoto sensor, but as a result reduce the amount of optical zoom from 5x magnification to 4x. However, this has been disputed by <a href="https://go.skimresources.com/?id=803X112721&amp;xs=1&amp;url=https://x.com/UniverseIce/status/2099327785814945972&amp;xcust=4-0-3238643-1-0-0-0-0&amp;sref=https://www.techadvisor.com/article/3238643/galaxy-s27-ultra-the-camera-upgrade-debate-rolls-on.html" target="_blank">some leakers,</a> who claim Samsung is sticking with the same 5x 1/2.52-inch sensor as the S26 Ultra. But either way, it's a telephoto lens offering higher resolution and sensor size than the 48MP 1/2.55-inch sensor on iPhone 18 Pro Max.</p><h3 class="article-body__section" id="section-a-16gb-ram-option"><span>A 16GB RAM option</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1704px;"><p class="vanilla-image-block" style="padding-top:54.17%;"><img id="U2CzUvPvEThFgKxQen6pD7" name="HHEajh5bAAAyh0z" alt="Samsung Galaxy S27 Ultra concept" src="https://cdn.mos.cms.futurecdn.net/U2CzUvPvEThFgKxQen6pD7-1920-80.jpg" mos="" align="middle" fullscreen="" width="1704" height="923" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Ice Universe)</span></figcaption></figure><p>While it's unlikely that we'll see the S27 Ultra get a full 16GB of RAM in its cheapest form, there's still a good chance the pricier 1TB models will get that memory boost. This should in turn give those models a slight advantage when it comes to processing, specifically where on-device AI is concerned.</p><p>Considering on-device AI is a big focus for Apple, the 12GB of RAM in the iPhone 18 Pro doesn't seem quite so impressive. The S27 Ultra, with more advanced Galaxy AI and computing hardware, could end up leaving the iPhone 18 Pro in the dust here.</p><h2 id="2-ways-apple-can-still-win">2 ways Apple can still win</h2><h3 class="article-body__section" id="section-performance-power"><span>Performance power</span></h3><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="473VNvCMPfhDkYKpe3aJjK" name="iPhone 18 Pro and Pro Max-12" alt="Apple iPhone 18 Pro and Pro Max shown in hand" src="https://cdn.mos.cms.futurecdn.net/473VNvCMPfhDkYKpe3aJjK-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>We can't say for certain how powerful the Galaxy S27 Ultra will be, but we have tested the chip that should power the phone when it arrives next year — the Snapdragon 8 Elite Extreme Gen 6. <a href="https://www.tomsguide.com/phones/android-phones/snapdragon-8-elite-gen-6-benchmark-test-results-hands-on-vs-a20-pro-iphone-18-pro">We have done some benchmarking tests with a Qualcomm Reference Device</a>, which gives us an idea of how the chip should perform. As powerful as it is, it doesn't really compare to Apple's A20 Pro in a lot of areas.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Geekbench 7 (single core)</strong></p></td><td  ><p><strong>Geekbench 7 (multi-core)</strong></p></td><td  ><p><strong>3DMark Solar Bay Extreme</strong></p></td><td  ><p><strong>3DMark Wildlife Extreme</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Snapdragon 8 Elite Extreme Gen 6 (QRD)</strong></p></td><td  ><p>4161</p></td><td  ><p>12464</p></td><td  ><p>2262</p></td><td  ><p>9941</p></td></tr><tr><td class="firstcol " ><p><strong>Snapdragon 8 Elite Gen 5 (Samsung Galaxy Z Fold 8 Ultra)</strong></p></td><td  ><p>3110</p></td><td  ><p>10578</p></td><td  ><p>1372</p></td><td  ><p>6632</p></td></tr><tr><td class="firstcol " ><p><strong>A20 Pro (iPhone 18 Pro Max)</strong></p></td><td  ><p>4741</p></td><td  ><p>12789</p></td><td  ><p>2904</p></td><td  ><p>8344</p></td></tr></tbody></table></div><p>As you can see, the A20 Pro pulls ahead in most areas, including single- and multi-core benchmarking tests, and 3DMark's Solar Bay Extreme graphics test. The figures are close in a lot of places, but the only time the Gen 6 chip outpaces Apple is with the 3DMark Wildlife Extreme graphics test.</p><p>We don't know how Qualcomm's chip will perform on the S27 Ultra, especially if Samsung gets another custom "for Galaxy" chipset, but for now it seems like Apple certainly has the upper hand.</p><h3 class="article-body__section" id="section-more-storage"><span>More storage</span></h3><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="5kKUCv7Eef6yGkMMGEgbvJ" name="iPhone 18 Pro and Pro Max-9" alt="Apple iPhone 18 Pro and Pro Max shown in hand" src="https://cdn.mos.cms.futurecdn.net/5kKUCv7Eef6yGkMMGEgbvJ-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>As small a difference as it may be, we know that Apple currently offers more storage space than Samsung — offering a maximum storage space of 2TB to Samsung's 1TB. There's always the possibility that this could change, but the rumors suggest otherwise. In fact, the S27 series will apparently have the exact same storage options as the S26 series. This means the Ultra will max out at 1TB.</p><p>Those larger storage variants might get<a href="https://blog.naver.com/yeux1122/224419648243"> LPDDR6 RAM and UFS 5.1 storage</a>, which would be a benefit for performance and loading speed. Sadly, your maximum limit will be the same 1TB as always, if these rumors are to be believed.</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/the-new-iphone-feature-in-ios-27-im-using-every-single-day-and-where-to-find-it">There's a new shortcut in iOS 27 I’m using every single day — here's where to find it</a></li><li><a href="https://www.tomsguide.com/phones/iphones/apple-confirms-iphone-18-pro-face-id-freezing-bug-what-you-need-to-know">Apple confirms iPhone 18 Pro Face ID freezing bug — what you need to know</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-7-features-youre-giving-up-by-not-buying-the-iphone-18-pro-max">iPhone Duo: 7 features you’re giving up by not buying the iPhone 18 Pro Max</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/5-ways-galaxy-s27-ultra-can-beat-the-iphone-18-pro-and-2-ways-apple-will-still-win</link>
                                                                            <description>
                            <![CDATA[ iPhone 18 Pro is good, but the Galaxy S27 Ultra could beat it in these key ways. Luckily Samsung can't do everything. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">aurwygfVY2c7C4dFHdAFGf</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/LacgYzjqWKVkFAs6DKZ3ak-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 29 Sep 2026 07:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/LacgYzjqWKVkFAs6DKZ3ak-1920-80.jpg">
                                                            <media:credit><![CDATA[@TechHome100]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Samsung Galaxy S27 Ultra render]]></media:description>                                                            <media:text><![CDATA[Samsung Galaxy S27 Ultra render]]></media:text>
                                <media:title type="plain"><![CDATA[Samsung Galaxy S27 Ultra render]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/LacgYzjqWKVkFAs6DKZ3ak-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>There are a lot of things to love about the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-and-pro-max-review">iPhone 18 Pro and iPhone 18 Pro Max,</a> but they definitely are not perfect. There are things that Apple's latest flagships are missing, and that could give Samsung an advantage with the release of the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-ultra-design-leaked-and-it-could-cause-the-most-intense-wave-of-criticism-in-galaxy-history">Galaxy S27 Ultra</a> next year. </p><p>Success over Apple isn't guaranteed, but with Galaxy S27 Ultra rumors arriving pretty regularly, we're getting a good idea of what the next Samsung flagship could offer. There could be some pretty big changes, including a brand new design that ditches the vertical camera array of the last several generations of Galaxy phones. </p><p>That's only scratching the surface. These 5 things in particular could help the Samsung Galaxy S27 Ultra beat the iPhone 18 Pro — but there are two ways Apple could stay on top.</p><h3 class="article-body__section" id="section-a-bigger-battery"><span>A bigger battery</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3755px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="iGGyvv7a4hQPrn26YbFnid" name="Galaxy S26 Ultra 24 hours-11" alt="Samsung Galaxy S26 Ultra" src="https://cdn.mos.cms.futurecdn.net/iGGyvv7a4hQPrn26YbFnid-1920-80.jpg" mos="" align="middle" fullscreen="" width="3755" height="2112" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Samsung already proved that it has what it takes to boost battery capacity without affecting the design of the device — as we saw with the <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-vs-fold-8-ultra-vs-flip-8-battery-tests-silicon-carbon-pays-off">Galaxy Z Fold 8 Ultra's 5,000 mAh silicon carbon battery</a>. Rumor has it that Samsung could utilize the same tech in the S27 Ultra, which makes total sense considering how long the Ultra models have been stuck with 5,000 mAh batteries</p><p>Regulator documents have already revealed that <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-ultra-leak-reveals-silicon-carbon-battery-leap-but-also-a-camera-downgrade">Samsung could add a 5,700 mAh battery to the phone</a>. That's a 14% increase over the<a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review"> Galaxy S26 Ultra</a>, and while it's nowhere near as large as the 7,300 mAh <a href="https://www.tomsguide.com/phones/oneplus-phones/oneplus-15-review">OnePlus 15</a>, it's still a noticeable jump in available power. That should hopefully increase the overall battery life. That said, we won't know whether it will exceed the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-max-and-18-pro-battery-life-tested-the-results-are-surprising">iPhone 18 Pro Max's 18 hours and 27 minutes</a>. </p><p>That would require an extra two hours of battery life on Samsung's part, so it better get to work on the efficiency side of things.</p><h3 class="article-body__section" id="section-an-improved-privacy-display"><span>An improved privacy display</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="f7xgeogiw6KvPnUbLtRM34" name="Galaxy S26 Ultra privacy screen LIST (1)" alt="Samsung Galaxy S26 Ultra front view and profile" src="https://cdn.mos.cms.futurecdn.net/f7xgeogiw6KvPnUbLtRM34-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-has-the-worlds-first-privacy-display-heres-how-it-works">Privacy Display</a> is the S26 Ultra's stand-out feature, but it wasn't perfect, and what we really want to see are some improvements to the technology. We'd hope that means brighter overall displays, even when Privacy Display is turned off, and more versatile use of the dimmed sections of the screen.</p><p>The latter may be coming true, with leaker <a href="https://x.com/UniverseIce/status/2103074330351751491?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E2103074330351751491%7Ctwgr%5E25a2a2ada5c14def33c245f770f969839de48b85%7Ctwcon%5Es1_&amp;ref_url=https%3A%2F%2Fwww.androidauthority.com%2Fsamsung-galaxy-s27-ultra-split-screen-privacy-display-3715094%2F">Ice Universe</a> claiming that Samsung will adopt a feature that Xiaomi included on the newly-released 18 Pro — a split-screen privacy display. This feature would work in tandem with the S27 Ultra's multitasking, and would expand or contract according to how big the different windows are. The other window is fully lit and visible.</p><h3 class="article-body__section" id="section-s-pen"><span>S Pen</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="UfraPifaz2CpXLbJKJYqDY" name="S Pen S26 Ultra" alt="Samsung Galaxy S26 Ultra S Pen" src="https://cdn.mos.cms.futurecdn.net/UfraPifaz2CpXLbJKJYqDY-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>While the <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-hands-on-apple-nailed-it-and-just-put-everyone-else-on-notice">iPhone Duo </a>is set to <a href="https://www.tomsguide.com/phones/iphones/steve-jobs-said-there-would-never-be-an-iphone-stylus-but-iphone-duo-just-proved-him-wrong-and-itll-be-a-better-device-for-it">get Apple Pencil support,</a> the iPhone 18 Pro does not. The Samsung Galaxy S27 Ultra is <a href="https://www.etnews.com/20260320000126" target="_blank">likely to stick</a> with the same level of S Pen support Samsung has offered for the past several years.</p><p>We're not expecting any major changes with the S27 Ultra's S Pen. This means you shouldn't expect to see the <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-s25-ultra-confusion-samsung-now-says-you-can-buy-bluetooth-s-pen-separately">return of Bluetooth or other more advanced functionality</a> we have seen in previous years. But even the simplest S Pen around is something that Apple doesn't offer on its flagship. So if you like to use a stylus to draw, take notes or make fine photo edits, the S27 Ultra is a more appealing device.</p><h3 class="article-body__section" id="section-better-camera-hardware"><span>Better camera hardware</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2715px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="vbGrCLaZGfUvCojyg8YYUd" name="Galaxy S26 Ultra 24 hours-12" alt="Samsung Galaxy S26 Ultra" src="https://cdn.mos.cms.futurecdn.net/vbGrCLaZGfUvCojyg8YYUd-1920-80.jpg" mos="" align="middle" fullscreen="" width="2715" height="1527" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Ultra-tier Galaxy phones already have superior camera hardware, thanks to the 200MP main sensor, but things could be getting even better with the S27 Ultra — in the front and back of the phone. </p><p>The first upgrade rumor is the addition of<a href="https://www.galaxyclub.nl/samsung/galaxy-s27/"> a 16MP selfie camera</a>, which would be a notable upgrade from the 12MP shooter on the S26 Ultra. While that's still a little bit less than the 18MP Center Stage camera on iPhone 18 Pro, it's still a welcome upgrade. However, Samsung could jump ahead with rumors of a large sensor on the telephoto lens.</p><p>Some rumors suggest that Samsung <a href="https://go.skimresources.com/?id=803X112721&amp;xs=1&amp;url=https://x.com/phonefuturist/status/2094046496362483863&amp;xcust=4-0-3238643-1-0-0-0-0&amp;sref=https://www.techadvisor.com/article/3238643/galaxy-s27-ultra-the-camera-upgrade-debate-rolls-on.html" target="_blank">could offer a larger</a> 1/1.9-inch telephoto sensor, but as a result reduce the amount of optical zoom from 5x magnification to 4x. However, this has been disputed by <a href="https://go.skimresources.com/?id=803X112721&amp;xs=1&amp;url=https://x.com/UniverseIce/status/2099327785814945972&amp;xcust=4-0-3238643-1-0-0-0-0&amp;sref=https://www.techadvisor.com/article/3238643/galaxy-s27-ultra-the-camera-upgrade-debate-rolls-on.html" target="_blank">some leakers,</a> who claim Samsung is sticking with the same 5x 1/2.52-inch sensor as the S26 Ultra. But either way, it's a telephoto lens offering higher resolution and sensor size than the 48MP 1/2.55-inch sensor on iPhone 18 Pro Max.</p><h3 class="article-body__section" id="section-a-16gb-ram-option"><span>A 16GB RAM option</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1704px;"><p class="vanilla-image-block" style="padding-top:54.17%;"><img id="U2CzUvPvEThFgKxQen6pD7" name="HHEajh5bAAAyh0z" alt="Samsung Galaxy S27 Ultra concept" src="https://cdn.mos.cms.futurecdn.net/U2CzUvPvEThFgKxQen6pD7-1920-80.jpg" mos="" align="middle" fullscreen="" width="1704" height="923" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Ice Universe)</span></figcaption></figure><p>While it's unlikely that we'll see the S27 Ultra get a full 16GB of RAM in its cheapest form, there's still a good chance the pricier 1TB models will get that memory boost. This should in turn give those models a slight advantage when it comes to processing, specifically where on-device AI is concerned.</p><p>Considering on-device AI is a big focus for Apple, the 12GB of RAM in the iPhone 18 Pro doesn't seem quite so impressive. The S27 Ultra, with more advanced Galaxy AI and computing hardware, could end up leaving the iPhone 18 Pro in the dust here.</p><h2 id="2-ways-apple-can-still-win">2 ways Apple can still win</h2><h3 class="article-body__section" id="section-performance-power"><span>Performance power</span></h3><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="473VNvCMPfhDkYKpe3aJjK" name="iPhone 18 Pro and Pro Max-12" alt="Apple iPhone 18 Pro and Pro Max shown in hand" src="https://cdn.mos.cms.futurecdn.net/473VNvCMPfhDkYKpe3aJjK-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>We can't say for certain how powerful the Galaxy S27 Ultra will be, but we have tested the chip that should power the phone when it arrives next year — the Snapdragon 8 Elite Extreme Gen 6. <a href="https://www.tomsguide.com/phones/android-phones/snapdragon-8-elite-gen-6-benchmark-test-results-hands-on-vs-a20-pro-iphone-18-pro">We have done some benchmarking tests with a Qualcomm Reference Device</a>, which gives us an idea of how the chip should perform. As powerful as it is, it doesn't really compare to Apple's A20 Pro in a lot of areas.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Geekbench 7 (single core)</strong></p></td><td  ><p><strong>Geekbench 7 (multi-core)</strong></p></td><td  ><p><strong>3DMark Solar Bay Extreme</strong></p></td><td  ><p><strong>3DMark Wildlife Extreme</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Snapdragon 8 Elite Extreme Gen 6 (QRD)</strong></p></td><td  ><p>4161</p></td><td  ><p>12464</p></td><td  ><p>2262</p></td><td  ><p>9941</p></td></tr><tr><td class="firstcol " ><p><strong>Snapdragon 8 Elite Gen 5 (Samsung Galaxy Z Fold 8 Ultra)</strong></p></td><td  ><p>3110</p></td><td  ><p>10578</p></td><td  ><p>1372</p></td><td  ><p>6632</p></td></tr><tr><td class="firstcol " ><p><strong>A20 Pro (iPhone 18 Pro Max)</strong></p></td><td  ><p>4741</p></td><td  ><p>12789</p></td><td  ><p>2904</p></td><td  ><p>8344</p></td></tr></tbody></table></div><p>As you can see, the A20 Pro pulls ahead in most areas, including single- and multi-core benchmarking tests, and 3DMark's Solar Bay Extreme graphics test. The figures are close in a lot of places, but the only time the Gen 6 chip outpaces Apple is with the 3DMark Wildlife Extreme graphics test.</p><p>We don't know how Qualcomm's chip will perform on the S27 Ultra, especially if Samsung gets another custom "for Galaxy" chipset, but for now it seems like Apple certainly has the upper hand.</p><h3 class="article-body__section" id="section-more-storage"><span>More storage</span></h3><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="5kKUCv7Eef6yGkMMGEgbvJ" name="iPhone 18 Pro and Pro Max-9" alt="Apple iPhone 18 Pro and Pro Max shown in hand" src="https://cdn.mos.cms.futurecdn.net/5kKUCv7Eef6yGkMMGEgbvJ-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>As small a difference as it may be, we know that Apple currently offers more storage space than Samsung — offering a maximum storage space of 2TB to Samsung's 1TB. There's always the possibility that this could change, but the rumors suggest otherwise. In fact, the S27 series will apparently have the exact same storage options as the S26 series. This means the Ultra will max out at 1TB.</p><p>Those larger storage variants might get<a href="https://blog.naver.com/yeux1122/224419648243"> LPDDR6 RAM and UFS 5.1 storage</a>, which would be a benefit for performance and loading speed. Sadly, your maximum limit will be the same 1TB as always, if these rumors are to be believed.</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/the-new-iphone-feature-in-ios-27-im-using-every-single-day-and-where-to-find-it">There's a new shortcut in iOS 27 I’m using every single day — here's where to find it</a></li><li><a href="https://www.tomsguide.com/phones/iphones/apple-confirms-iphone-18-pro-face-id-freezing-bug-what-you-need-to-know">Apple confirms iPhone 18 Pro Face ID freezing bug — what you need to know</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-7-features-youre-giving-up-by-not-buying-the-iphone-18-pro-max">iPhone Duo: 7 features you’re giving up by not buying the iPhone 18 Pro Max</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 5 things Galaxy Z Fold 9 needs to steal from iPhone Duo — and 2 it shouldn't ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-hands-on-apple-nailed-it-and-just-put-everyone-else-on-notice">iPhone Duo</a> is ticking all of the right boxes at the moment, wowing just about everyone that's been able to use it ahead of its official release Oct. 23. We still don't know how much of a success the phone will be, especially considering the $2,000 price tag, but you can be sure other phone makers are watching closely — especially Samsung.</p><p>Samsung has been the de-factor king of the foldable phone business for several years. Mainly because, outside of China, the <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">best foldables</a> have been limited to Google and Motorola — who haven't exactly put up much of a fight. Apple could finally bring the Galaxy Fold series some serious competition, and if I were Samsung I'd be looking for ways to make my foldables stand out. Even if it means blatantly copying Apple's ideas.</p><p>Here are five things the Galaxy Z Fold 9 should steal from iPhone Duo, and two things it should leave well alone.</p><h2 id="what-z-fold-9-should-steal-from-iphone-duo">What Z Fold 9 should steal from iPhone Duo</h2><h3 class="article-body__section" id="section-under-display-camera"><span>Under display camera</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Mdj8kozN6J8WNXPhazFQFa" name="iPhone Duo edit 1" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/Mdj8kozN6J8WNXPhazFQFa-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Samsung had under-display cameras on the Galaxy Z Fold lineup for four generations, from the <a href="https://www.tomsguide.com/reviews/samsung-galaxy-z-fold-3">Galaxy Z Fold 3</a> to <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-6-review-test-results">Z Fold 6</a>. The quality of those cameras was a little... weak, to say the least, so it's no surprise that Samsung pulled them for the last two generations. But maybe now is the time to bring them back.</p><p>Apple has added an under-display camera to the iPhone Duo's foldable display, though this one isn't designed for selfies. Apple has referred to it as a FaceTime camera, and talked about its use as an aid for video calling. That suggests the quality isn't all that either, but by limiting its use cases (at least in marketing) Apple can avoid the same criticisms as Samsung.</p><p>This means the Z Fold 9 could be the perfect time for Samsung to bring the under-display camera back — and give you more of your screen back. Plus, considering you can already take selfies with the rear cameras and the hole-punch on the cover display, I'd avoid using it as a way to take photos of yourself.</p><h3 class="article-body__section" id="section-s-pen-support"><span>S Pen support</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="JUVSwuTeFABcGUzkRL8WtU" name="Galaxy Z Fold 6 and S Pen.jpg" alt="Samsung Galaxy Z Fold 6 and S Pen" src="https://cdn.mos.cms.futurecdn.net/JUVSwuTeFABcGUzkRL8WtU-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The loss of the stylus is one of the things Galaxy foldable fans have been complaining about since the release of <a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-7-review">Galaxy Z Fold 7</a>. The stylus requires a special digitizer layer in the display, which was removed in an apparent attempt to reduce thickness. Which isn't a great reason to remove a long-standing feature, especially when it leaves Galaxy foldables feeling a little bit lacking.</p><p>Not only does the<a href="https://www.tomsguide.com/phones/iphones/steve-jobs-said-there-would-never-be-an-iphone-stylus-but-iphone-duo-just-proved-him-wrong-and-itll-be-a-better-device-for-it"> iPhone Duo have stylus support, it uses the Apple Pencil USB-C</a> — which is compatible with almost every iPad on sale. There's no special iPhone-exclusive stylus; it's the one a lot of iPad users may already have. The same couldn't be said for past Z Fold models, which needed a special foldable-exclusive stylus designed for the more fragile folding display.</p><p>I felt that the Galaxy Z Fold 8 Ultra was missing out on account of its lost stylus, and the launch of Z Fold 9 would be the perfect opportunity to reintroduce that support. Ideally, it would the form of a stylus that will work across Galaxy devices, including tablets and other phones.</p><h3 class="article-body__section" id="section-ip68-durability"><span>IP68 durability</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="F6qr2SDN3gLqxsmgpqVYsY" name="Fold 8 back 2" alt="Samsung Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/F6qr2SDN3gLqxsmgpqVYsY-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Google was the first foldable phone maker in the U.S. to add IP68 water and dust resistance to foldables with <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-10-pro-fold-review">Pixel 10 Pro Fold</a>, and Apple has followed its example with iPhone Duo. Galaxy Z Fold 8, on the other hand only has an IP48 rating, which means it's totally exposed to dust — even if it is sealed tight against water.</p><p>Obviously, that's not a good look for Samsung, especially when you consider all the moving parts associated with a foldable hinge. You should be able to take your $1,900 to $2,000 foldable to the beach. So Samsung definitely needs to do better with the Z Fold 9.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-exgNKX"></div>                            </div>                            <script src="https://kwizly.com/embed/exgNKX.js" async=""></script><h3 class="article-body__section" id="section-magnetic-wireless-charging-built-in"><span>Magnetic wireless charging built in</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="q4DNX2SeEFU5sCTTt45wEa" name="iphone duo edit 5" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/q4DNX2SeEFU5sCTTt45wEa-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>One of the things I'll never understand is why Samsung is so <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-may-skip-adding-qi2-to-the-galaxy-s26-ultra-and-i-think-theyve-made-the-right-call">seemingly against adding magnetic wireless charging</a> to its phones — foldables included. The phones support Qi2 wireless charging technology, but they lack the integrated magnets that let chargers and accessories snap into place.</p><p>One reason I was given was that<a href="https://www.tomsguide.com/phones/samsung-phones/samsung-may-skip-adding-qi2-to-the-galaxy-s26-ultra-and-i-think-theyve-made-the-right-call"> the magnets interfered with the S Pen</a>, and Samsung couldn't offer both. But considering the iPhone Duo has Apple Pencil support and MagSafe, it's clear that there is a way to offer both features without asking users to compromise. Because a magnetic case system is just a poor show for a phone company that sells devices for close to two thousand dollars.</p><h3 class="article-body__section" id="section-an-actual-vapor-chamber"><span>An actual Vapor Chamber</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3330px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="tgL6AweqbNKzVVmQctz95Z" name="Galaxy Z Fold 8 review-22" alt="Galaxy Z Fold 8 shown held in-hand" src="https://cdn.mos.cms.futurecdn.net/tgL6AweqbNKzVVmQctz95Z-1920-80.jpg" mos="" align="middle" fullscreen="" width="3330" height="1873" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The Snapdragon 8 Elite Gen 5 for Galaxy chipset is powerful. But the phones that use it can get quite hot, and a lack of cooling can lead to worse sustained performance.That's why Samsung needs to add a vapor chamber, much like the Galaxy S26 Ultra and the iPhone Duo.</p><p>Vapor chambers help move heat across the phone, allowing it to dissipate more evenly, and keep key components from overheating. It also helps improve sustained performance, and les the phone work harder for longer. </p><p>Admittedly, the Z Fold 8 does have pretty good sustained performance compared to the S26 Ultra (72.4% versus 53.9%) but it's behind the iPhone 18 Pro Max (79.4%), But can you imagine how much better things could be if there was a vapor chamber to help keep everything cool?</p><h2 id="two-things-iphone-duo-can-keep">Two things iPhone Duo can keep</h2><h3 class="article-body__section" id="section-curved-corners"><span>Curved corners</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2144px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="4oMko37sfDNte8KzjvzD2M" name="Apple iPhone Duo hands on-3" alt="Apple iPhone Duo shown in hand" src="https://cdn.mos.cms.futurecdn.net/4oMko37sfDNte8KzjvzD2M-1920-80.jpg" mos="" align="middle" fullscreen="" width="2144" height="1206" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Apple loves curved corners on its phones, a design that has made its way to foldables as well. Samsung may have opted for more curved corners on its non-folding phones, like Galaxy S26, but for the time being foldables have retained the sharper right-angles Samsung was once known for. The Galaxy Z Fold 9 should stay the same way.</p><p>My issue with the iPhone Duo is the lack of symmetry in the design. If you look at it from the cover display, the disparity between the left side and right side is painfully apparent. It looks wrong to have curved corners on one side and rounded edges on the other, even if you don't actually see that when the phone is unfolded.</p><p>The Z Fold 8 and Z Fold 8 Ultra are the total opposite, with a symmetrical design regardless of which screen you're actually looking at — and it makes Galaxy foldables all the better to look at. Plus, you're likely to get a little bit more screen space <a href="https://www.tomsguide.com/phones/samsung-phones/does-the-galaxy-z-fold-8-ultra-make-the-most-use-of-its-screen-space-i-streamed-a-bunch-of-movies-and-tv-shows-to-find-out">if you're using the phone in certain display configurations.</a></p><h3 class="article-body__section" id="section-the-esim-only-design"><span>The eSIM only design</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3000px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="Z4xNVatT98sDPTLnax5YtC" name="GettyImages-921346060.jpg" alt="eSIM" src="https://cdn.mos.cms.futurecdn.net/Z4xNVatT98sDPTLnax5YtC-1920-80.jpg" mos="" align="middle" fullscreen="" width="3000" height="1687" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: AndreyPopov)</span></figcaption></figure><p>Apple has been aggressively pushing eSIMs the past few years, and that's led to a foldable with no support for physical SIM cards — regardless of which part of the world you buy it in. Samsung, on the other hand, has stuck to the physical nano SIM slot on all its flagship phones — and it should continue that trend for Z Fold 9.</p><p>I get the appeal of eSIMs in certain situations, but I also feel as though they come with a key disadvantage compared to physical SIM cards. A physical SIM pops out of your phone and into another device without issue, while eSIMs have to be digitally transferred. The process is not as awkward or laborious as it used to be, but it's still not as convenient.</p><p>If you prefer eSIMs, that's great, more power to you. But it's good to offer users a choice on how they connect to cell networks, rather than deciding for you and giving you no flexibility. Which is a very Apple way of doing things.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom’s Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-max-and-iphone-18-pro-your-10-biggest-questions-answered">I've been testing the iPhone 18 Pro Max and iPhone 18 Pro — your 10 biggest questions answered</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-teardown-reveals-the-ins-and-outs-of-the-latest-iphone-models-including-one-annoying-repair-issue">iPhone 18 Pro teardown reveals the ins and outs of the latest iPhone models — including one annoying repair issue</a></li><li><a href="https://www.tomsguide.com/phones/iphones/apples-usd250-million-class-action-settlement-website-is-now-open-heres-how-eligible-iphone-owners-can-file-a-claim-and-how-much-theyll-get">Apple's $250 million class action settlement website is now open — here's how eligible iPhone owners can file a claim and how much they'll get</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/5-things-galaxy-z-fold-9-needs-to-steal-from-iphone-duo-and-2-it-shouldnt</link>
                                                                            <description>
                            <![CDATA[ Samsung Galaxy Z Fold 9 is going to need to copy these iPhone Duo features if it wants to avoid being knocked off the top spot. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">oAEvPxR7JwegDPSQ2aA38b</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/NE3m4C3QUpw7U8uQfUAmea-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 22 Sep 2026 04:30:00 +0000</pubDate>                                                                                                                                <updated>Tue, 22 Sep 2026 08:42:09 +0000</updated>
                                                                                                                                            <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/NE3m4C3QUpw7U8uQfUAmea-1920-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[IPhone duo vs galaxy Z Fold 8]]></media:description>                                                            <media:text><![CDATA[IPhone duo vs galaxy Z Fold 8]]></media:text>
                                <media:title type="plain"><![CDATA[IPhone duo vs galaxy Z Fold 8]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/NE3m4C3QUpw7U8uQfUAmea-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-hands-on-apple-nailed-it-and-just-put-everyone-else-on-notice">iPhone Duo</a> is ticking all of the right boxes at the moment, wowing just about everyone that's been able to use it ahead of its official release Oct. 23. We still don't know how much of a success the phone will be, especially considering the $2,000 price tag, but you can be sure other phone makers are watching closely — especially Samsung.</p><p>Samsung has been the de-factor king of the foldable phone business for several years. Mainly because, outside of China, the <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">best foldables</a> have been limited to Google and Motorola — who haven't exactly put up much of a fight. Apple could finally bring the Galaxy Fold series some serious competition, and if I were Samsung I'd be looking for ways to make my foldables stand out. Even if it means blatantly copying Apple's ideas.</p><p>Here are five things the Galaxy Z Fold 9 should steal from iPhone Duo, and two things it should leave well alone.</p><h2 id="what-z-fold-9-should-steal-from-iphone-duo">What Z Fold 9 should steal from iPhone Duo</h2><h3 class="article-body__section" id="section-under-display-camera"><span>Under display camera</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Mdj8kozN6J8WNXPhazFQFa" name="iPhone Duo edit 1" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/Mdj8kozN6J8WNXPhazFQFa-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Samsung had under-display cameras on the Galaxy Z Fold lineup for four generations, from the <a href="https://www.tomsguide.com/reviews/samsung-galaxy-z-fold-3">Galaxy Z Fold 3</a> to <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-6-review-test-results">Z Fold 6</a>. The quality of those cameras was a little... weak, to say the least, so it's no surprise that Samsung pulled them for the last two generations. But maybe now is the time to bring them back.</p><p>Apple has added an under-display camera to the iPhone Duo's foldable display, though this one isn't designed for selfies. Apple has referred to it as a FaceTime camera, and talked about its use as an aid for video calling. That suggests the quality isn't all that either, but by limiting its use cases (at least in marketing) Apple can avoid the same criticisms as Samsung.</p><p>This means the Z Fold 9 could be the perfect time for Samsung to bring the under-display camera back — and give you more of your screen back. Plus, considering you can already take selfies with the rear cameras and the hole-punch on the cover display, I'd avoid using it as a way to take photos of yourself.</p><h3 class="article-body__section" id="section-s-pen-support"><span>S Pen support</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="JUVSwuTeFABcGUzkRL8WtU" name="Galaxy Z Fold 6 and S Pen.jpg" alt="Samsung Galaxy Z Fold 6 and S Pen" src="https://cdn.mos.cms.futurecdn.net/JUVSwuTeFABcGUzkRL8WtU-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The loss of the stylus is one of the things Galaxy foldable fans have been complaining about since the release of <a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-7-review">Galaxy Z Fold 7</a>. The stylus requires a special digitizer layer in the display, which was removed in an apparent attempt to reduce thickness. Which isn't a great reason to remove a long-standing feature, especially when it leaves Galaxy foldables feeling a little bit lacking.</p><p>Not only does the<a href="https://www.tomsguide.com/phones/iphones/steve-jobs-said-there-would-never-be-an-iphone-stylus-but-iphone-duo-just-proved-him-wrong-and-itll-be-a-better-device-for-it"> iPhone Duo have stylus support, it uses the Apple Pencil USB-C</a> — which is compatible with almost every iPad on sale. There's no special iPhone-exclusive stylus; it's the one a lot of iPad users may already have. The same couldn't be said for past Z Fold models, which needed a special foldable-exclusive stylus designed for the more fragile folding display.</p><p>I felt that the Galaxy Z Fold 8 Ultra was missing out on account of its lost stylus, and the launch of Z Fold 9 would be the perfect opportunity to reintroduce that support. Ideally, it would the form of a stylus that will work across Galaxy devices, including tablets and other phones.</p><h3 class="article-body__section" id="section-ip68-durability"><span>IP68 durability</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="F6qr2SDN3gLqxsmgpqVYsY" name="Fold 8 back 2" alt="Samsung Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/F6qr2SDN3gLqxsmgpqVYsY-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Google was the first foldable phone maker in the U.S. to add IP68 water and dust resistance to foldables with <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-10-pro-fold-review">Pixel 10 Pro Fold</a>, and Apple has followed its example with iPhone Duo. Galaxy Z Fold 8, on the other hand only has an IP48 rating, which means it's totally exposed to dust — even if it is sealed tight against water.</p><p>Obviously, that's not a good look for Samsung, especially when you consider all the moving parts associated with a foldable hinge. You should be able to take your $1,900 to $2,000 foldable to the beach. So Samsung definitely needs to do better with the Z Fold 9.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-exgNKX"></div>                            </div>                            <script src="https://kwizly.com/embed/exgNKX.js" async=""></script><h3 class="article-body__section" id="section-magnetic-wireless-charging-built-in"><span>Magnetic wireless charging built in</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="q4DNX2SeEFU5sCTTt45wEa" name="iphone duo edit 5" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/q4DNX2SeEFU5sCTTt45wEa-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>One of the things I'll never understand is why Samsung is so <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-may-skip-adding-qi2-to-the-galaxy-s26-ultra-and-i-think-theyve-made-the-right-call">seemingly against adding magnetic wireless charging</a> to its phones — foldables included. The phones support Qi2 wireless charging technology, but they lack the integrated magnets that let chargers and accessories snap into place.</p><p>One reason I was given was that<a href="https://www.tomsguide.com/phones/samsung-phones/samsung-may-skip-adding-qi2-to-the-galaxy-s26-ultra-and-i-think-theyve-made-the-right-call"> the magnets interfered with the S Pen</a>, and Samsung couldn't offer both. But considering the iPhone Duo has Apple Pencil support and MagSafe, it's clear that there is a way to offer both features without asking users to compromise. Because a magnetic case system is just a poor show for a phone company that sells devices for close to two thousand dollars.</p><h3 class="article-body__section" id="section-an-actual-vapor-chamber"><span>An actual Vapor Chamber</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3330px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="tgL6AweqbNKzVVmQctz95Z" name="Galaxy Z Fold 8 review-22" alt="Galaxy Z Fold 8 shown held in-hand" src="https://cdn.mos.cms.futurecdn.net/tgL6AweqbNKzVVmQctz95Z-1920-80.jpg" mos="" align="middle" fullscreen="" width="3330" height="1873" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The Snapdragon 8 Elite Gen 5 for Galaxy chipset is powerful. But the phones that use it can get quite hot, and a lack of cooling can lead to worse sustained performance.That's why Samsung needs to add a vapor chamber, much like the Galaxy S26 Ultra and the iPhone Duo.</p><p>Vapor chambers help move heat across the phone, allowing it to dissipate more evenly, and keep key components from overheating. It also helps improve sustained performance, and les the phone work harder for longer. </p><p>Admittedly, the Z Fold 8 does have pretty good sustained performance compared to the S26 Ultra (72.4% versus 53.9%) but it's behind the iPhone 18 Pro Max (79.4%), But can you imagine how much better things could be if there was a vapor chamber to help keep everything cool?</p><h2 id="two-things-iphone-duo-can-keep">Two things iPhone Duo can keep</h2><h3 class="article-body__section" id="section-curved-corners"><span>Curved corners</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2144px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="4oMko37sfDNte8KzjvzD2M" name="Apple iPhone Duo hands on-3" alt="Apple iPhone Duo shown in hand" src="https://cdn.mos.cms.futurecdn.net/4oMko37sfDNte8KzjvzD2M-1920-80.jpg" mos="" align="middle" fullscreen="" width="2144" height="1206" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Apple loves curved corners on its phones, a design that has made its way to foldables as well. Samsung may have opted for more curved corners on its non-folding phones, like Galaxy S26, but for the time being foldables have retained the sharper right-angles Samsung was once known for. The Galaxy Z Fold 9 should stay the same way.</p><p>My issue with the iPhone Duo is the lack of symmetry in the design. If you look at it from the cover display, the disparity between the left side and right side is painfully apparent. It looks wrong to have curved corners on one side and rounded edges on the other, even if you don't actually see that when the phone is unfolded.</p><p>The Z Fold 8 and Z Fold 8 Ultra are the total opposite, with a symmetrical design regardless of which screen you're actually looking at — and it makes Galaxy foldables all the better to look at. Plus, you're likely to get a little bit more screen space <a href="https://www.tomsguide.com/phones/samsung-phones/does-the-galaxy-z-fold-8-ultra-make-the-most-use-of-its-screen-space-i-streamed-a-bunch-of-movies-and-tv-shows-to-find-out">if you're using the phone in certain display configurations.</a></p><h3 class="article-body__section" id="section-the-esim-only-design"><span>The eSIM only design</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3000px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="Z4xNVatT98sDPTLnax5YtC" name="GettyImages-921346060.jpg" alt="eSIM" src="https://cdn.mos.cms.futurecdn.net/Z4xNVatT98sDPTLnax5YtC-1920-80.jpg" mos="" align="middle" fullscreen="" width="3000" height="1687" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: AndreyPopov)</span></figcaption></figure><p>Apple has been aggressively pushing eSIMs the past few years, and that's led to a foldable with no support for physical SIM cards — regardless of which part of the world you buy it in. Samsung, on the other hand, has stuck to the physical nano SIM slot on all its flagship phones — and it should continue that trend for Z Fold 9.</p><p>I get the appeal of eSIMs in certain situations, but I also feel as though they come with a key disadvantage compared to physical SIM cards. A physical SIM pops out of your phone and into another device without issue, while eSIMs have to be digitally transferred. The process is not as awkward or laborious as it used to be, but it's still not as convenient.</p><p>If you prefer eSIMs, that's great, more power to you. But it's good to offer users a choice on how they connect to cell networks, rather than deciding for you and giving you no flexibility. Which is a very Apple way of doing things.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom’s Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-max-and-iphone-18-pro-your-10-biggest-questions-answered">I've been testing the iPhone 18 Pro Max and iPhone 18 Pro — your 10 biggest questions answered</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-teardown-reveals-the-ins-and-outs-of-the-latest-iphone-models-including-one-annoying-repair-issue">iPhone 18 Pro teardown reveals the ins and outs of the latest iPhone models — including one annoying repair issue</a></li><li><a href="https://www.tomsguide.com/phones/iphones/apples-usd250-million-class-action-settlement-website-is-now-open-heres-how-eligible-iphone-owners-can-file-a-claim-and-how-much-theyll-get">Apple's $250 million class action settlement website is now open — here's how eligible iPhone owners can file a claim and how much they'll get</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ The iPhone Duo has a lot of hype, but this poll has a surprising reveal for Samsung's foldable ]]></title>
                                                                                                <dc:content><![CDATA[ <p>We asked Tom's Guide readers if they would rather pick up Apple's new <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-hands-on-apple-nailed-it-and-just-put-everyone-else-on-notice">iPhone Duo</a> or the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Samsung Galaxy Z Fold 8</a>, and the winner was quite surprising. </p><p>With 2,761 votes, one device proved far more popular than the other by more than double the votes, but was it the Apple iPhone Duo or Samsung Galaxy Z Fold 8? Check out the results below.</p><h2 id="which-flagship-foldable-would-you-rather-purchase">Which flagship foldable would you rather purchase?</h2><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-exgNKX"></div>                            </div>                            <script src="https://kwizly.com/embed/exgNKX.js" async=""></script><ul><li><strong>1st place: </strong>62%, Samsung Galaxy Z Fold 8</li><li><strong>2nd place: </strong>23%, iPhone Duo</li><li><strong>3rd place: </strong>15%, Neither</li></ul><p>With a total of 1,705 votes, 62% of respondents said the Samsung foldable is their preferred foldable phone. Apple's Duo came in a distant second with 632 votes, or 23%. </p><p>Meanwhile, 424 people said they weren't interested in either phone. If you find yourself in that camp, what would you buy instead? Or is this category too pricey for you?</p><h2 id="the-galaxy-z-fold-8-is-the-winner-but-why">The Galaxy Z Fold 8 is the winner, but why?</h2><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="8SvD4aoQkrBzEjS7QrbW5S" name="Samsung Galaxy Z Fold 8" alt="Samsung Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/8SvD4aoQkrBzEjS7QrbW5S-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>So why did the Galaxy Z Fold 8 dominate our poll over the iPhone Duo. </p><p>I think it comes down to a few of factors in the <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-vs-samsung-galaxy-z-fold-8-which-foldable-is-best-for-you#section-iphone-duo-vs-samsung-galaxy-z-fold-8-price-availability">battle between the Z Fold 8 and iPhone Duo</a>: design, price and expertise.</p><p>The Duo starts at $1,999 for the 256GB version and goes up to over $3k for the 2TB option. Samsung's foldable starts at $1,899, not a big difference but with how expensive the world has gotten in the last two years every dollar matters. No, Samsung doesn't offer a 2TB variant but the top-end 1TB model will cost you $2,499, again $100 than the equivalent Duo version.</p><p>Additionally, the Z Fold 8 offers a thinner and lighter design than the iPhone Duo. And Samsung lets you run more than two apps at once, which is better for multitasking. Plus, Samsung has been iterating foldables for eight generations, while this is Apple's first attempt.</p><p>There is concern over visibility and brightness with the matte finish on the Duo display, which is meant to hide the crease. Pictures of CEO John Ternus at the Emmys recently <a href="https://www.reddit.com/r/iPhoneFold/comments/1whl32i/john_ternus_shows_iphone_duo_at_the_emmys/" target="_blank">stirred up controversy online</a>, but we thought it was plenty bright in our hands-on time.</p><p>As we've found, though, the iPhone Duo <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-vs-samsung-galaxy-z-fold-8-7-ways-apples-foldable-beats-its-rival-from-ip68-to-faster-charging-and-more">has multiple features</a> that the Z Fold 8 doesn't, including iP68 durability, stylus support, faster charging, and a vapor chamber for better cooling.</p><h2 id="what-you-have-said">What you have said</h2><p>One reader said <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-vs-samsung-galaxy-z-fold-8-7-ways-apples-foldable-beats-its-rival-from-ip68-to-faster-charging-and-more#viafoura-comments">in a comment </a>that they were staying away from all things Apple as they didn't want to get sucked into another ecosystem. "I have Samsungs 8 ultra, and I am impressed with it," they said.</p><p>As a counterpoint, <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-vs-samsung-galaxy-z-fold-8-which-foldable-is-best-for-you#viafoura-comments">another reader wrote</a> that the "crucial factor" when comparing Samsung and Apple is Apple's "after-purchase service experience." </p><p>"Functionally, I have liked both platforms, but there is a fundamental difference in corporate philosophy. Apple actively invests in both technology and the customer service infrastructure required to support it. Samsung, on the other hand, focuses almost entirely on tech specs while leaving its customer support framework completely neglected," they said.</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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="NE3m4C3QUpw7U8uQfUAmea" name="iPhone-Duo-vs-Galaxy-Z-Fold-8-LEDE3" alt="IPhone duo vs galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/NE3m4C3QUpw7U8uQfUAmea-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The iPhone Duo may be the belle of the ball after its recent announcement, but you won't be able to actually <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-is-official-price-release-date-specs-and-everything-you-need-to-know">hold it in your hands </a>until October 23. </p><p>Meanwhile, the Z Fold 8 is available right now and is a pretty impressive foldable, even if Apple's device beats it in some areas.</p><p>Let us know: why would you pick the Duo or the Z Fold 8? Don't like either? What's your replacement?</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-ultra-4-review"><strong>Apple Watch Ultra 4 review: I ran 22 miles to test Apple’s ultimate adventure watch</strong></a></li><li><a href="https://www.tomsguide.com/phones/iphones/11-best-ios-27-hidden-features-you-cant-afford-to-miss"><strong>11 best iOS 27 hidden features you can't afford to miss</strong></a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-benchmarks-apple-just-built-the-most-powerful-phones-weve-ever-seen"><strong>iPhone 18 Pro and Pro Max benchmarks: These are the fastest phones we've ever tested</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/the-iphone-duo-has-a-lot-of-hype-but-this-poll-has-a-surprising-reveal-for-samsungs-foldable</link>
                                                                            <description>
                            <![CDATA[ Tom's Guide readers let us know which foldable they're more interested in: the iPhone Duo or Galaxy Z Fold 8. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">e3iVtPLZ23jEbY9wPGgcUn</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/ENFN2u4hpSYiQYfbA6WbcL-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 17 Sep 2026 21:09:50 +0000</pubDate>                                                                                                                                <updated>Mon, 21 Sep 2026 09:51:53 +0000</updated>
                                                                                                                                            <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ scott.younker@futurenet.com (Scott Younker) ]]></author>                    <dc:creator><![CDATA[ Scott Younker ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/RZsUpqcJ6Uj2q83oCUwNhQ-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Scott Younker is the West Coast Reporter at Tom’s Guide. He covers all the latest tech news, including phones, computing and more. He’s been involved in tech since 2011 covering everything from cameras and swimming pool equipment to the latest gaming consoles and smart TVs. He is on a seemingly never ending hunt to build the easiest to use home media system. &lt;/p&gt;&lt;p&gt;Before Tom’s Guide, Scott worked for publications like &lt;em&gt;Digital Trends, Outdoor Photographer, Dead Beats Panel&lt;/em&gt;, and in a brief detour, &lt;em&gt;America’s Funniest Home Videos&lt;/em&gt;. Yes, he has seen more pratfalls, silly pets and ridiculous home movie fails than is reasonably healthy. &lt;/p&gt;&lt;p&gt;When not writing about the latest devices or advances in chipsets, be sure to ask about Scott about disc golf and sustainability, or just if you’re being cheeky, ask about his noodle arm. If you truly want to get nerdy, bring up board games and his ongoing losing streak. &lt;/p&gt;&lt;p&gt;Scott joined Tom&#039;s Guide in 2024 as the West Coast Reporter. He graduated from the School of Journalism at the University of Oregon with a degree in magazine journalism and a minor in communications. While there he blogged or wrote for several magazines including the Fluxx, Ethos and the Oregon Commentator. He briefly wrote and managed a moderately successful blog focused on web comics. &lt;br&gt;Send secure tips on Signal: scyo1.55.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/ENFN2u4hpSYiQYfbA6WbcL-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Apple iPhone Duo shown in hand]]></media:description>                                                            <media:text><![CDATA[Apple iPhone Duo shown in hand]]></media:text>
                                <media:title type="plain"><![CDATA[Apple iPhone Duo shown in hand]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/ENFN2u4hpSYiQYfbA6WbcL-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>We asked Tom's Guide readers if they would rather pick up Apple's new <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-hands-on-apple-nailed-it-and-just-put-everyone-else-on-notice">iPhone Duo</a> or the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Samsung Galaxy Z Fold 8</a>, and the winner was quite surprising. </p><p>With 2,761 votes, one device proved far more popular than the other by more than double the votes, but was it the Apple iPhone Duo or Samsung Galaxy Z Fold 8? Check out the results below.</p><h2 id="which-flagship-foldable-would-you-rather-purchase">Which flagship foldable would you rather purchase?</h2><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-exgNKX"></div>                            </div>                            <script src="https://kwizly.com/embed/exgNKX.js" async=""></script><ul><li><strong>1st place: </strong>62%, Samsung Galaxy Z Fold 8</li><li><strong>2nd place: </strong>23%, iPhone Duo</li><li><strong>3rd place: </strong>15%, Neither</li></ul><p>With a total of 1,705 votes, 62% of respondents said the Samsung foldable is their preferred foldable phone. Apple's Duo came in a distant second with 632 votes, or 23%. </p><p>Meanwhile, 424 people said they weren't interested in either phone. If you find yourself in that camp, what would you buy instead? Or is this category too pricey for you?</p><h2 id="the-galaxy-z-fold-8-is-the-winner-but-why">The Galaxy Z Fold 8 is the winner, but why?</h2><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="8SvD4aoQkrBzEjS7QrbW5S" name="Samsung Galaxy Z Fold 8" alt="Samsung Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/8SvD4aoQkrBzEjS7QrbW5S-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>So why did the Galaxy Z Fold 8 dominate our poll over the iPhone Duo. </p><p>I think it comes down to a few of factors in the <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-vs-samsung-galaxy-z-fold-8-which-foldable-is-best-for-you#section-iphone-duo-vs-samsung-galaxy-z-fold-8-price-availability">battle between the Z Fold 8 and iPhone Duo</a>: design, price and expertise.</p><p>The Duo starts at $1,999 for the 256GB version and goes up to over $3k for the 2TB option. Samsung's foldable starts at $1,899, not a big difference but with how expensive the world has gotten in the last two years every dollar matters. No, Samsung doesn't offer a 2TB variant but the top-end 1TB model will cost you $2,499, again $100 than the equivalent Duo version.</p><p>Additionally, the Z Fold 8 offers a thinner and lighter design than the iPhone Duo. And Samsung lets you run more than two apps at once, which is better for multitasking. Plus, Samsung has been iterating foldables for eight generations, while this is Apple's first attempt.</p><p>There is concern over visibility and brightness with the matte finish on the Duo display, which is meant to hide the crease. Pictures of CEO John Ternus at the Emmys recently <a href="https://www.reddit.com/r/iPhoneFold/comments/1whl32i/john_ternus_shows_iphone_duo_at_the_emmys/" target="_blank">stirred up controversy online</a>, but we thought it was plenty bright in our hands-on time.</p><p>As we've found, though, the iPhone Duo <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-vs-samsung-galaxy-z-fold-8-7-ways-apples-foldable-beats-its-rival-from-ip68-to-faster-charging-and-more">has multiple features</a> that the Z Fold 8 doesn't, including iP68 durability, stylus support, faster charging, and a vapor chamber for better cooling.</p><h2 id="what-you-have-said">What you have said</h2><p>One reader said <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-vs-samsung-galaxy-z-fold-8-7-ways-apples-foldable-beats-its-rival-from-ip68-to-faster-charging-and-more#viafoura-comments">in a comment </a>that they were staying away from all things Apple as they didn't want to get sucked into another ecosystem. "I have Samsungs 8 ultra, and I am impressed with it," they said.</p><p>As a counterpoint, <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-vs-samsung-galaxy-z-fold-8-which-foldable-is-best-for-you#viafoura-comments">another reader wrote</a> that the "crucial factor" when comparing Samsung and Apple is Apple's "after-purchase service experience." </p><p>"Functionally, I have liked both platforms, but there is a fundamental difference in corporate philosophy. Apple actively invests in both technology and the customer service infrastructure required to support it. Samsung, on the other hand, focuses almost entirely on tech specs while leaving its customer support framework completely neglected," they said.</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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="NE3m4C3QUpw7U8uQfUAmea" name="iPhone-Duo-vs-Galaxy-Z-Fold-8-LEDE3" alt="IPhone duo vs galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/NE3m4C3QUpw7U8uQfUAmea-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The iPhone Duo may be the belle of the ball after its recent announcement, but you won't be able to actually <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-is-official-price-release-date-specs-and-everything-you-need-to-know">hold it in your hands </a>until October 23. </p><p>Meanwhile, the Z Fold 8 is available right now and is a pretty impressive foldable, even if Apple's device beats it in some areas.</p><p>Let us know: why would you pick the Duo or the Z Fold 8? Don't like either? What's your replacement?</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-ultra-4-review"><strong>Apple Watch Ultra 4 review: I ran 22 miles to test Apple’s ultimate adventure watch</strong></a></li><li><a href="https://www.tomsguide.com/phones/iphones/11-best-ios-27-hidden-features-you-cant-afford-to-miss"><strong>11 best iOS 27 hidden features you can't afford to miss</strong></a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-benchmarks-apple-just-built-the-most-powerful-phones-weve-ever-seen"><strong>iPhone 18 Pro and Pro Max benchmarks: These are the fastest phones we've ever tested</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Samsung Galaxy Z Fold 8 vs iPhone Duo — 7 ways Samsung's wider foldable beats Apple ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Samsung Galaxy Z Fold 8 </a>has been a strong reminder of why Samsung has been able to dominate the foldable phone market for so long. While it's true the company hasn't had a lot of competition, the fresh new form factor of the Fold 8 seems to have reinvigorated the interest in Galaxy foldables — just in time for Apple to jump onto the foldable bandwagon with the iPhone Duo.</p><p>The simple fact that this is a foldable iPhone means the Duo has the potential to offer Samsung the first serious competition for several years. The phone hasn't even been released yet, and we've already identified key <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-vs-samsung-galaxy-z-fold-8-7-ways-apples-foldable-beats-its-rival-from-ip68-to-faster-charging-and-more">ways that the iPhone Duo beats the similarly-styled Galaxy Z Fold 8</a>. But what about the other way round? </p><p>Samsung has almost a decade of foldable experience, and that shows in the ways its latest release compares to Apple's first attempt. Here are seven ways the Galaxy Z Fold 8 beats the iPhone Duo.</p><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/2qNfOa5AuVU" allowfullscreen=""></iframe></div></div><h3 class="article-body__section" id="section-it-s-lighter-and-thinner"><span>It's lighter and thinner</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2693px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="xsfHUrdQAp5k99yND4fgSY" name="Galaxy Z Fold 8 review-26" alt="Galaxy Z Fold 8 shown held in-hand" src="https://cdn.mos.cms.futurecdn.net/xsfHUrdQAp5k99yND4fgSY-1920-80.jpg" mos="" align="middle" fullscreen="" width="2693" height="1515" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Rumors suggested that the iPhone Duo would be the thinnest phone Apple has ever built, at<a href="https://www.tomsguide.com/phones/iphones/the-iphone-ultra-will-be-the-thinnest-iphone-ever-heres-how-it-will-stack-up-to-other-foldables"> 4.5mm (0.17-inches) thick when unfolded</a>. That wasn't the case, and we now know that the iPhone Duo is 5.2mm (0.2 inches) thick — which is slightly less than the 5.6mm iPhone Air. </p><p>Meanwhile the Galaxy Z Fold 8 really is 4.5mm thick when it's unfolded, making it one of the thinnest phones you can go out and buy. It's also much lighter than the iPhone Duo, weighing 201 grams (7.09 ounces) to Apple's 254 grams (8.96 ounces). That weight actually <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-max-tipped-to-be-heaviest-iphone-ever-heres-3-reasons-why-thats-a-good-thing">makes the Duo one of the heaviest iPhones Apple has ever released</a>. </p><p>The difference between the two may not seem like much, it does mean that the Z Fold 8 is likely to be more comfortable to use.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-exgNKX"></div>                            </div>                            <script src="https://kwizly.com/embed/exgNKX.js" async=""></script><h3 class="article-body__section" id="section-a-cheaper-price-tag"><span>A cheaper price tag</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2332px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="SzqLLphnRAA8Pka8QDDMCZ" name="Galaxy Z Fold 8 review-11" alt="Galaxy Z Fold 8 shown held in-hand" src="https://cdn.mos.cms.futurecdn.net/SzqLLphnRAA8Pka8QDDMCZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="2332" height="1312" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Foldable phones are not cheap, with both the Galaxy Z Fold 8 and iPhone Duo costing several hundred dollars more than their non-folding counterparts. But when it comes to the actual asking price, Samsung has the edge.</p><p>The cheapest Samsung Galaxy Z Fold 8 is $1,899, which gets you a model with 256GB of storage and 12GB of RAM. Apple's cheapest iPhone Duo offers the same level of memory and storage, but it costs $1,999 — $100 more.</p><p>That price disparity sticks around for the 512GB and 1TB options as well. Samsung charges $2,099 and $2,499, respectively, while Apple's prices are both $100 more at $2,199 and $2,599. Samsung doesn't offer a 2TB storage option; the 2TB Duo comes in at $3,199.</p><h3 class="article-body__section" id="section-better-multitasking"><span>Better multitasking</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2990px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="RaSYsGcZBSQJkWkCfWgBgW" name="Galaxy Z Fold 8-16" alt="Galaxy Z Fold 8 shown in hand" src="https://cdn.mos.cms.futurecdn.net/RaSYsGcZBSQJkWkCfWgBgW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2990" height="1682" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p><a href="https://www.tomsguide.com/phones/iphones/ive-tested-the-galaxy-z-fold-8-and-it-proves-apple-really-needs-to-solve-this-one-thing">Multitasking has never been Apple's strong suit,</a> especially on the iPhone, and it looks like iPhone Duo won't be at quite the same level as the Galaxy Z Fold 8.</p><p>The Z Fold 8 supports up to three windows at once, as well as five floating app windows that can sit wherever you like on screen. This is also possible on Apple's iPads, but iPhone Duo only supports two Split View windows at a time.</p><p>Considering one of the benefits of iPhone Duo is the ability to carry an iPad-like device in your pocket, the limited nature of Split View means you're missing out on an important productivity feature other devices have offered for years.</p><h3 class="article-body__section" id="section-dex"><span>DeX</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5276px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="AieHmWF2DYNhYEc6WiBT4n" name="Samsung DeX on Galaxy Z Flip 8" alt="Samsung DeX on Galaxy Z Flip 8." src="https://cdn.mos.cms.futurecdn.net/AieHmWF2DYNhYEc6WiBT4n-1920-80.jpg" mos="" align="middle" fullscreen="" width="5276" height="2968" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>While desktop modes have slowly started making a comeback on Android phones, Apple has always seen fit to completely ignore them. The Z Fold 8 offers <a href="https://www.tomsguide.com/phones/samsung-phones/i-just-tried-the-new-samsung-dex-on-the-galaxy-z-fold-8-and-it-has-one-huge-upgrade">Samsung's DeX desktop mode</a>, while the iPhone Duo lacks any sort of equivalent feature.</p><p>The idea behind DeX is that you plug your Galaxy phone into a monitor, at which point the phone loads up a desktop-like UI on the larger screen. That way you can use your phone as a desktop computer, without needing to carry around a laptop or tablet everywhere you go. </p><p>It's a fairly niche feature, and it's reliant on having access to a spare display. But it is a way to get more use out of a Z Fold 8, and put all the performance hardware to good use. It's unfortunate that the iPhone Duo is limited to its own display and UI.</p><h3 class="article-body__section" id="section-physical-sim-slot"><span>Physical SIM slot</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3000px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="Z4xNVatT98sDPTLnax5YtC" name="GettyImages-921346060.jpg" alt="eSIM" src="https://cdn.mos.cms.futurecdn.net/Z4xNVatT98sDPTLnax5YtC-1920-80.jpg" mos="" align="middle" fullscreen="" width="3000" height="1687" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: AndreyPopov)</span></figcaption></figure><p>Apple has been betting big on eSIMs in recent years, and some regions (including the U.S.) <a href="https://www.tomsguide.com/phones/iphones/iphone-17-and-iphone-air-are-latest-phones-to-push-esim-heres-why-i-dont-want-to-give-up-physical-sim-cards">can't use physical SIM cards in newer models of iPhone.</a> </p><p>Sadly, while European versions of the iPhone 18 Pro still come with a physical SIM card slot, that won't be the case with iPhone Duo. Apple has confirmed that the phone will be eSIM only all around the world. So no matter where you live, there's zero opportunity to use a physical nano SIM card.</p><p>The Galaxy Z Fold 8 still supports both eSIM and physical SIM cards, which gives users a lot more choice and flexibility. It's pretty small in the grand scheme of things, but as someone that has to swap phones fairly often, the process of transferring eSIMs to a new device is nowhere near as simple as swapping a physical card between devices. </p><h3 class="article-body__section" id="section-16gb-ram-option"><span>16GB RAM option</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3508px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="CnV2R6YCsPFej5e7GpiWfZ" name="Galaxy Z Fold 8 review-24" alt="Galaxy Z Fold 8 shown held in-hand" src="https://cdn.mos.cms.futurecdn.net/CnV2R6YCsPFej5e7GpiWfZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="3508" height="1973" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The iPhone Duo comes with 12GB of RAM no matter which storage variant you get. Samsung starts off by offering 12GB on its cheapest models, but those buying the 1TB storage option will actually get an additional 4GB of RAM thrown in — for a total of 16GB.</p><p>Why does that matter? It all comes down to why memory prices have been skyrocketing over the past year: AI processing. AI features are heavily reliant on RAM, and generally speaking the more memory that's available, the faster things will run. That's particularly important for on-device AI processing, which is faster and more secure than offloading those tasks to the cloud.</p><p>Historically iPhones haven't needed as much RAM as Android phones, on account of the strong links between Apple's hardware and software. But not even Apple can bypass AI's need for memory, and we'll have to wait and see how the Duo (and A20 Pro chipset) performs in AI benchmarking tests before we can say how much better or worse it could have been with more RAM.</p><h3 class="article-body__section" id="section-8k-video-recording"><span>8K video recording</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="F6qr2SDN3gLqxsmgpqVYsY" name="Fold 8 back 2" alt="Samsung Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/F6qr2SDN3gLqxsmgpqVYsY-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The iPhone Duo is no slouch in the camera department, at least not as far as we can tell from the specs and limited hands-on time. While the actual camera hardware looks fairly similar to that of the Z Fold 8 (48MP main lenses compared to 50MP), there is one thing Samsung has a leg up on — ultra-high-resolution video recording.</p><p>Like many Samsung flagships, the Z Fold 8 is capable of recording video at 8k resolution at 30 frames per second or 4K resolution at 120fps. Meanwhile, the iPhone Duo is capped at 4K resolution video recording, with frame rates of 120fps on the main camera and 60fps on the ultrawide.</p><p>Admittedly, the opportunities to play 8K video are pretty slim for the average phone user — so recording in such high resolution is just a waste of storage space. But it is a key area in which Samsung outpaces Apple, which might be important to you.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-and-pro-max-battery-capacity-confirmed-in-europe-heres-how-they-compare-to-iphone-17-pro">iPhone 18 Pro and Pro Max battery capacity confirmed in Europe — here's how they compare to iPhone 17 Pro</a></li><li><a href="https://www.tomsguide.com/phones/iphones/apples-just-extended-free-access-to-emergency-satellite-communication-for-another-year-its-the-third-time-this-has-happened">Apple's just extended free access to emergency satellite communication for another year — it's the third time this has happened</a></li><li><a href="https://www.tomsguide.com/phones/iphones/steve-jobs-said-there-would-never-be-an-iphone-stylus-but-iphone-duo-just-proved-him-wrong-and-itll-be-a-better-device-for-it">Steve Jobs said there would never be an iPhone stylus but iPhone Duo just proved him wrong — and it'll be a better device for it</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-vs-iphone-duo-7-ways-samsungs-wider-foldable-beats-apple</link>
                                                                            <description>
                            <![CDATA[ Samsung has almost a decade of foldable experience; here's how the Galaxy Z fold 8 beats iPhone Duo in a few key ways ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">xx4meTm6QL3AcNUSs7aMoj</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/AnoVUix3XWR3icSBBfRFFg-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 13 Sep 2026 09:30:00 +0000</pubDate>                                                                                                                                <updated>Mon, 14 Sep 2026 14:30:09 +0000</updated>
                                                                                                                                            <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/AnoVUix3XWR3icSBBfRFFg-1920-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Galaxy Z Fold 8 vs iPhone duo]]></media:description>                                                            <media:text><![CDATA[Galaxy Z Fold 8 vs iPhone duo]]></media:text>
                                <media:title type="plain"><![CDATA[Galaxy Z Fold 8 vs iPhone duo]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/AnoVUix3XWR3icSBBfRFFg-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Samsung Galaxy Z Fold 8 </a>has been a strong reminder of why Samsung has been able to dominate the foldable phone market for so long. While it's true the company hasn't had a lot of competition, the fresh new form factor of the Fold 8 seems to have reinvigorated the interest in Galaxy foldables — just in time for Apple to jump onto the foldable bandwagon with the iPhone Duo.</p><p>The simple fact that this is a foldable iPhone means the Duo has the potential to offer Samsung the first serious competition for several years. The phone hasn't even been released yet, and we've already identified key <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-vs-samsung-galaxy-z-fold-8-7-ways-apples-foldable-beats-its-rival-from-ip68-to-faster-charging-and-more">ways that the iPhone Duo beats the similarly-styled Galaxy Z Fold 8</a>. But what about the other way round? </p><p>Samsung has almost a decade of foldable experience, and that shows in the ways its latest release compares to Apple's first attempt. Here are seven ways the Galaxy Z Fold 8 beats the iPhone Duo.</p><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/2qNfOa5AuVU" allowfullscreen=""></iframe></div></div><h3 class="article-body__section" id="section-it-s-lighter-and-thinner"><span>It's lighter and thinner</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2693px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="xsfHUrdQAp5k99yND4fgSY" name="Galaxy Z Fold 8 review-26" alt="Galaxy Z Fold 8 shown held in-hand" src="https://cdn.mos.cms.futurecdn.net/xsfHUrdQAp5k99yND4fgSY-1920-80.jpg" mos="" align="middle" fullscreen="" width="2693" height="1515" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Rumors suggested that the iPhone Duo would be the thinnest phone Apple has ever built, at<a href="https://www.tomsguide.com/phones/iphones/the-iphone-ultra-will-be-the-thinnest-iphone-ever-heres-how-it-will-stack-up-to-other-foldables"> 4.5mm (0.17-inches) thick when unfolded</a>. That wasn't the case, and we now know that the iPhone Duo is 5.2mm (0.2 inches) thick — which is slightly less than the 5.6mm iPhone Air. </p><p>Meanwhile the Galaxy Z Fold 8 really is 4.5mm thick when it's unfolded, making it one of the thinnest phones you can go out and buy. It's also much lighter than the iPhone Duo, weighing 201 grams (7.09 ounces) to Apple's 254 grams (8.96 ounces). That weight actually <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-max-tipped-to-be-heaviest-iphone-ever-heres-3-reasons-why-thats-a-good-thing">makes the Duo one of the heaviest iPhones Apple has ever released</a>. </p><p>The difference between the two may not seem like much, it does mean that the Z Fold 8 is likely to be more comfortable to use.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-exgNKX"></div>                            </div>                            <script src="https://kwizly.com/embed/exgNKX.js" async=""></script><h3 class="article-body__section" id="section-a-cheaper-price-tag"><span>A cheaper price tag</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2332px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="SzqLLphnRAA8Pka8QDDMCZ" name="Galaxy Z Fold 8 review-11" alt="Galaxy Z Fold 8 shown held in-hand" src="https://cdn.mos.cms.futurecdn.net/SzqLLphnRAA8Pka8QDDMCZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="2332" height="1312" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Foldable phones are not cheap, with both the Galaxy Z Fold 8 and iPhone Duo costing several hundred dollars more than their non-folding counterparts. But when it comes to the actual asking price, Samsung has the edge.</p><p>The cheapest Samsung Galaxy Z Fold 8 is $1,899, which gets you a model with 256GB of storage and 12GB of RAM. Apple's cheapest iPhone Duo offers the same level of memory and storage, but it costs $1,999 — $100 more.</p><p>That price disparity sticks around for the 512GB and 1TB options as well. Samsung charges $2,099 and $2,499, respectively, while Apple's prices are both $100 more at $2,199 and $2,599. Samsung doesn't offer a 2TB storage option; the 2TB Duo comes in at $3,199.</p><h3 class="article-body__section" id="section-better-multitasking"><span>Better multitasking</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2990px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="RaSYsGcZBSQJkWkCfWgBgW" name="Galaxy Z Fold 8-16" alt="Galaxy Z Fold 8 shown in hand" src="https://cdn.mos.cms.futurecdn.net/RaSYsGcZBSQJkWkCfWgBgW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2990" height="1682" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p><a href="https://www.tomsguide.com/phones/iphones/ive-tested-the-galaxy-z-fold-8-and-it-proves-apple-really-needs-to-solve-this-one-thing">Multitasking has never been Apple's strong suit,</a> especially on the iPhone, and it looks like iPhone Duo won't be at quite the same level as the Galaxy Z Fold 8.</p><p>The Z Fold 8 supports up to three windows at once, as well as five floating app windows that can sit wherever you like on screen. This is also possible on Apple's iPads, but iPhone Duo only supports two Split View windows at a time.</p><p>Considering one of the benefits of iPhone Duo is the ability to carry an iPad-like device in your pocket, the limited nature of Split View means you're missing out on an important productivity feature other devices have offered for years.</p><h3 class="article-body__section" id="section-dex"><span>DeX</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5276px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="AieHmWF2DYNhYEc6WiBT4n" name="Samsung DeX on Galaxy Z Flip 8" alt="Samsung DeX on Galaxy Z Flip 8." src="https://cdn.mos.cms.futurecdn.net/AieHmWF2DYNhYEc6WiBT4n-1920-80.jpg" mos="" align="middle" fullscreen="" width="5276" height="2968" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>While desktop modes have slowly started making a comeback on Android phones, Apple has always seen fit to completely ignore them. The Z Fold 8 offers <a href="https://www.tomsguide.com/phones/samsung-phones/i-just-tried-the-new-samsung-dex-on-the-galaxy-z-fold-8-and-it-has-one-huge-upgrade">Samsung's DeX desktop mode</a>, while the iPhone Duo lacks any sort of equivalent feature.</p><p>The idea behind DeX is that you plug your Galaxy phone into a monitor, at which point the phone loads up a desktop-like UI on the larger screen. That way you can use your phone as a desktop computer, without needing to carry around a laptop or tablet everywhere you go. </p><p>It's a fairly niche feature, and it's reliant on having access to a spare display. But it is a way to get more use out of a Z Fold 8, and put all the performance hardware to good use. It's unfortunate that the iPhone Duo is limited to its own display and UI.</p><h3 class="article-body__section" id="section-physical-sim-slot"><span>Physical SIM slot</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3000px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="Z4xNVatT98sDPTLnax5YtC" name="GettyImages-921346060.jpg" alt="eSIM" src="https://cdn.mos.cms.futurecdn.net/Z4xNVatT98sDPTLnax5YtC-1920-80.jpg" mos="" align="middle" fullscreen="" width="3000" height="1687" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: AndreyPopov)</span></figcaption></figure><p>Apple has been betting big on eSIMs in recent years, and some regions (including the U.S.) <a href="https://www.tomsguide.com/phones/iphones/iphone-17-and-iphone-air-are-latest-phones-to-push-esim-heres-why-i-dont-want-to-give-up-physical-sim-cards">can't use physical SIM cards in newer models of iPhone.</a> </p><p>Sadly, while European versions of the iPhone 18 Pro still come with a physical SIM card slot, that won't be the case with iPhone Duo. Apple has confirmed that the phone will be eSIM only all around the world. So no matter where you live, there's zero opportunity to use a physical nano SIM card.</p><p>The Galaxy Z Fold 8 still supports both eSIM and physical SIM cards, which gives users a lot more choice and flexibility. It's pretty small in the grand scheme of things, but as someone that has to swap phones fairly often, the process of transferring eSIMs to a new device is nowhere near as simple as swapping a physical card between devices. </p><h3 class="article-body__section" id="section-16gb-ram-option"><span>16GB RAM option</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3508px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="CnV2R6YCsPFej5e7GpiWfZ" name="Galaxy Z Fold 8 review-24" alt="Galaxy Z Fold 8 shown held in-hand" src="https://cdn.mos.cms.futurecdn.net/CnV2R6YCsPFej5e7GpiWfZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="3508" height="1973" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The iPhone Duo comes with 12GB of RAM no matter which storage variant you get. Samsung starts off by offering 12GB on its cheapest models, but those buying the 1TB storage option will actually get an additional 4GB of RAM thrown in — for a total of 16GB.</p><p>Why does that matter? It all comes down to why memory prices have been skyrocketing over the past year: AI processing. AI features are heavily reliant on RAM, and generally speaking the more memory that's available, the faster things will run. That's particularly important for on-device AI processing, which is faster and more secure than offloading those tasks to the cloud.</p><p>Historically iPhones haven't needed as much RAM as Android phones, on account of the strong links between Apple's hardware and software. But not even Apple can bypass AI's need for memory, and we'll have to wait and see how the Duo (and A20 Pro chipset) performs in AI benchmarking tests before we can say how much better or worse it could have been with more RAM.</p><h3 class="article-body__section" id="section-8k-video-recording"><span>8K video recording</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="F6qr2SDN3gLqxsmgpqVYsY" name="Fold 8 back 2" alt="Samsung Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/F6qr2SDN3gLqxsmgpqVYsY-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The iPhone Duo is no slouch in the camera department, at least not as far as we can tell from the specs and limited hands-on time. While the actual camera hardware looks fairly similar to that of the Z Fold 8 (48MP main lenses compared to 50MP), there is one thing Samsung has a leg up on — ultra-high-resolution video recording.</p><p>Like many Samsung flagships, the Z Fold 8 is capable of recording video at 8k resolution at 30 frames per second or 4K resolution at 120fps. Meanwhile, the iPhone Duo is capped at 4K resolution video recording, with frame rates of 120fps on the main camera and 60fps on the ultrawide.</p><p>Admittedly, the opportunities to play 8K video are pretty slim for the average phone user — so recording in such high resolution is just a waste of storage space. But it is a key area in which Samsung outpaces Apple, which might be important to you.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-and-pro-max-battery-capacity-confirmed-in-europe-heres-how-they-compare-to-iphone-17-pro">iPhone 18 Pro and Pro Max battery capacity confirmed in Europe — here's how they compare to iPhone 17 Pro</a></li><li><a href="https://www.tomsguide.com/phones/iphones/apples-just-extended-free-access-to-emergency-satellite-communication-for-another-year-its-the-third-time-this-has-happened">Apple's just extended free access to emergency satellite communication for another year — it's the third time this has happened</a></li><li><a href="https://www.tomsguide.com/phones/iphones/steve-jobs-said-there-would-never-be-an-iphone-stylus-but-iphone-duo-just-proved-him-wrong-and-itll-be-a-better-device-for-it">Steve Jobs said there would never be an iPhone stylus but iPhone Duo just proved him wrong — and it'll be a better device for it</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ iPhone Duo vs Galaxy Z Fold 8 — 7 ways Apple beats Samsung's foldable ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The launch of <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-hands-on-apple-nailed-it-and-just-put-everyone-else-on-notice">iPhone Duo</a> is a big deal. This is the first ever foldable developed by Apple, and for that reason alone it has the chance to dethrone Samsung as the king of the foldable phone space. But it also helps that Apple has produced a phone with a lot of great qualities, and will naturally lead to comparisons with the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Samsung Galaxy Z Fold 8</a>.</p><p>The two phones are similar in a bunch of ways, including their wider, passport-inspired design. However, there are a number of key ways Apple has improved on the foldable design, and beaten Samsung at its own game. Considering this is Apple's first foldable, that might just make the extended development time worth it. Here are seven ways iPhone Duo actually beats the Galaxy Z Fold 8.</p><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/2qNfOa5AuVU" allowfullscreen=""></iframe></div></div><h3 class="article-body__section" id="section-ip68-rating"><span>IP68 rating</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="i4QF9zqZdmy4sZPuE8hXFa" name="iphone duo edit 4" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/i4QF9zqZdmy4sZPuE8hXFa-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Google proved that a foldable could get an IP68 water and dust resistance rating with last year's <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-10-pro-fold-review">Pixel 10 Pro Fold</a>. This means that, despite all the moving parts around the hinge, Google was able to seal the phone up and ensure dust and other foreign particles can't get inside. Apple continued that trend by also sealing the iPhone Duo up to the same IP68 standard.</p><p>Meanwhile the Galaxy Z Fold 8 is only rated to IP48. The 8 means that it's water-tight, capable of being submerged in up to a meter of water for up to 30 minutes — just like Google and Apple. However, the 4 means that the Z Fold 8 offers no protection against dust, or any other particles larger than one millimeter (0.04 inches).</p><p>In other words, there's a whole bunch of nasty stuff that could get inside the Z Fold 8 and cause problems — and you might not even realize it. In other words, you should be able to take the iPhone Duo to the beach.</p><h3 class="article-body__section" id="section-apple-pencil-support"><span>Apple Pencil support</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="utmMc9q6LHmFEEaQK8rvhB" name="iPhone Duo apple pencil" alt="iPhone Duo with Apple Pencil" src="https://cdn.mos.cms.futurecdn.net/utmMc9q6LHmFEEaQK8rvhB-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Apple)</span></figcaption></figure><p>Samsung used to sell foldables that supported the S Pen stylus, but the last one to be released was 2024's<a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-6-review-test-results"> Galaxy Z Fold 6.</a> From the <a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-7-review">Z Fold 7 </a>onwards, Samsung stripped out the S Pen functionality, removing a critical part of the display makeup in order to reduce the phone's thickness. This means that the Z Fold 8 does not support any kind of active stylus. </p><p>Meanwhile, the <a href="https://www.tomsguide.com/phones/iphones/steve-jobs-said-there-would-never-be-an-iphone-stylus-but-iphone-duo-just-proved-him-wrong-and-itll-be-a-better-device-for-it">iPhone Duo not only offers stylus support</a>, it's compatible with the <a href="https://www.tomsguide.com/hands-on/apple-pencil-usb-c-hands-on-is-this-pen-mightier">Apple Pencil USB-C</a> — which works with the majority of iPads still on sale. Samsung needed a special kind of S Pen for the foldable screen, but the iPhone Duo uses a stylus that you may already have.</p><p>It's the most basic Apple stylus on sale, and it lacks key features you'll find on the <a href="https://www.tomsguide.com/tablets/ipads/apple-announces-apple-pencil-pro-with-barrel-roll-and-squeeze-capabilities">Apple Pencil Pro</a>, but it's better than nothing.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-exgNKX"></div>                            </div>                            <script src="https://kwizly.com/embed/exgNKX.js" async=""></script><h3 class="article-body__section" id="section-magsafe"><span>MagSafe</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="UDr8c5DLF9rP5aXyr9NwQ5" name="iphone duo software" alt="iphone duo two apps" src="https://cdn.mos.cms.futurecdn.net/UDr8c5DLF9rP5aXyr9NwQ5-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Magnetic wireless charging is a rarity, in part because Apple had a stranglehold on it for so long. While <a href="https://www.tomsguide.com/phones/what-is-qi2-wireless-charging">Qi2 wireless charging</a> does allow phones to add a MagSafe-style magnetic ring, <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s25-has-supports-qi2-charging-but-theres-a-big-catch">Samsung has avoided doing this </a>— preferring to utilize special magnetic cases instead. The Galaxy Z Fold 8 is no exception to this trend, despite offering all the other benefits of Qi2 charging.</p><p>Apple had no such issue adding <a href="https://www.tomsguide.com/phones/iphones/what-is-apple-magsafe-and-which-iphones-support-it">MagSafe</a> to the iPhone Duo, as it's done with virtually every iPhone released since the <a href="https://www.tomsguide.com/reviews/iphone-12">iPhone 12.</a> Plus, despite the phone's unique shape and size, Apple confirmed that it is compatible with MagSafe accessories and chargers  — meaning all your old MagSafe products should still fit.</p><h3 class="article-body__section" id="section-faster-60w-charging"><span>Faster 60W charging</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2144px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="4oMko37sfDNte8KzjvzD2M" name="Apple iPhone Duo hands on-3" alt="Apple iPhone Duo shown in hand" src="https://cdn.mos.cms.futurecdn.net/4oMko37sfDNte8KzjvzD2M-1920-80.jpg" mos="" align="middle" fullscreen="" width="2144" height="1206" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>MagSafe isn't the only way iPhone Duo beats Z Fold 8 in the charging department. Apple's foldable also offers faster charging speeds, regardless of whether you use MagSafe or a plug-in charging cable.</p><p>Wired charging supports up to 60W speeds, which regains 50% charge in just 15 minutes. Meanwhile, wireless charging is capped at 25W. In comparison, the Galaxy Z Fold 8 offers 45W wired charging, and can regain 43% in 15 minutes. Wireless charging is also slightly slower at 20W, which puts it at a slight disadvantage to the iPhone.</p><h3 class="article-body__section" id="section-better-front-facing-camera-hardware"><span>Better front-facing camera hardware</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="SoAi2j7o9Dqs6v288A4cEa" name="iPhone Duo edit 3" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/SoAi2j7o9Dqs6v288A4cEa-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Like the S Pen, Samsung used to offer an <a href="https://www.tomsguide.com/news/samsung-galaxy-z-fold-3-under-display-camera-tested-its-amazing-and-flawed">under-display camera</a> on Galaxy Z Fold phones — and it hasn't been seen since the Galaxy Z Fold 6. The quality was not great, and it was no surprise that later Z folds switched back to the hole-punch camera design. Apple is giving under-display camera tech another chance at the limelight.</p><p>Apple hasn't specified the quality of this camera, noting that it's designed for use with FaceTime and other video calling software rather than selfies. That suggests the quality isn't great. But at least Apple is willing to try new things with the Duo, rather than reusing the same lackluster selfie camera hardware for multiple years in a row.</p><p>Plus, the iPhone Duo's actual selfie camera, which is in the cover display, offers higher resolution than Samsung. We're talking 12MP compared to 10MP, and while resolution doesn't automatically mean quality, it's likely that this is a similar selfie camera to the one in iPhone 17 Pro Max — <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">which I found to take better photos than the Galaxy Z Fold 8 Ultra.</a></p><h3 class="article-body__section" id="section-iphone-duo-software-reacts-based-on-folded-hinge-state"><span>iPhone Duo software reacts based on folded hinge state</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="N49opwHV76RM3BfKvL8REa" name="iPhone duo edit 2" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/N49opwHV76RM3BfKvL8REa-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>A lot of Samsung phones offer what the company calls "Flex Mode," which allows the phone to react and adapt depending on the angle of the central hinge. Samsung Galaxy Z Fold 8 is the first Galaxy foldable to ditch this feature, despite the fact it's available on the Ultra model. This reduces the functionality of the phone somewhat, especially compared to iPhone Duo.</p><p>Apple doesn't have a special name for this feature, but the Duo does react depending on the angle of the hinge and the state of the fold itself. So if you have Netflix running, folding the screen to a 90-degree angle will shift the video to one side of the screen, and media controls to the other. </p><h3 class="article-body__section" id="section-vapor-chamber-cooling"><span>Vapor chamber cooling</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="CN7RzmKPJyev7oUAf2fdFa" name="iPhone duo gaming" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/CN7RzmKPJyev7oUAf2fdFa-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The iPhone Duo offers an A20 Pro chipset with vapor chamber cooling, which helps dissipate heat. This means that the iPhone should offer better sustained performance, especially when doing resource-heavy tasks like gaming, multitasking and AI processing. </p><p>We haven't done any performance or thermal testing on the iPhone Duo just yet, so we don't know how effective the vapor chamber will be. That said, the Fold 8 doesn't offer a vapor chamber at all. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/apple-quietly-jacks-the-prices-of-the-iphone-16-iphone-17-and-iphone-air-heres-how-much-youll-pay-now"><strong>Apple quietly jacks the prices of the iPhone 16, iPhone 17, and iPhone Air — here's how much you'll pay now</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/apples-just-extended-free-access-to-emergency-satellite-communication-for-another-year-its-the-third-time-this-has-happened"><strong>Apple's just extended free access to emergency satellite communication for another year — it's the third time this has happened</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/steve-jobs-said-there-would-never-be-an-iphone-stylus-but-iphone-duo-just-proved-him-wrong-and-itll-be-a-better-device-for-it"><strong>Steve Jobs said there would never be an iPhone stylus but iPhone Duo just proved him wrong — and it'll be a better device for it</strong></a><strong></strong></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/iphone-duo-vs-samsung-galaxy-z-fold-8-7-ways-apples-foldable-beats-its-rival-from-ip68-to-faster-charging-and-more</link>
                                                                            <description>
                            <![CDATA[ iPhone Duo may be the first Apple foldable, but it's already beating Samsung at its own game. Here are seven ways it beats the Galaxy Z Fold 8. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">YMufsSbjwum9vd5JjKhXUQ</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/NE3m4C3QUpw7U8uQfUAmea-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 11 Sep 2026 07:30:00 +0000</pubDate>                                                                                                                                <updated>Fri, 11 Sep 2026 14:22:10 +0000</updated>
                                                                                                                                            <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/NE3m4C3QUpw7U8uQfUAmea-1920-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[IPhone duo vs galaxy Z Fold 8]]></media:description>                                                            <media:text><![CDATA[IPhone duo vs galaxy Z Fold 8]]></media:text>
                                <media:title type="plain"><![CDATA[IPhone duo vs galaxy Z Fold 8]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/NE3m4C3QUpw7U8uQfUAmea-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The launch of <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-hands-on-apple-nailed-it-and-just-put-everyone-else-on-notice">iPhone Duo</a> is a big deal. This is the first ever foldable developed by Apple, and for that reason alone it has the chance to dethrone Samsung as the king of the foldable phone space. But it also helps that Apple has produced a phone with a lot of great qualities, and will naturally lead to comparisons with the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Samsung Galaxy Z Fold 8</a>.</p><p>The two phones are similar in a bunch of ways, including their wider, passport-inspired design. However, there are a number of key ways Apple has improved on the foldable design, and beaten Samsung at its own game. Considering this is Apple's first foldable, that might just make the extended development time worth it. Here are seven ways iPhone Duo actually beats the Galaxy Z Fold 8.</p><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/2qNfOa5AuVU" allowfullscreen=""></iframe></div></div><h3 class="article-body__section" id="section-ip68-rating"><span>IP68 rating</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="i4QF9zqZdmy4sZPuE8hXFa" name="iphone duo edit 4" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/i4QF9zqZdmy4sZPuE8hXFa-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Google proved that a foldable could get an IP68 water and dust resistance rating with last year's <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-10-pro-fold-review">Pixel 10 Pro Fold</a>. This means that, despite all the moving parts around the hinge, Google was able to seal the phone up and ensure dust and other foreign particles can't get inside. Apple continued that trend by also sealing the iPhone Duo up to the same IP68 standard.</p><p>Meanwhile the Galaxy Z Fold 8 is only rated to IP48. The 8 means that it's water-tight, capable of being submerged in up to a meter of water for up to 30 minutes — just like Google and Apple. However, the 4 means that the Z Fold 8 offers no protection against dust, or any other particles larger than one millimeter (0.04 inches).</p><p>In other words, there's a whole bunch of nasty stuff that could get inside the Z Fold 8 and cause problems — and you might not even realize it. In other words, you should be able to take the iPhone Duo to the beach.</p><h3 class="article-body__section" id="section-apple-pencil-support"><span>Apple Pencil support</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="utmMc9q6LHmFEEaQK8rvhB" name="iPhone Duo apple pencil" alt="iPhone Duo with Apple Pencil" src="https://cdn.mos.cms.futurecdn.net/utmMc9q6LHmFEEaQK8rvhB-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Apple)</span></figcaption></figure><p>Samsung used to sell foldables that supported the S Pen stylus, but the last one to be released was 2024's<a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-6-review-test-results"> Galaxy Z Fold 6.</a> From the <a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-7-review">Z Fold 7 </a>onwards, Samsung stripped out the S Pen functionality, removing a critical part of the display makeup in order to reduce the phone's thickness. This means that the Z Fold 8 does not support any kind of active stylus. </p><p>Meanwhile, the <a href="https://www.tomsguide.com/phones/iphones/steve-jobs-said-there-would-never-be-an-iphone-stylus-but-iphone-duo-just-proved-him-wrong-and-itll-be-a-better-device-for-it">iPhone Duo not only offers stylus support</a>, it's compatible with the <a href="https://www.tomsguide.com/hands-on/apple-pencil-usb-c-hands-on-is-this-pen-mightier">Apple Pencil USB-C</a> — which works with the majority of iPads still on sale. Samsung needed a special kind of S Pen for the foldable screen, but the iPhone Duo uses a stylus that you may already have.</p><p>It's the most basic Apple stylus on sale, and it lacks key features you'll find on the <a href="https://www.tomsguide.com/tablets/ipads/apple-announces-apple-pencil-pro-with-barrel-roll-and-squeeze-capabilities">Apple Pencil Pro</a>, but it's better than nothing.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-exgNKX"></div>                            </div>                            <script src="https://kwizly.com/embed/exgNKX.js" async=""></script><h3 class="article-body__section" id="section-magsafe"><span>MagSafe</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="UDr8c5DLF9rP5aXyr9NwQ5" name="iphone duo software" alt="iphone duo two apps" src="https://cdn.mos.cms.futurecdn.net/UDr8c5DLF9rP5aXyr9NwQ5-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Magnetic wireless charging is a rarity, in part because Apple had a stranglehold on it for so long. While <a href="https://www.tomsguide.com/phones/what-is-qi2-wireless-charging">Qi2 wireless charging</a> does allow phones to add a MagSafe-style magnetic ring, <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s25-has-supports-qi2-charging-but-theres-a-big-catch">Samsung has avoided doing this </a>— preferring to utilize special magnetic cases instead. The Galaxy Z Fold 8 is no exception to this trend, despite offering all the other benefits of Qi2 charging.</p><p>Apple had no such issue adding <a href="https://www.tomsguide.com/phones/iphones/what-is-apple-magsafe-and-which-iphones-support-it">MagSafe</a> to the iPhone Duo, as it's done with virtually every iPhone released since the <a href="https://www.tomsguide.com/reviews/iphone-12">iPhone 12.</a> Plus, despite the phone's unique shape and size, Apple confirmed that it is compatible with MagSafe accessories and chargers  — meaning all your old MagSafe products should still fit.</p><h3 class="article-body__section" id="section-faster-60w-charging"><span>Faster 60W charging</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2144px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="4oMko37sfDNte8KzjvzD2M" name="Apple iPhone Duo hands on-3" alt="Apple iPhone Duo shown in hand" src="https://cdn.mos.cms.futurecdn.net/4oMko37sfDNte8KzjvzD2M-1920-80.jpg" mos="" align="middle" fullscreen="" width="2144" height="1206" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>MagSafe isn't the only way iPhone Duo beats Z Fold 8 in the charging department. Apple's foldable also offers faster charging speeds, regardless of whether you use MagSafe or a plug-in charging cable.</p><p>Wired charging supports up to 60W speeds, which regains 50% charge in just 15 minutes. Meanwhile, wireless charging is capped at 25W. In comparison, the Galaxy Z Fold 8 offers 45W wired charging, and can regain 43% in 15 minutes. Wireless charging is also slightly slower at 20W, which puts it at a slight disadvantage to the iPhone.</p><h3 class="article-body__section" id="section-better-front-facing-camera-hardware"><span>Better front-facing camera hardware</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="SoAi2j7o9Dqs6v288A4cEa" name="iPhone Duo edit 3" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/SoAi2j7o9Dqs6v288A4cEa-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Like the S Pen, Samsung used to offer an <a href="https://www.tomsguide.com/news/samsung-galaxy-z-fold-3-under-display-camera-tested-its-amazing-and-flawed">under-display camera</a> on Galaxy Z Fold phones — and it hasn't been seen since the Galaxy Z Fold 6. The quality was not great, and it was no surprise that later Z folds switched back to the hole-punch camera design. Apple is giving under-display camera tech another chance at the limelight.</p><p>Apple hasn't specified the quality of this camera, noting that it's designed for use with FaceTime and other video calling software rather than selfies. That suggests the quality isn't great. But at least Apple is willing to try new things with the Duo, rather than reusing the same lackluster selfie camera hardware for multiple years in a row.</p><p>Plus, the iPhone Duo's actual selfie camera, which is in the cover display, offers higher resolution than Samsung. We're talking 12MP compared to 10MP, and while resolution doesn't automatically mean quality, it's likely that this is a similar selfie camera to the one in iPhone 17 Pro Max — <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">which I found to take better photos than the Galaxy Z Fold 8 Ultra.</a></p><h3 class="article-body__section" id="section-iphone-duo-software-reacts-based-on-folded-hinge-state"><span>iPhone Duo software reacts based on folded hinge state</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="N49opwHV76RM3BfKvL8REa" name="iPhone duo edit 2" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/N49opwHV76RM3BfKvL8REa-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>A lot of Samsung phones offer what the company calls "Flex Mode," which allows the phone to react and adapt depending on the angle of the central hinge. Samsung Galaxy Z Fold 8 is the first Galaxy foldable to ditch this feature, despite the fact it's available on the Ultra model. This reduces the functionality of the phone somewhat, especially compared to iPhone Duo.</p><p>Apple doesn't have a special name for this feature, but the Duo does react depending on the angle of the hinge and the state of the fold itself. So if you have Netflix running, folding the screen to a 90-degree angle will shift the video to one side of the screen, and media controls to the other. </p><h3 class="article-body__section" id="section-vapor-chamber-cooling"><span>Vapor chamber cooling</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="CN7RzmKPJyev7oUAf2fdFa" name="iPhone duo gaming" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/CN7RzmKPJyev7oUAf2fdFa-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The iPhone Duo offers an A20 Pro chipset with vapor chamber cooling, which helps dissipate heat. This means that the iPhone should offer better sustained performance, especially when doing resource-heavy tasks like gaming, multitasking and AI processing. </p><p>We haven't done any performance or thermal testing on the iPhone Duo just yet, so we don't know how effective the vapor chamber will be. That said, the Fold 8 doesn't offer a vapor chamber at all. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/apple-quietly-jacks-the-prices-of-the-iphone-16-iphone-17-and-iphone-air-heres-how-much-youll-pay-now"><strong>Apple quietly jacks the prices of the iPhone 16, iPhone 17, and iPhone Air — here's how much you'll pay now</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/apples-just-extended-free-access-to-emergency-satellite-communication-for-another-year-its-the-third-time-this-has-happened"><strong>Apple's just extended free access to emergency satellite communication for another year — it's the third time this has happened</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/steve-jobs-said-there-would-never-be-an-iphone-stylus-but-iphone-duo-just-proved-him-wrong-and-itll-be-a-better-device-for-it"><strong>Steve Jobs said there would never be an iPhone stylus but iPhone Duo just proved him wrong — and it'll be a better device for it</strong></a><strong></strong></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ iPhone Ultra vs. Galaxy Z Fold 8 Ultra — here's the flagship foldable I'd recommend based on the rumors ]]></title>
                                                                                                <dc:content><![CDATA[ <p>This has been an amazing year for foldables. Now more than ever, fierce competition is forcing phone makers to innovate at a rapid pace. With the <a href="https://www.tomsguide.com/phones/iphones/iphone-ultra-rumors-everything-you-need-to-know-about-the-foldable-iphone">iPhone Ultra</a> poised to make its debut at Apple’s upcoming <a href="https://www.tomsguide.com/phones/iphones/apple-event-is-official-for-september-9-iphone-ultra-iphone-18-pro-max-watch-12-and-more">“surprise and shine”</a> event in just over a week, it will no doubt go toe-to-toe against the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review#section-samsung-galaxy-z-fold-8-ultra-review-the-ups">Galaxy Z Fold 8 Ultra</a>.</p><p>That’s why I’m exploring the iPhone Ultra vs. Galaxy Z Fold 8 Ultra matchup, breaking down what the latest leaks and rumors reveal about Apple’s upcoming foldable. Then, I’ll detail how it stacks up against what I’ve tested and experienced with the Galaxy Z Fold 8 Ultra — all to see which one truly deserves the title of <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">best foldable phone</a>.</p><h2 id="a-form-factor-preference">A form-factor preference</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2955px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="MrDnXiJSzcsUQ9GoBW5XEX" name="Galaxy Z Fold 8-28" alt="Galaxy Z Fold 8 and Z Fold 8 Ultra shown side to side." src="https://cdn.mos.cms.futurecdn.net/MrDnXiJSzcsUQ9GoBW5XEX-1920-80.jpg" mos="" align="middle" fullscreen="" width="2955" height="1662" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The first and arguably biggest difference between them is the form factor. While the Galaxy Z Fold 8 Ultra sets a high bar with its remarkably thin, lightweight build, ergonomics often come down to aspect ratio. The taller profile of Samsung's foldable line contrasts sharply with the broader, passport-like shape rumored for Apple's debut.</p><p>Leaks and renders indicate Apple is embracing a <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-dummy-unit-leaks-and-im-not-sure-how-i-feel-about-this-design-heres-why">wider footprint for the iPhone Ultra</a>, which fundamentally changes day-to-day usability. When closed, that shorter, stouter profile should make one-handed operation far more comfortable, unlike the Galaxy Z Fold 8 Ultra, where reaching the top corners of the cover display remains a stretch. Unfolded, the iPhone Ultra’s rumored 4:3 main screen offers a natural, book-like canvas that excels for split-screen multitasking and reading.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="CV8CramvBjfpAfueojWvvS" name="iPhone Fold mockup" alt="iPhone Fold 3D printed mockup showing front screen and back of device" src="https://cdn.mos.cms.futurecdn.net/CV8CramvBjfpAfueojWvvS-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Subsy @ MakerWorld)</span></figcaption></figure><p>Dimensions will play a major role as well. While Apple is tipped to make the iPhone Ultra roughly 4.8mm thin when unfolded with a weight between 8.1 and 8.5 ounces, the Galaxy Z Fold 8 Ultra holds the edge on raw numbers at 4.22mm thin and just 7.8 ounces.</p><p>Even so, I’d gladly trade a fraction of a millimeter and a few grams for the iPhone Ultra’s broader silhouette and superior everyday practicality.</p><h2 id="crease-less-display-i-39-ll-believe-it-when-i-see-it">Crease-less display: I'll believe it when I see it</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1876px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="dAKjscCtnwCaSP4hgKFape" name="Galaxy Z Fold 8 Ultra-5" alt="Galaxy Z Fold 8 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/dAKjscCtnwCaSP4hgKFape-1920-80.jpg" mos="" align="middle" fullscreen="" width="1876" height="1055" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Eliminating the display crease has long been the holy grail of foldable engineering. While Samsung has steadily refined the technology with each generation, the seam still persists. Frankly, though, the Galaxy Z Fold 8 Ultra’s crease doesn't bother me — it has never hindered me from watching videos, multitasking, or running apps.</p><p>Rumors suggest Apple is attempting to achieve the impossible with a <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-invisible-crease-sounds-great-but-this-is-the-feature-apple-cant-afford-to-ignore">virtually invisible crease on the iPhone Ultra</a>. If Apple genuinely manages to deliver a completely flat, crease-free panel out of the gate, it would be an engineering triumph that instantly resets industry benchmarks and puts every other foldable maker on notice.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="cLJg47oNbZQTPJwitNVmte" name="iPhone Ultra half open Apple Track 1" alt="iPhone Ultra half folded in hand" src="https://cdn.mos.cms.futurecdn.net/cLJg47oNbZQTPJwitNVmte-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Apple Track)</span></figcaption></figure><p>Still, I can’t help questioning the physics of bending ultra-thin glass thousands of times without wear and tear eventually leaving a trace. More importantly, the practical reality is that absolute perfection simply <em>isn't </em>necessary.</p><p>Samsung has refined the Galaxy Z Fold 8 Ultra’s hinge and teardrop display structure so effectively that its shallow crease disappears when viewing the screen straight on. Sure, I can still feel a subtle dip under my finger or catch a stray reflection off-axis, but in everyday use, it’s far from a deal breaker.</p><p>If Apple pulls off a miracle, kudos to them  —but for most buyers, living with a minor crease is hardly a sacrifice.</p><h2 id="camera-versatility">Camera versatility</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3143px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="zQ46AeP4vRip5VZLsQx77F" name="Galaxy Z Fold 8 Ultra review-4" alt="samsung galaxy z fold 8 ultra review images" src="https://cdn.mos.cms.futurecdn.net/zQ46AeP4vRip5VZLsQx77F-1920-80.jpg" mos="" align="middle" fullscreen="" width="3143" height="1768" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>When it comes to cameras, the Galaxy Z Fold 8 Ultra holds the upper hand in both hardware and software. Leaks strongly suggest the iPhone Ultra will settle for a dual-camera system — a 48MP main sensor paired with a 48MP ultrawide — leaving out a dedicated telephoto lens entirely.</p><p>I know first-hand that Apple’s computational photography and color science are stellar. Time after time in my photo shootouts, iPhones prove to be front leading contenders for the <a href="https://www.tomsguide.com/us/best-phone-cameras,review-2272.html">best camera phone</a> title. For effortless point-and-shoot reliability, Apple rarely misses.</p><p>However, the Galaxy Z Fold 8 Ultra offers the sheer versatility that serious photographers and mobile creators like me crave. Samsung didn't compromise on hardware, packing a triple-lens system headlined by a massive 200MP main sensor, a 50MP ultrawide, and a dedicated 10MP 3x telephoto lens. </p><p>That optical reach makes a noticeable difference when framing distant subjects without sacrificing clarity — something my colleagues demonstrated clearly in their <a href="https://www.tomsguide.com/phones/samsung-phones/how-ultra-are-the-galaxy-z-fold-8-ultras-cameras-i-put-them-to-the-test-against-the-galaxy-s26-ultra">Galaxy Z Fold 8 vs. Galaxy Z Fold 8 Ultra camera shootout</a>.</p><p>Beyond the lenses, Samsung’s software ecosystem provides a deeper roster of creative tools. Features like <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-just-did-the-impossible-with-the-galaxy-s26-ultra-i-cant-decide-which-of-these-two-new-features-i-like-more">Horizon Lock</a> keep action shots level during rapid movement, while full Pro Video and <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-phones-have-a-hidden-camera-mode-and-its-totally-transformed-my-photos">Expert RAW modes</a> grant granular manual control over shutter speed, ISO, and white balance. While I have no doubt the iPhone Ultra will capture gorgeous images, the Z Fold 8 Ultra is the clear winner for creative flexibility.</p><h2 id="power-and-battery">Power and battery</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3384px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="DsnjPkJpoiWkgqzpb69L5F" name="Galaxy Z Fold 8 Ultra review-23" alt="samsung galaxy z fold 8 ultra review images" src="https://cdn.mos.cms.futurecdn.net/DsnjPkJpoiWkgqzpb69L5F-1920-80.jpg" mos="" align="middle" fullscreen="" width="3384" height="1904" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Foldable phones are simply more demanding than your average slab, so performance can’t be shorthanded. I’ve seen how incredibly finessed Samsung’s foldable is with a Snapdragon 8 Elite for Galaxy running under the hood. Benchmark performance scores prove it’s already a beast, which puts pressure on Apple to succeed with its rumored, next-gen <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-tipped-for-a20-pro-chip-apples-first-2nm-processor-to-power-new-foldable-phone">A20 Pro chip</a> that's supposedly using a 2nm manufacturing process. I don’t doubt that the A20 Pro will give the Snapdragon 8 Elite Gen 5 a run for its money, but history has shown me this isn’t a significant buying decision.</p><p>What I will say, though, is the class-leading performance of the Z Fold 8 Ultra’s battery life. Packed with a 5,000 mAh battery, it sets a high bar for the iPhone Ultra because the Fold 8 Ultra recorded a time of <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-vs-fold-8-ultra-vs-flip-8-battery-tests-silicon-carbon-pays-off">14 hours and 33 minutes on Tom’s Guide’s battery drain test</a>. That’s more than 2 hours longer than what we recorded with the <a href="https://www.tomsguide.com/phones/samsung-phones/i-just-ditched-my-iphone-for-the-z-fold-8-android-17s-new-migration-tool-is-pure-magic-but-there-is-one-painful-catch">Galaxy Z Fold 8</a>.</p><p>Apple’s reportedly going to lean on a split-battery design totaling around 4,883 mAh. While that capacity is slightly smaller than Samsung's cell, it’ll ultimately come down to Apple’s unmatched silicon efficiency and aggressive iOS background power management could level the playing field.</p><h2 id="the-true-dark-horse-is-the-software">The true dark horse is the software</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="BwFTXNUWDT3Up6pYASCnEg" name="Galaxy Z Fold 8 Ultra-17" alt="Galaxy Z Fold 8 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/BwFTXNUWDT3Up6pYASCnEg-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>While hardware upgrades often grab the headlines, software optimization remains the real battleground for foldables — and it’s where Apple could quietly land a major blow. Even after years of development, Google and Samsung still wrestle with app scaling across irregular foldable aspect ratios.</p><p>I know this first-hand from playing some of my favorite games. While a title might scale properly on the cover display, opening the main screen — or simply rotating the device — frequently produces stretched-out layouts that fail to showcase the true benefits of a foldable screen.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="AVYypSVaahdG6ut8smhmHA" name="Galaxy Z Fold 7" alt="Galaxy Z Fold 7 review." src="https://cdn.mos.cms.futurecdn.net/AVYypSVaahdG6ut8smhmHA-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>If Apple enforces its strict developer guidelines and leverages a familiar iPad-like aspect ratio, the iPhone Ultra could deliver seamless app scaling out of the gate, taking full advantage of every square millimeter.</p><p>Still, Samsung has proven that raw productivity remains its top priority. The Galaxy Z Fold 8 Ultra effortlessly runs up to four apps simultaneously, while <a href="https://www.tomsguide.com/phones/samsung-phones/i-just-tried-the-new-samsung-dex-on-the-galaxy-z-fold-8-and-it-has-one-huge-upgrade">Samsung DeX</a> elevates the hardware into a true desktop-like workstation when connected to an external monitor. It sets a towering standard for mobile productivity — and I'm eager to see whether Apple can counter with a comparable multitasking solution.</p><h2 id="outlook">Outlook</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="LBXk5HHdP7Dq6ZSQVtvXFG" name="iPhone Ultra" alt="iPhone Ultra against colorful background." src="https://cdn.mos.cms.futurecdn.net/LBXk5HHdP7Dq6ZSQVtvXFG-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Price will ultimately be the elephant in the room for this matchup. While the Galaxy Z Fold 8 Ultra already commands a staggering $2,099 premium, early leaks and analyst projections suggest the iPhone Ultra could blow past that threshold—potentially landing anywhere between $2,000 and upwards of $2,500. That’s an eye-watering figure that's difficult to stomach for any smartphone, regardless of pedigree.</p><p>Yet, if Apple executes on its core hardware and software promises, the iPhone Ultra might just justify that astronomical investment over Samsung’s latest flagship.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-W5AKnW"></div>                            </div>                            <script src="https://kwizly.com/embed/W5AKnW.js" async=""></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/ive-been-testing-pixel-11-pro-xl-for-a-week-heres-why-hilight-is-the-most-disappointing-new-feature">I've been testing Pixel 11 Pro XL for a week — here's why HiLight is the most disappointing new feature</a></li><li><a href="https://www.tomsguide.com/phones/iphones/i-tried-this-magsafe-game-controller-and-it-puts-other-bluetooth-gamepads-to-shame-plus-its-usd20-off-right-now">I tried this MagSafe game controller and it puts other Bluetooth gamepads to shame — plus it’s $20 off right now</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-ultra-design-leaked-and-it-could-cause-the-most-intense-wave-of-criticism-in-galaxy-history">Samsung Galaxy S27 Ultra design leaked — and it could cause ‘the most intense wave of criticism in Galaxy history’</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/iphone-ultra-vs-galaxy-z-fold-8-ultra-heres-the-flagship-foldable-id-recommend</link>
                                                                            <description>
                            <![CDATA[ I break down an iPhone Ultra vs. Galaxy Z Fold Ultra comparison to find out which foldable phone could earn my money as the better foldable device. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">4nNY6HzmMCUbWQ5yyrukPe</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/NUTTQajf9ScAinbNhcFzUH-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 31 Aug 2026 05:00:00 +0000</pubDate>                                                                                                                                <updated>Mon, 31 Aug 2026 11:33:33 +0000</updated>
                                                                                                                                            <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ john.velasco@futurenet.com (John Velasco) ]]></author>                    <dc:creator><![CDATA[ John Velasco ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/TSj224oX8d5ERXaDs8pDGd-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/NUTTQajf9ScAinbNhcFzUH-1920-80.jpg">
                                                            <media:credit><![CDATA[Majin Bu via X / Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPhone Ultra vs Galaxy Z Fold 8 Ultra]]></media:description>                                                            <media:text><![CDATA[iPhone Ultra vs Galaxy Z Fold 8 Ultra]]></media:text>
                                <media:title type="plain"><![CDATA[iPhone Ultra vs Galaxy Z Fold 8 Ultra]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/NUTTQajf9ScAinbNhcFzUH-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>This has been an amazing year for foldables. Now more than ever, fierce competition is forcing phone makers to innovate at a rapid pace. With the <a href="https://www.tomsguide.com/phones/iphones/iphone-ultra-rumors-everything-you-need-to-know-about-the-foldable-iphone">iPhone Ultra</a> poised to make its debut at Apple’s upcoming <a href="https://www.tomsguide.com/phones/iphones/apple-event-is-official-for-september-9-iphone-ultra-iphone-18-pro-max-watch-12-and-more">“surprise and shine”</a> event in just over a week, it will no doubt go toe-to-toe against the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review#section-samsung-galaxy-z-fold-8-ultra-review-the-ups">Galaxy Z Fold 8 Ultra</a>.</p><p>That’s why I’m exploring the iPhone Ultra vs. Galaxy Z Fold 8 Ultra matchup, breaking down what the latest leaks and rumors reveal about Apple’s upcoming foldable. Then, I’ll detail how it stacks up against what I’ve tested and experienced with the Galaxy Z Fold 8 Ultra — all to see which one truly deserves the title of <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">best foldable phone</a>.</p><h2 id="a-form-factor-preference">A form-factor preference</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2955px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="MrDnXiJSzcsUQ9GoBW5XEX" name="Galaxy Z Fold 8-28" alt="Galaxy Z Fold 8 and Z Fold 8 Ultra shown side to side." src="https://cdn.mos.cms.futurecdn.net/MrDnXiJSzcsUQ9GoBW5XEX-1920-80.jpg" mos="" align="middle" fullscreen="" width="2955" height="1662" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The first and arguably biggest difference between them is the form factor. While the Galaxy Z Fold 8 Ultra sets a high bar with its remarkably thin, lightweight build, ergonomics often come down to aspect ratio. The taller profile of Samsung's foldable line contrasts sharply with the broader, passport-like shape rumored for Apple's debut.</p><p>Leaks and renders indicate Apple is embracing a <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-dummy-unit-leaks-and-im-not-sure-how-i-feel-about-this-design-heres-why">wider footprint for the iPhone Ultra</a>, which fundamentally changes day-to-day usability. When closed, that shorter, stouter profile should make one-handed operation far more comfortable, unlike the Galaxy Z Fold 8 Ultra, where reaching the top corners of the cover display remains a stretch. Unfolded, the iPhone Ultra’s rumored 4:3 main screen offers a natural, book-like canvas that excels for split-screen multitasking and reading.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="CV8CramvBjfpAfueojWvvS" name="iPhone Fold mockup" alt="iPhone Fold 3D printed mockup showing front screen and back of device" src="https://cdn.mos.cms.futurecdn.net/CV8CramvBjfpAfueojWvvS-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Subsy @ MakerWorld)</span></figcaption></figure><p>Dimensions will play a major role as well. While Apple is tipped to make the iPhone Ultra roughly 4.8mm thin when unfolded with a weight between 8.1 and 8.5 ounces, the Galaxy Z Fold 8 Ultra holds the edge on raw numbers at 4.22mm thin and just 7.8 ounces.</p><p>Even so, I’d gladly trade a fraction of a millimeter and a few grams for the iPhone Ultra’s broader silhouette and superior everyday practicality.</p><h2 id="crease-less-display-i-39-ll-believe-it-when-i-see-it">Crease-less display: I'll believe it when I see it</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1876px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="dAKjscCtnwCaSP4hgKFape" name="Galaxy Z Fold 8 Ultra-5" alt="Galaxy Z Fold 8 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/dAKjscCtnwCaSP4hgKFape-1920-80.jpg" mos="" align="middle" fullscreen="" width="1876" height="1055" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Eliminating the display crease has long been the holy grail of foldable engineering. While Samsung has steadily refined the technology with each generation, the seam still persists. Frankly, though, the Galaxy Z Fold 8 Ultra’s crease doesn't bother me — it has never hindered me from watching videos, multitasking, or running apps.</p><p>Rumors suggest Apple is attempting to achieve the impossible with a <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-invisible-crease-sounds-great-but-this-is-the-feature-apple-cant-afford-to-ignore">virtually invisible crease on the iPhone Ultra</a>. If Apple genuinely manages to deliver a completely flat, crease-free panel out of the gate, it would be an engineering triumph that instantly resets industry benchmarks and puts every other foldable maker on notice.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="cLJg47oNbZQTPJwitNVmte" name="iPhone Ultra half open Apple Track 1" alt="iPhone Ultra half folded in hand" src="https://cdn.mos.cms.futurecdn.net/cLJg47oNbZQTPJwitNVmte-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Apple Track)</span></figcaption></figure><p>Still, I can’t help questioning the physics of bending ultra-thin glass thousands of times without wear and tear eventually leaving a trace. More importantly, the practical reality is that absolute perfection simply <em>isn't </em>necessary.</p><p>Samsung has refined the Galaxy Z Fold 8 Ultra’s hinge and teardrop display structure so effectively that its shallow crease disappears when viewing the screen straight on. Sure, I can still feel a subtle dip under my finger or catch a stray reflection off-axis, but in everyday use, it’s far from a deal breaker.</p><p>If Apple pulls off a miracle, kudos to them  —but for most buyers, living with a minor crease is hardly a sacrifice.</p><h2 id="camera-versatility">Camera versatility</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3143px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="zQ46AeP4vRip5VZLsQx77F" name="Galaxy Z Fold 8 Ultra review-4" alt="samsung galaxy z fold 8 ultra review images" src="https://cdn.mos.cms.futurecdn.net/zQ46AeP4vRip5VZLsQx77F-1920-80.jpg" mos="" align="middle" fullscreen="" width="3143" height="1768" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>When it comes to cameras, the Galaxy Z Fold 8 Ultra holds the upper hand in both hardware and software. Leaks strongly suggest the iPhone Ultra will settle for a dual-camera system — a 48MP main sensor paired with a 48MP ultrawide — leaving out a dedicated telephoto lens entirely.</p><p>I know first-hand that Apple’s computational photography and color science are stellar. Time after time in my photo shootouts, iPhones prove to be front leading contenders for the <a href="https://www.tomsguide.com/us/best-phone-cameras,review-2272.html">best camera phone</a> title. For effortless point-and-shoot reliability, Apple rarely misses.</p><p>However, the Galaxy Z Fold 8 Ultra offers the sheer versatility that serious photographers and mobile creators like me crave. Samsung didn't compromise on hardware, packing a triple-lens system headlined by a massive 200MP main sensor, a 50MP ultrawide, and a dedicated 10MP 3x telephoto lens. </p><p>That optical reach makes a noticeable difference when framing distant subjects without sacrificing clarity — something my colleagues demonstrated clearly in their <a href="https://www.tomsguide.com/phones/samsung-phones/how-ultra-are-the-galaxy-z-fold-8-ultras-cameras-i-put-them-to-the-test-against-the-galaxy-s26-ultra">Galaxy Z Fold 8 vs. Galaxy Z Fold 8 Ultra camera shootout</a>.</p><p>Beyond the lenses, Samsung’s software ecosystem provides a deeper roster of creative tools. Features like <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-just-did-the-impossible-with-the-galaxy-s26-ultra-i-cant-decide-which-of-these-two-new-features-i-like-more">Horizon Lock</a> keep action shots level during rapid movement, while full Pro Video and <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-phones-have-a-hidden-camera-mode-and-its-totally-transformed-my-photos">Expert RAW modes</a> grant granular manual control over shutter speed, ISO, and white balance. While I have no doubt the iPhone Ultra will capture gorgeous images, the Z Fold 8 Ultra is the clear winner for creative flexibility.</p><h2 id="power-and-battery">Power and battery</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3384px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="DsnjPkJpoiWkgqzpb69L5F" name="Galaxy Z Fold 8 Ultra review-23" alt="samsung galaxy z fold 8 ultra review images" src="https://cdn.mos.cms.futurecdn.net/DsnjPkJpoiWkgqzpb69L5F-1920-80.jpg" mos="" align="middle" fullscreen="" width="3384" height="1904" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Foldable phones are simply more demanding than your average slab, so performance can’t be shorthanded. I’ve seen how incredibly finessed Samsung’s foldable is with a Snapdragon 8 Elite for Galaxy running under the hood. Benchmark performance scores prove it’s already a beast, which puts pressure on Apple to succeed with its rumored, next-gen <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-tipped-for-a20-pro-chip-apples-first-2nm-processor-to-power-new-foldable-phone">A20 Pro chip</a> that's supposedly using a 2nm manufacturing process. I don’t doubt that the A20 Pro will give the Snapdragon 8 Elite Gen 5 a run for its money, but history has shown me this isn’t a significant buying decision.</p><p>What I will say, though, is the class-leading performance of the Z Fold 8 Ultra’s battery life. Packed with a 5,000 mAh battery, it sets a high bar for the iPhone Ultra because the Fold 8 Ultra recorded a time of <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-vs-fold-8-ultra-vs-flip-8-battery-tests-silicon-carbon-pays-off">14 hours and 33 minutes on Tom’s Guide’s battery drain test</a>. That’s more than 2 hours longer than what we recorded with the <a href="https://www.tomsguide.com/phones/samsung-phones/i-just-ditched-my-iphone-for-the-z-fold-8-android-17s-new-migration-tool-is-pure-magic-but-there-is-one-painful-catch">Galaxy Z Fold 8</a>.</p><p>Apple’s reportedly going to lean on a split-battery design totaling around 4,883 mAh. While that capacity is slightly smaller than Samsung's cell, it’ll ultimately come down to Apple’s unmatched silicon efficiency and aggressive iOS background power management could level the playing field.</p><h2 id="the-true-dark-horse-is-the-software">The true dark horse is the software</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="BwFTXNUWDT3Up6pYASCnEg" name="Galaxy Z Fold 8 Ultra-17" alt="Galaxy Z Fold 8 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/BwFTXNUWDT3Up6pYASCnEg-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>While hardware upgrades often grab the headlines, software optimization remains the real battleground for foldables — and it’s where Apple could quietly land a major blow. Even after years of development, Google and Samsung still wrestle with app scaling across irregular foldable aspect ratios.</p><p>I know this first-hand from playing some of my favorite games. While a title might scale properly on the cover display, opening the main screen — or simply rotating the device — frequently produces stretched-out layouts that fail to showcase the true benefits of a foldable screen.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="AVYypSVaahdG6ut8smhmHA" name="Galaxy Z Fold 7" alt="Galaxy Z Fold 7 review." src="https://cdn.mos.cms.futurecdn.net/AVYypSVaahdG6ut8smhmHA-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>If Apple enforces its strict developer guidelines and leverages a familiar iPad-like aspect ratio, the iPhone Ultra could deliver seamless app scaling out of the gate, taking full advantage of every square millimeter.</p><p>Still, Samsung has proven that raw productivity remains its top priority. The Galaxy Z Fold 8 Ultra effortlessly runs up to four apps simultaneously, while <a href="https://www.tomsguide.com/phones/samsung-phones/i-just-tried-the-new-samsung-dex-on-the-galaxy-z-fold-8-and-it-has-one-huge-upgrade">Samsung DeX</a> elevates the hardware into a true desktop-like workstation when connected to an external monitor. It sets a towering standard for mobile productivity — and I'm eager to see whether Apple can counter with a comparable multitasking solution.</p><h2 id="outlook">Outlook</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="LBXk5HHdP7Dq6ZSQVtvXFG" name="iPhone Ultra" alt="iPhone Ultra against colorful background." src="https://cdn.mos.cms.futurecdn.net/LBXk5HHdP7Dq6ZSQVtvXFG-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Price will ultimately be the elephant in the room for this matchup. While the Galaxy Z Fold 8 Ultra already commands a staggering $2,099 premium, early leaks and analyst projections suggest the iPhone Ultra could blow past that threshold—potentially landing anywhere between $2,000 and upwards of $2,500. That’s an eye-watering figure that's difficult to stomach for any smartphone, regardless of pedigree.</p><p>Yet, if Apple executes on its core hardware and software promises, the iPhone Ultra might just justify that astronomical investment over Samsung’s latest flagship.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-W5AKnW"></div>                            </div>                            <script src="https://kwizly.com/embed/W5AKnW.js" async=""></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/ive-been-testing-pixel-11-pro-xl-for-a-week-heres-why-hilight-is-the-most-disappointing-new-feature">I've been testing Pixel 11 Pro XL for a week — here's why HiLight is the most disappointing new feature</a></li><li><a href="https://www.tomsguide.com/phones/iphones/i-tried-this-magsafe-game-controller-and-it-puts-other-bluetooth-gamepads-to-shame-plus-its-usd20-off-right-now">I tried this MagSafe game controller and it puts other Bluetooth gamepads to shame — plus it’s $20 off right now</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-ultra-design-leaked-and-it-could-cause-the-most-intense-wave-of-criticism-in-galaxy-history">Samsung Galaxy S27 Ultra design leaked — and it could cause ‘the most intense wave of criticism in Galaxy history’</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Samsung Galaxy S26 FE is proof that Samsung should kill its 'Fan Edition' phones — here's why ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Earlier this week Samsung announced the<a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-fe-review"> Galaxy S26 FE</a>, a cut-price flagship phone that sits somewhere between the $899 <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-review">Galaxy S26</a> and the $549 <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-a57-review">Galaxy A57</a>. The general idea being that you get more flagship features without necessarily having to cough up the full price of a premium device.</p><p>Unfortunately, the small amount of time I've spent with the Galaxy S26 FE suggests that Samsung has fumbled the release of the new phone. We shouldn't really be surprised, considering how lackluster the last few Fan Edition releases have been. We're at the point now where it's time for Samsung to scrap the whole line-up and let the A-series step up to the plate.</p><h2 id="too-expensive-to-be-cheap-too-compromised-to-rival-flagships">Too expensive to be cheap, too compromised to rival flagships</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="CDZvxkY9W9Mkvvi7BnBpiR" name="Samsung Galaxy S26 FE hands-on" alt="Samsung Galaxy S26 FE hands-on." src="https://cdn.mos.cms.futurecdn.net/CDZvxkY9W9Mkvvi7BnBpiR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Tom Pritchard)</span></figcaption></figure><p>The Fan Edition series has always been about lowering the price but making cuts elsewhere. You can't have the same specs as a Galaxy S26 for a lower price, because that's just not economical. That typically manifests itself in worse cameras, cheaper materials and slightly worse performance. </p><p>In the case of the Galaxy S26 FE, those compromises come in three key areas: the screen, the camera and the performance. This is not a phone that has the latest flagship Snapdragon chips, nor does it have the latest <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-s26-performance-face-off-snapdragon-8-elite-gen-5-vs-exynos-2600">Exynos 2600 chip that powers international variants of the S26</a>. Instead it has the Exynos 2500, which was released last year, alongside 8GB of RAM rather than the now-standard 12GB.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Samsung Galaxy S26 FE</strong></p></td><td  ><p><strong>Samsung Galaxy S26</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>$699</p></td><td  ><p>$899</p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>6.7-inch AMOLED (FHD+)</p></td><td  ><p>6.3-inch AMOLED (FHD+)</p></td></tr><tr><td class="firstcol " ><p><strong>Refresh Rate</strong></p></td><td  ><p>120Hz</p></td><td  ><p>120Hz</p></td></tr><tr><td class="firstcol " ><p><strong>Processor</strong></p></td><td  ><p>Exynos 2500</p></td><td  ><p>Snapdragon 8 Elite Gen 5 for Galaxy (US-only) / Exynos 2600</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>8GB</p></td><td  ><p>12GB</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>128 GB / 256GB / 512GB</p></td><td  ><p>256GB / 512GB</p></td></tr><tr><td class="firstcol " ><p><strong>Rear cameras</strong></p></td><td  ><p>50MP main (f/1.8), 12MP ultrawide (f/2.2), 8MP telephoto (f/2.4) with 3x optical zoom</p></td><td  ><p>50MP( f/1.8) main, 12MP (f/2.2) ultrawide, 10MP (f/2.4) telephoto w/3x optical zoom</p></td></tr><tr><td class="firstcol " ><p><strong>Front camera</strong></p></td><td  ><p>12MP (f/2.2)</p></td><td  ><p>12MP (f/2.2)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>4,900 mAh</p></td><td  ><p>4,300 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Charging Speed</strong></p></td><td  ><p>45W wired, 15W wireless</p></td><td  ><p>25W wired, 15W wireless</p></td></tr><tr><td class="firstcol " ><p><strong>Size</strong></p></td><td  ><p>6.36 x 3.03 x 0.29 inches (161.6 x 76.9 x 7.4 mm)</p></td><td  ><p>5.89 x 2.82 x 0.28 inches (149.6 x 71.7 x 7.2 mm)</p></td></tr><tr><td class="firstcol " ><p><strong>Colors</strong></p></td><td  ><p>Blueberry, Graphite, Pistachio</p></td><td  ><p>Cobalt Violet, Sky Blue, Black, White (online exclusive: Silver Shadow, Pink Gold)</p></td></tr></tbody></table></div><p>Admittedly, on paper, the lower specs on the S26 FE don't seem too bad or different from that of the standard S26. It's little things that help drop the price tag, such as weaker display glass, lower resolution telephoto lenses, and the loss of premium materials like the shiny matte glass back panels. But these things all add up, and while that keeps the price down, it also makes the S26 FE a much less appealing purchase. </p><p>The starting price of $699, which gets you 128GB of storage, may make this the cheapest Galaxy S26 you can buy, but it's still not particularly cheap as far as smartphones go. Sure, it's almost half the price of something like the Galaxy S26 Ultra, but it doesn't directly fall into the cheaper phone categories like the S57 or A37.</p><p>Easily the worst part of all this is the fact that Samsung has (at the time of writing) discounted the standard Galaxy S26 by $100. This means the cheapest model, with 256GB of storage, can be <a href="https://www.samsung.com/us/smartphones/galaxy-s26/buy/galaxy-s26-256gb-unlocked-sku-sm-s942uzsexaa/" target="_blank">purchased for $799</a>. Meanwhile the 256GB variant of the Galaxy S26 FE is also $799, which means you're getting a worse phone for the same amount of money.</p><p>Sure there is a cheaper storage option that costs $100 less, but is it really worth losing out on everything the S26 has to offer to save that much? In most cases, I'd argue no.</p><h2 id="the-galaxy-a-series-keeps-getting-better">The Galaxy A series keeps getting better</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Xs5ZNd73ZWhjVe5hE6rTjR" name="Samsung Galaxy S26 FE hands-on" alt="Samsung Galaxy S26 FE hands-on." src="https://cdn.mos.cms.futurecdn.net/Xs5ZNd73ZWhjVe5hE6rTjR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Tom Pritchard)</span></figcaption></figure><p>As much as the Galaxy S26 FE isn't a huge amount worse than the Galaxy S26, it also doesn't seem to be that much better than the Galaxy A57. In fact Samsung's mid-range phone is one of the <a href="https://www.tomsguide.com/best-picks/best-cheap-phones">best cheap phones</a> you can buy because, despite the sacrifices you inevitably have to make, it's an exceptionally good phone for its price tag.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Samsung Galaxy S26 FE</strong></p></td><td  ><p><strong>Samsung Galaxy A57</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>$699</p></td><td  ><p>$549</p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>6.7-inch AMOLED (FHD+)</p></td><td  ><p>6.7-inch, AMOLED (FHD+)</p></td></tr><tr><td class="firstcol " ><p><strong>Refresh Rate</strong></p></td><td  ><p>120Hz</p></td><td  ><p>120Hz</p></td></tr><tr><td class="firstcol " ><p><strong>Processor</strong></p></td><td  ><p>Exynos 2500</p></td><td  ><p>Exynos 1680</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>8GB</p></td><td  ><p>8GB</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>128 GB / 256GB / 512GB</p></td><td  ><p>128GB / 256GB / 512GB</p></td></tr><tr><td class="firstcol " ><p><strong>Rear cameras</strong></p></td><td  ><p>50MP main (f/1.8), 12MP ultrawide (f/2.2), 8MP telephoto (f/2.4) with 3x optical zoom</p></td><td  ><p>50MP main (f/1.8), 12MP Ultrawide (f/2.2), 5MP Macro (f/2.4)</p></td></tr><tr><td class="firstcol " ><p><strong>Front camera</strong></p></td><td  ><p>12MP (f/2.2)</p></td><td  ><p>12MP</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>4,900 mAh</p></td><td  ><p>5,000 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Charging Speed</strong></p></td><td  ><p>45W wired, 15W wireless</p></td><td  ><p>45W wired only</p></td></tr><tr><td class="firstcol " ><p><strong>Size</strong></p></td><td  ><p>6.36 x 3.03 x 0.29 inches (161.6 x 76.9 x 7.4 mm)</p></td><td  ><p>6.35 x 3.02 x 0.27 inches (161.5 x 76.8 x 6.9mm)</p></td></tr><tr><td class="firstcol " ><p><strong>Colors</strong></p></td><td  ><p>Blueberry, Graphite, Pistachio</p></td><td  ><p>Navy, Gray, Icyblue, Lilac</p></td></tr></tbody></table></div><p>It's a lot easier to see where the Galaxy A57 made the cuts in contrast to the S26 FE. The main sticking point for me is the <a href="https://www.tomsguide.com/phones/samsung-phones/i-put-samsung-galaxy-a57s-macro-lens-head-to-head-with-galaxy-s26-ultras-macro-mode-and-its-not-even-close">terrible macro camera</a>, which always feels like an absolute waste of hardware compared to a dedicated macro camera mode other smartphones utilize. It also looks a lot cheaper, and the performance hardware is more noticeably inferior.</p><p>It doesn't matter if you don't know anything about phone chips, the fact that the A57 has an Exynos 1680 means it might as well have a giant neon sign declaring that it won't outperform the S26 FE's Exynos 2500.</p><p>That being said, we've been seeing pretty big gains in the mid-range phone market over the past several years. They're starting to feel a lot more premium, and they're coming with AI and software features that you previously wouldn't see outside ultra-premium models. The yearly upgrades aren't exactly stellar, but that seems to be a problem all phones are facing right now — no matter the price point.</p><p>A Galaxy A-series phone is never going to be as good as a flagship S-series, but it still offers a lot of the things you might need from a phone, including solid cameras, battery life and so on. There's even some solid AI features thrown in, if you're the kind of person who really likes using Galaxy AI and Bixby. </p><p>Admittedly, the Fan Edition phones have all done this too, but they also cost more and don't offer as much of a discount compared to other Galaxy S-series phones. </p><h2 id="bottom-line-galaxy-fe-phones-lack-purpose">Bottom line: Galaxy FE phones lack purpose</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="7PPxxLNxP4CVPu4cMAN8iR" name="Samsung Galaxy S26 FE hands-on" alt="Samsung Galaxy S26 FE hands-on." src="https://cdn.mos.cms.futurecdn.net/7PPxxLNxP4CVPu4cMAN8iR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Tom Pritchard)</span></figcaption></figure><p>Few phone companies take the approach Samsung does when it comes to cheaper-than-flagship phones. In fact, Samsung is the only one I can think of that offers two distinct devices that are meant to sit below the entry level premium model. The likes of Google, Apple, Nothing and others typically only have the one. </p><p>With two devices that sit in such close proximity, from both a price and hardware perspective, differentiating them becomes a much harder task. We end up in a situation where the Galaxy S26 FE feels awkwardly placed in a bizarre, paradoxical middle ground.</p><p>In the past Samsung was a lot more inconsistent about releasing the A50-series phones in the U.S., which arguably gave the Fan Edition release a lot more breathing room. There's clearly demand for a cheaper Galaxy phone, and the lack of competition from itself meant Samsung could continue to push the more premium option. </p><p>These days, it feels like these phones are released out of obligation, rather than a pressing need to actually build them. And it's about time Samsung threw in the towel, and gave the Fan Edition line-up a trip to the farm upstate.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-ultra-design-leaked-and-it-could-cause-the-most-intense-wave-of-criticism-in-galaxy-history">Samsung Galaxy S27 Ultra design leaked — and it could cause ‘the most intense wave of criticism in Galaxy history’</a></li><li><a href="https://www.tomsguide.com/phones/iphones/expert-predicts-iphone-ultras-usd2-500-price-tag-wont-deter-die-hard-fans-it-could-see-10-million-units-sold-in-the-next-year">Expert predicts iPhone Ultra's $2,500 price tag won't deter die-hard fans — it could see 10 million units sold in the next year</a></li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/ive-been-testing-pixel-11-pro-xl-for-a-week-heres-why-hilight-is-the-most-disappointing-new-feature">I've been testing Pixel 11 Pro XL for a week — here's why HiLight is the most disappointing new feature</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-fe-is-proof-that-samsung-should-kill-its-fan-edition-phones-heres-why</link>
                                                                            <description>
                            <![CDATA[ The Samsung Galaxy S26 FE is proof that the Fan Edition series has outlived its usefulness, and it's time Samsung killed it in favor of the Galaxy A-series instead. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">Cg3zWaETQQPq52kAQUQxXF</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/JNzS5dtCK9PWLodyx8zXjR-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 30 Aug 2026 11:00:00 +0000</pubDate>                                                                                                                                <updated>Sun, 30 Aug 2026 22:19:55 +0000</updated>
                                                                                                                                            <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/JNzS5dtCK9PWLodyx8zXjR-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&amp;#39;s Guide / Tom Pritchard]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Samsung Galaxy S26 FE hands-on.]]></media:description>                                                            <media:text><![CDATA[Samsung Galaxy S26 FE hands-on.]]></media:text>
                                <media:title type="plain"><![CDATA[Samsung Galaxy S26 FE hands-on.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/JNzS5dtCK9PWLodyx8zXjR-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Earlier this week Samsung announced the<a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-fe-review"> Galaxy S26 FE</a>, a cut-price flagship phone that sits somewhere between the $899 <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-review">Galaxy S26</a> and the $549 <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-a57-review">Galaxy A57</a>. The general idea being that you get more flagship features without necessarily having to cough up the full price of a premium device.</p><p>Unfortunately, the small amount of time I've spent with the Galaxy S26 FE suggests that Samsung has fumbled the release of the new phone. We shouldn't really be surprised, considering how lackluster the last few Fan Edition releases have been. We're at the point now where it's time for Samsung to scrap the whole line-up and let the A-series step up to the plate.</p><h2 id="too-expensive-to-be-cheap-too-compromised-to-rival-flagships">Too expensive to be cheap, too compromised to rival flagships</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="CDZvxkY9W9Mkvvi7BnBpiR" name="Samsung Galaxy S26 FE hands-on" alt="Samsung Galaxy S26 FE hands-on." src="https://cdn.mos.cms.futurecdn.net/CDZvxkY9W9Mkvvi7BnBpiR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Tom Pritchard)</span></figcaption></figure><p>The Fan Edition series has always been about lowering the price but making cuts elsewhere. You can't have the same specs as a Galaxy S26 for a lower price, because that's just not economical. That typically manifests itself in worse cameras, cheaper materials and slightly worse performance. </p><p>In the case of the Galaxy S26 FE, those compromises come in three key areas: the screen, the camera and the performance. This is not a phone that has the latest flagship Snapdragon chips, nor does it have the latest <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-s26-performance-face-off-snapdragon-8-elite-gen-5-vs-exynos-2600">Exynos 2600 chip that powers international variants of the S26</a>. Instead it has the Exynos 2500, which was released last year, alongside 8GB of RAM rather than the now-standard 12GB.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Samsung Galaxy S26 FE</strong></p></td><td  ><p><strong>Samsung Galaxy S26</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>$699</p></td><td  ><p>$899</p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>6.7-inch AMOLED (FHD+)</p></td><td  ><p>6.3-inch AMOLED (FHD+)</p></td></tr><tr><td class="firstcol " ><p><strong>Refresh Rate</strong></p></td><td  ><p>120Hz</p></td><td  ><p>120Hz</p></td></tr><tr><td class="firstcol " ><p><strong>Processor</strong></p></td><td  ><p>Exynos 2500</p></td><td  ><p>Snapdragon 8 Elite Gen 5 for Galaxy (US-only) / Exynos 2600</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>8GB</p></td><td  ><p>12GB</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>128 GB / 256GB / 512GB</p></td><td  ><p>256GB / 512GB</p></td></tr><tr><td class="firstcol " ><p><strong>Rear cameras</strong></p></td><td  ><p>50MP main (f/1.8), 12MP ultrawide (f/2.2), 8MP telephoto (f/2.4) with 3x optical zoom</p></td><td  ><p>50MP( f/1.8) main, 12MP (f/2.2) ultrawide, 10MP (f/2.4) telephoto w/3x optical zoom</p></td></tr><tr><td class="firstcol " ><p><strong>Front camera</strong></p></td><td  ><p>12MP (f/2.2)</p></td><td  ><p>12MP (f/2.2)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>4,900 mAh</p></td><td  ><p>4,300 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Charging Speed</strong></p></td><td  ><p>45W wired, 15W wireless</p></td><td  ><p>25W wired, 15W wireless</p></td></tr><tr><td class="firstcol " ><p><strong>Size</strong></p></td><td  ><p>6.36 x 3.03 x 0.29 inches (161.6 x 76.9 x 7.4 mm)</p></td><td  ><p>5.89 x 2.82 x 0.28 inches (149.6 x 71.7 x 7.2 mm)</p></td></tr><tr><td class="firstcol " ><p><strong>Colors</strong></p></td><td  ><p>Blueberry, Graphite, Pistachio</p></td><td  ><p>Cobalt Violet, Sky Blue, Black, White (online exclusive: Silver Shadow, Pink Gold)</p></td></tr></tbody></table></div><p>Admittedly, on paper, the lower specs on the S26 FE don't seem too bad or different from that of the standard S26. It's little things that help drop the price tag, such as weaker display glass, lower resolution telephoto lenses, and the loss of premium materials like the shiny matte glass back panels. But these things all add up, and while that keeps the price down, it also makes the S26 FE a much less appealing purchase. </p><p>The starting price of $699, which gets you 128GB of storage, may make this the cheapest Galaxy S26 you can buy, but it's still not particularly cheap as far as smartphones go. Sure, it's almost half the price of something like the Galaxy S26 Ultra, but it doesn't directly fall into the cheaper phone categories like the S57 or A37.</p><p>Easily the worst part of all this is the fact that Samsung has (at the time of writing) discounted the standard Galaxy S26 by $100. This means the cheapest model, with 256GB of storage, can be <a href="https://www.samsung.com/us/smartphones/galaxy-s26/buy/galaxy-s26-256gb-unlocked-sku-sm-s942uzsexaa/" target="_blank">purchased for $799</a>. Meanwhile the 256GB variant of the Galaxy S26 FE is also $799, which means you're getting a worse phone for the same amount of money.</p><p>Sure there is a cheaper storage option that costs $100 less, but is it really worth losing out on everything the S26 has to offer to save that much? In most cases, I'd argue no.</p><h2 id="the-galaxy-a-series-keeps-getting-better">The Galaxy A series keeps getting better</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Xs5ZNd73ZWhjVe5hE6rTjR" name="Samsung Galaxy S26 FE hands-on" alt="Samsung Galaxy S26 FE hands-on." src="https://cdn.mos.cms.futurecdn.net/Xs5ZNd73ZWhjVe5hE6rTjR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Tom Pritchard)</span></figcaption></figure><p>As much as the Galaxy S26 FE isn't a huge amount worse than the Galaxy S26, it also doesn't seem to be that much better than the Galaxy A57. In fact Samsung's mid-range phone is one of the <a href="https://www.tomsguide.com/best-picks/best-cheap-phones">best cheap phones</a> you can buy because, despite the sacrifices you inevitably have to make, it's an exceptionally good phone for its price tag.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Samsung Galaxy S26 FE</strong></p></td><td  ><p><strong>Samsung Galaxy A57</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>$699</p></td><td  ><p>$549</p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>6.7-inch AMOLED (FHD+)</p></td><td  ><p>6.7-inch, AMOLED (FHD+)</p></td></tr><tr><td class="firstcol " ><p><strong>Refresh Rate</strong></p></td><td  ><p>120Hz</p></td><td  ><p>120Hz</p></td></tr><tr><td class="firstcol " ><p><strong>Processor</strong></p></td><td  ><p>Exynos 2500</p></td><td  ><p>Exynos 1680</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>8GB</p></td><td  ><p>8GB</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>128 GB / 256GB / 512GB</p></td><td  ><p>128GB / 256GB / 512GB</p></td></tr><tr><td class="firstcol " ><p><strong>Rear cameras</strong></p></td><td  ><p>50MP main (f/1.8), 12MP ultrawide (f/2.2), 8MP telephoto (f/2.4) with 3x optical zoom</p></td><td  ><p>50MP main (f/1.8), 12MP Ultrawide (f/2.2), 5MP Macro (f/2.4)</p></td></tr><tr><td class="firstcol " ><p><strong>Front camera</strong></p></td><td  ><p>12MP (f/2.2)</p></td><td  ><p>12MP</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>4,900 mAh</p></td><td  ><p>5,000 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Charging Speed</strong></p></td><td  ><p>45W wired, 15W wireless</p></td><td  ><p>45W wired only</p></td></tr><tr><td class="firstcol " ><p><strong>Size</strong></p></td><td  ><p>6.36 x 3.03 x 0.29 inches (161.6 x 76.9 x 7.4 mm)</p></td><td  ><p>6.35 x 3.02 x 0.27 inches (161.5 x 76.8 x 6.9mm)</p></td></tr><tr><td class="firstcol " ><p><strong>Colors</strong></p></td><td  ><p>Blueberry, Graphite, Pistachio</p></td><td  ><p>Navy, Gray, Icyblue, Lilac</p></td></tr></tbody></table></div><p>It's a lot easier to see where the Galaxy A57 made the cuts in contrast to the S26 FE. The main sticking point for me is the <a href="https://www.tomsguide.com/phones/samsung-phones/i-put-samsung-galaxy-a57s-macro-lens-head-to-head-with-galaxy-s26-ultras-macro-mode-and-its-not-even-close">terrible macro camera</a>, which always feels like an absolute waste of hardware compared to a dedicated macro camera mode other smartphones utilize. It also looks a lot cheaper, and the performance hardware is more noticeably inferior.</p><p>It doesn't matter if you don't know anything about phone chips, the fact that the A57 has an Exynos 1680 means it might as well have a giant neon sign declaring that it won't outperform the S26 FE's Exynos 2500.</p><p>That being said, we've been seeing pretty big gains in the mid-range phone market over the past several years. They're starting to feel a lot more premium, and they're coming with AI and software features that you previously wouldn't see outside ultra-premium models. The yearly upgrades aren't exactly stellar, but that seems to be a problem all phones are facing right now — no matter the price point.</p><p>A Galaxy A-series phone is never going to be as good as a flagship S-series, but it still offers a lot of the things you might need from a phone, including solid cameras, battery life and so on. There's even some solid AI features thrown in, if you're the kind of person who really likes using Galaxy AI and Bixby. </p><p>Admittedly, the Fan Edition phones have all done this too, but they also cost more and don't offer as much of a discount compared to other Galaxy S-series phones. </p><h2 id="bottom-line-galaxy-fe-phones-lack-purpose">Bottom line: Galaxy FE phones lack purpose</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="7PPxxLNxP4CVPu4cMAN8iR" name="Samsung Galaxy S26 FE hands-on" alt="Samsung Galaxy S26 FE hands-on." src="https://cdn.mos.cms.futurecdn.net/7PPxxLNxP4CVPu4cMAN8iR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Tom Pritchard)</span></figcaption></figure><p>Few phone companies take the approach Samsung does when it comes to cheaper-than-flagship phones. In fact, Samsung is the only one I can think of that offers two distinct devices that are meant to sit below the entry level premium model. The likes of Google, Apple, Nothing and others typically only have the one. </p><p>With two devices that sit in such close proximity, from both a price and hardware perspective, differentiating them becomes a much harder task. We end up in a situation where the Galaxy S26 FE feels awkwardly placed in a bizarre, paradoxical middle ground.</p><p>In the past Samsung was a lot more inconsistent about releasing the A50-series phones in the U.S., which arguably gave the Fan Edition release a lot more breathing room. There's clearly demand for a cheaper Galaxy phone, and the lack of competition from itself meant Samsung could continue to push the more premium option. </p><p>These days, it feels like these phones are released out of obligation, rather than a pressing need to actually build them. And it's about time Samsung threw in the towel, and gave the Fan Edition line-up a trip to the farm upstate.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-ultra-design-leaked-and-it-could-cause-the-most-intense-wave-of-criticism-in-galaxy-history">Samsung Galaxy S27 Ultra design leaked — and it could cause ‘the most intense wave of criticism in Galaxy history’</a></li><li><a href="https://www.tomsguide.com/phones/iphones/expert-predicts-iphone-ultras-usd2-500-price-tag-wont-deter-die-hard-fans-it-could-see-10-million-units-sold-in-the-next-year">Expert predicts iPhone Ultra's $2,500 price tag won't deter die-hard fans — it could see 10 million units sold in the next year</a></li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/ive-been-testing-pixel-11-pro-xl-for-a-week-heres-why-hilight-is-the-most-disappointing-new-feature">I've been testing Pixel 11 Pro XL for a week — here's why HiLight is the most disappointing new feature</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Samsung Galaxy S26 FE hands-on review: I'm not sure if this phone needed to exist ]]></title>
                                                                                                <dc:content><![CDATA[ <p>If you're looking for a premium Galaxy smartphone experience, but can't quite justify the cost of a standard <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-review">Galaxy S26</a>, then Samsung is hoping that the Galaxy S26 FE might be for you. This is the latest in the long line of "Fan Edition" phones and the idea is that Samsung cuts a few features, but in the process offers a near-flagship experience for a lower price.</p><p>The Samsung Galaxy S26 FE certainly does that, though it may take things a little bit too far. I spent a little bit of time with the S26 FE ahead of today's announcement, and started to wonder who this phone is really for. After all, the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-a57-review">Samsung Galaxy A57</a> already captures the lower-priced mid-range segment and recent discounts to the standard Galaxy S26 make it more accessible than before. </p><p>The Galaxy S26 FE seems to occupy the same awkward middle ground as its predecessors. The specs aren't good enough to qualify it as a true flagship, but at the same time, it isn't cheap enough to be a true budget option.</p><h2 class="article-body__section" id="section-samsung-galaxy-s26-fe-hands-on-review-specifications"><span>Samsung Galaxy S26 FE hands-on review: Specifications</span></h2><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Galaxy S26 FE</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>$699</p></td></tr><tr><td class="firstcol " ><p><strong>Release date</strong></p></td><td  ><p>September 4</p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>6.7-inch AMOLED (FHD+)</p></td></tr><tr><td class="firstcol " ><p><strong>Refresh rate</strong></p></td><td  ><p>120Hz</p></td></tr><tr><td class="firstcol " ><p><strong>Chipset</strong></p></td><td  ><p>Exynos 2500</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>8GB</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>128GB,  256GB</p></td></tr><tr><td class="firstcol " ><p><strong>Rear cameras</strong></p></td><td  ><p>50MP main (f/1.8), 12MP ultrawide (f/2.2), 8MP telephoto (f/2.4) with 3x optical zoom</p></td></tr><tr><td class="firstcol " ><p><strong>Front camera</strong></p></td><td  ><p>12MP (f/2.2)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery size</strong></p></td><td  ><p>4,900 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Charging speed</strong></p></td><td  ><p>45W wired, 15W wireless</p></td></tr><tr><td class="firstcol " ><p><strong>Size</strong></p></td><td  ><p>6.36 x 3.03 x 0.29 inches (161.6 x 76.9 x 7.4 mm)</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>6.81 ounces (193 grams)</p></td></tr><tr><td class="firstcol " ><p><strong>Colors</strong></p></td><td  ><p>Blueberry, Graphite, Pistachio</p></td></tr></tbody></table></div><h2 class="article-body__section" id="section-samsung-galaxy-s26-fe-hands-on-review-the-ups"><span>Samsung Galaxy S26 FE hands-on review: The Ups</span></h2><h2 id="the-cost-of-entry-isn-39-t-too-high">The cost of entry isn't too high</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="JNzS5dtCK9PWLodyx8zXjR" name="Samsung Galaxy S26 FE hands-on" alt="Samsung Galaxy S26 FE in Pistachio held in the hand." src="https://cdn.mos.cms.futurecdn.net/JNzS5dtCK9PWLodyx8zXjR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Tom Pritchard)</span></figcaption></figure><p>In a world of price hikes and RAMageddon, it's no surprise that the Galaxy S26 FE is more expensive than the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s25-fe-review">S25 FE</a>. That said, a $50 price hike isn't actually a lot, and that helps keep the cost of buying into the Galaxy S26 lineup much lower than it was before. The fact that Samsung has kept the 128GB model around means the $699 starting price is $200 less than the standard Galaxy S26 was at launch. </p><p>Admittedly that benefit only really matters if you plan on buying the 128GB model, and can't justify spending an extra $100 more. Why? Because, at the time of writing, Samsung's online store is selling the 256GB Galaxy S26 <a href="https://www.samsung.com/us/smartphones/galaxy-s26/buy/galaxy-s26-256gb-unlocked-sku-sm-s942uzsexaa/" target="_blank" rel="nofollow">for $799</a> — the exact same price as the 256GB S26 FE.</p><p>In other words spending an extra $100 can get you a phone with better hardware. However, if you want to keep costs low and want access to the flagship capabilities of a Galaxy S26, then the FE is an option for you.</p><h2 id="more-premium-than-most-cheap-phones">More premium than most cheap phones</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="JAFmcNMfu2JRAJVoJ6yYjR" name="Samsung Galaxy S26 FE hands-on" alt="Samsung Galaxy S26 FE frame closeup." src="https://cdn.mos.cms.futurecdn.net/JAFmcNMfu2JRAJVoJ6yYjR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Tom Pritchard)</span></figcaption></figure><p>The main benefit for the S26 FE, compared to the likes of the A57, is that you do get a slightly more premium build and feature set. All without having to pay quite as much as you would if you picked up a Galaxy S26 or one of its larger siblings.</p><p>The glossy glass back isn't quite as impressive as the matte glass on the back of the Galaxy S26. Honestly, seeing my own silhouette reflected in the back of the phone instantly made me think of the Galaxy A57, which is a shame when you remember that past FE devices had the matte glass to offer that instantly-premium look.</p><p>Still, the Galaxy S26 FE doesn't really feel cheap. It's reminiscent of the Galaxy S26 Plus due to its size, and there's definitely some weight to it that makes it feel more important than an A-series Galaxy. The brushed metal frame certainly helps in this respect, as does the solid-coloring of the camera bar — a design trait borrowed from other S26 phones.</p><h2 id="great-selection-of-ai-and-software-features">Great selection of AI and software features</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="gasM6H8jtNvrZbe8yHJfkR" name="Samsung Galaxy S26 FE hands-on" alt="Samsung Galaxy S26 FE display with Now Brief." src="https://cdn.mos.cms.futurecdn.net/gasM6H8jtNvrZbe8yHJfkR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Tom Pritchard)</span></figcaption></figure><p>Like any device hoping to be considered close to flagship, the Galaxy S26 FE does come with a huge range of AI features. There's nothing new here, which isn't a huge surprise, but it does come with the best things Galaxy AI has had to offer on other phones — including my favorite <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Galaxy Z Fold 8</a> feature, <a href="https://www.tomsguide.com/phones/samsung-phones/i-tried-the-new-galaxy-ai-video-tracker-on-my-z-fold-8">My Fan Cam</a>.</p><p>In fact, there are a bunch of cool software features that we've seen on other Galaxy flagships, but still haven't had the option to use on cheaper devices. That includes the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-just-did-the-impossible-with-the-galaxy-s26-ultra-i-cant-decide-which-of-these-two-new-features-i-like-more">Horizontal Lock</a> video camera mode, the <a href="https://www.tomsguide.com/phones/samsung-phones/i-tested-this-galaxy-s26-ai-feature-to-scan-my-tax-documents-and-it-makes-my-scanner-obsolete">Samsung Document Scanner</a>, <a href="https://www.tomsguide.com/phones/samsung-phones/i-tried-the-samsung-galaxy-s25-ultras-audio-eraser-and-it-beats-both-apple-and-google">Audio Eraser</a>, AI-powered photo editing with <a href="https://www.tomsguide.com/phones/i-tested-galaxy-s26-ultra-photo-assist-vs-pixel-10-pro-xl-ask-photos-heres-the-better-ai-photo-editor">Photo Assist</a>, Now Brief, <a href="https://www.tomsguide.com/opinion/circle-to-search-is-my-favorite-galaxy-s24-feature-if-samsung-and-google-dont-screw-it-up">Circle to Search</a> with multi-object recognition, as well as <a href="https://www.tomsguide.com/phones/samsung-phones/how-to-turn-on-galaxy-s26s-now-nudge-and-how-it-works">Now Nudge</a> with support for cross-app functionality and third party apps.</p><p>Samsung also promises that the upgraded ProVisual engine is also here. This offers improved low light performance, reducing noise in the photo and lowering the overall color distortion. Though we haven't been able to test this for ourselves just yet.</p><h2 class="article-body__section" id="section-samsung-galaxy-s26-fe-hands-on-review-the-downs"><span>Samsung Galaxy S26 FE hands-on review: The Downs</span></h2><h2 id="camera-quality-seems-iffy-so-far">Camera quality seems iffy so far</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="eQqeSygcj5dPkjB3KDzKiR" name="Samsung Galaxy S26 FE hands-on" alt="Samsung Galaxy S26 FE camera closeup." src="https://cdn.mos.cms.futurecdn.net/eQqeSygcj5dPkjB3KDzKiR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Tom Pritchard)</span></figcaption></figure><p>I will caveat this point by making it clear I haven't done any extensive camera testing with the Galaxy S26 FE, but the few sample photos I have taken so far were not very impressive. In fact, the four cameras on the S26 FE seem to struggle when compared to those on the Galaxy A57.</p><p>From a hardware perspective, things are a little disappointing. There's a 50MP main camera, a 12MP ultrawide, 8MP telephoto with 3x optical zoom and a 12MP selfie camera. That's pretty similar to the A57, albeit with a telephoto lens instead of a <a href="https://www.tomsguide.com/phones/samsung-phones/i-put-samsung-galaxy-a57s-macro-lens-head-to-head-with-galaxy-s26-ultras-macro-mode-and-its-not-even-close">crappy 5MP macro lens.</a></p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/vpxLMoA6KvPx2arcyY7zrX-1920-80.jpg" alt="samsung galaxy s26 fe test shots" /><figcaption>Samsung Galaxy S26 FE<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/WCnKigwTNm2n5DK97Q8Dym-1920-80.jpg" alt="samsung galaxy a57 test shots" /><figcaption>Samsung Galaxy A57<small role="credit">Future</small></figcaption></figure></figure><p>That minor change in third-camera hardware means that there's a big difference in the zoomed in photo I took. Since the A57 relies on its main lens, it's using a higher resolution lens and cropping it down — rather than actually zooming in. The camera defaults to 12MP, and while not great it is obviously higher than what an 8MP lens can accomplish.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/vo3z8qCfWTP6LdvinBD2gY-1920-80.jpg" alt="samsung galaxy s26 fe test shots" /><figcaption>Samsung Galaxy S26 FE<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/D7foBdLzVLax4C6yivpyFn-1920-80.jpg" alt="samsung galaxy a57 test shots" /><figcaption>Samsung Galaxy A57<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/Ex3bk6BoGMi6k7qt6vaueY-1920-80.jpg" alt="samsung galaxy s26 fe test shots" /><figcaption>Samsung Galaxy S26 FE<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/L4T6jf2a8ceWhiHqjYFQTn-1920-80.jpg" alt="samsung galaxy a57 test shots" /><figcaption>Samsung Galaxy A57<small role="credit">Future</small></figcaption></figure></figure><p>The main lens on the S26 FE is a little better, with some extra clarity that lets you make out the sugar crystals a little more easily, though it does come out much darker and less vibrant. The same is true when looking at this photo of a plant, with both 50MP lenses offering similar quality — but wildly different brightness levels.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/DBbDV2CUPdED5A3npLmSxW-1920-80.jpg" alt="samsung galaxy s26 fe test shots" /><figcaption>Samsung Galaxy S26 FE<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/EQJNgPqLNRsoN6f9Etr9sm-1920-80.jpg" alt="samsung galaxy a57 test shots" /><figcaption>Samsung Galaxy A57<small role="credit">Future</small></figcaption></figure></figure><p>The selfie camera is a step in the opposite direction, though. While the A57 washed out the color from my face compared to the S26 FE, there's a lot more detail and clarity compared on the cheaper phone. The S26 FE is slightly blurrier, and struggles to pick up the finer details including hair and skin complexion.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/5KtDFkpf7MWbAHMvVLoRzF-1920-80.jpg" alt="Samsung galaxy S26 test shots" /><figcaption>Samsung Galaxy S26<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/foFYQHsH923d3RCTo2G2VE-1920-80.jpg" alt="Samsung galaxy S26 test shots" /><figcaption>Samsung Galaxy S26<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/oRXyFzX2LkA2x94Vk4rhXF-1920-80.jpg" alt="Samsung galaxy S26 test shots" /><figcaption>Samsung Galaxy S26<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/hdqVYMLAdB4QE9UAn5EHGF-1920-80.jpg" alt="Samsung galaxy S26 test shots" /><figcaption>Samsung Galaxy S26<small role="credit">Future</small></figcaption></figure></figure><p>As you'd expect the regular Galaxy S26 outmatches them all, with more true-to-life colors and general clarity exceeding both the A57 and S26 FE. Even if my attempt at a selfie did not come out particularly well during my hands-on time. Still, the fact that the Galaxy A57 manages to offer some serious competition to the S26 FE, despite it being $150 cheaper, is not a good look for the Fan Edition phone.</p><h2 id="upgrades-are-minimal">Upgrades are minimal</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Xs5ZNd73ZWhjVe5hE6rTjR" name="Samsung Galaxy S26 FE hands-on" alt="Samsung Galaxy S26 FE against A57 and Galaxy S26." src="https://cdn.mos.cms.futurecdn.net/Xs5ZNd73ZWhjVe5hE6rTjR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Tom Pritchard)</span></figcaption></figure><p>Incremental upgrades with few major hardware upgrades are not uncommon, and the Galaxy S26 FE seems to be the latest example of that to come from Samsung HQ. Checking over the specs compared to last year's Galaxy S25 FE really highlights how few upgrades there are this year. If you didn't know any better, you could easily mistake the S26 FE for an older model, and only real changes are the newer Exynos chipset and the glass enclosure around the rear camera lenses. </p><p>Everything else, from the cameras to the battery are essentially identical, which means Samsung is relying more on software upgrades to help sell the phone over its predecessors. Which is not a terrible plan, considering the number of flagship features Samsung has added to the Galaxy S26 FE. But it doesn't suggest that the phone is a must-have. Especially when you remember the Galaxy A57 exists.</p><h2 id="the-galaxy-a57-is-right-there">The Galaxy A57 is right there</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="WnVbdoxHAWjSTTJWxanJnR" name="Samsung Galaxy S26 FE hands-on" alt="Samsung Galaxy S26 FE and A57 held in the hand." src="https://cdn.mos.cms.futurecdn.net/WnVbdoxHAWjSTTJWxanJnR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Tom Pritchard)</span></figcaption></figure><p>The minimal upgrades wouldn't be so bad on their own, but we can't forget the fact that the Galaxy A57 is still around — and costs a good $150 less than the cheapest Galaxy S26 FE. There are a bunch of ways the Galaxy A57 falters compared to the S26 FE, particularly when it comes to performance and the availability of AI features. That price cut has to come from somewhere, and Samsung can't save all that money by cutting premium materials.</p><p>Still, at the same time, the A57 shares a lot of the same hardware with the Galaxy S26 FE. The camera hardware is more or less identical, and puts up a good fight against the S26 FE's cameras, and both screens share the same size, resolution and brightness. The A57's battery is actually larger, weirdly enough, and they both support up to 45W wired charging speeds — though the A57 lacks wireless charging.</p><p>We can't do a full comparison just yet, and we'll need to get the S26 FE into the lab to figure out exactly what its deal is. Because there's only so much you can glean from a list of hardware specs. Still, things don't look great. Especially considering the $50 price hike, and the fact that the 256GB Galaxy S26 costs the same as the equivalent FE.</p><h2 class="article-body__section" id="section-samsung-galaxy-s26-fe-hands-on-review-outlook"><span>Samsung Galaxy S26 FE hands-on review: Outlook</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="GYNd6cPd7ZVnmCg7qSqYjR" name="Samsung Galaxy S26 FE hands-on" alt="Samsung Galaxy S26 FE in three colors." src="https://cdn.mos.cms.futurecdn.net/GYNd6cPd7ZVnmCg7qSqYjR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Tom Pritchard)</span></figcaption></figure><p>The Galaxy S26 FE certainly shows promise, I'm struggling to understand why Samsung is releasing it in the first place. The Fan Edition series has been losing relevance for a while, especially now that Samsung is consistently releasing A-series phones in the U.S. and the Galaxy S26 FE doesn't really do much to help salvage the line-up's reputation in any way.</p><p>Based on my limited time with the phone, it seems that it is too similar to the Galaxy A57 to justify the higher price tag. At the same time, the price is too close to that of the Galaxy S26 to make many of these compromises worthwhile. It's that weird middle ground where it's not a cheap phone, but it's too cut back to be a true flagship.</p><p>So who is this phone for? It does offer more AI and Samsung-exclusive software features than cheaper options, and the fact that the 128GB storage option is still around means the cost of entry is noticeably lower. If you're an AI superfan that doesn't have a lot of money, this might be the Samsung phone for you, but otherwise you may as well pick up a different model.</p><p>Of course we'll have a much better idea of what the Galaxy S26 FE can do when we get the phone into the Tom's Guide lab for testing. That could change everything, or it could cement the idea that the S26 FE needs to die. We'll just have to wait and see.</p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-fe-review</link>
                                                                            <description>
                            <![CDATA[ Samsung Galaxy S26 FE is an awkwardly positioned phone that makes too many sacrifices to be truly premium, but costs to much to be considered cheap. Which means it's being overshadowed by existing Galaxy handsets. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">JB2BcFVj7QfNgz6Lrti4T8</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/dFsGjVtBpe4fQFPt3dtmKR-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 27 Aug 2026 12:00:00 +0000</pubDate>                                                                                                                                <updated>Thu, 08 Oct 2026 17:50:57 +0000</updated>
                                                                                                                                            <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/dFsGjVtBpe4fQFPt3dtmKR-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&amp;#39;s Guide / Tom Pritchard]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Samsung Galaxy S26 FE hands-on.]]></media:description>                                                            <media:text><![CDATA[Samsung Galaxy S26 FE hands-on.]]></media:text>
                                <media:title type="plain"><![CDATA[Samsung Galaxy S26 FE hands-on.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/dFsGjVtBpe4fQFPt3dtmKR-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>If you're looking for a premium Galaxy smartphone experience, but can't quite justify the cost of a standard <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-review">Galaxy S26</a>, then Samsung is hoping that the Galaxy S26 FE might be for you. This is the latest in the long line of "Fan Edition" phones and the idea is that Samsung cuts a few features, but in the process offers a near-flagship experience for a lower price.</p><p>The Samsung Galaxy S26 FE certainly does that, though it may take things a little bit too far. I spent a little bit of time with the S26 FE ahead of today's announcement, and started to wonder who this phone is really for. After all, the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-a57-review">Samsung Galaxy A57</a> already captures the lower-priced mid-range segment and recent discounts to the standard Galaxy S26 make it more accessible than before. </p><p>The Galaxy S26 FE seems to occupy the same awkward middle ground as its predecessors. The specs aren't good enough to qualify it as a true flagship, but at the same time, it isn't cheap enough to be a true budget option.</p><h2 class="article-body__section" id="section-samsung-galaxy-s26-fe-hands-on-review-specifications"><span>Samsung Galaxy S26 FE hands-on review: Specifications</span></h2><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Galaxy S26 FE</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>$699</p></td></tr><tr><td class="firstcol " ><p><strong>Release date</strong></p></td><td  ><p>September 4</p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>6.7-inch AMOLED (FHD+)</p></td></tr><tr><td class="firstcol " ><p><strong>Refresh rate</strong></p></td><td  ><p>120Hz</p></td></tr><tr><td class="firstcol " ><p><strong>Chipset</strong></p></td><td  ><p>Exynos 2500</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>8GB</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>128GB,  256GB</p></td></tr><tr><td class="firstcol " ><p><strong>Rear cameras</strong></p></td><td  ><p>50MP main (f/1.8), 12MP ultrawide (f/2.2), 8MP telephoto (f/2.4) with 3x optical zoom</p></td></tr><tr><td class="firstcol " ><p><strong>Front camera</strong></p></td><td  ><p>12MP (f/2.2)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery size</strong></p></td><td  ><p>4,900 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Charging speed</strong></p></td><td  ><p>45W wired, 15W wireless</p></td></tr><tr><td class="firstcol " ><p><strong>Size</strong></p></td><td  ><p>6.36 x 3.03 x 0.29 inches (161.6 x 76.9 x 7.4 mm)</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>6.81 ounces (193 grams)</p></td></tr><tr><td class="firstcol " ><p><strong>Colors</strong></p></td><td  ><p>Blueberry, Graphite, Pistachio</p></td></tr></tbody></table></div><h2 class="article-body__section" id="section-samsung-galaxy-s26-fe-hands-on-review-the-ups"><span>Samsung Galaxy S26 FE hands-on review: The Ups</span></h2><h2 id="the-cost-of-entry-isn-39-t-too-high">The cost of entry isn't too high</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="JNzS5dtCK9PWLodyx8zXjR" name="Samsung Galaxy S26 FE hands-on" alt="Samsung Galaxy S26 FE in Pistachio held in the hand." src="https://cdn.mos.cms.futurecdn.net/JNzS5dtCK9PWLodyx8zXjR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Tom Pritchard)</span></figcaption></figure><p>In a world of price hikes and RAMageddon, it's no surprise that the Galaxy S26 FE is more expensive than the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s25-fe-review">S25 FE</a>. That said, a $50 price hike isn't actually a lot, and that helps keep the cost of buying into the Galaxy S26 lineup much lower than it was before. The fact that Samsung has kept the 128GB model around means the $699 starting price is $200 less than the standard Galaxy S26 was at launch. </p><p>Admittedly that benefit only really matters if you plan on buying the 128GB model, and can't justify spending an extra $100 more. Why? Because, at the time of writing, Samsung's online store is selling the 256GB Galaxy S26 <a href="https://www.samsung.com/us/smartphones/galaxy-s26/buy/galaxy-s26-256gb-unlocked-sku-sm-s942uzsexaa/" target="_blank" rel="nofollow">for $799</a> — the exact same price as the 256GB S26 FE.</p><p>In other words spending an extra $100 can get you a phone with better hardware. However, if you want to keep costs low and want access to the flagship capabilities of a Galaxy S26, then the FE is an option for you.</p><h2 id="more-premium-than-most-cheap-phones">More premium than most cheap phones</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="JAFmcNMfu2JRAJVoJ6yYjR" name="Samsung Galaxy S26 FE hands-on" alt="Samsung Galaxy S26 FE frame closeup." src="https://cdn.mos.cms.futurecdn.net/JAFmcNMfu2JRAJVoJ6yYjR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Tom Pritchard)</span></figcaption></figure><p>The main benefit for the S26 FE, compared to the likes of the A57, is that you do get a slightly more premium build and feature set. All without having to pay quite as much as you would if you picked up a Galaxy S26 or one of its larger siblings.</p><p>The glossy glass back isn't quite as impressive as the matte glass on the back of the Galaxy S26. Honestly, seeing my own silhouette reflected in the back of the phone instantly made me think of the Galaxy A57, which is a shame when you remember that past FE devices had the matte glass to offer that instantly-premium look.</p><p>Still, the Galaxy S26 FE doesn't really feel cheap. It's reminiscent of the Galaxy S26 Plus due to its size, and there's definitely some weight to it that makes it feel more important than an A-series Galaxy. The brushed metal frame certainly helps in this respect, as does the solid-coloring of the camera bar — a design trait borrowed from other S26 phones.</p><h2 id="great-selection-of-ai-and-software-features">Great selection of AI and software features</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="gasM6H8jtNvrZbe8yHJfkR" name="Samsung Galaxy S26 FE hands-on" alt="Samsung Galaxy S26 FE display with Now Brief." src="https://cdn.mos.cms.futurecdn.net/gasM6H8jtNvrZbe8yHJfkR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Tom Pritchard)</span></figcaption></figure><p>Like any device hoping to be considered close to flagship, the Galaxy S26 FE does come with a huge range of AI features. There's nothing new here, which isn't a huge surprise, but it does come with the best things Galaxy AI has had to offer on other phones — including my favorite <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Galaxy Z Fold 8</a> feature, <a href="https://www.tomsguide.com/phones/samsung-phones/i-tried-the-new-galaxy-ai-video-tracker-on-my-z-fold-8">My Fan Cam</a>.</p><p>In fact, there are a bunch of cool software features that we've seen on other Galaxy flagships, but still haven't had the option to use on cheaper devices. That includes the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-just-did-the-impossible-with-the-galaxy-s26-ultra-i-cant-decide-which-of-these-two-new-features-i-like-more">Horizontal Lock</a> video camera mode, the <a href="https://www.tomsguide.com/phones/samsung-phones/i-tested-this-galaxy-s26-ai-feature-to-scan-my-tax-documents-and-it-makes-my-scanner-obsolete">Samsung Document Scanner</a>, <a href="https://www.tomsguide.com/phones/samsung-phones/i-tried-the-samsung-galaxy-s25-ultras-audio-eraser-and-it-beats-both-apple-and-google">Audio Eraser</a>, AI-powered photo editing with <a href="https://www.tomsguide.com/phones/i-tested-galaxy-s26-ultra-photo-assist-vs-pixel-10-pro-xl-ask-photos-heres-the-better-ai-photo-editor">Photo Assist</a>, Now Brief, <a href="https://www.tomsguide.com/opinion/circle-to-search-is-my-favorite-galaxy-s24-feature-if-samsung-and-google-dont-screw-it-up">Circle to Search</a> with multi-object recognition, as well as <a href="https://www.tomsguide.com/phones/samsung-phones/how-to-turn-on-galaxy-s26s-now-nudge-and-how-it-works">Now Nudge</a> with support for cross-app functionality and third party apps.</p><p>Samsung also promises that the upgraded ProVisual engine is also here. This offers improved low light performance, reducing noise in the photo and lowering the overall color distortion. Though we haven't been able to test this for ourselves just yet.</p><h2 class="article-body__section" id="section-samsung-galaxy-s26-fe-hands-on-review-the-downs"><span>Samsung Galaxy S26 FE hands-on review: The Downs</span></h2><h2 id="camera-quality-seems-iffy-so-far">Camera quality seems iffy so far</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="eQqeSygcj5dPkjB3KDzKiR" name="Samsung Galaxy S26 FE hands-on" alt="Samsung Galaxy S26 FE camera closeup." src="https://cdn.mos.cms.futurecdn.net/eQqeSygcj5dPkjB3KDzKiR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Tom Pritchard)</span></figcaption></figure><p>I will caveat this point by making it clear I haven't done any extensive camera testing with the Galaxy S26 FE, but the few sample photos I have taken so far were not very impressive. In fact, the four cameras on the S26 FE seem to struggle when compared to those on the Galaxy A57.</p><p>From a hardware perspective, things are a little disappointing. There's a 50MP main camera, a 12MP ultrawide, 8MP telephoto with 3x optical zoom and a 12MP selfie camera. That's pretty similar to the A57, albeit with a telephoto lens instead of a <a href="https://www.tomsguide.com/phones/samsung-phones/i-put-samsung-galaxy-a57s-macro-lens-head-to-head-with-galaxy-s26-ultras-macro-mode-and-its-not-even-close">crappy 5MP macro lens.</a></p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/vpxLMoA6KvPx2arcyY7zrX-1920-80.jpg" alt="samsung galaxy s26 fe test shots" /><figcaption>Samsung Galaxy S26 FE<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/WCnKigwTNm2n5DK97Q8Dym-1920-80.jpg" alt="samsung galaxy a57 test shots" /><figcaption>Samsung Galaxy A57<small role="credit">Future</small></figcaption></figure></figure><p>That minor change in third-camera hardware means that there's a big difference in the zoomed in photo I took. Since the A57 relies on its main lens, it's using a higher resolution lens and cropping it down — rather than actually zooming in. The camera defaults to 12MP, and while not great it is obviously higher than what an 8MP lens can accomplish.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/vo3z8qCfWTP6LdvinBD2gY-1920-80.jpg" alt="samsung galaxy s26 fe test shots" /><figcaption>Samsung Galaxy S26 FE<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/D7foBdLzVLax4C6yivpyFn-1920-80.jpg" alt="samsung galaxy a57 test shots" /><figcaption>Samsung Galaxy A57<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/Ex3bk6BoGMi6k7qt6vaueY-1920-80.jpg" alt="samsung galaxy s26 fe test shots" /><figcaption>Samsung Galaxy S26 FE<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/L4T6jf2a8ceWhiHqjYFQTn-1920-80.jpg" alt="samsung galaxy a57 test shots" /><figcaption>Samsung Galaxy A57<small role="credit">Future</small></figcaption></figure></figure><p>The main lens on the S26 FE is a little better, with some extra clarity that lets you make out the sugar crystals a little more easily, though it does come out much darker and less vibrant. The same is true when looking at this photo of a plant, with both 50MP lenses offering similar quality — but wildly different brightness levels.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/DBbDV2CUPdED5A3npLmSxW-1920-80.jpg" alt="samsung galaxy s26 fe test shots" /><figcaption>Samsung Galaxy S26 FE<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/EQJNgPqLNRsoN6f9Etr9sm-1920-80.jpg" alt="samsung galaxy a57 test shots" /><figcaption>Samsung Galaxy A57<small role="credit">Future</small></figcaption></figure></figure><p>The selfie camera is a step in the opposite direction, though. While the A57 washed out the color from my face compared to the S26 FE, there's a lot more detail and clarity compared on the cheaper phone. The S26 FE is slightly blurrier, and struggles to pick up the finer details including hair and skin complexion.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/5KtDFkpf7MWbAHMvVLoRzF-1920-80.jpg" alt="Samsung galaxy S26 test shots" /><figcaption>Samsung Galaxy S26<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/foFYQHsH923d3RCTo2G2VE-1920-80.jpg" alt="Samsung galaxy S26 test shots" /><figcaption>Samsung Galaxy S26<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/oRXyFzX2LkA2x94Vk4rhXF-1920-80.jpg" alt="Samsung galaxy S26 test shots" /><figcaption>Samsung Galaxy S26<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/hdqVYMLAdB4QE9UAn5EHGF-1920-80.jpg" alt="Samsung galaxy S26 test shots" /><figcaption>Samsung Galaxy S26<small role="credit">Future</small></figcaption></figure></figure><p>As you'd expect the regular Galaxy S26 outmatches them all, with more true-to-life colors and general clarity exceeding both the A57 and S26 FE. Even if my attempt at a selfie did not come out particularly well during my hands-on time. Still, the fact that the Galaxy A57 manages to offer some serious competition to the S26 FE, despite it being $150 cheaper, is not a good look for the Fan Edition phone.</p><h2 id="upgrades-are-minimal">Upgrades are minimal</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Xs5ZNd73ZWhjVe5hE6rTjR" name="Samsung Galaxy S26 FE hands-on" alt="Samsung Galaxy S26 FE against A57 and Galaxy S26." src="https://cdn.mos.cms.futurecdn.net/Xs5ZNd73ZWhjVe5hE6rTjR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Tom Pritchard)</span></figcaption></figure><p>Incremental upgrades with few major hardware upgrades are not uncommon, and the Galaxy S26 FE seems to be the latest example of that to come from Samsung HQ. Checking over the specs compared to last year's Galaxy S25 FE really highlights how few upgrades there are this year. If you didn't know any better, you could easily mistake the S26 FE for an older model, and only real changes are the newer Exynos chipset and the glass enclosure around the rear camera lenses. </p><p>Everything else, from the cameras to the battery are essentially identical, which means Samsung is relying more on software upgrades to help sell the phone over its predecessors. Which is not a terrible plan, considering the number of flagship features Samsung has added to the Galaxy S26 FE. But it doesn't suggest that the phone is a must-have. Especially when you remember the Galaxy A57 exists.</p><h2 id="the-galaxy-a57-is-right-there">The Galaxy A57 is right there</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="WnVbdoxHAWjSTTJWxanJnR" name="Samsung Galaxy S26 FE hands-on" alt="Samsung Galaxy S26 FE and A57 held in the hand." src="https://cdn.mos.cms.futurecdn.net/WnVbdoxHAWjSTTJWxanJnR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Tom Pritchard)</span></figcaption></figure><p>The minimal upgrades wouldn't be so bad on their own, but we can't forget the fact that the Galaxy A57 is still around — and costs a good $150 less than the cheapest Galaxy S26 FE. There are a bunch of ways the Galaxy A57 falters compared to the S26 FE, particularly when it comes to performance and the availability of AI features. That price cut has to come from somewhere, and Samsung can't save all that money by cutting premium materials.</p><p>Still, at the same time, the A57 shares a lot of the same hardware with the Galaxy S26 FE. The camera hardware is more or less identical, and puts up a good fight against the S26 FE's cameras, and both screens share the same size, resolution and brightness. The A57's battery is actually larger, weirdly enough, and they both support up to 45W wired charging speeds — though the A57 lacks wireless charging.</p><p>We can't do a full comparison just yet, and we'll need to get the S26 FE into the lab to figure out exactly what its deal is. Because there's only so much you can glean from a list of hardware specs. Still, things don't look great. Especially considering the $50 price hike, and the fact that the 256GB Galaxy S26 costs the same as the equivalent FE.</p><h2 class="article-body__section" id="section-samsung-galaxy-s26-fe-hands-on-review-outlook"><span>Samsung Galaxy S26 FE hands-on review: Outlook</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="GYNd6cPd7ZVnmCg7qSqYjR" name="Samsung Galaxy S26 FE hands-on" alt="Samsung Galaxy S26 FE in three colors." src="https://cdn.mos.cms.futurecdn.net/GYNd6cPd7ZVnmCg7qSqYjR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / Tom Pritchard)</span></figcaption></figure><p>The Galaxy S26 FE certainly shows promise, I'm struggling to understand why Samsung is releasing it in the first place. The Fan Edition series has been losing relevance for a while, especially now that Samsung is consistently releasing A-series phones in the U.S. and the Galaxy S26 FE doesn't really do much to help salvage the line-up's reputation in any way.</p><p>Based on my limited time with the phone, it seems that it is too similar to the Galaxy A57 to justify the higher price tag. At the same time, the price is too close to that of the Galaxy S26 to make many of these compromises worthwhile. It's that weird middle ground where it's not a cheap phone, but it's too cut back to be a true flagship.</p><p>So who is this phone for? It does offer more AI and Samsung-exclusive software features than cheaper options, and the fact that the 128GB storage option is still around means the cost of entry is noticeably lower. If you're an AI superfan that doesn't have a lot of money, this might be the Samsung phone for you, but otherwise you may as well pick up a different model.</p><p>Of course we'll have a much better idea of what the Galaxy S26 FE can do when we get the phone into the Tom's Guide lab for testing. That could change everything, or it could cement the idea that the S26 FE needs to die. We'll just have to wait and see.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Samsung Galaxy S27 Ultra design leaked — and it could cause ‘the most intense wave of criticism in Galaxy history’ ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Over the weekend, a series of renders and drawings purported to reveal a redesigned Samsung Galaxy S27 Ultra with some surprising subtractions. The images came from two prominent Samsung leaks and appear to show a new horizontal bar design that's more reminiscent of the <a href="https://www.tomsguide.com/phones/iphones/iphone-17-pro-max-review">iPhone 17 Pro</a> or a <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-pro-xl-review">Google Pixel 11 Pro</a>. </p><p>The leaks started with a cryptic message from Samsung leaker Ice Universe, who posted a drawing and said, "I can't say anything."</p><div class="see-more see-more--clipped"><figure><blockquote class="twitter-tweet hawk-ignore" data-lang="en" cite="https://twitter.com/cantworkitout/status/2091166586388562399"><p lang="en" dir="ltr">I can't say anything. pic.twitter.com/RmzMoPem12<a href="https://twitter.com/cantworkitout/status/2091166586388562399">August 22, 2026</a></p></blockquote></figure><div class="see-more__filter"></div></div><p>They followed it up with a <a href="https://x.com/UniverseIce/status/2091391586081100096" target="_blank">full-body drawing</a> of the back of the phone. Those images appear to show a circle that is probably a Qi2 magnet for wireless charging. </p><p>From Ice Universe's sketches, it appears the Galaxy S27 Ultra loses a camera, going from the current triple stack to two, with the LED light and lenses in their own little pill. In another post, Universe noted that a new 5x telephoto lens will move into the LED pill and replace the current 3x version.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XYdpAO"></div>                            </div>                            <script src="https://kwizly.com/embed/XYdpAO.js" async=""></script><p>Yesterday, tipster <a href="https://x.com/SonnyDickson/status/2091487014181097967" target="_blank">Sonny Dickson posted</a> renders of the S27 Ultra, claiming that Samsung will offer the Ultra in two sizes. Rumors suggest Samsung is working on two sizes for the Ultra model, one of which will likely <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-pro-could-finally-be-the-smaller-ultra-phone-ive-been-waiting-for-heres-how">be the S27 Pro</a>. </p><p>It would make Samsung's offerings more similar to Apple's Pro and Pro Max models.</p><div class="see-more see-more--clipped"><figure><blockquote class="twitter-tweet hawk-ignore" data-lang="en" cite="https://twitter.com/cantworkitout/status/2091487014181097967"><p lang="en" dir="ltr">Here’s another look at the Samsung Galaxy S27 Ultra. Samsung is planning to offer the S27 Ultra in two different sizes. pic.twitter.com/3r84Vd82po<a href="https://twitter.com/cantworkitout/status/2091487014181097967">August 23, 2026</a></p></blockquote></figure><div class="see-more__filter"></div></div><p>Ice Universe seemed to confirm that the Pro model is coming today with <a href="https://x.com/UniverseIce/status/2091896398723813403/photo/1" target="_blank">new renders</a> and a post that claims the speaker on the bottom of the phone will be moved to the right side for the S27, S27 Plus and S27 Pro. The S27 Ultra will supposedly have its speaker on the left side.</p><p>Based on every drawing and render we've seen over the weekend, the new iPhone-esque plateau will only be available on the Ultra and Pro models. The base S27 and Plus models would have the stack.</p><p>With Samsung's foldables behind us, the rumor mill is starting to spin up in earnest for the company's flagship phone line. More renders will leak in the coming months, but we won't totally trust the leaks until we see some dummy units, which will probably leak in the fall.</p><p>As for the phones, Samsung will likely release the S27 lineup in the early part of next year. This year, the S26 series launched in February, and we expect Samsung will keep a similar schedule, give or take a week or two.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/best-picks/best-samsung-phone">The best Samsung phone might not be the best for you — take our quiz to find out which you should buy</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/ive-been-training-with-the-galaxy-watch-9-for-a-month-3-things-i-like-and-3-i-dont">I've been training with the Galaxy Watch 9 for a month — 3 things I like (and 3 I don't)</a></li><li><a href="http://tomsguide.com/us/best-android-phones,review-6051.html">We've tested the best Android phones available right now from Samsung, Google and Motorola</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-ultra-design-leaked-and-it-could-cause-the-most-intense-wave-of-criticism-in-galaxy-history</link>
                                                                            <description>
                            <![CDATA[ An alleged render of the Samsung Galaxy S27 Ultra reveals a very iPhone-esque design and a missing camera. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">C7PmMG8uYShfNvyW2kSPAN</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/LacgYzjqWKVkFAs6DKZ3ak-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 24 Aug 2026 17:53:22 +0000</pubDate>                                                                                                                                <updated>Mon, 24 Aug 2026 23:13:21 +0000</updated>
                                                                                                                                            <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ scott.younker@futurenet.com (Scott Younker) ]]></author>                    <dc:creator><![CDATA[ Scott Younker ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/RZsUpqcJ6Uj2q83oCUwNhQ-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Scott Younker is the West Coast Reporter at Tom’s Guide. He covers all the latest tech news, including phones, computing and more. He’s been involved in tech since 2011 covering everything from cameras and swimming pool equipment to the latest gaming consoles and smart TVs. He is on a seemingly never ending hunt to build the easiest to use home media system. &lt;/p&gt;&lt;p&gt;Before Tom’s Guide, Scott worked for publications like &lt;em&gt;Digital Trends, Outdoor Photographer, Dead Beats Panel&lt;/em&gt;, and in a brief detour, &lt;em&gt;America’s Funniest Home Videos&lt;/em&gt;. Yes, he has seen more pratfalls, silly pets and ridiculous home movie fails than is reasonably healthy. &lt;/p&gt;&lt;p&gt;When not writing about the latest devices or advances in chipsets, be sure to ask about Scott about disc golf and sustainability, or just if you’re being cheeky, ask about his noodle arm. If you truly want to get nerdy, bring up board games and his ongoing losing streak. &lt;/p&gt;&lt;p&gt;Scott joined Tom&#039;s Guide in 2024 as the West Coast Reporter. He graduated from the School of Journalism at the University of Oregon with a degree in magazine journalism and a minor in communications. While there he blogged or wrote for several magazines including the Fluxx, Ethos and the Oregon Commentator. He briefly wrote and managed a moderately successful blog focused on web comics. &lt;br&gt;Send secure tips on Signal: scyo1.55.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/LacgYzjqWKVkFAs6DKZ3ak-1920-80.jpg">
                                                            <media:credit><![CDATA[@TechHome100]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Samsung Galaxy S27 Ultra render]]></media:description>                                                            <media:text><![CDATA[Samsung Galaxy S27 Ultra render]]></media:text>
                                <media:title type="plain"><![CDATA[Samsung Galaxy S27 Ultra render]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/LacgYzjqWKVkFAs6DKZ3ak-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Over the weekend, a series of renders and drawings purported to reveal a redesigned Samsung Galaxy S27 Ultra with some surprising subtractions. The images came from two prominent Samsung leaks and appear to show a new horizontal bar design that's more reminiscent of the <a href="https://www.tomsguide.com/phones/iphones/iphone-17-pro-max-review">iPhone 17 Pro</a> or a <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-pro-xl-review">Google Pixel 11 Pro</a>. </p><p>The leaks started with a cryptic message from Samsung leaker Ice Universe, who posted a drawing and said, "I can't say anything."</p><div class="see-more see-more--clipped"><figure><blockquote class="twitter-tweet hawk-ignore" data-lang="en" cite="https://twitter.com/cantworkitout/status/2091166586388562399"><p lang="en" dir="ltr">I can't say anything. pic.twitter.com/RmzMoPem12<a href="https://twitter.com/cantworkitout/status/2091166586388562399">August 22, 2026</a></p></blockquote></figure><div class="see-more__filter"></div></div><p>They followed it up with a <a href="https://x.com/UniverseIce/status/2091391586081100096" target="_blank">full-body drawing</a> of the back of the phone. Those images appear to show a circle that is probably a Qi2 magnet for wireless charging. </p><p>From Ice Universe's sketches, it appears the Galaxy S27 Ultra loses a camera, going from the current triple stack to two, with the LED light and lenses in their own little pill. In another post, Universe noted that a new 5x telephoto lens will move into the LED pill and replace the current 3x version.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XYdpAO"></div>                            </div>                            <script src="https://kwizly.com/embed/XYdpAO.js" async=""></script><p>Yesterday, tipster <a href="https://x.com/SonnyDickson/status/2091487014181097967" target="_blank">Sonny Dickson posted</a> renders of the S27 Ultra, claiming that Samsung will offer the Ultra in two sizes. Rumors suggest Samsung is working on two sizes for the Ultra model, one of which will likely <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-pro-could-finally-be-the-smaller-ultra-phone-ive-been-waiting-for-heres-how">be the S27 Pro</a>. </p><p>It would make Samsung's offerings more similar to Apple's Pro and Pro Max models.</p><div class="see-more see-more--clipped"><figure><blockquote class="twitter-tweet hawk-ignore" data-lang="en" cite="https://twitter.com/cantworkitout/status/2091487014181097967"><p lang="en" dir="ltr">Here’s another look at the Samsung Galaxy S27 Ultra. Samsung is planning to offer the S27 Ultra in two different sizes. pic.twitter.com/3r84Vd82po<a href="https://twitter.com/cantworkitout/status/2091487014181097967">August 23, 2026</a></p></blockquote></figure><div class="see-more__filter"></div></div><p>Ice Universe seemed to confirm that the Pro model is coming today with <a href="https://x.com/UniverseIce/status/2091896398723813403/photo/1" target="_blank">new renders</a> and a post that claims the speaker on the bottom of the phone will be moved to the right side for the S27, S27 Plus and S27 Pro. The S27 Ultra will supposedly have its speaker on the left side.</p><p>Based on every drawing and render we've seen over the weekend, the new iPhone-esque plateau will only be available on the Ultra and Pro models. The base S27 and Plus models would have the stack.</p><p>With Samsung's foldables behind us, the rumor mill is starting to spin up in earnest for the company's flagship phone line. More renders will leak in the coming months, but we won't totally trust the leaks until we see some dummy units, which will probably leak in the fall.</p><p>As for the phones, Samsung will likely release the S27 lineup in the early part of next year. This year, the S26 series launched in February, and we expect Samsung will keep a similar schedule, give or take a week or two.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/best-picks/best-samsung-phone">The best Samsung phone might not be the best for you — take our quiz to find out which you should buy</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/ive-been-training-with-the-galaxy-watch-9-for-a-month-3-things-i-like-and-3-i-dont">I've been training with the Galaxy Watch 9 for a month — 3 things I like (and 3 I don't)</a></li><li><a href="http://tomsguide.com/us/best-android-phones,review-6051.html">We've tested the best Android phones available right now from Samsung, Google and Motorola</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I've spent more than three weeks using the Galaxy Z Flip 8 — and it's a tipping point for Samsung ]]></title>
                                                                                                <dc:content><![CDATA[ <p>When it comes to the <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">best foldable phones</a>, I strongly prefer flip-style ones for their compact footprint and effortless one-handed use. On top of that, they’re undeniably far more versatile for vlogging than notebook-style foldables, letting me frame shots on the outer cover screen using the superior rear cameras.</p><p>For years, I’ve praised Samsung’s flip-style foldables — but this year’s <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-8-review">Galaxy Z Flip 8</a> has me concerned. It’s not just that it represents the most painfully lazy upgrade in the series’ history, but also that Samsung’s focus seems to have largely shifted elsewhere.</p><p>Pairing that with the glowing reception for the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Galaxy Z Fold 8</a> and <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Galaxy Z Fold 8 Ultra</a>, and it’s clear Samsung is at a tipping point with its Z Flip line. Here’s why.</p><h2 id="motorola-has-a-way-more-robust-selection">Motorola has a way more robust selection</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4206px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="GjM8ydranBDXssmEh3cvRj" name="Motorola Razr 2026 lineup tested" alt="Motorola Razr 2026 lineup." src="https://cdn.mos.cms.futurecdn.net/GjM8ydranBDXssmEh3cvRj-1920-80.jpg" mos="" align="middle" fullscreen="" width="4206" height="2366" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / John Velasco)</span></figcaption></figure><p>Despite being an early pioneer in the space, Motorola lagged behind Samsung for years with its Razr phones, plagued by awkward hinge designs and lackluster performance. But the narrative has shifted dramatically over the last couple of generations.</p><p>Instead of treating clamshell foldables as a one-size-fits-all product, Motorola built out a lineup with broader appeal. That strategy has culminated in today's lineup of three clamshell foldables alongside a book-style model. By offering varied price points, Motorola gives consumers the freedom to choose what fits their budget and needs. In contrast, Samsung has stuck to releasing just a single flip phone each generation.</p><h2 id="cameras-are-not-an-afterthought">Cameras are not an afterthought</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/UL8HcuGXKj4q6JFezkyoUK-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Galaxy Z Flip 8.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/GTZRj6Pi6VoQvknNv7ADYM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Razr Ultra (2026).<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/jTfJDamBtu5bVLWN9TRoTM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Galaxy Z Flip 8.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/9DnE3sjaZEFBMSTVNRuNZM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Razr Ultra (2026).<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/xM7Loc7doDCM5mAG5sV5eM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Galaxy Z Flip 8.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/sXRnQXvyTmJmUAJLFSiycM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Razr Ultra (2026).<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/U7ppHAi6rmZbkgichjv3fM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Galaxy Z Flip 8.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/ra7Tg3hxXTr9CUfn4TY9gM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Razr Ultra (2026).<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/heCfmP4RcTc3n6J22o7GgM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Galaxy Z Flip 8.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/jZPuqwFNhDX5WWQNh9QBhM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Razr Ultra (2026).<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/5onDrXP74YsoPKX5vazGgM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Galaxy Z Flip 8.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/QuqAkomxsfvBfgLxc99hgM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Razr Ultra (2026).<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/3sH7sebhf5GF7Au2mm35yM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Galaxy Z Flip 8.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/e6Ga8L5yoJTj5v5xLX7y2N-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Razr Ultra (2026).<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/voxAjzxdgWsXvkHXR2baoM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Galaxy Z Flip 8.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/gD4hisXb9eYHtNFirB9ZrM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Razr Ultra (2026).<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>Just as crucially, the <a href="https://www.tomsguide.com/phones/motorola-phones/motorola-razr-ultra-2026-review">Razr Ultra (2026)</a> finally dismantles the long-standing stereotype that Motorola’s flip cameras are an afterthought. With upgraded high-resolution sensors, refined image processing, and superior low-light performance, it no longer forces users to compromise camera quality for pocketability. Just look at some of the snapshots I captured above to see how far Motorola's has come.</p><h2 id="no-mention-of-a-galaxy-z-flip-fe-this-time">No mention of a Galaxy Z Flip FE this time</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Qgy6nXqaJrnUHJ7HwpbdXY" name="Samsung Galaxy Z Flip 7 FE-01-LIST" alt="Samsung Galaxy Z Fold 7 FE tent mode" src="https://cdn.mos.cms.futurecdn.net/Qgy6nXqaJrnUHJ7HwpbdXY-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Perhaps the most glaring absence at Unpacked was any sign of a Galaxy Z Flip FE follow-up. When the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-7-fe-review">Galaxy Z Flip 7 FE</a> launched alongside the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-7-hands-on-review-feels-like-flip-phone-perfection">Z Flip 7 </a>last year, my colleagues and I were highly critical of the move — one we felt wasn't necessary since it was essentially a rebadged <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-6-review">Z Flip 6</a>. It certainly didn't help that it still carried a hefty $899 price tag.</p><p>Making matters worse, Samsung didn't just stick to minor hardware upgrades for the Flip 8 — it also tacked on a $100 price bump. In my <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-8-review">Galaxy Z Flip 8 review</a>, I noted that "Samsung's baby-step approach feels tough to defend."</p><p>While the switch back to a flagship Qualcomm chip delivers notable performance gains, I was shocked by the negligible battery life improvements. Instead of adopting the ultra-thin profile of the Z Fold 8 or delivering substantial hardware innovations, the Z Flip 8 feels more like yet another rehash.</p><h2 id="i-want-a-galaxy-s27-ultra-flip">I want a Galaxy S27 Ultra Flip</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4397px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="MMrH9wwYJUAMMEM4PEkYTJ" name="Galaxy-S26-Ultra-review-18" alt="Samsung Galaxy S26 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/MMrH9wwYJUAMMEM4PEkYTJ-1920-80.jpg" mos="" align="middle" fullscreen="" width="4397" height="2473" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>If the Z Flip line is going to survive, Samsung needs to stop playing it safe and introduce a true Ultra model. We’ve seen the company pour top-tier resources into the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-review">Galaxy S26 Ultra</a> and the Z Fold 8 Ultra — and the flip form factor deserves that exact same flagship treatment.</p><p>The most logical candidate would be something along the lines of a Galaxy S27 Ultra Flip. To truly make a statement, it would require an ultra-thin chassis, uncompromising battery life, and, crucially, a versatile triple-camera system that finally brings a dedicated telephoto lens to a Samsung clamshell.</p><p>Packing that level of hardware into a flip phone would inevitably command a steeper price tag. But considering what buyers are already willing to shell out for premium competitors like the Razr Ultra (2026), power users and creators would happily pay for a clamshell that refuses to cut corners.</p><p>Samsung has reached a critical tipping point with the Z Flip series. Iterative spec bumps and unjustified price hikes won't cut it anymore — the lineup desperately needs a major overhaul to breathe real excitement back into the category.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-WwqxAX"></div>                            </div>                            <script src="https://kwizly.com/embed/WwqxAX.js" async=""></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/google-bamboozled-me-into-paying-for-google-photos-a-decade-ago-and-now-its-doing-something-similar-with-the-pixel-11-pro">Google bamboozled me into paying for Google Photos a decade ago — and now it’s doing something similar with the Pixel 11 Pro</a></li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/i-held-the-pixel-tag-and-it-does-one-critical-thing-that-the-airtag-doesnt-heres-what-it-is">I held the Pixel Tag and it does one critical thing that the AirTag doesn’t — here’s what it is</a></li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/i-tried-the-pixel-11-pro-fold-and-its-more-ultra-than-samsungs-foldable-for-usd200-less">I tried the Pixel 11 Pro Fold and it's more 'Ultra' than Samsung's foldable (for $200 less)</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/ive-spent-more-than-three-weeks-using-the-galaxy-z-flip-8-and-its-a-tipping-point-for-samsung</link>
                                                                            <description>
                            <![CDATA[ Samsung has long dominated the flip-phone form factor, but the release of the Galaxy Z Flip 8 has put the series in serious doubt. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">Fssbj2YJX3crGjn4h3JqyF</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/sFX3dd6Le7GcZSuThSyjS6-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 16 Aug 2026 07:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ john.velasco@futurenet.com (John Velasco) ]]></author>                    <dc:creator><![CDATA[ John Velasco ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/TSj224oX8d5ERXaDs8pDGd-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/sFX3dd6Le7GcZSuThSyjS6-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide / John Velasco]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Samsung Galaxy Z Flip 8 review.]]></media:description>                                                            <media:text><![CDATA[Samsung Galaxy Z Flip 8 review.]]></media:text>
                                <media:title type="plain"><![CDATA[Samsung Galaxy Z Flip 8 review.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/sFX3dd6Le7GcZSuThSyjS6-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>When it comes to the <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">best foldable phones</a>, I strongly prefer flip-style ones for their compact footprint and effortless one-handed use. On top of that, they’re undeniably far more versatile for vlogging than notebook-style foldables, letting me frame shots on the outer cover screen using the superior rear cameras.</p><p>For years, I’ve praised Samsung’s flip-style foldables — but this year’s <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-8-review">Galaxy Z Flip 8</a> has me concerned. It’s not just that it represents the most painfully lazy upgrade in the series’ history, but also that Samsung’s focus seems to have largely shifted elsewhere.</p><p>Pairing that with the glowing reception for the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Galaxy Z Fold 8</a> and <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Galaxy Z Fold 8 Ultra</a>, and it’s clear Samsung is at a tipping point with its Z Flip line. Here’s why.</p><h2 id="motorola-has-a-way-more-robust-selection">Motorola has a way more robust selection</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4206px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="GjM8ydranBDXssmEh3cvRj" name="Motorola Razr 2026 lineup tested" alt="Motorola Razr 2026 lineup." src="https://cdn.mos.cms.futurecdn.net/GjM8ydranBDXssmEh3cvRj-1920-80.jpg" mos="" align="middle" fullscreen="" width="4206" height="2366" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / John Velasco)</span></figcaption></figure><p>Despite being an early pioneer in the space, Motorola lagged behind Samsung for years with its Razr phones, plagued by awkward hinge designs and lackluster performance. But the narrative has shifted dramatically over the last couple of generations.</p><p>Instead of treating clamshell foldables as a one-size-fits-all product, Motorola built out a lineup with broader appeal. That strategy has culminated in today's lineup of three clamshell foldables alongside a book-style model. By offering varied price points, Motorola gives consumers the freedom to choose what fits their budget and needs. In contrast, Samsung has stuck to releasing just a single flip phone each generation.</p><h2 id="cameras-are-not-an-afterthought">Cameras are not an afterthought</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/UL8HcuGXKj4q6JFezkyoUK-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Galaxy Z Flip 8.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/GTZRj6Pi6VoQvknNv7ADYM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Razr Ultra (2026).<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/jTfJDamBtu5bVLWN9TRoTM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Galaxy Z Flip 8.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/9DnE3sjaZEFBMSTVNRuNZM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Razr Ultra (2026).<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/xM7Loc7doDCM5mAG5sV5eM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Galaxy Z Flip 8.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/sXRnQXvyTmJmUAJLFSiycM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Razr Ultra (2026).<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/U7ppHAi6rmZbkgichjv3fM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Galaxy Z Flip 8.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/ra7Tg3hxXTr9CUfn4TY9gM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Razr Ultra (2026).<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/heCfmP4RcTc3n6J22o7GgM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Galaxy Z Flip 8.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/jZPuqwFNhDX5WWQNh9QBhM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Razr Ultra (2026).<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/5onDrXP74YsoPKX5vazGgM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Galaxy Z Flip 8.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/QuqAkomxsfvBfgLxc99hgM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Razr Ultra (2026).<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/3sH7sebhf5GF7Au2mm35yM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Galaxy Z Flip 8.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/e6Ga8L5yoJTj5v5xLX7y2N-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Razr Ultra (2026).<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/voxAjzxdgWsXvkHXR2baoM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Galaxy Z Flip 8.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/gD4hisXb9eYHtNFirB9ZrM-1920-80.jpg" alt="Galaxy Z Flip photo comparisons" /><figcaption>Razr Ultra (2026).<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>Just as crucially, the <a href="https://www.tomsguide.com/phones/motorola-phones/motorola-razr-ultra-2026-review">Razr Ultra (2026)</a> finally dismantles the long-standing stereotype that Motorola’s flip cameras are an afterthought. With upgraded high-resolution sensors, refined image processing, and superior low-light performance, it no longer forces users to compromise camera quality for pocketability. Just look at some of the snapshots I captured above to see how far Motorola's has come.</p><h2 id="no-mention-of-a-galaxy-z-flip-fe-this-time">No mention of a Galaxy Z Flip FE this time</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Qgy6nXqaJrnUHJ7HwpbdXY" name="Samsung Galaxy Z Flip 7 FE-01-LIST" alt="Samsung Galaxy Z Fold 7 FE tent mode" src="https://cdn.mos.cms.futurecdn.net/Qgy6nXqaJrnUHJ7HwpbdXY-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Perhaps the most glaring absence at Unpacked was any sign of a Galaxy Z Flip FE follow-up. When the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-7-fe-review">Galaxy Z Flip 7 FE</a> launched alongside the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-7-hands-on-review-feels-like-flip-phone-perfection">Z Flip 7 </a>last year, my colleagues and I were highly critical of the move — one we felt wasn't necessary since it was essentially a rebadged <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-6-review">Z Flip 6</a>. It certainly didn't help that it still carried a hefty $899 price tag.</p><p>Making matters worse, Samsung didn't just stick to minor hardware upgrades for the Flip 8 — it also tacked on a $100 price bump. In my <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-8-review">Galaxy Z Flip 8 review</a>, I noted that "Samsung's baby-step approach feels tough to defend."</p><p>While the switch back to a flagship Qualcomm chip delivers notable performance gains, I was shocked by the negligible battery life improvements. Instead of adopting the ultra-thin profile of the Z Fold 8 or delivering substantial hardware innovations, the Z Flip 8 feels more like yet another rehash.</p><h2 id="i-want-a-galaxy-s27-ultra-flip">I want a Galaxy S27 Ultra Flip</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4397px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="MMrH9wwYJUAMMEM4PEkYTJ" name="Galaxy-S26-Ultra-review-18" alt="Samsung Galaxy S26 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/MMrH9wwYJUAMMEM4PEkYTJ-1920-80.jpg" mos="" align="middle" fullscreen="" width="4397" height="2473" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>If the Z Flip line is going to survive, Samsung needs to stop playing it safe and introduce a true Ultra model. We’ve seen the company pour top-tier resources into the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-review">Galaxy S26 Ultra</a> and the Z Fold 8 Ultra — and the flip form factor deserves that exact same flagship treatment.</p><p>The most logical candidate would be something along the lines of a Galaxy S27 Ultra Flip. To truly make a statement, it would require an ultra-thin chassis, uncompromising battery life, and, crucially, a versatile triple-camera system that finally brings a dedicated telephoto lens to a Samsung clamshell.</p><p>Packing that level of hardware into a flip phone would inevitably command a steeper price tag. But considering what buyers are already willing to shell out for premium competitors like the Razr Ultra (2026), power users and creators would happily pay for a clamshell that refuses to cut corners.</p><p>Samsung has reached a critical tipping point with the Z Flip series. Iterative spec bumps and unjustified price hikes won't cut it anymore — the lineup desperately needs a major overhaul to breathe real excitement back into the category.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-WwqxAX"></div>                            </div>                            <script src="https://kwizly.com/embed/WwqxAX.js" async=""></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/google-bamboozled-me-into-paying-for-google-photos-a-decade-ago-and-now-its-doing-something-similar-with-the-pixel-11-pro">Google bamboozled me into paying for Google Photos a decade ago — and now it’s doing something similar with the Pixel 11 Pro</a></li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/i-held-the-pixel-tag-and-it-does-one-critical-thing-that-the-airtag-doesnt-heres-what-it-is">I held the Pixel Tag and it does one critical thing that the AirTag doesn’t — here’s what it is</a></li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/i-tried-the-pixel-11-pro-fold-and-its-more-ultra-than-samsungs-foldable-for-usd200-less">I tried the Pixel 11 Pro Fold and it's more 'Ultra' than Samsung's foldable (for $200 less)</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I’ve been living with the Galaxy Z Fold 8 for 3 weeks — and I was wrong ]]></title>
                                                                                                <dc:content><![CDATA[ <p>If there’s one thing I’ve learned in testing phones for over 20 years, it’s that there’s a difference between reviewing a device and living with it. And now that I’ve spent three weeks with the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Samsung Galaxy Z Fold 8</a>, I can say that my opinion has changed and that I was right about some things — and wrong about some others.</p><h2 id="the-cameras-are-good-enough">The cameras are good enough!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="c7J7KZ5TxP3SDSB6ALAg2k" name="Samsung Galaxy Z Fold 8--6" alt="Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/c7J7KZ5TxP3SDSB6ALAg2k-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>First, let’s talk about the cameras. I stand by what I initially wrote about it being a bummer that the Fold 8 doesn’t have a telephoto zoom. For $1,900 you deserve one. But I have since tested the <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-vs-fold-8-ultra-camera-test-is-the-telephoto-zoom-worth-the-extra-usd200"><u>Fold 8 vs the 3x optical zoom on the Fold 8 Ultra</u></a> in a series of tests and I didn’t notice a huge difference until I got to 10x.</p><p>My point here is that you can more than get by with the Fold 8’s dual rear shooters. And I especially appreciate the improved low-light performance versus the <a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-7-review"><u>Fold 7</u></a>. The Nightography is just better.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/jnafuqsfupeaSFjL8qo5zj-1920-80.jpg" alt="Galaxy Z Fold 8" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/zs9fisEBmvsJDfWkYetdAk-1920-80.jpg" alt="Galaxy Z Fold 8" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/78txuj8kx9KcDFHxJ3fB7k-1920-80.jpg" alt="Galaxy Z Fold 8" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/P6qeQHWiWXPmgMCv4LtZDk-1920-80.jpg" alt="Galaxy Z Fold 8" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/Su2cj7sQBhiLcjkNw2zjCk-1920-80.jpg" alt="Galaxy Z Fold 8" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure></figure><p>If you really care about zoom performance, you’re better off getting the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review"><u>Samsung Galaxy S26 Ultra</u></a> and its 5x optical zoom, or going with a different foldable altogether with the <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-tried-the-pixel-11-pro-fold-and-its-more-ultra-than-samsungs-foldable-for-usd200-less"><u>Google Pixel 11 Pro Fold</u></a>, which also packs a 5x telephoto. </p><div class="product"><a data-dimension112="3f453eba-9761-11f1-aa14-ff4c85a5a9f0" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Samsung" href="https://www.samsung.com/us/smartphones/galaxy-z-fold8/buy/galaxy-z-fold8-256gb-unlocked-sku-sm-f971ulvaxaa/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1327px;"><p class="vanilla-image-block" style="padding-top:64.28%;"><img id="vZVLkgJrMPPWhKGBnWrT63" name="9Rhpe6TtrVFSNo9Vtn27Tm" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/vZVLkgJrMPPWhKGBnWrT63-1920-80.jpg" mos="" align="middle" fullscreen="" width="1327" height="853" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><strong>Galaxy Z Fold 8: </strong><a href="https://www.samsung.com/us/smartphones/galaxy-z-fold8/buy/galaxy-z-fold8-256gb-unlocked-sku-sm-f971ulvaxaa/" target="_blank" rel="nofollow" data-dimension112="3f453eba-9761-11f1-aa14-ff4c85a5a9f0" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Samsung" data-dimension25=""><strong>up to $1,000 off w/ trade-in @ Samsung</strong></a><br />Samsung is knocking up to $1,000 off Galaxy Z Fold 8 preorders when you trade-in an older phone. The phone features an 7.6-inch OLED main display, 5.5-inch cover screen, Snapdragon 8 Elite CPU, 12GB of RAM, and 256GB of storage. In our <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Galaxy Z Fold 8 review</a>, we called it our favorite foldable to date. It loses the telephoto zoom, but you get a greatly reduced crease, brighter main screen and lighter design.<a class="view-deal button" href="https://www.samsung.com/us/smartphones/galaxy-z-fold8/buy/galaxy-z-fold8-256gb-unlocked-sku-sm-f971ulvaxaa/" target="_blank" rel="nofollow" data-dimension112="3f453eba-9761-11f1-aa14-ff4c85a5a9f0" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Samsung" data-dimension25="">View Deal</a></p></div><h2 id="no-flex-view-is-not-a-dealbreaker">No Flex View is not a dealbreaker</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3806px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="yy29a3yqPwGSdSqoT7oPPX" name="Galaxy Z Fold 8-9" alt="Galaxy Z Fold 8 shown in hand" src="https://cdn.mos.cms.futurecdn.net/yy29a3yqPwGSdSqoT7oPPX-1920-80.jpg" mos="" align="middle" fullscreen="" width="3806" height="2141" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The ability to use your foldable phone as a mini laptop certainly comes in handy, but the Fold 8 ditches this feature because of the way the hinge is designed. So, for example, you can’t play videos with the content up top and controls down below. Or take a Google Meet call without having to hold the phone.</p><p>It’s a bummer, but at least there’s a hands-free alternative for watching videos. You can just use the outer display on the Fold 8 and put it in tent mode. It’s a nifty way for me to catch up on that day’s First Take episode while I’m on lunch break at work or doing the dishes.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-exVp2O"></div>                            </div>                            <script src="https://kwizly.com/embed/exVp2O.js" async=""></script><h2 id="tiktok-is-dangerously-addictive-youtube-shorts-needs-a-fix">TikTok Is dangerously addictive. YouTube Shorts needs a fix</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="nrCY8poLdeA4rgB6PXAX9k" name="Samsung Galaxy Z Fold 8--10" alt="Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/nrCY8poLdeA4rgB6PXAX9k-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>I admit that I scroll on TikTok way too much, but my addiction has gotten worse on the Fold 8. That’s because the front display is perfect for snacking content while I’m waiting for my bus ride home.</p><p>Open up to the main 7.6-inch display, and TikTok is even better if you love to read comments. They pop in from the right side in a dual-pane format. Even better, as you scroll through TikTok’s with the comments upon, they’ll automatically refresh for each video.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="YH4cXbfN7jtTxuwSe7HsCk" name="Samsung Galaxy Z Fold 8--9" alt="Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/YH4cXbfN7jtTxuwSe7HsCk-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Too bad YouTube Shorts isn’t similarly optimized. You have to X out of the comments before you scroll to the next video, which is dumb. This also speaks to my issue with apps in general on the Galaxy Fold — too many aren’t optimized for the wider display. It’s something Samsung is going to have to fix, because you know Apple will be working with developers to make sure apps look amazing on the iPhone Fold/Ultra.</p><h2 id="the-shape-is-just-right-but-not-in-my-pocket">The shape is just right (but not in my pocket)</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="MSbku8TL3Wz9tTKEpq2AwU" name="Galaxy Z Fold 8 pants" alt="Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/MSbku8TL3Wz9tTKEpq2AwU-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Initially I thought the Galaxy Z Fold 8 might be awkwardly wide when closed, especially when trying to use the phone quickly with one hand to scroll through notifications. But overall I haven’t had any issues, and I find myself responding to Slack messages on the cover display all the time.</p><p>When I’m on the go, however, I’ve found that the wide design of the Fold 8 is actually not as comfy in my front pocket as the Fold 8 Ultra. The former’s wider body is a bit more awkward when I’m walking. So I often put the Fold 8 in my back pocket instead.</p><h2 id="it-s-my-new-favorite-e-reader">It’s my new favorite e-reader</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="MaDJdLutEFff7YMHqdY89k" name="Samsung Galaxy Z Fold 8--11" alt="Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/MaDJdLutEFff7YMHqdY89k-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>I’ve been trying to get back into reading more, starting with Joanna Stern’s <a href="https://www.amazon.com/Am-Not-Robot-Almost-Everything/dp/0063446618"><u>“I Am Not a Robot,”</u></a> which is about her journey of using nothing but AI tools for a year. And the Fold 8 is the perfect e-reader stand-in for two reasons. </p><p>One, when you flip around the main display you get a 3:4 aspect ratio that’s very Kindle-like. And, two, the anti-reflective coating makes reading outside a lot easier than I thought. There’s a lot less glare than previous foldables.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="PopQKSSXA7u8J8bvFcYMBk" name="Samsung Galaxy Z Fold 8--7" alt="Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/PopQKSSXA7u8J8bvFcYMBk-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Plus, as I get ready for “Avengers: Doomsday,” I asked Gemini which Marvel comics I should be ready to get up to speed on Dr. Doom’s origin and powers. So I subscribed to Marvel Ultimate and I find the Fold 8 is a pretty sweet format for diving in.</p><h2 id="how-good-is-the-battery-life">How good is the battery life?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="hQ292cJhTMbbBXemmfWj7k" name="Samsung Galaxy Z Fold 8--8" alt="Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/hQ292cJhTMbbBXemmfWj7k-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Now that I’ve been using the Fold 8 as a daily driver, I’ve discovered that it has pretty good staying power. On most days starting at 7 am with moderate usage — which includes streaming Spotify on the go, checking Slack and email, and watching videos to and from on my commute — I’m down to about 45 to 50% by the time I get home around 7 pm. </p><p>That’s pretty solid for one of Samsung’s first silicon carbon batteries.</p><h2 id="bottom-line-3">Bottom line</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bDJUk5j4owJX4KvApygKBk" name="Samsung Galaxy Z Fold 8--5" alt="Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/bDJUk5j4owJX4KvApygKBk-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The best thing I can say about the Galaxy Z Fold 8 is that it’s really growing on me. My initial skepticism around why the world needs a wide foldable phone has now all but been erased. And despite how Samsung is marketing this device as an ultimate content consumption phone I think it’s a great device for productivity. </p><p>You can still run up to three apps at once like on the Fold 8 Ultra. You just don’t get the same height for fitting more content on screen, though flipping around to 3:4 mode helps for the main display. I think this could very well be the foldable to beat, and the upcoming iPhone Ultra has a high bar to clear.</p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/ive-been-living-with-the-galaxy-z-fold-8-for-3-weeks-and-i-was-wrong</link>
                                                                            <description>
                            <![CDATA[ I’ve spent a lot of time using the Samsung Galaxy Z Fold 8, and many of the so-called cons pale in comparison to how good this foldable phone actually feels and and works in everyday life. Here’s my updated pros and cons. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">fdtw7nPYTr6mhqtawZZYKV</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/xKVKRBo6b2JwL3kkRiuBCk-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 14 Aug 2026 07:15:00 +0000</pubDate>                                                                                                                                <updated>Fri, 14 Aug 2026 12:15:06 +0000</updated>
                                                                                                                                            <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Mark Spoonauer ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/wtAspSzVfcKLB4JEd39AMo-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Mark Spoonauer is the global editor in chief of Tom&#039;s Guide and has covered technology for over 20 years. He oversees the direction of Tom&#039;s Guide and leads a team of over 25 journalists to bring you our expert buying guides, reviews, news, how-to articles, deals and other coverage.&lt;/p&gt;&lt;p&gt;Mark has a passion for covering all things mobile, having reviewed dozens of smartphones and other gadgets. He enjoys testing the top mobile devices and putting them up against each other in our in-depth face-offs. He also works hand in hand with our editors and testing team to continually improve how we evaluate products. &lt;/p&gt;&lt;p&gt;Having led Tom&#039;s Guide since 2013, Mark has focused on growing the core tech coverage of the site while also expanding into new areas, such as entertainment, fitness and home, recruiting talented writers and editors to help our readers figure out what to buy and how to get the most out of the products and services they use every day. &lt;/p&gt;&lt;p&gt;Mark has spoken at key industry events and appears regularly on TV to discuss the latest trends, including &lt;a href=&quot;https://cheddar.com/media/pixel-watch-gets-a-release-date-at-google-i-o-2022&quot;&gt;Cheddar&lt;/a&gt;, Fox 5, &lt;a href=&quot;https://www.foxbusiness.com/technology/apple-march-event-5g-iphone&quot;&gt;Fox Business&lt;/a&gt; and other outlets. Mark was previously editor in chief of Laptop Mag, and his work has appeared in Wired, Popular Science and Inc. Follow him on Twitter at @mspoonauer.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/xKVKRBo6b2JwL3kkRiuBCk-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Galaxy Z Fold 8]]></media:description>                                                            <media:text><![CDATA[Galaxy Z Fold 8]]></media:text>
                                <media:title type="plain"><![CDATA[Galaxy Z Fold 8]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/xKVKRBo6b2JwL3kkRiuBCk-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>If there’s one thing I’ve learned in testing phones for over 20 years, it’s that there’s a difference between reviewing a device and living with it. And now that I’ve spent three weeks with the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Samsung Galaxy Z Fold 8</a>, I can say that my opinion has changed and that I was right about some things — and wrong about some others.</p><h2 id="the-cameras-are-good-enough">The cameras are good enough!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="c7J7KZ5TxP3SDSB6ALAg2k" name="Samsung Galaxy Z Fold 8--6" alt="Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/c7J7KZ5TxP3SDSB6ALAg2k-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>First, let’s talk about the cameras. I stand by what I initially wrote about it being a bummer that the Fold 8 doesn’t have a telephoto zoom. For $1,900 you deserve one. But I have since tested the <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-vs-fold-8-ultra-camera-test-is-the-telephoto-zoom-worth-the-extra-usd200"><u>Fold 8 vs the 3x optical zoom on the Fold 8 Ultra</u></a> in a series of tests and I didn’t notice a huge difference until I got to 10x.</p><p>My point here is that you can more than get by with the Fold 8’s dual rear shooters. And I especially appreciate the improved low-light performance versus the <a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-7-review"><u>Fold 7</u></a>. The Nightography is just better.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/jnafuqsfupeaSFjL8qo5zj-1920-80.jpg" alt="Galaxy Z Fold 8" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/zs9fisEBmvsJDfWkYetdAk-1920-80.jpg" alt="Galaxy Z Fold 8" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/78txuj8kx9KcDFHxJ3fB7k-1920-80.jpg" alt="Galaxy Z Fold 8" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/P6qeQHWiWXPmgMCv4LtZDk-1920-80.jpg" alt="Galaxy Z Fold 8" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/Su2cj7sQBhiLcjkNw2zjCk-1920-80.jpg" alt="Galaxy Z Fold 8" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure></figure><p>If you really care about zoom performance, you’re better off getting the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review"><u>Samsung Galaxy S26 Ultra</u></a> and its 5x optical zoom, or going with a different foldable altogether with the <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-tried-the-pixel-11-pro-fold-and-its-more-ultra-than-samsungs-foldable-for-usd200-less"><u>Google Pixel 11 Pro Fold</u></a>, which also packs a 5x telephoto. </p><div class="product"><a data-dimension112="3f453eba-9761-11f1-aa14-ff4c85a5a9f0" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Samsung" href="https://www.samsung.com/us/smartphones/galaxy-z-fold8/buy/galaxy-z-fold8-256gb-unlocked-sku-sm-f971ulvaxaa/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1327px;"><p class="vanilla-image-block" style="padding-top:64.28%;"><img id="vZVLkgJrMPPWhKGBnWrT63" name="9Rhpe6TtrVFSNo9Vtn27Tm" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/vZVLkgJrMPPWhKGBnWrT63-1920-80.jpg" mos="" align="middle" fullscreen="" width="1327" height="853" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><strong>Galaxy Z Fold 8: </strong><a href="https://www.samsung.com/us/smartphones/galaxy-z-fold8/buy/galaxy-z-fold8-256gb-unlocked-sku-sm-f971ulvaxaa/" target="_blank" rel="nofollow" data-dimension112="3f453eba-9761-11f1-aa14-ff4c85a5a9f0" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Samsung" data-dimension25=""><strong>up to $1,000 off w/ trade-in @ Samsung</strong></a><br />Samsung is knocking up to $1,000 off Galaxy Z Fold 8 preorders when you trade-in an older phone. The phone features an 7.6-inch OLED main display, 5.5-inch cover screen, Snapdragon 8 Elite CPU, 12GB of RAM, and 256GB of storage. In our <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Galaxy Z Fold 8 review</a>, we called it our favorite foldable to date. It loses the telephoto zoom, but you get a greatly reduced crease, brighter main screen and lighter design.<a class="view-deal button" href="https://www.samsung.com/us/smartphones/galaxy-z-fold8/buy/galaxy-z-fold8-256gb-unlocked-sku-sm-f971ulvaxaa/" target="_blank" rel="nofollow" data-dimension112="3f453eba-9761-11f1-aa14-ff4c85a5a9f0" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Samsung" data-dimension25="">View Deal</a></p></div><h2 id="no-flex-view-is-not-a-dealbreaker">No Flex View is not a dealbreaker</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3806px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="yy29a3yqPwGSdSqoT7oPPX" name="Galaxy Z Fold 8-9" alt="Galaxy Z Fold 8 shown in hand" src="https://cdn.mos.cms.futurecdn.net/yy29a3yqPwGSdSqoT7oPPX-1920-80.jpg" mos="" align="middle" fullscreen="" width="3806" height="2141" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The ability to use your foldable phone as a mini laptop certainly comes in handy, but the Fold 8 ditches this feature because of the way the hinge is designed. So, for example, you can’t play videos with the content up top and controls down below. Or take a Google Meet call without having to hold the phone.</p><p>It’s a bummer, but at least there’s a hands-free alternative for watching videos. You can just use the outer display on the Fold 8 and put it in tent mode. It’s a nifty way for me to catch up on that day’s First Take episode while I’m on lunch break at work or doing the dishes.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-exVp2O"></div>                            </div>                            <script src="https://kwizly.com/embed/exVp2O.js" async=""></script><h2 id="tiktok-is-dangerously-addictive-youtube-shorts-needs-a-fix">TikTok Is dangerously addictive. YouTube Shorts needs a fix</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="nrCY8poLdeA4rgB6PXAX9k" name="Samsung Galaxy Z Fold 8--10" alt="Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/nrCY8poLdeA4rgB6PXAX9k-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>I admit that I scroll on TikTok way too much, but my addiction has gotten worse on the Fold 8. That’s because the front display is perfect for snacking content while I’m waiting for my bus ride home.</p><p>Open up to the main 7.6-inch display, and TikTok is even better if you love to read comments. They pop in from the right side in a dual-pane format. Even better, as you scroll through TikTok’s with the comments upon, they’ll automatically refresh for each video.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="YH4cXbfN7jtTxuwSe7HsCk" name="Samsung Galaxy Z Fold 8--9" alt="Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/YH4cXbfN7jtTxuwSe7HsCk-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Too bad YouTube Shorts isn’t similarly optimized. You have to X out of the comments before you scroll to the next video, which is dumb. This also speaks to my issue with apps in general on the Galaxy Fold — too many aren’t optimized for the wider display. It’s something Samsung is going to have to fix, because you know Apple will be working with developers to make sure apps look amazing on the iPhone Fold/Ultra.</p><h2 id="the-shape-is-just-right-but-not-in-my-pocket">The shape is just right (but not in my pocket)</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="MSbku8TL3Wz9tTKEpq2AwU" name="Galaxy Z Fold 8 pants" alt="Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/MSbku8TL3Wz9tTKEpq2AwU-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Initially I thought the Galaxy Z Fold 8 might be awkwardly wide when closed, especially when trying to use the phone quickly with one hand to scroll through notifications. But overall I haven’t had any issues, and I find myself responding to Slack messages on the cover display all the time.</p><p>When I’m on the go, however, I’ve found that the wide design of the Fold 8 is actually not as comfy in my front pocket as the Fold 8 Ultra. The former’s wider body is a bit more awkward when I’m walking. So I often put the Fold 8 in my back pocket instead.</p><h2 id="it-s-my-new-favorite-e-reader">It’s my new favorite e-reader</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="MaDJdLutEFff7YMHqdY89k" name="Samsung Galaxy Z Fold 8--11" alt="Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/MaDJdLutEFff7YMHqdY89k-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>I’ve been trying to get back into reading more, starting with Joanna Stern’s <a href="https://www.amazon.com/Am-Not-Robot-Almost-Everything/dp/0063446618"><u>“I Am Not a Robot,”</u></a> which is about her journey of using nothing but AI tools for a year. And the Fold 8 is the perfect e-reader stand-in for two reasons. </p><p>One, when you flip around the main display you get a 3:4 aspect ratio that’s very Kindle-like. And, two, the anti-reflective coating makes reading outside a lot easier than I thought. There’s a lot less glare than previous foldables.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="PopQKSSXA7u8J8bvFcYMBk" name="Samsung Galaxy Z Fold 8--7" alt="Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/PopQKSSXA7u8J8bvFcYMBk-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Plus, as I get ready for “Avengers: Doomsday,” I asked Gemini which Marvel comics I should be ready to get up to speed on Dr. Doom’s origin and powers. So I subscribed to Marvel Ultimate and I find the Fold 8 is a pretty sweet format for diving in.</p><h2 id="how-good-is-the-battery-life">How good is the battery life?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="hQ292cJhTMbbBXemmfWj7k" name="Samsung Galaxy Z Fold 8--8" alt="Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/hQ292cJhTMbbBXemmfWj7k-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Now that I’ve been using the Fold 8 as a daily driver, I’ve discovered that it has pretty good staying power. On most days starting at 7 am with moderate usage — which includes streaming Spotify on the go, checking Slack and email, and watching videos to and from on my commute — I’m down to about 45 to 50% by the time I get home around 7 pm. </p><p>That’s pretty solid for one of Samsung’s first silicon carbon batteries.</p><h2 id="bottom-line-3">Bottom line</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bDJUk5j4owJX4KvApygKBk" name="Samsung Galaxy Z Fold 8--5" alt="Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/bDJUk5j4owJX4KvApygKBk-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The best thing I can say about the Galaxy Z Fold 8 is that it’s really growing on me. My initial skepticism around why the world needs a wide foldable phone has now all but been erased. And despite how Samsung is marketing this device as an ultimate content consumption phone I think it’s a great device for productivity. </p><p>You can still run up to three apps at once like on the Fold 8 Ultra. You just don’t get the same height for fitting more content on screen, though flipping around to 3:4 mode helps for the main display. I think this could very well be the foldable to beat, and the upcoming iPhone Ultra has a high bar to clear.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Does the Galaxy Z Fold 8 Ultra make the most use of its screen space? I streamed a bunch of movies and TV shows to find out ]]></title>
                                                                                                <dc:content><![CDATA[ <p>When it comes to streaming movies and TV shows, a larger screen is usually considered the better option. But, that only really works if the screen shape actually conforms to the aspect ratio of the content in question. That's not an issue for most phones or tablet screens, but what about the larger, oddly-shaped foldable displays like the one on the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Samsung Galaxy Z Fold 8 Ultra</a>?</p><p>I've been testing the Z Fold 8 Ultra for the past few weeks, and it shouldn't surprise anyone that watching video on the larger display means I also have to contend with large areas of blank space around the video. This can be rather irritating, especially in brighter environments that highlight both the display crease and my own reflection.</p><div class="product"><a data-dimension112="13ad7924-9271-11f1-a833-6bcbee429b16" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra" data-dimension48="Galaxy Z Fold 8 Ultra" data-dimension25="$2098" href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12DXK8J" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:954px;"><p class="vanilla-image-block" style="padding-top:98.95%;"><img id="4EngEpxMLxWVDrp7aAo2xi" name="Galaxy Z Fold 8 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/4EngEpxMLxWVDrp7aAo2xi-1920-80.jpg" mos="" align="middle" fullscreen="" width="954" height="944" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12DXK8J" target="_blank" rel="nofollow" data-dimension112="13ad7924-9271-11f1-a833-6bcbee429b16" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra" data-dimension48="Galaxy Z Fold 8 Ultra" data-dimension25="$2098">Galaxy Z Fold 8 Ultra: $2098</a></strong><br />The price may have gone up (again), there are are still plenty of reasons to pick up the Z Fold 8 Ultra. There's a large 8-inch foldable display hiding away, alongside a 6.5-inch cover display, trio of main cameras (with a 200MP main lens), powerful performance and excellent battery life.</p><p>Amazon is currently giving away a $350 gift card with each purchase too.<a class="view-deal button" href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12DXK8J" target="_blank" rel="nofollow" data-dimension112="13ad7924-9271-11f1-a833-6bcbee429b16" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra" data-dimension48="Galaxy Z Fold 8 Ultra" data-dimension25="$2098">View Deal</a></p></div><p>But as many people will no doubt point out, there are multiple ways to watch videos on the Galaxy Z Fold 8 Ultra. There's the cover display which, while narrower than most phones, offers a traditional viewing experience. The foldable display can also be oriented in portrait or landscape modes, and switching between the two flips the aspect ratio. </p><p>While this may not seem like a big deal, the Z Fold 8 Ultra isn't a perfect square, and that means the flip also changes how video content sits on your phone. But which mode is the better way to watch stuff? I tested the Z Fold 8 Ultra's three viewing experiences against the <a href="https://www.tomsguide.com/phones/iphones/iphone-17-pro-max-review">iPhone 17 Pro Max</a> to find out.</p><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/oFT-YOrakEg" allowfullscreen=""></iframe></div></div><h2 id="how-i-tested-the-screens">How I tested the screens</h2><p>It's easy to load up some content on a screen and rely on vibes alone to make your conclusion, but I took things a step further by actively measuring everything on screen. This started with the screen itself, measuring between the bezels and calculating the amount of screen space that is actually available.</p><p>I should caveat at this point that this is only a rough calculation, because all four phones have curved corners. This is less of an issue on the Z Fold 8 Ultra because those curves are very slight. However the iPhone 17 Pro Max's corners are larger and more rounded, which means the total screen area is slightly smaller than the math suggests.</p><p>Once the total area of each display was calculated, I got to work streaming, throwing up a bunch of different kinds of content and measuring how much screen space they took up. Content included:</p><ul><li>"X-Men (2000)" (2:39:1) purchased on YouTube</li><li>"X-Men-97" (2:35:1)  on Disney Plus</li><li>"The Emperor's New Groove" (16:9) on Disney Plus</li><li>"Scrubs" (2001) (4:3) on Disney Plus</li><li>"Avengers: Endgame" (2:39:1) on Disney Plus</li><li>"Avengers: Endgame IMAX Enhanced Edition" (1:9:1) on Disney Plus</li><li>Various vertical videos on TikTok</li></ul><p>I set up each video playing on the four screen types, then measured how large each video was. With that in hand, I was able to work out just how much screen space they actually used, and thus, how much space is just sitting there going to waste. Crucially, this means I can figure out the best option for watching content in something close to a full-screen experience.</p><p>I should also note that while a lot of streaming platforms offer a "zoom to fill" option on smart phones and tablets, I have not taken this into account since that essentially crops the video and means you don't see everything that's going on.</p><h2 id="iphone-17-pro-max">iPhone 17 Pro Max</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3438px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bi6PrNpRHCmk6W6nbvqbne" name="Z Fold 8 ultra video size shots-9" alt="samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max" src="https://cdn.mos.cms.futurecdn.net/bi6PrNpRHCmk6W6nbvqbne-1920-80.jpg" mos="" align="middle" fullscreen="" width="3438" height="1934" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Height (Inches)</strong></p></td><td  ><p><strong>Width (Inches)</strong></p></td><td  ><p><strong>Total (Sq Inch)</strong></p></td><td  ><p><strong>% Screen Used</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Screen (Landscape)</strong></p></td><td  ><p><strong>2.83</strong></p></td><td  ><p><strong>6.22</strong></p></td><td  ><p><strong>17.60</strong></p></td><td  ></td></tr><tr><td class="firstcol " ><p><strong>X-Men (YouTube)</strong></p></td><td  ><p>2.13</p></td><td  ><p>5.12</p></td><td  ><p>10.91</p></td><td  ><p>61.95</p></td></tr><tr><td class="firstcol " ><p><strong>X-Men-97 (D+)</strong></p></td><td  ><p>2.68</p></td><td  ><p>5.12</p></td><td  ><p>13.72</p></td><td  ><p>77.95</p></td></tr><tr><td class="firstcol " ><p><strong>The Emperor's New Groove (D+)</strong></p></td><td  ><p>2.83</p></td><td  ><p>4.76</p></td><td  ><p>13.47</p></td><td  ><p>76.53</p></td></tr><tr><td class="firstcol " ><p><strong>Scrubs (4:3/D+)</strong></p></td><td  ><p>2.83</p></td><td  ><p>3.82</p></td><td  ><p>10.81</p></td><td  ><p>61.41</p></td></tr><tr><td class="firstcol " ><p><strong>Avengers: Endgame (Regular/D+)</strong></p></td><td  ><p>2.13</p></td><td  ><p>5.12</p></td><td  ><p>10.91</p></td><td  ><p>61.95</p></td></tr><tr><td class="firstcol " ><p><strong>Avengers Endgame (IMAX/D+)</strong></p></td><td  ><p>2.68</p></td><td  ><p>5.12</p></td><td  ><p>13.72</p></td><td  ><p>77.95</p></td></tr><tr><td class="firstcol " ><p><strong>TikTok (Portrait)</strong></p></td><td  ><p>5.70</p></td><td  ><p>2.83</p></td><td  ><p>16.13</p></td><td  ><p>91.64</p></td></tr></tbody></table></div><p>The iPhone 17 Pro Max has roughly 17.6 square inches of screen space available, but it seems as though a bunch of the tested content struggles to fill up that space by default. The most efficient use of the screen comes from TikTok, which takes up 92.94% of the screen. This shouldn't be a huge surprise given the platform's vertical video feed that can take up almost the full length of the screen.</p><p>When it comes to horizontal video, the content doesn't fare nearly as well. The worst offender was "Scrubs," though this shouldn't really be a surprise since the early seasons were broadcast in the (then standard) 4:3 aspect ratio. That box-like shape isn't great at filling up wider-screen devices, reflected by the fact it only filled 61.41% of the available space.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="szKHqwyLGQvcjHp8cPTawe" name="Z Fold 8 ultra video size shots-2" alt="samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max" src="https://cdn.mos.cms.futurecdn.net/szKHqwyLGQvcjHp8cPTawe-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Widescreen live action movies didn't do so well either. Both movies have been cropped vertically, and can't take full advantage of the landscape height, but they don't fail to take advantage of the iPhone's width and crop that way as well. In fact, all the movies suffered from this and left at least 1.1 inches of wasted space across both sides of the display. In the end, though, both movies wasted only slightly less space than "Scrubs" did, taking up 61.95% of the usable screen space</p><p>The IMAX edition of "Avengers: Endgame" fared a little better, with the IMAX scenes using up more of the vertical space that the standard aspect ratio. Because of this, the movie, along with the bizarrely proportioned "X-Men-97," used up 77.95% of the iPhone's available screen space. This was closely followed by the 16:9 "Emperor's New Groove," with 76.53%, a difference accounted for by a slightly shorter and narrower video.</p><h2 id="samsung-galaxy-z-fold-8-ultra-cover-display">Samsung Galaxy Z Fold 8 Ultra (Cover Display)</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="S9uSv2YnCG5keeQwVsU4xe" name="Z Fold 8 ultra video size shots-3" alt="samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max" src="https://cdn.mos.cms.futurecdn.net/S9uSv2YnCG5keeQwVsU4xe-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Height (Inches)</strong></p></td><td  ><p><strong>Width (Inches)</strong></p></td><td  ><p><strong>Total (Sq Inch)</strong></p></td><td  ><p><strong>% Screen Used</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Screen (Landscape)</strong></p></td><td  ><p><strong>2.56</strong></p></td><td  ><p><strong>5.94</strong></p></td><td  ><p><strong>15.21</strong></p></td><td  ></td></tr><tr><td class="firstcol " ><p><strong>X-Men (YouTube)</strong></p></td><td  ><p>1.77</p></td><td  ><p>4.57</p></td><td  ><p>8.09</p></td><td  ><p>53.19</p></td></tr><tr><td class="firstcol " ><p><strong>X-Men-97 (D+)</strong></p></td><td  ><p>2.56</p></td><td  ><p>5.94</p></td><td  ><p>15.21</p></td><td  ><p>100</p></td></tr><tr><td class="firstcol " ><p><strong>The Emperor's New Groove (D+)</strong></p></td><td  ><p>2.56</p></td><td  ><p>4.25</p></td><td  ><p>10.88</p></td><td  ><p>71.55</p></td></tr><tr><td class="firstcol " ><p><strong>Scrubs (4:3/D+)</strong></p></td><td  ><p>2.56</p></td><td  ><p>3.43</p></td><td  ><p>8.78</p></td><td  ><p>57.74</p></td></tr><tr><td class="firstcol " ><p><strong>Avengers: Endgame (Regular/D+)</strong></p></td><td  ><p>2.56</p></td><td  ><p>5.94</p></td><td  ><p>15.21</p></td><td  ><p>100</p></td></tr><tr><td class="firstcol " ><p><strong>Avengers Endgame (IMAX/D+)</strong></p></td><td  ><p>2.56</p></td><td  ><p>5.20</p></td><td  ><p>13.31</p></td><td  ><p>87.54</p></td></tr><tr><td class="firstcol " ><p><strong>TikTok (Portrait)</strong></p></td><td  ><p>4.57</p></td><td  ><p>2.56</p></td><td  ><p>11.70</p></td><td  ><p>76.94</p></td></tr></tbody></table></div><p>Looking at the results for the Z Fold 8 Ultra's cover display, and you'll see a couple of oddities. Both "X-Men 97" and the standard edition of "Avengers: Endgame" both took up 100% of the screen space. Which is certainly good, though this made me pause and wonder what's going on.</p><p>Checking the measurements of the cover display versus the iPhone 17 Pro Max, and I noticed that the video was actually smaller on the iPhone — despite the fact the 17 Pro Max has almost 2.5 extra square inches of available screen space.</p><p>Weirder still was the fact that my Google-purchased copy of "X-Men" was smaller than "Endgame," taking up a paltry 53.19% of the screen. They were both the same size on the iPhone, but the Z Fold 8 Ultra decided that the black bars must be preserved for this particular movie. This appears to be a YouTube issue, because X-Men on Disney Plus expanded to the full size of the display, just like Endgame did.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3121px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="Jgg4hgUCgAxuobyisY5PTe" name="Z Fold 8 ultra video size shots-7" alt="samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max" src="https://cdn.mos.cms.futurecdn.net/Jgg4hgUCgAxuobyisY5PTe-1920-80.jpg" mos="" align="middle" fullscreen="" width="3121" height="1756" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The IMAX version of Endgame obviously came out a little worse, since the taller image requires more space than the 8 Ultra's cover display allows — causing black bars at either side of the screen. That said, it still used up 87.54% of the available screen.</p><p>16:9 content like "The Emperor's New Groove" fared a lot worse here, though, since the narrow screen forced the video to shrink at the edges even more than an IMAX movie. Likewise the design meant "Scrubs" left a load more wasted space thanks to its square-ish aspect ratio. Both videos used up a respective 71.55% and 57.74% of the available screen space.</p><p>As for TikTok, this result did surprise me. The vertical videos used up all the available width when playing, but they didn't take full advantage of the screen length. Which again, I assume is down to the 8 Ultra's narrow cover display, and means TikTok only used 76.94% of the available screen space.</p><h2 id="samsung-galaxy-z-fold-8-ultra-foldable-display-portrait">Samsung Galaxy Z Fold 8 Ultra Foldable Display (Portrait)</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3583px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="VdSKDACwu3ujopw3WSWnse" name="Z Fold 8 ultra video size shots-10" alt="samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max" src="https://cdn.mos.cms.futurecdn.net/VdSKDACwu3ujopw3WSWnse-1920-80.jpg" mos="" align="middle" fullscreen="" width="3583" height="2015" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Height (Inches)</strong></p></td><td  ><p><strong>Width (Inches)</strong></p></td><td  ><p><strong>Total (Sq Inch)</strong></p></td><td  ><p><strong>% Screen Used</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Screen</strong></p></td><td  ><p><strong>5.94</strong></p></td><td  ><p><strong>5.35</strong></p></td><td  ><p><strong>31.78</strong></p></td><td  ></td></tr><tr><td class="firstcol " ><p><strong>X-Men (YouTube)</strong></p></td><td  ><p>2.20</p></td><td  ><p>5.35</p></td><td  ><p>11.77</p></td><td  ><p>37.04</p></td></tr><tr><td class="firstcol " ><p><strong>X-Men-97 (D+)</strong></p></td><td  ><p>2.44</p></td><td  ><p>5.35</p></td><td  ><p>13.05</p></td><td  ><p>41.08</p></td></tr><tr><td class="firstcol " ><p><strong>The Emperor's New Groove (D+)</strong></p></td><td  ><p>2.99</p></td><td  ><p>5.03</p></td><td  ><p>15.04</p></td><td  ><p>47.33</p></td></tr><tr><td class="firstcol " ><p><strong>Scrubs (4:3/D+)</strong></p></td><td  ><p>4.01</p></td><td  ><p>5.35</p></td><td  ><p>21.45</p></td><td  ><p>67.51</p></td></tr><tr><td class="firstcol " ><p><strong>Avengers: Endgame (Regular/D+)</strong></p></td><td  ><p>2.24</p></td><td  ><p>5.35</p></td><td  ><p>11.98</p></td><td  ><p>37.71</p></td></tr><tr><td class="firstcol " ><p><strong>Avengers Endgame (IMAX/D+)</strong></p></td><td  ><p>2.99</p></td><td  ><p>5.35</p></td><td  ><p>16.00</p></td><td  ><p>50.34</p></td></tr><tr><td class="firstcol " ><p><strong>TikTok</strong></p></td><td  ><p>5.63</p></td><td  ><p>3.14</p></td><td  ><p>17.68</p></td><td  ><p>55.63</p></td></tr></tbody></table></div><p>The Z Fold 8 Ultra's larger display is the size of two cover displays side by side, which should mean a larger video to watch, right? Well, apparently not. At least not when the phone is in portrait mode. The size of the screen means there is a lot more wasted space, but the videos themselves aren't automatically bigger than they appear on the cover display either.</p><p>Both "X-Men-97" and the standard version of "Avengers: Endgame" ended up being smaller than their counterparts on the Ultra's cover display — in terms of height, width and overall area. Both used a respective 41.08% and 37.71% of the available screen space. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3915px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="kti5xxYn8KnniYz2kdTNwe" name="Z Fold 8 ultra video size shots-6" alt="samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max" src="https://cdn.mos.cms.futurecdn.net/kti5xxYn8KnniYz2kdTNwe-1920-80.jpg" mos="" align="middle" fullscreen="" width="3915" height="2202" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>That only worse performer was X-Men on YouTube, which used up 37.04% thanks to the way YouTube presents the video. That means almost two thirds of the screen is going unused. However, the video itself is larger than what I saw on the 8 Ultra's cover screen and the iPhone 17 Pro Max. So there is still a benefit to using the large screen. </p><p>There is an awful lot of wasted screen space watching in portrait mode. "The Emperor's New Groove" only used 47.33% of the screen, while the IMAX edition of "Endgame" took up just over half (50.34%). TikTok also suffered, using up 55.63% and showed off a video that was both shorter and wider than the one from the iPhone.</p><p>The major winner here is "Scrubs," thanks to the aspect ratio, which means it took up 67.51% of the screen and offered a much larger overall image than we've seen from it so far.</p><h2 id="samsung-galaxy-z-fold-8-ultra-foldable-display-landscape">Samsung Galaxy Z Fold 8 Ultra Foldable Display (Landscape)</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3527px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="MGCMuUBSp4HjqTYptkefge" name="Z Fold 8 ultra video size shots-5" alt="samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max" src="https://cdn.mos.cms.futurecdn.net/MGCMuUBSp4HjqTYptkefge-1920-80.jpg" mos="" align="middle" fullscreen="" width="3527" height="1984" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The key benefit to watching video in landscape mode is that the entirety of the display crease gets covered up by whatever you're watching, which makes it nearly impossible to see. The other main advantage to watching video this way is that the videos are larger (and less wasteful) than in portrait mode</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Height (Inches)</strong></p></td><td  ><p><strong>Width (Inches)</strong></p></td><td  ><p><strong>Total (Sq Inch)</strong></p></td><td  ><p><strong>% Screen Used</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Screen</strong></p></td><td  ><p><strong>5.35</strong></p></td><td  ><p><strong>5.94</strong></p></td><td  ><p><strong>31.78</strong></p></td><td  ></td></tr><tr><td class="firstcol " ><p><strong>X-Men (YouTube)</strong></p></td><td  ><p>2.48</p></td><td  ><p>5.94</p></td><td  ><p>14.73</p></td><td  ><p>46.36</p></td></tr><tr><td class="firstcol " ><p><strong>X-Men-97 (D+)</strong></p></td><td  ><p>2.68</p></td><td  ><p>5.94</p></td><td  ><p>15.92</p></td><td  ><p>50.09</p></td></tr><tr><td class="firstcol " ><p><strong>The Emperor's New Groove (D+)</strong></p></td><td  ><p>3.34</p></td><td  ><p>5.55</p></td><td  ><p>18.54</p></td><td  ><p>58.33</p></td></tr><tr><td class="firstcol " ><p><strong>Scrubs (4:3/D+)</strong></p></td><td  ><p>4.48</p></td><td  ><p>5.94</p></td><td  ><p>26.61</p></td><td  ><p>83.74</p></td></tr><tr><td class="firstcol " ><p><strong>Avengers: Endgame (Regular/D+)</strong></p></td><td  ><p>2.48</p></td><td  ><p>5.94</p></td><td  ><p>14.73</p></td><td  ><p>46.36</p></td></tr><tr><td class="firstcol " ><p><strong>Avengers Endgame (IMAX/D+)</strong></p></td><td  ><p>3.15</p></td><td  ><p>5.94</p></td><td  ><p>18.71</p></td><td  ><p>58.88</p></td></tr><tr><td class="firstcol " ><p><strong>TikTok </strong></p></td><td  ><p>5.00</p></td><td  ><p>2.83</p></td><td  ><p>14.15</p></td><td  ><p>44.53</p></td></tr></tbody></table></div><p>The biggest winner is again, "Scrubs," or any other older TV show that was filmed with a 4:3 aspect ratio. The show took up 83.74% of the total screen space, over 16% more than it did in portrait mode. This obviously means that the video is noticeably larger, though the standard definition image does not look great if you're getting up close with the screen.</p><p>Most of the other videos take full advantage of the extra width, with the only exception being "The Emperor's New Groove," which is about 0.4-inches narrower. However the extra height afforded to  16:9 movie means it uses up 58.33% of the screen, compared to the 46.46% utilized by X-Men and the standard version of "Avengers: Endgame."</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3604px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="X2djLcD7k7Z3wXX62M8fxe" name="Z Fold 8 ultra video size shots-8" alt="samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max" src="https://cdn.mos.cms.futurecdn.net/X2djLcD7k7Z3wXX62M8fxe-1920-80.jpg" mos="" align="middle" fullscreen="" width="3604" height="2027" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>"X-Men-97" is 0.2-inches taller in this configuration, meaning its total raises to 50.09%, while the IMAX enhanced edition of "Endgame" fills up 58.88% on account of its extra height.</p><p>The only real loser here is TikTok, which is shorter and narrower in landscape mode, and wastes an extra 11% of the screen compared to portrait mode. That also makes sense, since this orientation is wider than it is long, and that means the vertical videos get squashed down compared to viewing in portrait mode.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-WnnvjW"></div>                            </div>                            <script src="https://kwizly.com/embed/WnnvjW.js" async=""></script><h2 id="verdict">Verdict</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="k8FeDxnevUPmLReuywiMxe" name="Z Fold 8 ultra video size shots-4" alt="samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max" src="https://cdn.mos.cms.futurecdn.net/k8FeDxnevUPmLReuywiMxe-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>With the exception of TikTok, landscape mode actually seems to have the largest overall video size of all four display configurations, barring one. The way "Avengers: Endgame" is presented on the cover display means it is slightly taller on the outer screen, by one tenth of an inch. </p><p>The cover display's aspect ratio means it seems to be uniquely suited to playing live action theatrical releases. Assuming the service you're using actually makes the most of the space, and doesn't do what YouTube did with my copy of X-Men and squashes the whole thing down for no reason.</p><p>As for TikTok, it's clear that the Z Fold 8 Ultra's foldable display is not as well-suited to vertical video as non-folding screens. Likewise, those of you that are bothered about black areas of screen around your video, you may want to avoid foldables for the time being. If you need a larger image to watch, you should probably invest in some kind of tablet. </p><p>But now the one question I have is this: How different would the results have been if I'd had a <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Galaxy Z Fold 8</a> to compare everything to? Samsung has positioned the passport-shaped device as the ideal device for streaming and media after all, but that face-off is going to have to wait.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom’s Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/samsung-phones/i-used-a-thermal-camera-to-see-how-hot-the-galaxy-z-fold-8-ultra-gets-compared-to-the-galaxy-s26-ultra-heres-what-happened">I used a thermal camera to see how hot the Galaxy Z Fold 8 Ultra gets compared to the Galaxy S26 Ultra — here's what happened</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra">I tested the Samsung Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra for 2 weeks — here’s the one I’d buy</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/i-just-tried-the-new-samsung-dex-on-the-galaxy-z-fold-8-and-it-has-one-huge-upgrade">I just tried the new Samsung DeX on the Galaxy Z Fold 8 — and it has one huge upgrade</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/does-the-galaxy-z-fold-8-ultra-make-the-most-use-of-its-screen-space-i-streamed-a-bunch-of-movies-and-tv-shows-to-find-out</link>
                                                                            <description>
                            <![CDATA[ The Samsung Galaxy Z fold 8 Ultra has a big screen, but it's also an odd shape — so how does that affect video streaming? ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">JGSy6tUvmFMSt7C5U4Piqe</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/wVDkztfBTjGtEfwDR2dfxe-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 09 Aug 2026 10:45:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/wVDkztfBTjGtEfwDR2dfxe-1920-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max]]></media:description>                                                            <media:text><![CDATA[samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max]]></media:text>
                                <media:title type="plain"><![CDATA[samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/wVDkztfBTjGtEfwDR2dfxe-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>When it comes to streaming movies and TV shows, a larger screen is usually considered the better option. But, that only really works if the screen shape actually conforms to the aspect ratio of the content in question. That's not an issue for most phones or tablet screens, but what about the larger, oddly-shaped foldable displays like the one on the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Samsung Galaxy Z Fold 8 Ultra</a>?</p><p>I've been testing the Z Fold 8 Ultra for the past few weeks, and it shouldn't surprise anyone that watching video on the larger display means I also have to contend with large areas of blank space around the video. This can be rather irritating, especially in brighter environments that highlight both the display crease and my own reflection.</p><div class="product"><a data-dimension112="13ad7924-9271-11f1-a833-6bcbee429b16" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra" data-dimension48="Galaxy Z Fold 8 Ultra" data-dimension25="$2098" href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12DXK8J" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:954px;"><p class="vanilla-image-block" style="padding-top:98.95%;"><img id="4EngEpxMLxWVDrp7aAo2xi" name="Galaxy Z Fold 8 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/4EngEpxMLxWVDrp7aAo2xi-1920-80.jpg" mos="" align="middle" fullscreen="" width="954" height="944" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12DXK8J" target="_blank" rel="nofollow" data-dimension112="13ad7924-9271-11f1-a833-6bcbee429b16" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra" data-dimension48="Galaxy Z Fold 8 Ultra" data-dimension25="$2098">Galaxy Z Fold 8 Ultra: $2098</a></strong><br />The price may have gone up (again), there are are still plenty of reasons to pick up the Z Fold 8 Ultra. There's a large 8-inch foldable display hiding away, alongside a 6.5-inch cover display, trio of main cameras (with a 200MP main lens), powerful performance and excellent battery life.</p><p>Amazon is currently giving away a $350 gift card with each purchase too.<a class="view-deal button" href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12DXK8J" target="_blank" rel="nofollow" data-dimension112="13ad7924-9271-11f1-a833-6bcbee429b16" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra" data-dimension48="Galaxy Z Fold 8 Ultra" data-dimension25="$2098">View Deal</a></p></div><p>But as many people will no doubt point out, there are multiple ways to watch videos on the Galaxy Z Fold 8 Ultra. There's the cover display which, while narrower than most phones, offers a traditional viewing experience. The foldable display can also be oriented in portrait or landscape modes, and switching between the two flips the aspect ratio. </p><p>While this may not seem like a big deal, the Z Fold 8 Ultra isn't a perfect square, and that means the flip also changes how video content sits on your phone. But which mode is the better way to watch stuff? I tested the Z Fold 8 Ultra's three viewing experiences against the <a href="https://www.tomsguide.com/phones/iphones/iphone-17-pro-max-review">iPhone 17 Pro Max</a> to find out.</p><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/oFT-YOrakEg" allowfullscreen=""></iframe></div></div><h2 id="how-i-tested-the-screens">How I tested the screens</h2><p>It's easy to load up some content on a screen and rely on vibes alone to make your conclusion, but I took things a step further by actively measuring everything on screen. This started with the screen itself, measuring between the bezels and calculating the amount of screen space that is actually available.</p><p>I should caveat at this point that this is only a rough calculation, because all four phones have curved corners. This is less of an issue on the Z Fold 8 Ultra because those curves are very slight. However the iPhone 17 Pro Max's corners are larger and more rounded, which means the total screen area is slightly smaller than the math suggests.</p><p>Once the total area of each display was calculated, I got to work streaming, throwing up a bunch of different kinds of content and measuring how much screen space they took up. Content included:</p><ul><li>"X-Men (2000)" (2:39:1) purchased on YouTube</li><li>"X-Men-97" (2:35:1)  on Disney Plus</li><li>"The Emperor's New Groove" (16:9) on Disney Plus</li><li>"Scrubs" (2001) (4:3) on Disney Plus</li><li>"Avengers: Endgame" (2:39:1) on Disney Plus</li><li>"Avengers: Endgame IMAX Enhanced Edition" (1:9:1) on Disney Plus</li><li>Various vertical videos on TikTok</li></ul><p>I set up each video playing on the four screen types, then measured how large each video was. With that in hand, I was able to work out just how much screen space they actually used, and thus, how much space is just sitting there going to waste. Crucially, this means I can figure out the best option for watching content in something close to a full-screen experience.</p><p>I should also note that while a lot of streaming platforms offer a "zoom to fill" option on smart phones and tablets, I have not taken this into account since that essentially crops the video and means you don't see everything that's going on.</p><h2 id="iphone-17-pro-max">iPhone 17 Pro Max</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3438px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bi6PrNpRHCmk6W6nbvqbne" name="Z Fold 8 ultra video size shots-9" alt="samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max" src="https://cdn.mos.cms.futurecdn.net/bi6PrNpRHCmk6W6nbvqbne-1920-80.jpg" mos="" align="middle" fullscreen="" width="3438" height="1934" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Height (Inches)</strong></p></td><td  ><p><strong>Width (Inches)</strong></p></td><td  ><p><strong>Total (Sq Inch)</strong></p></td><td  ><p><strong>% Screen Used</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Screen (Landscape)</strong></p></td><td  ><p><strong>2.83</strong></p></td><td  ><p><strong>6.22</strong></p></td><td  ><p><strong>17.60</strong></p></td><td  ></td></tr><tr><td class="firstcol " ><p><strong>X-Men (YouTube)</strong></p></td><td  ><p>2.13</p></td><td  ><p>5.12</p></td><td  ><p>10.91</p></td><td  ><p>61.95</p></td></tr><tr><td class="firstcol " ><p><strong>X-Men-97 (D+)</strong></p></td><td  ><p>2.68</p></td><td  ><p>5.12</p></td><td  ><p>13.72</p></td><td  ><p>77.95</p></td></tr><tr><td class="firstcol " ><p><strong>The Emperor's New Groove (D+)</strong></p></td><td  ><p>2.83</p></td><td  ><p>4.76</p></td><td  ><p>13.47</p></td><td  ><p>76.53</p></td></tr><tr><td class="firstcol " ><p><strong>Scrubs (4:3/D+)</strong></p></td><td  ><p>2.83</p></td><td  ><p>3.82</p></td><td  ><p>10.81</p></td><td  ><p>61.41</p></td></tr><tr><td class="firstcol " ><p><strong>Avengers: Endgame (Regular/D+)</strong></p></td><td  ><p>2.13</p></td><td  ><p>5.12</p></td><td  ><p>10.91</p></td><td  ><p>61.95</p></td></tr><tr><td class="firstcol " ><p><strong>Avengers Endgame (IMAX/D+)</strong></p></td><td  ><p>2.68</p></td><td  ><p>5.12</p></td><td  ><p>13.72</p></td><td  ><p>77.95</p></td></tr><tr><td class="firstcol " ><p><strong>TikTok (Portrait)</strong></p></td><td  ><p>5.70</p></td><td  ><p>2.83</p></td><td  ><p>16.13</p></td><td  ><p>91.64</p></td></tr></tbody></table></div><p>The iPhone 17 Pro Max has roughly 17.6 square inches of screen space available, but it seems as though a bunch of the tested content struggles to fill up that space by default. The most efficient use of the screen comes from TikTok, which takes up 92.94% of the screen. This shouldn't be a huge surprise given the platform's vertical video feed that can take up almost the full length of the screen.</p><p>When it comes to horizontal video, the content doesn't fare nearly as well. The worst offender was "Scrubs," though this shouldn't really be a surprise since the early seasons were broadcast in the (then standard) 4:3 aspect ratio. That box-like shape isn't great at filling up wider-screen devices, reflected by the fact it only filled 61.41% of the available space.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="szKHqwyLGQvcjHp8cPTawe" name="Z Fold 8 ultra video size shots-2" alt="samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max" src="https://cdn.mos.cms.futurecdn.net/szKHqwyLGQvcjHp8cPTawe-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Widescreen live action movies didn't do so well either. Both movies have been cropped vertically, and can't take full advantage of the landscape height, but they don't fail to take advantage of the iPhone's width and crop that way as well. In fact, all the movies suffered from this and left at least 1.1 inches of wasted space across both sides of the display. In the end, though, both movies wasted only slightly less space than "Scrubs" did, taking up 61.95% of the usable screen space</p><p>The IMAX edition of "Avengers: Endgame" fared a little better, with the IMAX scenes using up more of the vertical space that the standard aspect ratio. Because of this, the movie, along with the bizarrely proportioned "X-Men-97," used up 77.95% of the iPhone's available screen space. This was closely followed by the 16:9 "Emperor's New Groove," with 76.53%, a difference accounted for by a slightly shorter and narrower video.</p><h2 id="samsung-galaxy-z-fold-8-ultra-cover-display">Samsung Galaxy Z Fold 8 Ultra (Cover Display)</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="S9uSv2YnCG5keeQwVsU4xe" name="Z Fold 8 ultra video size shots-3" alt="samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max" src="https://cdn.mos.cms.futurecdn.net/S9uSv2YnCG5keeQwVsU4xe-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Height (Inches)</strong></p></td><td  ><p><strong>Width (Inches)</strong></p></td><td  ><p><strong>Total (Sq Inch)</strong></p></td><td  ><p><strong>% Screen Used</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Screen (Landscape)</strong></p></td><td  ><p><strong>2.56</strong></p></td><td  ><p><strong>5.94</strong></p></td><td  ><p><strong>15.21</strong></p></td><td  ></td></tr><tr><td class="firstcol " ><p><strong>X-Men (YouTube)</strong></p></td><td  ><p>1.77</p></td><td  ><p>4.57</p></td><td  ><p>8.09</p></td><td  ><p>53.19</p></td></tr><tr><td class="firstcol " ><p><strong>X-Men-97 (D+)</strong></p></td><td  ><p>2.56</p></td><td  ><p>5.94</p></td><td  ><p>15.21</p></td><td  ><p>100</p></td></tr><tr><td class="firstcol " ><p><strong>The Emperor's New Groove (D+)</strong></p></td><td  ><p>2.56</p></td><td  ><p>4.25</p></td><td  ><p>10.88</p></td><td  ><p>71.55</p></td></tr><tr><td class="firstcol " ><p><strong>Scrubs (4:3/D+)</strong></p></td><td  ><p>2.56</p></td><td  ><p>3.43</p></td><td  ><p>8.78</p></td><td  ><p>57.74</p></td></tr><tr><td class="firstcol " ><p><strong>Avengers: Endgame (Regular/D+)</strong></p></td><td  ><p>2.56</p></td><td  ><p>5.94</p></td><td  ><p>15.21</p></td><td  ><p>100</p></td></tr><tr><td class="firstcol " ><p><strong>Avengers Endgame (IMAX/D+)</strong></p></td><td  ><p>2.56</p></td><td  ><p>5.20</p></td><td  ><p>13.31</p></td><td  ><p>87.54</p></td></tr><tr><td class="firstcol " ><p><strong>TikTok (Portrait)</strong></p></td><td  ><p>4.57</p></td><td  ><p>2.56</p></td><td  ><p>11.70</p></td><td  ><p>76.94</p></td></tr></tbody></table></div><p>Looking at the results for the Z Fold 8 Ultra's cover display, and you'll see a couple of oddities. Both "X-Men 97" and the standard edition of "Avengers: Endgame" both took up 100% of the screen space. Which is certainly good, though this made me pause and wonder what's going on.</p><p>Checking the measurements of the cover display versus the iPhone 17 Pro Max, and I noticed that the video was actually smaller on the iPhone — despite the fact the 17 Pro Max has almost 2.5 extra square inches of available screen space.</p><p>Weirder still was the fact that my Google-purchased copy of "X-Men" was smaller than "Endgame," taking up a paltry 53.19% of the screen. They were both the same size on the iPhone, but the Z Fold 8 Ultra decided that the black bars must be preserved for this particular movie. This appears to be a YouTube issue, because X-Men on Disney Plus expanded to the full size of the display, just like Endgame did.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3121px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="Jgg4hgUCgAxuobyisY5PTe" name="Z Fold 8 ultra video size shots-7" alt="samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max" src="https://cdn.mos.cms.futurecdn.net/Jgg4hgUCgAxuobyisY5PTe-1920-80.jpg" mos="" align="middle" fullscreen="" width="3121" height="1756" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The IMAX version of Endgame obviously came out a little worse, since the taller image requires more space than the 8 Ultra's cover display allows — causing black bars at either side of the screen. That said, it still used up 87.54% of the available screen.</p><p>16:9 content like "The Emperor's New Groove" fared a lot worse here, though, since the narrow screen forced the video to shrink at the edges even more than an IMAX movie. Likewise the design meant "Scrubs" left a load more wasted space thanks to its square-ish aspect ratio. Both videos used up a respective 71.55% and 57.74% of the available screen space.</p><p>As for TikTok, this result did surprise me. The vertical videos used up all the available width when playing, but they didn't take full advantage of the screen length. Which again, I assume is down to the 8 Ultra's narrow cover display, and means TikTok only used 76.94% of the available screen space.</p><h2 id="samsung-galaxy-z-fold-8-ultra-foldable-display-portrait">Samsung Galaxy Z Fold 8 Ultra Foldable Display (Portrait)</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3583px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="VdSKDACwu3ujopw3WSWnse" name="Z Fold 8 ultra video size shots-10" alt="samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max" src="https://cdn.mos.cms.futurecdn.net/VdSKDACwu3ujopw3WSWnse-1920-80.jpg" mos="" align="middle" fullscreen="" width="3583" height="2015" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Height (Inches)</strong></p></td><td  ><p><strong>Width (Inches)</strong></p></td><td  ><p><strong>Total (Sq Inch)</strong></p></td><td  ><p><strong>% Screen Used</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Screen</strong></p></td><td  ><p><strong>5.94</strong></p></td><td  ><p><strong>5.35</strong></p></td><td  ><p><strong>31.78</strong></p></td><td  ></td></tr><tr><td class="firstcol " ><p><strong>X-Men (YouTube)</strong></p></td><td  ><p>2.20</p></td><td  ><p>5.35</p></td><td  ><p>11.77</p></td><td  ><p>37.04</p></td></tr><tr><td class="firstcol " ><p><strong>X-Men-97 (D+)</strong></p></td><td  ><p>2.44</p></td><td  ><p>5.35</p></td><td  ><p>13.05</p></td><td  ><p>41.08</p></td></tr><tr><td class="firstcol " ><p><strong>The Emperor's New Groove (D+)</strong></p></td><td  ><p>2.99</p></td><td  ><p>5.03</p></td><td  ><p>15.04</p></td><td  ><p>47.33</p></td></tr><tr><td class="firstcol " ><p><strong>Scrubs (4:3/D+)</strong></p></td><td  ><p>4.01</p></td><td  ><p>5.35</p></td><td  ><p>21.45</p></td><td  ><p>67.51</p></td></tr><tr><td class="firstcol " ><p><strong>Avengers: Endgame (Regular/D+)</strong></p></td><td  ><p>2.24</p></td><td  ><p>5.35</p></td><td  ><p>11.98</p></td><td  ><p>37.71</p></td></tr><tr><td class="firstcol " ><p><strong>Avengers Endgame (IMAX/D+)</strong></p></td><td  ><p>2.99</p></td><td  ><p>5.35</p></td><td  ><p>16.00</p></td><td  ><p>50.34</p></td></tr><tr><td class="firstcol " ><p><strong>TikTok</strong></p></td><td  ><p>5.63</p></td><td  ><p>3.14</p></td><td  ><p>17.68</p></td><td  ><p>55.63</p></td></tr></tbody></table></div><p>The Z Fold 8 Ultra's larger display is the size of two cover displays side by side, which should mean a larger video to watch, right? Well, apparently not. At least not when the phone is in portrait mode. The size of the screen means there is a lot more wasted space, but the videos themselves aren't automatically bigger than they appear on the cover display either.</p><p>Both "X-Men-97" and the standard version of "Avengers: Endgame" ended up being smaller than their counterparts on the Ultra's cover display — in terms of height, width and overall area. Both used a respective 41.08% and 37.71% of the available screen space. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3915px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="kti5xxYn8KnniYz2kdTNwe" name="Z Fold 8 ultra video size shots-6" alt="samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max" src="https://cdn.mos.cms.futurecdn.net/kti5xxYn8KnniYz2kdTNwe-1920-80.jpg" mos="" align="middle" fullscreen="" width="3915" height="2202" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>That only worse performer was X-Men on YouTube, which used up 37.04% thanks to the way YouTube presents the video. That means almost two thirds of the screen is going unused. However, the video itself is larger than what I saw on the 8 Ultra's cover screen and the iPhone 17 Pro Max. So there is still a benefit to using the large screen. </p><p>There is an awful lot of wasted screen space watching in portrait mode. "The Emperor's New Groove" only used 47.33% of the screen, while the IMAX edition of "Endgame" took up just over half (50.34%). TikTok also suffered, using up 55.63% and showed off a video that was both shorter and wider than the one from the iPhone.</p><p>The major winner here is "Scrubs," thanks to the aspect ratio, which means it took up 67.51% of the screen and offered a much larger overall image than we've seen from it so far.</p><h2 id="samsung-galaxy-z-fold-8-ultra-foldable-display-landscape">Samsung Galaxy Z Fold 8 Ultra Foldable Display (Landscape)</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3527px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="MGCMuUBSp4HjqTYptkefge" name="Z Fold 8 ultra video size shots-5" alt="samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max" src="https://cdn.mos.cms.futurecdn.net/MGCMuUBSp4HjqTYptkefge-1920-80.jpg" mos="" align="middle" fullscreen="" width="3527" height="1984" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The key benefit to watching video in landscape mode is that the entirety of the display crease gets covered up by whatever you're watching, which makes it nearly impossible to see. The other main advantage to watching video this way is that the videos are larger (and less wasteful) than in portrait mode</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Height (Inches)</strong></p></td><td  ><p><strong>Width (Inches)</strong></p></td><td  ><p><strong>Total (Sq Inch)</strong></p></td><td  ><p><strong>% Screen Used</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Screen</strong></p></td><td  ><p><strong>5.35</strong></p></td><td  ><p><strong>5.94</strong></p></td><td  ><p><strong>31.78</strong></p></td><td  ></td></tr><tr><td class="firstcol " ><p><strong>X-Men (YouTube)</strong></p></td><td  ><p>2.48</p></td><td  ><p>5.94</p></td><td  ><p>14.73</p></td><td  ><p>46.36</p></td></tr><tr><td class="firstcol " ><p><strong>X-Men-97 (D+)</strong></p></td><td  ><p>2.68</p></td><td  ><p>5.94</p></td><td  ><p>15.92</p></td><td  ><p>50.09</p></td></tr><tr><td class="firstcol " ><p><strong>The Emperor's New Groove (D+)</strong></p></td><td  ><p>3.34</p></td><td  ><p>5.55</p></td><td  ><p>18.54</p></td><td  ><p>58.33</p></td></tr><tr><td class="firstcol " ><p><strong>Scrubs (4:3/D+)</strong></p></td><td  ><p>4.48</p></td><td  ><p>5.94</p></td><td  ><p>26.61</p></td><td  ><p>83.74</p></td></tr><tr><td class="firstcol " ><p><strong>Avengers: Endgame (Regular/D+)</strong></p></td><td  ><p>2.48</p></td><td  ><p>5.94</p></td><td  ><p>14.73</p></td><td  ><p>46.36</p></td></tr><tr><td class="firstcol " ><p><strong>Avengers Endgame (IMAX/D+)</strong></p></td><td  ><p>3.15</p></td><td  ><p>5.94</p></td><td  ><p>18.71</p></td><td  ><p>58.88</p></td></tr><tr><td class="firstcol " ><p><strong>TikTok </strong></p></td><td  ><p>5.00</p></td><td  ><p>2.83</p></td><td  ><p>14.15</p></td><td  ><p>44.53</p></td></tr></tbody></table></div><p>The biggest winner is again, "Scrubs," or any other older TV show that was filmed with a 4:3 aspect ratio. The show took up 83.74% of the total screen space, over 16% more than it did in portrait mode. This obviously means that the video is noticeably larger, though the standard definition image does not look great if you're getting up close with the screen.</p><p>Most of the other videos take full advantage of the extra width, with the only exception being "The Emperor's New Groove," which is about 0.4-inches narrower. However the extra height afforded to  16:9 movie means it uses up 58.33% of the screen, compared to the 46.46% utilized by X-Men and the standard version of "Avengers: Endgame."</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3604px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="X2djLcD7k7Z3wXX62M8fxe" name="Z Fold 8 ultra video size shots-8" alt="samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max" src="https://cdn.mos.cms.futurecdn.net/X2djLcD7k7Z3wXX62M8fxe-1920-80.jpg" mos="" align="middle" fullscreen="" width="3604" height="2027" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>"X-Men-97" is 0.2-inches taller in this configuration, meaning its total raises to 50.09%, while the IMAX enhanced edition of "Endgame" fills up 58.88% on account of its extra height.</p><p>The only real loser here is TikTok, which is shorter and narrower in landscape mode, and wastes an extra 11% of the screen compared to portrait mode. That also makes sense, since this orientation is wider than it is long, and that means the vertical videos get squashed down compared to viewing in portrait mode.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-WnnvjW"></div>                            </div>                            <script src="https://kwizly.com/embed/WnnvjW.js" async=""></script><h2 id="verdict">Verdict</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="k8FeDxnevUPmLReuywiMxe" name="Z Fold 8 ultra video size shots-4" alt="samsung galaxy z fold 8 ultra screen size comparison vs iphone 17 pro max" src="https://cdn.mos.cms.futurecdn.net/k8FeDxnevUPmLReuywiMxe-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>With the exception of TikTok, landscape mode actually seems to have the largest overall video size of all four display configurations, barring one. The way "Avengers: Endgame" is presented on the cover display means it is slightly taller on the outer screen, by one tenth of an inch. </p><p>The cover display's aspect ratio means it seems to be uniquely suited to playing live action theatrical releases. Assuming the service you're using actually makes the most of the space, and doesn't do what YouTube did with my copy of X-Men and squashes the whole thing down for no reason.</p><p>As for TikTok, it's clear that the Z Fold 8 Ultra's foldable display is not as well-suited to vertical video as non-folding screens. Likewise, those of you that are bothered about black areas of screen around your video, you may want to avoid foldables for the time being. If you need a larger image to watch, you should probably invest in some kind of tablet. </p><p>But now the one question I have is this: How different would the results have been if I'd had a <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Galaxy Z Fold 8</a> to compare everything to? Samsung has positioned the passport-shaped device as the ideal device for streaming and media after all, but that face-off is going to have to wait.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom’s Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/samsung-phones/i-used-a-thermal-camera-to-see-how-hot-the-galaxy-z-fold-8-ultra-gets-compared-to-the-galaxy-s26-ultra-heres-what-happened">I used a thermal camera to see how hot the Galaxy Z Fold 8 Ultra gets compared to the Galaxy S26 Ultra — here's what happened</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra">I tested the Samsung Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra for 2 weeks — here’s the one I’d buy</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/i-just-tried-the-new-samsung-dex-on-the-galaxy-z-fold-8-and-it-has-one-huge-upgrade">I just tried the new Samsung DeX on the Galaxy Z Fold 8 — and it has one huge upgrade</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ How ‘Ultra’ are the Galaxy Z Fold 8 Ultra's cameras? I put them to the test against the Galaxy S26 Ultra ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Samsung’s been making its “Ultra” phones for years under the Galaxy S banner, but this year marks the first time the title is being used for a foldable phone. Needless to say, Samsung is trying to change the narrative with the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Galaxy Z Fold 8 Ultra</a> — by slapping its premier "Ultra" badge on a foldable for the very first time.</p><p>On paper, it packs the flagship hardware specs that I know appeal to hardcore fans who’ve remained faithful to the Galaxy S line for years, including the same 200MP main sensor as the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review">Galaxy S26 Ultra</a>. But when you’re paying a massive premium for a phone that folds, the cameras can’t come up short against the traditional slab flagship.</p><p>There are valid reasons why Samsung’s primary flagship remains the <a href="https://www.tomsguide.com/us/best-phone-cameras,review-2272.html">best camera phone</a> around, armed with a quadruple camera setup that includes two telephoto lenses — whereas the Z Fold 8 Ultra comes with just a single telephoto lens with a shorter optical range. To see if Samsung’s newest foldable genuinely earns its name, I captured side-by-side photo sets with both the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra">Galaxy Z Fold 8 Ultra and the Galaxy S26 Ultra</a>. Here’s what I found.</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-camera-specifications"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Camera specifications</span></h2><div ><table><tbody><tr><td class="firstcol " ><p><strong></strong></p></td><td  ><p><strong>Galaxy Z Fold 8 Ultra</strong></p></td><td  ><p><strong>Galaxy S26 Ultra</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Main Camera</strong></p></td><td  ><p>200MP (f/1.7)</p></td><td  ><p>200MP (f/1.4)</p></td></tr><tr><td class="firstcol " ><p><strong>Ultrawide Camera</strong></p></td><td  ><p>50MP (f/1.9)</p></td><td  ><p>50MP (f/1.9)</p></td></tr><tr><td class="firstcol " ><p><strong>Telephoto Cameras</strong></p></td><td  ><p>• 10MP 3x telephoto (f/2.4)</p></td><td  ><p>• 10MP 3x telephoto (f/2.4)</p><p>• 50MP 5x telephoto (f/2.9)</p></td></tr><tr><td class="firstcol " ><p><strong>Zoom Range</strong></p></td><td  ><p>Up to 30x Space Zoom</p></td><td  ><p>Up to 100x Space Zoom</p></td></tr><tr><td class="firstcol " ><p><strong>Selfie Cameras</strong></p></td><td  ><p>10MP Cover Screen (f/2.2) + 10 MP Inner Display (f/2.2)</p></td><td  ><p>12MP (f2.2)</p></td></tr></tbody></table></div><p>What’s really fascinating when looking at the specs alone is that the cameras are not entirely identical. Despite both devices sharing a 200MP resolution for their main sensors and a 50MP (f/1.9) ultrawide camera, the Galaxy S26 Ultra technically holds an edge in optical range and low-light capabilities.</p><p>For starters, the S26 Ultra features a wider f/1.4 aperture compared to the Z Fold 8 Ultra’s f/1.7, allowing more light to enter the sensor — which should result in better low-light performance, less noise, and blur-free action shots.</p><p>Over in the telephoto department, the S26 Ultra also benefits from dual telephoto lenses, complete with a superior 50MP sensor featuring 5x optical zoom. In contrast, the newer Z Fold 8 Ultra relies on just a single 10MP telephoto camera with a shorter 3x optical zoom. These specs alone tell me there’s no way the Z Fold 8 Ultra is going to match the S26 Ultra in sheer telephoto performance.</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-200mp-high-resolution"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: 200MP high resolution</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/cvvbtvqXhuKNV5PsiYQDfF-1920-80.jpg" alt="Samsung Galaxy Z Fold 8 Ultra camera sample." /><figcaption>Galaxy Z Fold 8 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/8rSb7RZZHv5rRpcnryAM5d-1920-80.jpg" alt="Samsung Galaxy S26 Ultra camera sample." /><figcaption>Galaxy S26 Ultra.<small role="credit">Future</small></figcaption></figure></figure><p>These first two shots illustrate the amount of detail captured when set to their maximum 200MP photo option. Not only do both produce massive file sizes, but the differences between them appear minimal at first glance. Looking at the full scene, it’s great that both phones balance the exposure evenly, though the S26 Ultra is slightly brighter in the shadows.</p><p>Zooming in, however, reveals that the Z Fold 8 Ultra retains sharper details and definition almost everywhere. From the base of the tree to the ornate floral arrangement hanging over the terrace in the background, I’d give this round to the Z Fold 8 Ultra.</p><p><strong>Winner:</strong> Galaxy Z Fold 8 Ultra</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-colors"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Colors</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/BKQv5NjgvAqWQGAzbbDNsi-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy Z Fold 8 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/Tbcsv6heCjtKjWPzdCbZsi-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy S26 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>Judging by color performance alone, both phones deliver vibrant shots of the flower arrangement inside Whole Foods.</p><p>While the S26 Ultra has a penchant for a warmer color temperature — evident in how the pink flowers take on a slightly orange tone — the Z Fold 8 Ultra’s shot isn’t too far off, albeit not quite as warm. Still, neither phone clearly outperforms the other when it comes to color rendering here.</p><p><strong>Winner:</strong> tie</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-ultrawide"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Ultrawide</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/bawxTFUiEstaXNAb2AR6hF-1920-80.jpg" alt="Samsung Galaxy Z Fold 8 Ultra camera sample." /><figcaption>Galaxy Z Fold 8 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/rNrVsvsoJRZYHsByiKvHoV-1920-80.jpg" alt="Samsung Galaxy S26 Ultra camera sample." /><figcaption>Galaxy S26 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>Given that both phones share identical 50MP (f/1.9) ultrawide cameras, I’m not surprised that this wide shot of Bryant Park is almost too close to call. Both devices capture impressive sharpness across the frame with minimal distortion around the edges.</p><p>However, looking closely at the lighting dynamics, the Galaxy S26 Ultra handles exposure and shadows slightly better — a trend I previously noted in the 200MP test. Notice how the people seated in the foreground have better visibility and contrast on the S26 Ultra, whereas the Z Fold 8 Ultra pulls a bit more shadow detail at the expense of a somewhat flatter tone.</p><p>Once again, it's a narrow victory, but the S26 Ultra takes it thanks to its superior dynamic range.</p><p><strong>Winner: </strong>Galaxy S26 Ultra</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-dynamic-range"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Dynamic Range</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/bDSoaB6YXxuXKoTqHU3TfF-1920-80.jpg" alt="Samsung Galaxy Z Fold 8 Ultra camera sample." /><figcaption>Galaxy Z Fold 8 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/MmwGZtHYFfdU4SzBWyJnmV-1920-80.jpg" alt="Samsung Galaxy S26 Ultra camera sample." /><figcaption>Galaxy S26 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>With the sun coming from behind, the background and sky are much brighter than the metal statue sitting in the shadow — a setup that clearly reveals how their dynamic range performances differ.</p><p>I’m initially drawn to the Galaxy Z Fold 8 Ultra’s punchier overall shot, which is largely due to how it boosts contrast. Doing so, however, comes at the expense of the highlights in the trees and the glass building in the background.</p><p>On the other hand, the Galaxy S26 Ultra exhibits superior dynamic range. It manages to tone down the harsh highlights on the metal statue while pulling up subtle details in the darker foliage and shadowed steps along the bottom left. Ultimately, the S26 Ultra achieves a more balanced, natural exposure without blowing out the brightest areas or over-darkening the shadows.</p><p><strong>Winner: </strong>Galaxy S26 Ultra</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-portrait"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Portrait</span></h2><iframe allow="" height="395" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=b187e00e-91d0-11f1-ba1b-0e6f42328d7d"></iframe><p>At first glance, I don’t notice a whole lot of difference in the way they approach portrait shots, as both apply just the right amount of bokeh to blur the background while preserving clean edge separation around my colleague, <a href="https://www.tomsguide.com/author/mark-spoonauer">Mark Spoonauer</a>.</p><p>The Galaxy Z Fold 8 Ultra produces a natural skin tone and plenty of fine detail across Mark’s face and shirt. However, closer inspection reveals that there are sharper details captured by the Galaxy S26 Ultra’s portrait shot. Most noticeably, the fabric of his shirt and the stitching around his pocket show superior definition.</p><p><strong>Winner:</strong> Galaxy S26 Ultra</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-selfie"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Selfie</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/e8xVg6WGnZz9BPZSEvcrni-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy Z Fold 8 Ultra - Front camera<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/2jRFCRn8ANYoQ8b5WJRcoi-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy S26 Ultra<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>The S26 Ultra has a slight advantage on paper for taking selfies thanks to its 12MP front camera. The Z Fold 8 Ultra features dual 10MP selfie shooters, but for this test, I’m specifically comparing the cover screen camera.</p><p>It’s a very close call, though, with neither phone clearly outperforming the other. I really like the amount of sharp detail both capture across Mark’s face, as well as the texture of his shirt. Meanwhile, both devices manage to lift the exposure nicely in the shaded areas in the background.</p><p><strong>Winner:</strong> tie</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-low-light"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Low light</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/3uREWtvkGoHw9vP6mPBsGF-1920-80.jpg" alt="Samsung Galaxy Z Fold 8 Ultra camera sample." /><figcaption>Galaxy Z Fold 8 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/nvYuSJhn6iiHxBXuiJCEcV-1920-80.jpg" alt="Samsung Galaxy S26 Ultra camera sample." /><figcaption>Galaxy S26 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>When shooting in dimly lit conditions, the main sensor aperture specs show their real-world impact. The Galaxy S26 Ultra’s wider f/1.4 aperture pulls in significantly more light than the Z Fold 8 Ultra’s f/1.7 lens, creating a slightly brighter scene overall.</p><p>Looking at the backyard patio shot, the Galaxy S26 Ultra does a much better job illuminating the white fence in the background, the lawn, and the texture of the patio pavers.</p><p>Don’t get me wrong, the Galaxy Z Fold 8 Ultra still produces an excellent low-light photo that brightens an otherwise dark scene, but those same background areas remain darker and cast heavier shadows around the base of the chairs and side table. Thanks to its wider aperture, the S26 Ultra also retains cleaner details across the patio furniture without introducing excessive noise.</p><p><strong>Winner: </strong>Galaxy S26 Ultra</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-telephoto"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Telephoto</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/j6MuaLqukbwjyN32Z4TfZF-1920-80.jpg" alt="Samsung Galaxy Z Fold 8 Ultra camera sample." /><figcaption>Galaxy Z Fold 8 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/CEqvfgE3Etv4t8D7jWbPiV-1920-80.jpg" alt="Samsung Galaxy S26 Ultra camera sample." /><figcaption>Galaxy S26 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/fVsU3F4aDfFac9ZQGj9wMF-1920-80.jpg" alt="Samsung Galaxy Z Fold 8 Ultra camera sample." /><figcaption>Galaxy Z Fold 8 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/WUWwCqzw5XMCMJbtVZGhgV-1920-80.jpg" alt="Samsung Galaxy S26 Ultra camera sample." /><figcaption>Galaxy S26 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/dpLtDThSHF5E4Qfuxs8ZGF-1920-80.jpg" alt="Samsung Galaxy Z Fold 8 Ultra camera sample." /><figcaption>Galaxy Z Fold 8 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/xTwrPNttz9jRWzYW7cn5cV-1920-80.jpg" alt="Samsung Galaxy S26 Ultra camera sample." /><figcaption>Galaxy S26 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>Where I find the most substantial difference between them is in their telephoto performance. At shorter distances, they deliver nearly identical results, but the shots above of the ice cream truck show how the Galaxy S26 Ultra offers true Ultra-level performance.</p><p>Comparing them across 5x, 10x, and 30x zoom levels highlights the clear advantage of the Galaxy S26 Ultra’s setup. At 5x zoom, both phones capture solid shots of the ice cream truck menu, but the S26 Ultra renders crisper text across the menu labels with less digital noise.</p><p>The divide widens significantly at 10x: the S26 Ultra retains sharp edges, vibrant contrast, and legible text on the menu options. To capture the same framing, the Z Fold 8 Ultra relies on digital cropping from its single 10MP 3x telephoto lens, leaving the 10x image noticeably softer with smoother, watercolor-like textures.</p><iframe allow="" height="395" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=3ddb19aa-91d0-11f1-ba1b-0e6f42328d7d"></iframe><p>Finally, at 30x zoom, the S26 Ultra’s superior optical hardware gives its image processing far better detail to work with. The text labels under each ice cream cone remain surprisingly readable, whereas the Z Fold 8 Ultra’s 30x crop produces blurred text and blob-like details.</p><p><strong>Winner: </strong>Galaxy S26 Ultra</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-verdict"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Verdict</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3506px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="A6iyDHHwEjWBJKYW5FPrpW" name="Samsung Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra" alt="Samsung Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra" src="https://cdn.mos.cms.futurecdn.net/A6iyDHHwEjWBJKYW5FPrpW-1920-80.jpg" mos="" align="middle" fullscreen="" width="3506" height="1972" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>While the Galaxy Z Fold 8 Ultra proves that foldable cameras are no longer scaled-down afterthoughts, I wouldn’t say it has completely earned the "Ultra" crown across the board. For a phone bearing Samsung’s most prestigious naming convention, it can’t afford to come up short in any category — yet it still does.</p><p>The Galaxy S26 Ultra remains the undisputed camera king of Samsung's lineup. Thanks to the wider f/1.4 aperture of its main camera and its dedicated 50MP 5x periscope lens, the S26 Ultra consistently pulls ahead in the areas that separate the good from the great: low-light environments, dynamic range handling, and long-range telephoto zoom. If you want the absolute best camera results, the S26 Ultra is still the phone to get.</p><p>However, if you want the versatility of a foldable, the Z Fold 8 Ultra gets dangerously close in several areas. Still, falling short in low-light and telephoto performance is a tough pill to swallow considering the staggering price tag attached to Samsung's newest foldable.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-WQwPpX"></div>                            </div>                            <script src="https://kwizly.com/embed/WQwPpX.js" async=""></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom’s Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-vs-fold-8-ultra-camera-test-is-the-telephoto-zoom-worth-the-extra-usd200">Galaxy Z Fold 8 vs. Fold 8 Ultra camera zoom test: Don't spend the extra $200 until you see this</a></li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/this-is-the-pixel-11-pro-fold-and-this-is-when-pre-orders-officially-start">This is the Pixel 11 Pro Fold — and this is when pre-orders officially start</a></li><li><a href="https://www.tomsguide.com/phones/i-asked-siri-ai-and-gemini-a-series-of-increasingly-bizarre-questions-to-see-how-they-responded-heres-what-happened">I asked Siri AI and Gemini a series of increasingly bizarre questions to see how they responded —here's what happened</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/how-ultra-are-the-galaxy-z-fold-8-ultras-cameras-i-put-them-to-the-test-against-the-galaxy-s26-ultra</link>
                                                                            <description>
                            <![CDATA[ I put the Galaxy Z Fold 8 Ultra to the test against the Galaxy S26 Ultra to see if its camera performance is "Ultra" worthy. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">UbrWxZnit2QxzjJm7UmYiG</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/TnA5425ZLKYYYgLYV3DJDG-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 08 Aug 2026 09:15:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ john.velasco@futurenet.com (John Velasco) ]]></author>                    <dc:creator><![CDATA[ John Velasco ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/TSj224oX8d5ERXaDs8pDGd-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/TnA5425ZLKYYYgLYV3DJDG-1920-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Samsung Galaxy Z Fold 8 Ultra and Galaxy S26 Ultra rear cameras]]></media:description>                                                            <media:text><![CDATA[Samsung Galaxy Z Fold 8 Ultra and Galaxy S26 Ultra rear cameras]]></media:text>
                                <media:title type="plain"><![CDATA[Samsung Galaxy Z Fold 8 Ultra and Galaxy S26 Ultra rear cameras]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/TnA5425ZLKYYYgLYV3DJDG-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Samsung’s been making its “Ultra” phones for years under the Galaxy S banner, but this year marks the first time the title is being used for a foldable phone. Needless to say, Samsung is trying to change the narrative with the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Galaxy Z Fold 8 Ultra</a> — by slapping its premier "Ultra" badge on a foldable for the very first time.</p><p>On paper, it packs the flagship hardware specs that I know appeal to hardcore fans who’ve remained faithful to the Galaxy S line for years, including the same 200MP main sensor as the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review">Galaxy S26 Ultra</a>. But when you’re paying a massive premium for a phone that folds, the cameras can’t come up short against the traditional slab flagship.</p><p>There are valid reasons why Samsung’s primary flagship remains the <a href="https://www.tomsguide.com/us/best-phone-cameras,review-2272.html">best camera phone</a> around, armed with a quadruple camera setup that includes two telephoto lenses — whereas the Z Fold 8 Ultra comes with just a single telephoto lens with a shorter optical range. To see if Samsung’s newest foldable genuinely earns its name, I captured side-by-side photo sets with both the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra">Galaxy Z Fold 8 Ultra and the Galaxy S26 Ultra</a>. Here’s what I found.</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-camera-specifications"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Camera specifications</span></h2><div ><table><tbody><tr><td class="firstcol " ><p><strong></strong></p></td><td  ><p><strong>Galaxy Z Fold 8 Ultra</strong></p></td><td  ><p><strong>Galaxy S26 Ultra</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Main Camera</strong></p></td><td  ><p>200MP (f/1.7)</p></td><td  ><p>200MP (f/1.4)</p></td></tr><tr><td class="firstcol " ><p><strong>Ultrawide Camera</strong></p></td><td  ><p>50MP (f/1.9)</p></td><td  ><p>50MP (f/1.9)</p></td></tr><tr><td class="firstcol " ><p><strong>Telephoto Cameras</strong></p></td><td  ><p>• 10MP 3x telephoto (f/2.4)</p></td><td  ><p>• 10MP 3x telephoto (f/2.4)</p><p>• 50MP 5x telephoto (f/2.9)</p></td></tr><tr><td class="firstcol " ><p><strong>Zoom Range</strong></p></td><td  ><p>Up to 30x Space Zoom</p></td><td  ><p>Up to 100x Space Zoom</p></td></tr><tr><td class="firstcol " ><p><strong>Selfie Cameras</strong></p></td><td  ><p>10MP Cover Screen (f/2.2) + 10 MP Inner Display (f/2.2)</p></td><td  ><p>12MP (f2.2)</p></td></tr></tbody></table></div><p>What’s really fascinating when looking at the specs alone is that the cameras are not entirely identical. Despite both devices sharing a 200MP resolution for their main sensors and a 50MP (f/1.9) ultrawide camera, the Galaxy S26 Ultra technically holds an edge in optical range and low-light capabilities.</p><p>For starters, the S26 Ultra features a wider f/1.4 aperture compared to the Z Fold 8 Ultra’s f/1.7, allowing more light to enter the sensor — which should result in better low-light performance, less noise, and blur-free action shots.</p><p>Over in the telephoto department, the S26 Ultra also benefits from dual telephoto lenses, complete with a superior 50MP sensor featuring 5x optical zoom. In contrast, the newer Z Fold 8 Ultra relies on just a single 10MP telephoto camera with a shorter 3x optical zoom. These specs alone tell me there’s no way the Z Fold 8 Ultra is going to match the S26 Ultra in sheer telephoto performance.</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-200mp-high-resolution"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: 200MP high resolution</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/cvvbtvqXhuKNV5PsiYQDfF-1920-80.jpg" alt="Samsung Galaxy Z Fold 8 Ultra camera sample." /><figcaption>Galaxy Z Fold 8 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/8rSb7RZZHv5rRpcnryAM5d-1920-80.jpg" alt="Samsung Galaxy S26 Ultra camera sample." /><figcaption>Galaxy S26 Ultra.<small role="credit">Future</small></figcaption></figure></figure><p>These first two shots illustrate the amount of detail captured when set to their maximum 200MP photo option. Not only do both produce massive file sizes, but the differences between them appear minimal at first glance. Looking at the full scene, it’s great that both phones balance the exposure evenly, though the S26 Ultra is slightly brighter in the shadows.</p><p>Zooming in, however, reveals that the Z Fold 8 Ultra retains sharper details and definition almost everywhere. From the base of the tree to the ornate floral arrangement hanging over the terrace in the background, I’d give this round to the Z Fold 8 Ultra.</p><p><strong>Winner:</strong> Galaxy Z Fold 8 Ultra</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-colors"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Colors</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/BKQv5NjgvAqWQGAzbbDNsi-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy Z Fold 8 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/Tbcsv6heCjtKjWPzdCbZsi-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy S26 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>Judging by color performance alone, both phones deliver vibrant shots of the flower arrangement inside Whole Foods.</p><p>While the S26 Ultra has a penchant for a warmer color temperature — evident in how the pink flowers take on a slightly orange tone — the Z Fold 8 Ultra’s shot isn’t too far off, albeit not quite as warm. Still, neither phone clearly outperforms the other when it comes to color rendering here.</p><p><strong>Winner:</strong> tie</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-ultrawide"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Ultrawide</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/bawxTFUiEstaXNAb2AR6hF-1920-80.jpg" alt="Samsung Galaxy Z Fold 8 Ultra camera sample." /><figcaption>Galaxy Z Fold 8 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/rNrVsvsoJRZYHsByiKvHoV-1920-80.jpg" alt="Samsung Galaxy S26 Ultra camera sample." /><figcaption>Galaxy S26 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>Given that both phones share identical 50MP (f/1.9) ultrawide cameras, I’m not surprised that this wide shot of Bryant Park is almost too close to call. Both devices capture impressive sharpness across the frame with minimal distortion around the edges.</p><p>However, looking closely at the lighting dynamics, the Galaxy S26 Ultra handles exposure and shadows slightly better — a trend I previously noted in the 200MP test. Notice how the people seated in the foreground have better visibility and contrast on the S26 Ultra, whereas the Z Fold 8 Ultra pulls a bit more shadow detail at the expense of a somewhat flatter tone.</p><p>Once again, it's a narrow victory, but the S26 Ultra takes it thanks to its superior dynamic range.</p><p><strong>Winner: </strong>Galaxy S26 Ultra</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-dynamic-range"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Dynamic Range</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/bDSoaB6YXxuXKoTqHU3TfF-1920-80.jpg" alt="Samsung Galaxy Z Fold 8 Ultra camera sample." /><figcaption>Galaxy Z Fold 8 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/MmwGZtHYFfdU4SzBWyJnmV-1920-80.jpg" alt="Samsung Galaxy S26 Ultra camera sample." /><figcaption>Galaxy S26 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>With the sun coming from behind, the background and sky are much brighter than the metal statue sitting in the shadow — a setup that clearly reveals how their dynamic range performances differ.</p><p>I’m initially drawn to the Galaxy Z Fold 8 Ultra’s punchier overall shot, which is largely due to how it boosts contrast. Doing so, however, comes at the expense of the highlights in the trees and the glass building in the background.</p><p>On the other hand, the Galaxy S26 Ultra exhibits superior dynamic range. It manages to tone down the harsh highlights on the metal statue while pulling up subtle details in the darker foliage and shadowed steps along the bottom left. Ultimately, the S26 Ultra achieves a more balanced, natural exposure without blowing out the brightest areas or over-darkening the shadows.</p><p><strong>Winner: </strong>Galaxy S26 Ultra</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-portrait"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Portrait</span></h2><iframe allow="" height="395" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=b187e00e-91d0-11f1-ba1b-0e6f42328d7d"></iframe><p>At first glance, I don’t notice a whole lot of difference in the way they approach portrait shots, as both apply just the right amount of bokeh to blur the background while preserving clean edge separation around my colleague, <a href="https://www.tomsguide.com/author/mark-spoonauer">Mark Spoonauer</a>.</p><p>The Galaxy Z Fold 8 Ultra produces a natural skin tone and plenty of fine detail across Mark’s face and shirt. However, closer inspection reveals that there are sharper details captured by the Galaxy S26 Ultra’s portrait shot. Most noticeably, the fabric of his shirt and the stitching around his pocket show superior definition.</p><p><strong>Winner:</strong> Galaxy S26 Ultra</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-selfie"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Selfie</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/e8xVg6WGnZz9BPZSEvcrni-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy Z Fold 8 Ultra - Front camera<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/2jRFCRn8ANYoQ8b5WJRcoi-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy S26 Ultra<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>The S26 Ultra has a slight advantage on paper for taking selfies thanks to its 12MP front camera. The Z Fold 8 Ultra features dual 10MP selfie shooters, but for this test, I’m specifically comparing the cover screen camera.</p><p>It’s a very close call, though, with neither phone clearly outperforming the other. I really like the amount of sharp detail both capture across Mark’s face, as well as the texture of his shirt. Meanwhile, both devices manage to lift the exposure nicely in the shaded areas in the background.</p><p><strong>Winner:</strong> tie</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-low-light"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Low light</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/3uREWtvkGoHw9vP6mPBsGF-1920-80.jpg" alt="Samsung Galaxy Z Fold 8 Ultra camera sample." /><figcaption>Galaxy Z Fold 8 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/nvYuSJhn6iiHxBXuiJCEcV-1920-80.jpg" alt="Samsung Galaxy S26 Ultra camera sample." /><figcaption>Galaxy S26 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>When shooting in dimly lit conditions, the main sensor aperture specs show their real-world impact. The Galaxy S26 Ultra’s wider f/1.4 aperture pulls in significantly more light than the Z Fold 8 Ultra’s f/1.7 lens, creating a slightly brighter scene overall.</p><p>Looking at the backyard patio shot, the Galaxy S26 Ultra does a much better job illuminating the white fence in the background, the lawn, and the texture of the patio pavers.</p><p>Don’t get me wrong, the Galaxy Z Fold 8 Ultra still produces an excellent low-light photo that brightens an otherwise dark scene, but those same background areas remain darker and cast heavier shadows around the base of the chairs and side table. Thanks to its wider aperture, the S26 Ultra also retains cleaner details across the patio furniture without introducing excessive noise.</p><p><strong>Winner: </strong>Galaxy S26 Ultra</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-telephoto"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Telephoto</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/j6MuaLqukbwjyN32Z4TfZF-1920-80.jpg" alt="Samsung Galaxy Z Fold 8 Ultra camera sample." /><figcaption>Galaxy Z Fold 8 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/CEqvfgE3Etv4t8D7jWbPiV-1920-80.jpg" alt="Samsung Galaxy S26 Ultra camera sample." /><figcaption>Galaxy S26 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/fVsU3F4aDfFac9ZQGj9wMF-1920-80.jpg" alt="Samsung Galaxy Z Fold 8 Ultra camera sample." /><figcaption>Galaxy Z Fold 8 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/WUWwCqzw5XMCMJbtVZGhgV-1920-80.jpg" alt="Samsung Galaxy S26 Ultra camera sample." /><figcaption>Galaxy S26 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/dpLtDThSHF5E4Qfuxs8ZGF-1920-80.jpg" alt="Samsung Galaxy Z Fold 8 Ultra camera sample." /><figcaption>Galaxy Z Fold 8 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/xTwrPNttz9jRWzYW7cn5cV-1920-80.jpg" alt="Samsung Galaxy S26 Ultra camera sample." /><figcaption>Galaxy S26 Ultra.<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>Where I find the most substantial difference between them is in their telephoto performance. At shorter distances, they deliver nearly identical results, but the shots above of the ice cream truck show how the Galaxy S26 Ultra offers true Ultra-level performance.</p><p>Comparing them across 5x, 10x, and 30x zoom levels highlights the clear advantage of the Galaxy S26 Ultra’s setup. At 5x zoom, both phones capture solid shots of the ice cream truck menu, but the S26 Ultra renders crisper text across the menu labels with less digital noise.</p><p>The divide widens significantly at 10x: the S26 Ultra retains sharp edges, vibrant contrast, and legible text on the menu options. To capture the same framing, the Z Fold 8 Ultra relies on digital cropping from its single 10MP 3x telephoto lens, leaving the 10x image noticeably softer with smoother, watercolor-like textures.</p><iframe allow="" height="395" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=3ddb19aa-91d0-11f1-ba1b-0e6f42328d7d"></iframe><p>Finally, at 30x zoom, the S26 Ultra’s superior optical hardware gives its image processing far better detail to work with. The text labels under each ice cream cone remain surprisingly readable, whereas the Z Fold 8 Ultra’s 30x crop produces blurred text and blob-like details.</p><p><strong>Winner: </strong>Galaxy S26 Ultra</p><h2 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-verdict"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Verdict</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3506px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="A6iyDHHwEjWBJKYW5FPrpW" name="Samsung Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra" alt="Samsung Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra" src="https://cdn.mos.cms.futurecdn.net/A6iyDHHwEjWBJKYW5FPrpW-1920-80.jpg" mos="" align="middle" fullscreen="" width="3506" height="1972" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>While the Galaxy Z Fold 8 Ultra proves that foldable cameras are no longer scaled-down afterthoughts, I wouldn’t say it has completely earned the "Ultra" crown across the board. For a phone bearing Samsung’s most prestigious naming convention, it can’t afford to come up short in any category — yet it still does.</p><p>The Galaxy S26 Ultra remains the undisputed camera king of Samsung's lineup. Thanks to the wider f/1.4 aperture of its main camera and its dedicated 50MP 5x periscope lens, the S26 Ultra consistently pulls ahead in the areas that separate the good from the great: low-light environments, dynamic range handling, and long-range telephoto zoom. If you want the absolute best camera results, the S26 Ultra is still the phone to get.</p><p>However, if you want the versatility of a foldable, the Z Fold 8 Ultra gets dangerously close in several areas. Still, falling short in low-light and telephoto performance is a tough pill to swallow considering the staggering price tag attached to Samsung's newest foldable.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-WQwPpX"></div>                            </div>                            <script src="https://kwizly.com/embed/WQwPpX.js" async=""></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom’s Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-vs-fold-8-ultra-camera-test-is-the-telephoto-zoom-worth-the-extra-usd200">Galaxy Z Fold 8 vs. Fold 8 Ultra camera zoom test: Don't spend the extra $200 until you see this</a></li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/this-is-the-pixel-11-pro-fold-and-this-is-when-pre-orders-officially-start">This is the Pixel 11 Pro Fold — and this is when pre-orders officially start</a></li><li><a href="https://www.tomsguide.com/phones/i-asked-siri-ai-and-gemini-a-series-of-increasingly-bizarre-questions-to-see-how-they-responded-heres-what-happened">I asked Siri AI and Gemini a series of increasingly bizarre questions to see how they responded —here's what happened</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Is the Galaxy Z Fold 8's crease really that good? I compared it to the current reigning champ ]]></title>
                                                                                                <dc:content><![CDATA[ <p>While everybody has been talking about the new shape of the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Samsung Galaxy Z Fold 8</a>, and to be fair, it's been very pleasant to use, one of the most overlooked upgrades on Samsung's new book-style foldables is <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-ultra-doesnt-have-a-crease-free-display-but-its-the-closest-samsung-has-ever-got-to-one">the less noticeable crease</a>.</p><p>Samsung says it has significantly reduced the crease thanks to its new <a href="https://www.tomsguide.com/phones/samsung-phones/ive-seen-the-galaxy-z-fold-8s-flex-titanium-screen-and-apple-should-be-nervous">Flex Titanium</a> display technology, which debuts on both the Galaxy Z Fold 8 and the <a href="https://www.tomsguide.com/phones/samsung-phones/i-used-a-thermal-camera-to-see-how-hot-the-galaxy-z-fold-8-ultra-gets-compared-to-the-galaxy-s26-ultra-heres-what-happened">Galaxy Z Fold 8 Ultra</a>.</p><p>But is it actually enough to catch up with other foldable phones that already have less visible creases? Earlier this year, I <a href="https://www.tomsguide.com/phones/android-phones/i-have-been-testing-oppo-find-n6-crease-free-foldable-phone">came away impressed by the Oppo Find N6</a>, particularly because of how subtle its crease was. So, I compared the Galaxy Z Fold 8 against the Oppo Find N6 to see which one comes out on top.</p><div class="product"><a data-dimension112="b84ccd80-926d-11f1-8619-bd41a0cddc53" data-action="Deal Block" data-label="Galaxy Z Fold 8" data-dimension48="Galaxy Z Fold 8" data-dimension25="$1899" href="https://www.amazon.com/Samsung-Galaxy-Fold8-Unlocked-Graphite/dp/B0H126B3KV/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1327px;"><p class="vanilla-image-block" style="padding-top:64.28%;"><img id="9Rhpe6TtrVFSNo9Vtn27Tm" name="Galaxy Z Fold 8 Ultra deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/9Rhpe6TtrVFSNo9Vtn27Tm-1920-80.jpg" mos="" align="middle" fullscreen="" width="1327" height="853" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p>Samsung has a brand new kind of foldable with the passport-shaped Galaxy Z Fold 8. This foldable comes with a 7.6-inch folding display, with 4:3 aspect ratio that's designed for viewing video content.. There's also a 5.5-inch cover display, strong performance and battery life, plus a pair of great cameras on the back.</p><p>Buy the Z Fold 8 from Amazon now and you'll get a $350 voucher thrown in as well.<a class="view-deal button" href="https://www.amazon.com/Samsung-Galaxy-Fold8-Unlocked-Graphite/dp/B0H126B3KV/" target="_blank" rel="nofollow" data-dimension112="b84ccd80-926d-11f1-8619-bd41a0cddc53" data-action="Deal Block" data-label="Galaxy Z Fold 8" data-dimension48="Galaxy Z Fold 8" data-dimension25="$1899">View Deal</a></p></div><h2 id="can-samsung-match-oppo-s-zero-feel-crease">Can Samsung match Oppo's "Zero-Feel" crease? </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="JTcFhBxyXam8DFnAzF5RK5" name="z-fold-8-vs-oppo-find-n6-crease-1" alt="Comparing the crease of the Samsung Galaxy Z Fold 8 vs. Oppo Find N6" src="https://cdn.mos.cms.futurecdn.net/JTcFhBxyXam8DFnAzF5RK5-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>When Oppo announced the Find N6 earlier this year, one of the biggest talking points was its "zero-feel" crease. The company claimed it had reduced the crease to the point where you could barely see or even feel it while using the phone. </p><p>Having gone hands-on with the device, I can confirm that claim wasn't just marketing hype. The crease really was impressively subtle. Naturally, that made me even more curious to see what Samsung had done with the Galaxy Z Fold 8.</p><p>To compare the two, I placed the Galaxy Z Fold 8 and the Oppo Find N6 side by side under the same lighting conditions. I looked at both phones with the displays turned on and off, viewed them from multiple angles, and repeatedly ran my finger across each crease to compare how they looked and, perhaps more importantly, how they felt. </p><p>Right away, it became obvious that the two companies have taken very different approaches. </p><p>Samsung says its new <a href="https://www.tomsguide.com/phones/samsung-phones/ive-seen-the-galaxy-z-fold-8s-flex-titanium-screen-and-apple-should-be-nervous">Flex Titanium display technology</a> redesigns the folding display to reduce the crease. However, structurally, the Galaxy Z Fold 8 is still the same as previous generations, with a single, clearly defined crease running down the middle of the display. </p><p>It's much shallower than on previous Galaxy Fold devices, but it's still easy to spot under direct light. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="xSi6UvtEUxGpjacaJfhQR5" name="z-fold-8-vs-oppo-find-n6-crease-3" alt="Comparing the crease of the Samsung Galaxy Z Fold 8 vs. Oppo Find N6" src="https://cdn.mos.cms.futurecdn.net/xSi6UvtEUxGpjacaJfhQR5-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>The Oppo Find N6, on the other hand, looks quite different. Rather than one defined crease, the center of the display appears more like a series of tiny ripples. Neither phone hides the crease completely, but the two companies have clearly taken different approaches. </p><p>To be honest, I don't think either phone has a huge visual advantage when the displays are turned off. How visible the crease is depends almost entirely on the lighting and the angle you're looking at the screen from.</p><p>Where I did notice a difference was in how the crease feels. Running my finger across the Galaxy Z Fold 8, I could still feel a fairly noticeable dip before reaching the other side of the display.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Mxpj35cmMMyeokyzLdF9e5" name="z-fold-8-vs-oppo-find-n6-crease-4" alt="Comparing the crease of the Samsung Galaxy Z Fold 8 vs. Oppo Find N6" src="https://cdn.mos.cms.futurecdn.net/Mxpj35cmMMyeokyzLdF9e5-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>The Oppo Find N6 feels different. Instead of one distinct crease, your finger glides across a series of much subtler ripples. The transition is smoother overall, and if you aren't deliberately looking for it, you barely notice the crease. </p><p>With the displays turned on, I really struggled to spot the crease on either phone. Whether I was gaming, browsing articles, or watching videos, it quickly faded into the background to the point where I barely noticed it. </p><p>Samsung's new <a href="https://www.tomsguide.com/phones/samsung-phones/i-took-the-galaxy-z-fold-8-ultra-and-fold-7-outside-and-the-difference-is-astonishing">anti-reflective coating</a> on the inner display also helps here by reducing reflections that would otherwise make the crease more obvious under bright lighting. </p><h2 id="winner">Winner</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="rAiYxSBr6axP3qYqgWdJa5" name="z-fold-8-vs-oppo-find-n6-crease-5" alt="Comparing the crease of the Samsung Galaxy Z Fold 8 vs. Oppo Find N6" src="https://cdn.mos.cms.futurecdn.net/rAiYxSBr6axP3qYqgWdJa5-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>So if I had to pick a winner, I'd probably go with the Oppo Find N6. I'll be honest with you, no foldable that closes completely is ever going to have a perfectly invisible crease. That's simply the nature of the form factor, and anything that folds is going to crease.</p><p>The Find N6's crease feels just a little smoother under your finger, and overall, I'd give it a narrow win.</p><p>That said, I don't think that should stop anyone from buying the Galaxy Z Fold 8. Samsung has made a massive leap forward compared to previous Galaxy Fold devices. </p><p>The crease no longer feels like one of the phone's biggest compromises, and once the display is turned on, the new anti-reflective coating actually helps make it even less noticeable during everyday use.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/samsung-phones/best-galaxy-z-fold-8-deals-and-galaxy-z-fold-8-ultra-sales">Galaxy Z Fold 8 deals are here: how to save up $1,200 on Samsung's new foldables</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/the-tech-world-hyped-up-the-galaxy-z-fold-8s-crease-free-display-heres-a-reality-check-after-7-days">The tech world hyped up the Galaxy Z Fold 8's 'crease-free' display — here's a reality check after 7 days</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-fold-report-reveals-this-is-how-apple-is-killing-the-crease">iPhone Fold report reveals this is how Apple is killing the crease</a></li></ul><div data-widget-type="multimodelreview" data-model-name="Samsung Galaxy Z Fold 8,Samsung Galaxy Z Fold 8 Ultra"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/comparing-galaxy-z-fold-8-vs-oppo-find-n6-crease</link>
                                                                            <description>
                            <![CDATA[ Samsung's Galaxy Z Fold 8 takes on the Oppo Find N6's "zero-feel" crease ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">nhotHzLoGEG6cb2hPnM3eR</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/7q4j44puYb7f4VMuqkAg75-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 08 Aug 2026 08:15:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Sanuj Bhatia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/8p5BvMVA7cnu5AWkxnTjRC-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/7q4j44puYb7f4VMuqkAg75-1920-80.jpg">
                                                            <media:credit><![CDATA[Sanuj Bhatia / Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Comparing the crease of the Samsung Galaxy Z Fold 8 vs. Oppo Find N6]]></media:description>                                                            <media:text><![CDATA[Comparing the crease of the Samsung Galaxy Z Fold 8 vs. Oppo Find N6]]></media:text>
                                <media:title type="plain"><![CDATA[Comparing the crease of the Samsung Galaxy Z Fold 8 vs. Oppo Find N6]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/7q4j44puYb7f4VMuqkAg75-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>While everybody has been talking about the new shape of the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Samsung Galaxy Z Fold 8</a>, and to be fair, it's been very pleasant to use, one of the most overlooked upgrades on Samsung's new book-style foldables is <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-ultra-doesnt-have-a-crease-free-display-but-its-the-closest-samsung-has-ever-got-to-one">the less noticeable crease</a>.</p><p>Samsung says it has significantly reduced the crease thanks to its new <a href="https://www.tomsguide.com/phones/samsung-phones/ive-seen-the-galaxy-z-fold-8s-flex-titanium-screen-and-apple-should-be-nervous">Flex Titanium</a> display technology, which debuts on both the Galaxy Z Fold 8 and the <a href="https://www.tomsguide.com/phones/samsung-phones/i-used-a-thermal-camera-to-see-how-hot-the-galaxy-z-fold-8-ultra-gets-compared-to-the-galaxy-s26-ultra-heres-what-happened">Galaxy Z Fold 8 Ultra</a>.</p><p>But is it actually enough to catch up with other foldable phones that already have less visible creases? Earlier this year, I <a href="https://www.tomsguide.com/phones/android-phones/i-have-been-testing-oppo-find-n6-crease-free-foldable-phone">came away impressed by the Oppo Find N6</a>, particularly because of how subtle its crease was. So, I compared the Galaxy Z Fold 8 against the Oppo Find N6 to see which one comes out on top.</p><div class="product"><a data-dimension112="b84ccd80-926d-11f1-8619-bd41a0cddc53" data-action="Deal Block" data-label="Galaxy Z Fold 8" data-dimension48="Galaxy Z Fold 8" data-dimension25="$1899" href="https://www.amazon.com/Samsung-Galaxy-Fold8-Unlocked-Graphite/dp/B0H126B3KV/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1327px;"><p class="vanilla-image-block" style="padding-top:64.28%;"><img id="9Rhpe6TtrVFSNo9Vtn27Tm" name="Galaxy Z Fold 8 Ultra deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/9Rhpe6TtrVFSNo9Vtn27Tm-1920-80.jpg" mos="" align="middle" fullscreen="" width="1327" height="853" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p>Samsung has a brand new kind of foldable with the passport-shaped Galaxy Z Fold 8. This foldable comes with a 7.6-inch folding display, with 4:3 aspect ratio that's designed for viewing video content.. There's also a 5.5-inch cover display, strong performance and battery life, plus a pair of great cameras on the back.</p><p>Buy the Z Fold 8 from Amazon now and you'll get a $350 voucher thrown in as well.<a class="view-deal button" href="https://www.amazon.com/Samsung-Galaxy-Fold8-Unlocked-Graphite/dp/B0H126B3KV/" target="_blank" rel="nofollow" data-dimension112="b84ccd80-926d-11f1-8619-bd41a0cddc53" data-action="Deal Block" data-label="Galaxy Z Fold 8" data-dimension48="Galaxy Z Fold 8" data-dimension25="$1899">View Deal</a></p></div><h2 id="can-samsung-match-oppo-s-zero-feel-crease">Can Samsung match Oppo's "Zero-Feel" crease? </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="JTcFhBxyXam8DFnAzF5RK5" name="z-fold-8-vs-oppo-find-n6-crease-1" alt="Comparing the crease of the Samsung Galaxy Z Fold 8 vs. Oppo Find N6" src="https://cdn.mos.cms.futurecdn.net/JTcFhBxyXam8DFnAzF5RK5-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>When Oppo announced the Find N6 earlier this year, one of the biggest talking points was its "zero-feel" crease. The company claimed it had reduced the crease to the point where you could barely see or even feel it while using the phone. </p><p>Having gone hands-on with the device, I can confirm that claim wasn't just marketing hype. The crease really was impressively subtle. Naturally, that made me even more curious to see what Samsung had done with the Galaxy Z Fold 8.</p><p>To compare the two, I placed the Galaxy Z Fold 8 and the Oppo Find N6 side by side under the same lighting conditions. I looked at both phones with the displays turned on and off, viewed them from multiple angles, and repeatedly ran my finger across each crease to compare how they looked and, perhaps more importantly, how they felt. </p><p>Right away, it became obvious that the two companies have taken very different approaches. </p><p>Samsung says its new <a href="https://www.tomsguide.com/phones/samsung-phones/ive-seen-the-galaxy-z-fold-8s-flex-titanium-screen-and-apple-should-be-nervous">Flex Titanium display technology</a> redesigns the folding display to reduce the crease. However, structurally, the Galaxy Z Fold 8 is still the same as previous generations, with a single, clearly defined crease running down the middle of the display. </p><p>It's much shallower than on previous Galaxy Fold devices, but it's still easy to spot under direct light. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="xSi6UvtEUxGpjacaJfhQR5" name="z-fold-8-vs-oppo-find-n6-crease-3" alt="Comparing the crease of the Samsung Galaxy Z Fold 8 vs. Oppo Find N6" src="https://cdn.mos.cms.futurecdn.net/xSi6UvtEUxGpjacaJfhQR5-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>The Oppo Find N6, on the other hand, looks quite different. Rather than one defined crease, the center of the display appears more like a series of tiny ripples. Neither phone hides the crease completely, but the two companies have clearly taken different approaches. </p><p>To be honest, I don't think either phone has a huge visual advantage when the displays are turned off. How visible the crease is depends almost entirely on the lighting and the angle you're looking at the screen from.</p><p>Where I did notice a difference was in how the crease feels. Running my finger across the Galaxy Z Fold 8, I could still feel a fairly noticeable dip before reaching the other side of the display.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Mxpj35cmMMyeokyzLdF9e5" name="z-fold-8-vs-oppo-find-n6-crease-4" alt="Comparing the crease of the Samsung Galaxy Z Fold 8 vs. Oppo Find N6" src="https://cdn.mos.cms.futurecdn.net/Mxpj35cmMMyeokyzLdF9e5-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>The Oppo Find N6 feels different. Instead of one distinct crease, your finger glides across a series of much subtler ripples. The transition is smoother overall, and if you aren't deliberately looking for it, you barely notice the crease. </p><p>With the displays turned on, I really struggled to spot the crease on either phone. Whether I was gaming, browsing articles, or watching videos, it quickly faded into the background to the point where I barely noticed it. </p><p>Samsung's new <a href="https://www.tomsguide.com/phones/samsung-phones/i-took-the-galaxy-z-fold-8-ultra-and-fold-7-outside-and-the-difference-is-astonishing">anti-reflective coating</a> on the inner display also helps here by reducing reflections that would otherwise make the crease more obvious under bright lighting. </p><h2 id="winner">Winner</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="rAiYxSBr6axP3qYqgWdJa5" name="z-fold-8-vs-oppo-find-n6-crease-5" alt="Comparing the crease of the Samsung Galaxy Z Fold 8 vs. Oppo Find N6" src="https://cdn.mos.cms.futurecdn.net/rAiYxSBr6axP3qYqgWdJa5-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>So if I had to pick a winner, I'd probably go with the Oppo Find N6. I'll be honest with you, no foldable that closes completely is ever going to have a perfectly invisible crease. That's simply the nature of the form factor, and anything that folds is going to crease.</p><p>The Find N6's crease feels just a little smoother under your finger, and overall, I'd give it a narrow win.</p><p>That said, I don't think that should stop anyone from buying the Galaxy Z Fold 8. Samsung has made a massive leap forward compared to previous Galaxy Fold devices. </p><p>The crease no longer feels like one of the phone's biggest compromises, and once the display is turned on, the new anti-reflective coating actually helps make it even less noticeable during everyday use.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/samsung-phones/best-galaxy-z-fold-8-deals-and-galaxy-z-fold-8-ultra-sales">Galaxy Z Fold 8 deals are here: how to save up $1,200 on Samsung's new foldables</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/the-tech-world-hyped-up-the-galaxy-z-fold-8s-crease-free-display-heres-a-reality-check-after-7-days">The tech world hyped up the Galaxy Z Fold 8's 'crease-free' display — here's a reality check after 7 days</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-fold-report-reveals-this-is-how-apple-is-killing-the-crease">iPhone Fold report reveals this is how Apple is killing the crease</a></li></ul><div data-widget-type="multimodelreview" data-model-name="Samsung Galaxy Z Fold 8,Samsung Galaxy Z Fold 8 Ultra"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Samsung Galaxy Z Fold 8 Ultra vs Galaxy Z Fold 7 — are this year's upgrades really worth it? ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Samsung Galaxy Z Fold 8 Ultra</a> is a fantastic foldable, with a lot of great upgrades that (mostly) stands up to the Ultra moniker. But the <a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-7-review">Galaxy Z Fold 7 </a>was also a fantastic foldable when it was released last year, with our review declaring it to be the foldable phone we've been waiting for.</p><p>Obviously this leaves us with a few questions that need answering. The Z Fold 8 Ultra is the better phone, but is it still good enough to supplant the Z Fold 7 as the foldable you should buy? After all, the Z Fold 8 Ultra is more expensive, and the Z Fold 7 is likely to get some price cuts in the wake of the Ultra's launch.</p><p>So how does the Galaxy Z Fold 8 Ultra compare to the Galaxy Z Fold 7, and which of these foldables is right for you?</p><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-8-ultra-vs-samsung-galaxy-z-fold-7-specs"><span>Samsung Galaxy Z Fold 8 Ultra vs Samsung Galaxy Z Fold 7: Specs</span></h3><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Samsung Galazy Z Fold 8 Ultra</strong></p></td><td  ><p><strong>Samsung Galazy Z Fold 7</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>From $2,099</p></td><td  ><p>From $1,999</p></td></tr><tr><td class="firstcol " ><p><strong>Main Display</strong></p></td><td  ><p>8 inches AMOLED (2184 x 1968, 1-120Hz)</p></td><td  ><p>8 inches AMOLED (2184 x 1968, 1-120Hz)</p></td></tr><tr><td class="firstcol " ><p><strong>Cover Display</strong></p></td><td  ><p>6.5 inches AMOLED (2520 x 1080, 1-120Hz)</p></td><td  ><p>6.5 inches AMOLED (2520 x 1080, 1-120Hz)</p></td></tr><tr><td class="firstcol " ><p><strong>Processor</strong></p></td><td  ><p>Snapdragon 8 Elite Gen 5 for Galaxy</p></td><td  ><p>Snapdragon 8 Elite </p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>12GB / 16GB</p></td><td  ><p>12GB / 16GB</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>256GB / 512GB / 1TB</p></td><td  ><p>256GB / 512GB / 1TB</p></td></tr><tr><td class="firstcol " ><p><strong>Front Camera</strong></p></td><td  ><p>10MP, 10MP</p></td><td  ><p>10MP, 10MP</p></td></tr><tr><td class="firstcol " ><p><strong>Rear Camera</strong></p></td><td  ><p>200MP wide, 50MP ultra-wide, 10MP telephoto (3x optical)</p></td><td  ><p>200MP wide, 12MP ultra-wide, 10MP telephoto ( 3x opticazoom)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>5,000 mAh</p></td><td  ><p>4,400 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Charging</strong></p></td><td  ><p>45W wired, 20W wireless</p></td><td  ><p>25W wired, 15W wireless</p></td></tr><tr><td class="firstcol " ><p><strong>Dimensions</strong></p></td><td  ><p>158.4 x 72.8 x 8.9 mm (6.24 x 2.87 x 0.35 inches) folded, 143.2 x 158.4 x 4.2 mm (5.64 x 6.24 x 0.16 inches) unfolded</p></td><td  ><p>158.4 x 72.8 x 8.9 mm (6.24 x 2.87 x 0.35 inches) folded, 143.2 x 158.4 x 4.2 mm (5.64 x 6.24 x 0.17 inches) unfolded</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>215 grams (7.5 ounces)</p></td><td  ><p>215 grams (7.5 ounces)</p></td></tr><tr><td class="firstcol " ><p><strong>IP Rating</strong></p></td><td  ><p>IP48</p></td><td  ><p>IP48</p></td></tr><tr><td class="firstcol " ><p>Colors</p></td><td  ><p>Violet shadow, Cream, Graphite, Violet Green (online exclusive)</p></td><td  ><p>Blue Shadow, Silver Shadow, Jet-black, Mint</p></td></tr></tbody></table></div><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-8-ultra-vs-samsung-galaxy-z-fold-7-price-availability"><span>Samsung Galaxy Z Fold 8 Ultra vs Samsung Galaxy Z Fold 7: Price &amp; availability</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3328px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="T6UGidvhwk5Am5sBqHvBVS" name="Z Fold 8 Ultra vs Z Fold 7-8" alt="samsung galaxy z fold 7 and galaxy z fold 8 ultra" src="https://cdn.mos.cms.futurecdn.net/T6UGidvhwk5Am5sBqHvBVS-1920-80.jpg" mos="" align="middle" fullscreen="" width="3328" height="1872" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Samsung Galaxy Z Fold 7 has been on sale since last July, with prices starting at $1,999 for a model with 12GB of RAM and 256GB of storage. 512GB is available for $2,199, while a 1TB model with 16GB of RAM can be purchased for $2,499. </p><p>Color options include Silver Shadow, Jet Black, Blue Shadow and the Samsung-exclusive Mint. This phone is also likely to be discounted in the wake of the Z 8 series launch, since it's already a year old.</p><p>The Samsung Galaxy Z Fold 8 Ultra goes on sale on August 7, with prices starting at $2,199 for a model with 12GB of RAM and 256GB storage. 512GB raises the price to $2,299, while 1TB with 16GB of RAM will set you back $2,699.</p><p>Color options include Violet Shadow, Cream, Graphite and the Samsung-exclusive Green Shadow.</p><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-8-ultra-vs-samsung-galaxy-z-fold-7-design-and-display"><span>Samsung Galaxy Z Fold 8 Ultra vs Samsung Galaxy Z Fold 7: Design and Display</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="TWaz6ndtJJBBsfEpVDj2cS" name="Z Fold 8 Ultra vs Z Fold 7-2" alt="samsung galaxy z fold 7 and galaxy z fold 8 ultra" src="https://cdn.mos.cms.futurecdn.net/TWaz6ndtJJBBsfEpVDj2cS-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Samsung didn't offer any bold redesigns with the Z Fold 8 Ultra, and the new foldable's shape and size is more or less identical to the Galaxy Z Fold 7. They're not quite the same, since Z Fold 7 cases don't appear to fit on the back of the 8 Ultra, but it's close enough that you'd need precise measuring tools to notice.</p><p>The biggest upgrade is that the Z Fold 8 Ultra features a new <a href="https://www.tomsguide.com/phones/samsung-phones/ive-seen-the-galaxy-z-fold-8s-flex-titanium-screen-and-apple-should-be-nervous">Flex Titanium display</a>, which offers improved durability and significantly less creasing in the middle. <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-ultra-doesnt-have-a-crease-free-display-but-its-the-closest-samsung-has-ever-got-to-one">It's not quite crease-free</a>, but it is almost invisible compared to the Z Fold 7. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2417px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="xYL3dLrXaNVRNg92GfxqsR" name="Z Fold 8 Ultra vs Z Fold 7-4" alt="samsung galaxy z fold 7 and galaxy z fold 8 ultra" src="https://cdn.mos.cms.futurecdn.net/xYL3dLrXaNVRNg92GfxqsR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2417" height="1360" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Fold 8 Ultra also has a much better screen when it comes to dealing with bright light. Both phones have the same high resolution screens and adaptive 1-120Hz refresh rates, but the Z Fold 7 isn't nearly as bright as the 8 Ultra. In fact, last year's foldable recorded a peak brightness of 2,245 nits, while the Z Fold 8 Ultra hit 2,687 nits. </p>                    <div class= "tiktok-wrapper" style="min-height: 750px;"><blockquote class="tiktok-embed" cite="https://www.tiktok.com/@mspoonyg/video/7666429528071294222" data-video-id="7666429528071294222" style="max-width: 605px; min-width: 325px;">                        <section>                            <a target="_blank" title="@mspoonyg" href="https://www.tiktok.com/@mspoonyg">@mspoonyg</a>                            <p></p><a target="_blank" title="♬ Thank You for Sunshine - House Duduk Music" href="https://www.tiktok.com/music/Thank-You-for-Sunshine-7650727836295612417">♬ Thank You for Sunshine - House Duduk Music</a></section>                    </blockquote></div>                <p>The <a href="https://www.tomsguide.com/phones/samsung-phones/i-took-the-galaxy-z-fold-8-ultra-and-fold-7-outside-and-the-difference-is-astonishing">anti-reflective coating on the newer foldable</a> also makes it a lot easier to use the Fold 8 Ultra in bright conditions, and it makes a shocking amount of difference in reducing glare. By which I mean you won't see your own silhouette staring back at you nearly as much.</p><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-8-ultra-vs-samsung-galaxy-z-fold-7-performance"><span>Samsung Galaxy Z Fold 8 Ultra vs Samsung Galaxy Z Fold 7: Performance</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2891px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="xqV8DFuJtvGXYn6VEmv86S" name="Z Fold 8 Ultra vs Z Fold 7-9" alt="samsung galaxy z fold 7 and galaxy z fold 8 ultra" src="https://cdn.mos.cms.futurecdn.net/xqV8DFuJtvGXYn6VEmv86S-1920-80.jpg" mos="" align="middle" fullscreen="" width="2891" height="1626" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Galaxy Z Fold 8 Ultra is the first Galaxy foldable to feature the custom "for Galaxy" chipset, which means it shares the same <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-s26-performance-face-off-snapdragon-8-elite-gen-5-vs-exynos-2600">Snapdragon 8 Elite Gen 5 for Galaxy chipset</a> as the Galaxy S26 series. Older foldables utilized Snapdragon's standard flagship chip, so the Z Fold 7 arrived running the same Snapdragon 8 Elite as countless other non-Samsung phones.</p><p>While the off-the-shelf chip is no slouch, the upgrade to a For Galaxy chipset means that the <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-vs-fold-8-ultra-vs-flip-8-benchmarked-the-results-are-in">Z Fold 8 Ultra gets to enjoy a performance boost</a> compared to its predecessor.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Geekbench (Single/Multicore)</strong></p></td><td  ><p><strong>3DMark Solar Bay Unlimited</strong></p></td><td  ><p><strong>Geekbench AI</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8 Ultra</strong></p></td><td  ><p>3,733/11,457</p></td><td  ><p>49.24/12,950</p></td><td  ><p>71715</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 7</strong></p></td><td  ><p>3,052/9,735</p></td><td  ><p>41.21/10,812</p></td><td  ><p>61299</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy S26 Ultra</strong></p></td><td  ><p>3,785 / 11,563</p></td><td  ><p>49.37 / 12,984</p></td><td  ><p>83047 (TensorFlow Lite QNN)</p></td></tr></tbody></table></div><p>As you can see in the table above, the Z Fold 8 Ultra finished Geekbench 6 with a single-core score of 3,733 and a multi-core score of 11,457. That's compared to the 3,052 and 9,735 scores recorded by the Z Fold 7 during the same benchmarking test. That's quite the jump, especially on the multi-core testing.</p><p>Graphics performance is a pretty similar story, with the Z Fold 8 Ultra scoring 12,950 in 3DMark's Solar Bay Unlimited benchmark test, with an average framerate of 49.24 fps. The Z Fold 7 came out with 10,912 and 41.21 fps which, while not terrible performance, seriously lags behind. Geekbench's AI test is more of the same with the Z Fold 8 Ultra coming in with a score of 71,715 to the Z Fold 7's 59,663.</p><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-8-ultra-vs-samsung-galaxy-z-fold-7-cameras"><span>Samsung Galaxy Z Fold 8 Ultra vs Samsung Galaxy Z Fold 7: Cameras</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3519px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="WcYimQVpPWYAFuWxKQJdES" name="Z Fold 8 Ultra vs Z Fold 7-6" alt="samsung galaxy z fold 7 and galaxy z fold 8 ultra" src="https://cdn.mos.cms.futurecdn.net/WcYimQVpPWYAFuWxKQJdES-1920-80.jpg" mos="" align="middle" fullscreen="" width="3519" height="1979" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The camera situation on the Galaxy Z Fold 8 Ultra is a little hit and miss, though the same is true of the Z Fold 7. Both phones share the same 200MP main camera lens, 10MP telephoto lens with 3x optical zoom and a pair of 10MP selfie cameras (one for each screen). </p><p>However, the 8 Ultra's ultrawide camera has been given a much-needed update, increasing the resolution to 50MP — among smaller changes. But saying the phones both have similar camera hardware doesn't really tell us how different the photos actually are — especially now that software plays such a huge part in the process.</p><iframe allow="" height="395" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=2c06f5cc-90f5-11f1-ba1b-0e6f42328d7d"></iframe><p>You'd think that the quality of the 200MP main lens would be identical across both phones, but that actually isn't the case. They seem alike at first glance, but the Z Fold 8 Ultra is actually picking up a lot more detail compared to its predecessor. </p><p>The text on this mail box is a lot more legible, and the finer details in the brickwork stand out a lot more. Overall, the Fold 8 Ultra delivers a much clearer and crisper image.</p><iframe allow="" height="395" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=17b020c6-90f5-11f1-ba1b-0e6f42328d7d"></iframe><p>Despite the big bump in resolution, the difference in the ultrawide shots are pretty subtle — just as they were when I tested the cameras for the Galaxy Z Fold 8 Ultra review. The Z Fold 8 Ultra offers crisper image quality and a slightly brighter photo overall. At a glance, most won't be able to pick up the subtleties of how the two cameras are different.</p><iframe allow="" height="395" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=40a85188-90f5-11f1-ba1b-0e6f42328d7d"></iframe><p>Macro shots aren't that dissimilar either, and both phones are able to capture the smaller details from close-up shots. However, the Z Fold 7's shot is noticeably more washed out, and doesn't feature the same deeper coloring of the Z Fold 8 Ultra.</p><iframe allow="" height="395" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=e8c3cc5e-90f4-11f1-ba1b-0e6f42328d7d"></iframe><p>The selfie camera quality is more or less identical on both phones. Some areas are clearer than others, depending on which side you're looking at, but that seems to be due to the variations on focus rather than the actual quality of the final shot. The Z Fold 8 Ultra is a little bit brighter, though.</p><iframe allow="" height="395" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=cfc2f298-90f4-11f1-ba1b-0e6f42328d7d"></iframe><p>Portrait mode is exactly the same, with the exact same focus variations and brightness difference as the regular selfie mode. Neither photo has any particular characteristics that make it superior to the other, and the bokeh effect looks exactly the same across both devices.</p><iframe allow="" height="395" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=7fe0a734-90f4-11f1-ba1b-0e6f42328d7d"></iframe><p>Speaking of identical, the same is true of the telephoto lens at 3x optical zoom. The quality of the shot on both phones is pretty poor, and it's an upgrade Samsung desperately needs to make ahead of the Z Fold 9 launch next year.</p><iframe allow="" height="395" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=afe785b0-90f4-11f1-ba1b-0e6f42328d7d"></iframe><p>Pushing the magnification up to 10x doesn't make any difference either. While the details are being picked up by the camera, the actual quality of the final shot is atrocious compared to other flagship phones that cost considerably less money — including Samsung's own Galaxy S26 Ultra.</p><iframe allow="" height="395" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=00141e9a-90f5-11f1-ba1b-0e6f42328d7d"></iframe><p>Samsung made a point of emphasizing how much it was improving low light capabilities with the Z Fold 8 Ultra, and it definitely looks like it's succeeded. Compared to the Z Fold 7, the night-time shots are brighter, crisper and pick up a lot more detail from the mail box. In fact, the Z Fold 7 shot blurs out the letters V and R around the crown at the top</p><p>Samsung has clearly made some improvements to the Galaxy Z Fold 8 Ultra, especially where low light photography is concerned. But a lot of the daytime upgrades seem to be a lot more subtle, and less noticeable to the casual observer. Whether that minor boost is worth it for you all depends on which phone you have, and whether the Z Fold 8 Ultra's other upgrades matter to you or not.</p><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-8-ultra-vs-samsung-galaxy-z-fold-7-battery-charging"><span>Samsung Galaxy Z Fold 8 Ultra vs Samsung Galaxy Z Fold 7: Battery &amp; charging</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3531px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="imtV2afR8StvoQEVHJmnSS" name="Z Fold 8 Ultra vs Z Fold 7-10" alt="samsung galaxy z fold 7 and galaxy z fold 8 ultra" src="https://cdn.mos.cms.futurecdn.net/imtV2afR8StvoQEVHJmnSS-1920-80.jpg" mos="" align="middle" fullscreen="" width="3531" height="1986" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>One of the biggest upgrades on the Galaxy Z Fold 8 Ultra is the fact that the <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-vs-fold-8-ultra-vs-flip-8-battery-tests-silicon-carbon-pays-off">battery life is so much better now</a>. This is thanks to a higher capacity silicon carbon battery with 5,000 mAh capacity, compared to 4,400 mAh for the Fold 7. Our custom battery test, which involves web-surfing over a 5G connection until the power runs out, clocked the Z Fold 8 Ultra's battery life at 14 hours and 33 minutes.</p><p>While this isn't as good as the Galaxy S26 Ultra, it is almost four hours longer than the Galaxy Z Fold 7's 10 hours and 44 minutes of battery life. Under 11 hours is pretty disappointing, but hitting 14+ hours means the Z Fold 8 Ultra is far more likely to make it through a single day without recharging.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Hours : Minutes</strong></p></td><td  ><p><strong>Charging % in 30 minutes</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8 Ultra</strong></p></td><td  ><p>14:33</p></td><td  ><p>76%</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 7</strong></p></td><td  ><p>10:44</p></td><td  ><p>54%</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy S26 Ultra</strong></p></td><td  ><p>16:10</p></td><td  ><p>77%</p></td></tr></tbody></table></div><p>The Z Fold 8 Ultra offers 45W wired charging compared to the Z Fold 7's 25W. That faster charging allows the phone to reclaim 76% of its battery life in just 30 minutes, compared to 54% on the Z Fold 7. Wireless charging has also increased by 5W, with up to 20W Qi2 speeds on the Z Fold 8 Ultra — though the embedded magnets are still missing from the phone.</p><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-8-ultra-vs-samsung-galaxy-z-fold-7-verdict"><span>Samsung Galaxy Z Fold 8 Ultra vs Samsung Galaxy Z Fold 7: Verdict</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3187px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="ibSFwbJGnJU62HeZzyCu4S" name="Z Fold 8 Ultra vs Z Fold 7-LIST" alt="samsung galaxy z fold 7 and galaxy z fold 8 ultra" src="https://cdn.mos.cms.futurecdn.net/ibSFwbJGnJU62HeZzyCu4S-1920-80.jpg" mos="" align="middle" fullscreen="" width="3187" height="1793" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Samsung Galaxy Z Fold 8 Ultra has a lot of upgrades compared to last year, and the majority of them are available in areas that actually matter to your everyday use of the phone. Battery life is significantly improved, performance has taken a pretty big jump and the bright, anti-reflective display makes it significantly nicer to use this phone in a variety of conditions. </p><p>Those are all notable quality of life improvements that could make the Z Fold 8 Ultra the foldable of choice for most people. The camera changes are subtle, with the biggest difference being low-light performance.</p><p>Overall. the Fold 7 is still a very good foldable, especially when you can find it for a sizable discount. But if you're in the market for a new foldable phone, the Fold 8 Ultra is hands-down the better option.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom’s Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/samsung-phones/i-just-tried-the-new-samsung-dex-on-the-galaxy-z-fold-8-and-it-has-one-huge-upgrade">I just tried the new Samsung DeX on the Galaxy Z Fold 8 — and it has one huge upgrade</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/3-big-ways-the-iphone-ultra-could-beat-the-galaxy-z-fold-8">iPhone Ultra vs Galaxy Z Fold 8 — here's 3 big ways Apple could win</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-vs-fold-8-ultra-camera-test-is-the-telephoto-zoom-worth-the-extra-usd200">I tested the Galaxy Z Fold 8 vs. Fold 8 Ultra to see if the lack of a telephoto zoom is a dealbreaker</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-vs-galaxy-z-fold-7-are-this-years-upgrades-really-worth-it</link>
                                                                            <description>
                            <![CDATA[ Is the Galaxy Z Fold 8 Ultra really a worthy upgrade over the Galaxy Z Fold 7? We put both phones to the test ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">iSrvHa6ZNdEiyKXRBpmYGJ</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/PQzuLPfoynftVZMYbb3hGS-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 08 Aug 2026 04:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/PQzuLPfoynftVZMYbb3hGS-1920-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[samsung galaxy z fold 7 and galaxy z fold 8 ultra]]></media:description>                                                            <media:text><![CDATA[samsung galaxy z fold 7 and galaxy z fold 8 ultra]]></media:text>
                                <media:title type="plain"><![CDATA[samsung galaxy z fold 7 and galaxy z fold 8 ultra]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/PQzuLPfoynftVZMYbb3hGS-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Samsung Galaxy Z Fold 8 Ultra</a> is a fantastic foldable, with a lot of great upgrades that (mostly) stands up to the Ultra moniker. But the <a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-7-review">Galaxy Z Fold 7 </a>was also a fantastic foldable when it was released last year, with our review declaring it to be the foldable phone we've been waiting for.</p><p>Obviously this leaves us with a few questions that need answering. The Z Fold 8 Ultra is the better phone, but is it still good enough to supplant the Z Fold 7 as the foldable you should buy? After all, the Z Fold 8 Ultra is more expensive, and the Z Fold 7 is likely to get some price cuts in the wake of the Ultra's launch.</p><p>So how does the Galaxy Z Fold 8 Ultra compare to the Galaxy Z Fold 7, and which of these foldables is right for you?</p><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-8-ultra-vs-samsung-galaxy-z-fold-7-specs"><span>Samsung Galaxy Z Fold 8 Ultra vs Samsung Galaxy Z Fold 7: Specs</span></h3><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Samsung Galazy Z Fold 8 Ultra</strong></p></td><td  ><p><strong>Samsung Galazy Z Fold 7</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>From $2,099</p></td><td  ><p>From $1,999</p></td></tr><tr><td class="firstcol " ><p><strong>Main Display</strong></p></td><td  ><p>8 inches AMOLED (2184 x 1968, 1-120Hz)</p></td><td  ><p>8 inches AMOLED (2184 x 1968, 1-120Hz)</p></td></tr><tr><td class="firstcol " ><p><strong>Cover Display</strong></p></td><td  ><p>6.5 inches AMOLED (2520 x 1080, 1-120Hz)</p></td><td  ><p>6.5 inches AMOLED (2520 x 1080, 1-120Hz)</p></td></tr><tr><td class="firstcol " ><p><strong>Processor</strong></p></td><td  ><p>Snapdragon 8 Elite Gen 5 for Galaxy</p></td><td  ><p>Snapdragon 8 Elite </p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>12GB / 16GB</p></td><td  ><p>12GB / 16GB</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>256GB / 512GB / 1TB</p></td><td  ><p>256GB / 512GB / 1TB</p></td></tr><tr><td class="firstcol " ><p><strong>Front Camera</strong></p></td><td  ><p>10MP, 10MP</p></td><td  ><p>10MP, 10MP</p></td></tr><tr><td class="firstcol " ><p><strong>Rear Camera</strong></p></td><td  ><p>200MP wide, 50MP ultra-wide, 10MP telephoto (3x optical)</p></td><td  ><p>200MP wide, 12MP ultra-wide, 10MP telephoto ( 3x opticazoom)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>5,000 mAh</p></td><td  ><p>4,400 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Charging</strong></p></td><td  ><p>45W wired, 20W wireless</p></td><td  ><p>25W wired, 15W wireless</p></td></tr><tr><td class="firstcol " ><p><strong>Dimensions</strong></p></td><td  ><p>158.4 x 72.8 x 8.9 mm (6.24 x 2.87 x 0.35 inches) folded, 143.2 x 158.4 x 4.2 mm (5.64 x 6.24 x 0.16 inches) unfolded</p></td><td  ><p>158.4 x 72.8 x 8.9 mm (6.24 x 2.87 x 0.35 inches) folded, 143.2 x 158.4 x 4.2 mm (5.64 x 6.24 x 0.17 inches) unfolded</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>215 grams (7.5 ounces)</p></td><td  ><p>215 grams (7.5 ounces)</p></td></tr><tr><td class="firstcol " ><p><strong>IP Rating</strong></p></td><td  ><p>IP48</p></td><td  ><p>IP48</p></td></tr><tr><td class="firstcol " ><p>Colors</p></td><td  ><p>Violet shadow, Cream, Graphite, Violet Green (online exclusive)</p></td><td  ><p>Blue Shadow, Silver Shadow, Jet-black, Mint</p></td></tr></tbody></table></div><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-8-ultra-vs-samsung-galaxy-z-fold-7-price-availability"><span>Samsung Galaxy Z Fold 8 Ultra vs Samsung Galaxy Z Fold 7: Price &amp; availability</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3328px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="T6UGidvhwk5Am5sBqHvBVS" name="Z Fold 8 Ultra vs Z Fold 7-8" alt="samsung galaxy z fold 7 and galaxy z fold 8 ultra" src="https://cdn.mos.cms.futurecdn.net/T6UGidvhwk5Am5sBqHvBVS-1920-80.jpg" mos="" align="middle" fullscreen="" width="3328" height="1872" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Samsung Galaxy Z Fold 7 has been on sale since last July, with prices starting at $1,999 for a model with 12GB of RAM and 256GB of storage. 512GB is available for $2,199, while a 1TB model with 16GB of RAM can be purchased for $2,499. </p><p>Color options include Silver Shadow, Jet Black, Blue Shadow and the Samsung-exclusive Mint. This phone is also likely to be discounted in the wake of the Z 8 series launch, since it's already a year old.</p><p>The Samsung Galaxy Z Fold 8 Ultra goes on sale on August 7, with prices starting at $2,199 for a model with 12GB of RAM and 256GB storage. 512GB raises the price to $2,299, while 1TB with 16GB of RAM will set you back $2,699.</p><p>Color options include Violet Shadow, Cream, Graphite and the Samsung-exclusive Green Shadow.</p><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-8-ultra-vs-samsung-galaxy-z-fold-7-design-and-display"><span>Samsung Galaxy Z Fold 8 Ultra vs Samsung Galaxy Z Fold 7: Design and Display</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="TWaz6ndtJJBBsfEpVDj2cS" name="Z Fold 8 Ultra vs Z Fold 7-2" alt="samsung galaxy z fold 7 and galaxy z fold 8 ultra" src="https://cdn.mos.cms.futurecdn.net/TWaz6ndtJJBBsfEpVDj2cS-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Samsung didn't offer any bold redesigns with the Z Fold 8 Ultra, and the new foldable's shape and size is more or less identical to the Galaxy Z Fold 7. They're not quite the same, since Z Fold 7 cases don't appear to fit on the back of the 8 Ultra, but it's close enough that you'd need precise measuring tools to notice.</p><p>The biggest upgrade is that the Z Fold 8 Ultra features a new <a href="https://www.tomsguide.com/phones/samsung-phones/ive-seen-the-galaxy-z-fold-8s-flex-titanium-screen-and-apple-should-be-nervous">Flex Titanium display</a>, which offers improved durability and significantly less creasing in the middle. <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-ultra-doesnt-have-a-crease-free-display-but-its-the-closest-samsung-has-ever-got-to-one">It's not quite crease-free</a>, but it is almost invisible compared to the Z Fold 7. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2417px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="xYL3dLrXaNVRNg92GfxqsR" name="Z Fold 8 Ultra vs Z Fold 7-4" alt="samsung galaxy z fold 7 and galaxy z fold 8 ultra" src="https://cdn.mos.cms.futurecdn.net/xYL3dLrXaNVRNg92GfxqsR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2417" height="1360" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Fold 8 Ultra also has a much better screen when it comes to dealing with bright light. Both phones have the same high resolution screens and adaptive 1-120Hz refresh rates, but the Z Fold 7 isn't nearly as bright as the 8 Ultra. In fact, last year's foldable recorded a peak brightness of 2,245 nits, while the Z Fold 8 Ultra hit 2,687 nits. </p>                    <div class= "tiktok-wrapper" style="min-height: 750px;"><blockquote class="tiktok-embed" cite="https://www.tiktok.com/@mspoonyg/video/7666429528071294222" data-video-id="7666429528071294222" style="max-width: 605px; min-width: 325px;">                        <section>                            <a target="_blank" title="@mspoonyg" href="https://www.tiktok.com/@mspoonyg">@mspoonyg</a>                            <p></p><a target="_blank" title="♬ Thank You for Sunshine - House Duduk Music" href="https://www.tiktok.com/music/Thank-You-for-Sunshine-7650727836295612417">♬ Thank You for Sunshine - House Duduk Music</a></section>                    </blockquote></div>                <p>The <a href="https://www.tomsguide.com/phones/samsung-phones/i-took-the-galaxy-z-fold-8-ultra-and-fold-7-outside-and-the-difference-is-astonishing">anti-reflective coating on the newer foldable</a> also makes it a lot easier to use the Fold 8 Ultra in bright conditions, and it makes a shocking amount of difference in reducing glare. By which I mean you won't see your own silhouette staring back at you nearly as much.</p><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-8-ultra-vs-samsung-galaxy-z-fold-7-performance"><span>Samsung Galaxy Z Fold 8 Ultra vs Samsung Galaxy Z Fold 7: Performance</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2891px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="xqV8DFuJtvGXYn6VEmv86S" name="Z Fold 8 Ultra vs Z Fold 7-9" alt="samsung galaxy z fold 7 and galaxy z fold 8 ultra" src="https://cdn.mos.cms.futurecdn.net/xqV8DFuJtvGXYn6VEmv86S-1920-80.jpg" mos="" align="middle" fullscreen="" width="2891" height="1626" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Galaxy Z Fold 8 Ultra is the first Galaxy foldable to feature the custom "for Galaxy" chipset, which means it shares the same <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-s26-performance-face-off-snapdragon-8-elite-gen-5-vs-exynos-2600">Snapdragon 8 Elite Gen 5 for Galaxy chipset</a> as the Galaxy S26 series. Older foldables utilized Snapdragon's standard flagship chip, so the Z Fold 7 arrived running the same Snapdragon 8 Elite as countless other non-Samsung phones.</p><p>While the off-the-shelf chip is no slouch, the upgrade to a For Galaxy chipset means that the <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-vs-fold-8-ultra-vs-flip-8-benchmarked-the-results-are-in">Z Fold 8 Ultra gets to enjoy a performance boost</a> compared to its predecessor.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Geekbench (Single/Multicore)</strong></p></td><td  ><p><strong>3DMark Solar Bay Unlimited</strong></p></td><td  ><p><strong>Geekbench AI</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8 Ultra</strong></p></td><td  ><p>3,733/11,457</p></td><td  ><p>49.24/12,950</p></td><td  ><p>71715</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 7</strong></p></td><td  ><p>3,052/9,735</p></td><td  ><p>41.21/10,812</p></td><td  ><p>61299</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy S26 Ultra</strong></p></td><td  ><p>3,785 / 11,563</p></td><td  ><p>49.37 / 12,984</p></td><td  ><p>83047 (TensorFlow Lite QNN)</p></td></tr></tbody></table></div><p>As you can see in the table above, the Z Fold 8 Ultra finished Geekbench 6 with a single-core score of 3,733 and a multi-core score of 11,457. That's compared to the 3,052 and 9,735 scores recorded by the Z Fold 7 during the same benchmarking test. That's quite the jump, especially on the multi-core testing.</p><p>Graphics performance is a pretty similar story, with the Z Fold 8 Ultra scoring 12,950 in 3DMark's Solar Bay Unlimited benchmark test, with an average framerate of 49.24 fps. The Z Fold 7 came out with 10,912 and 41.21 fps which, while not terrible performance, seriously lags behind. Geekbench's AI test is more of the same with the Z Fold 8 Ultra coming in with a score of 71,715 to the Z Fold 7's 59,663.</p><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-8-ultra-vs-samsung-galaxy-z-fold-7-cameras"><span>Samsung Galaxy Z Fold 8 Ultra vs Samsung Galaxy Z Fold 7: Cameras</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3519px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="WcYimQVpPWYAFuWxKQJdES" name="Z Fold 8 Ultra vs Z Fold 7-6" alt="samsung galaxy z fold 7 and galaxy z fold 8 ultra" src="https://cdn.mos.cms.futurecdn.net/WcYimQVpPWYAFuWxKQJdES-1920-80.jpg" mos="" align="middle" fullscreen="" width="3519" height="1979" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The camera situation on the Galaxy Z Fold 8 Ultra is a little hit and miss, though the same is true of the Z Fold 7. Both phones share the same 200MP main camera lens, 10MP telephoto lens with 3x optical zoom and a pair of 10MP selfie cameras (one for each screen). </p><p>However, the 8 Ultra's ultrawide camera has been given a much-needed update, increasing the resolution to 50MP — among smaller changes. But saying the phones both have similar camera hardware doesn't really tell us how different the photos actually are — especially now that software plays such a huge part in the process.</p><iframe allow="" height="395" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=2c06f5cc-90f5-11f1-ba1b-0e6f42328d7d"></iframe><p>You'd think that the quality of the 200MP main lens would be identical across both phones, but that actually isn't the case. They seem alike at first glance, but the Z Fold 8 Ultra is actually picking up a lot more detail compared to its predecessor. </p><p>The text on this mail box is a lot more legible, and the finer details in the brickwork stand out a lot more. Overall, the Fold 8 Ultra delivers a much clearer and crisper image.</p><iframe allow="" height="395" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=17b020c6-90f5-11f1-ba1b-0e6f42328d7d"></iframe><p>Despite the big bump in resolution, the difference in the ultrawide shots are pretty subtle — just as they were when I tested the cameras for the Galaxy Z Fold 8 Ultra review. The Z Fold 8 Ultra offers crisper image quality and a slightly brighter photo overall. At a glance, most won't be able to pick up the subtleties of how the two cameras are different.</p><iframe allow="" height="395" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=40a85188-90f5-11f1-ba1b-0e6f42328d7d"></iframe><p>Macro shots aren't that dissimilar either, and both phones are able to capture the smaller details from close-up shots. However, the Z Fold 7's shot is noticeably more washed out, and doesn't feature the same deeper coloring of the Z Fold 8 Ultra.</p><iframe allow="" height="395" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=e8c3cc5e-90f4-11f1-ba1b-0e6f42328d7d"></iframe><p>The selfie camera quality is more or less identical on both phones. Some areas are clearer than others, depending on which side you're looking at, but that seems to be due to the variations on focus rather than the actual quality of the final shot. The Z Fold 8 Ultra is a little bit brighter, though.</p><iframe allow="" height="395" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=cfc2f298-90f4-11f1-ba1b-0e6f42328d7d"></iframe><p>Portrait mode is exactly the same, with the exact same focus variations and brightness difference as the regular selfie mode. Neither photo has any particular characteristics that make it superior to the other, and the bokeh effect looks exactly the same across both devices.</p><iframe allow="" height="395" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=7fe0a734-90f4-11f1-ba1b-0e6f42328d7d"></iframe><p>Speaking of identical, the same is true of the telephoto lens at 3x optical zoom. The quality of the shot on both phones is pretty poor, and it's an upgrade Samsung desperately needs to make ahead of the Z Fold 9 launch next year.</p><iframe allow="" height="395" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=afe785b0-90f4-11f1-ba1b-0e6f42328d7d"></iframe><p>Pushing the magnification up to 10x doesn't make any difference either. While the details are being picked up by the camera, the actual quality of the final shot is atrocious compared to other flagship phones that cost considerably less money — including Samsung's own Galaxy S26 Ultra.</p><iframe allow="" height="395" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=00141e9a-90f5-11f1-ba1b-0e6f42328d7d"></iframe><p>Samsung made a point of emphasizing how much it was improving low light capabilities with the Z Fold 8 Ultra, and it definitely looks like it's succeeded. Compared to the Z Fold 7, the night-time shots are brighter, crisper and pick up a lot more detail from the mail box. In fact, the Z Fold 7 shot blurs out the letters V and R around the crown at the top</p><p>Samsung has clearly made some improvements to the Galaxy Z Fold 8 Ultra, especially where low light photography is concerned. But a lot of the daytime upgrades seem to be a lot more subtle, and less noticeable to the casual observer. Whether that minor boost is worth it for you all depends on which phone you have, and whether the Z Fold 8 Ultra's other upgrades matter to you or not.</p><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-8-ultra-vs-samsung-galaxy-z-fold-7-battery-charging"><span>Samsung Galaxy Z Fold 8 Ultra vs Samsung Galaxy Z Fold 7: Battery &amp; charging</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3531px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="imtV2afR8StvoQEVHJmnSS" name="Z Fold 8 Ultra vs Z Fold 7-10" alt="samsung galaxy z fold 7 and galaxy z fold 8 ultra" src="https://cdn.mos.cms.futurecdn.net/imtV2afR8StvoQEVHJmnSS-1920-80.jpg" mos="" align="middle" fullscreen="" width="3531" height="1986" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>One of the biggest upgrades on the Galaxy Z Fold 8 Ultra is the fact that the <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-vs-fold-8-ultra-vs-flip-8-battery-tests-silicon-carbon-pays-off">battery life is so much better now</a>. This is thanks to a higher capacity silicon carbon battery with 5,000 mAh capacity, compared to 4,400 mAh for the Fold 7. Our custom battery test, which involves web-surfing over a 5G connection until the power runs out, clocked the Z Fold 8 Ultra's battery life at 14 hours and 33 minutes.</p><p>While this isn't as good as the Galaxy S26 Ultra, it is almost four hours longer than the Galaxy Z Fold 7's 10 hours and 44 minutes of battery life. Under 11 hours is pretty disappointing, but hitting 14+ hours means the Z Fold 8 Ultra is far more likely to make it through a single day without recharging.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Hours : Minutes</strong></p></td><td  ><p><strong>Charging % in 30 minutes</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8 Ultra</strong></p></td><td  ><p>14:33</p></td><td  ><p>76%</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 7</strong></p></td><td  ><p>10:44</p></td><td  ><p>54%</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy S26 Ultra</strong></p></td><td  ><p>16:10</p></td><td  ><p>77%</p></td></tr></tbody></table></div><p>The Z Fold 8 Ultra offers 45W wired charging compared to the Z Fold 7's 25W. That faster charging allows the phone to reclaim 76% of its battery life in just 30 minutes, compared to 54% on the Z Fold 7. Wireless charging has also increased by 5W, with up to 20W Qi2 speeds on the Z Fold 8 Ultra — though the embedded magnets are still missing from the phone.</p><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-8-ultra-vs-samsung-galaxy-z-fold-7-verdict"><span>Samsung Galaxy Z Fold 8 Ultra vs Samsung Galaxy Z Fold 7: Verdict</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3187px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="ibSFwbJGnJU62HeZzyCu4S" name="Z Fold 8 Ultra vs Z Fold 7-LIST" alt="samsung galaxy z fold 7 and galaxy z fold 8 ultra" src="https://cdn.mos.cms.futurecdn.net/ibSFwbJGnJU62HeZzyCu4S-1920-80.jpg" mos="" align="middle" fullscreen="" width="3187" height="1793" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Samsung Galaxy Z Fold 8 Ultra has a lot of upgrades compared to last year, and the majority of them are available in areas that actually matter to your everyday use of the phone. Battery life is significantly improved, performance has taken a pretty big jump and the bright, anti-reflective display makes it significantly nicer to use this phone in a variety of conditions. </p><p>Those are all notable quality of life improvements that could make the Z Fold 8 Ultra the foldable of choice for most people. The camera changes are subtle, with the biggest difference being low-light performance.</p><p>Overall. the Fold 7 is still a very good foldable, especially when you can find it for a sizable discount. But if you're in the market for a new foldable phone, the Fold 8 Ultra is hands-down the better option.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom’s Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/samsung-phones/i-just-tried-the-new-samsung-dex-on-the-galaxy-z-fold-8-and-it-has-one-huge-upgrade">I just tried the new Samsung DeX on the Galaxy Z Fold 8 — and it has one huge upgrade</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/3-big-ways-the-iphone-ultra-could-beat-the-galaxy-z-fold-8">iPhone Ultra vs Galaxy Z Fold 8 — here's 3 big ways Apple could win</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-vs-fold-8-ultra-camera-test-is-the-telephoto-zoom-worth-the-extra-usd200">I tested the Galaxy Z Fold 8 vs. Fold 8 Ultra to see if the lack of a telephoto zoom is a dealbreaker</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Galaxy Z Fold 8 deals are here: how to save up $1,200 on Samsung's new foldables ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The Galaxy Z Fold 8 and Galaxy Z Fold 8 Ultra are officially available for purchase. Samsung's new phones are among the <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">best foldable phones</a> we've tested, but they're also some one of the priciest. The Galaxy Z Fold 8 starts at $1,899, whereas the Galaxy Z Fold 8 Ultra starts at $2,099.</p><p>The good news is that there are plenty of Galaxy Z Fold 8 deals you can get right now on both phones. For example, you can get <a href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow">up to $1,900 off either phone at T-Mobile</a> with trade-in and an eligible data plan. Alternatively, you can get <a href="https://www.samsung.com/us/smartphones/galaxy-z-fold8-ultra/buy/galaxy-z-fold8-ultra-256gb-unlocked-sku-sm-f976uzvaxaa/" target="_blank" rel="nofollow">up to $1,200 off the Galaxy Z Fold 8 Ultra at Samsung</a> with trade-in. Or you'll get the same <a href="https://www.samsung.com/us/smartphones/galaxy-z-fold8-ultra/buy/galaxy-z-fold8-ultra-256gb-unlocked-sku-sm-f976uzvaxaa/" target="_blank" rel="nofollow">$200 Samsung credit</a> without a trade. </p><p>Below I've rounded up all of the best Galaxy Z Fold 8 and Galaxy Z Fold 8 Ultra deals you can get. (For more ways to save, check out the <a href="https://www.tomsguide.com/savings-squad">Tom's Guide Savings Squad</a> hub).</p><h3 class="article-body__section" id="section-quick-links-galaxy-z-fold-8"><span>Quick Links: Galaxy Z Fold 8</span></h3><ul><li><strong>T-Mobile: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><strong>free w/ trade-in + unlimited</strong></a><strong></strong></li><li><strong>Samsung: </strong><a href="https://www.samsung.com/us/smartphones/galaxy-z-fold8/buy/galaxy-z-fold8-256gb-unlocked-sku-sm-f971ulvaxaa/" target="_blank" rel="nofollow"><strong>up to $1,200 off w/ trade-in or $200 credit</strong></a></li><li><strong>AT&amp;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&amp;T: </strong><a href="https://www.att.com/buy/phones/samsung-galaxy-z-fold8-ultra.html" target="_blank" rel="nofollow"><strong>$5/month w/ trade-in + unlimited</strong></a></li><li><strong>Verizon: </strong><a href="https://www.verizon.com/smartphones/samsung-galaxy-z-fold8-ultra/?isMyPlanFlow=true" target="_blank" rel="nofollow"><strong>up to $1,200 off w/ trade-in or free watch + tablet</strong></a></li><li><strong>Xfinity Mobile: </strong><a href="https://www.xfinity.com/mobile/shop/phone/galaxy-z-fold8-ultra" target="_blank" rel="nofollow"><strong>up to $1,000 off w/ trade-in + unlimited</strong></a></li><li><strong>Best Buy: </strong><a href="https://www.bestbuy.com/productlist/promo/latest-samsung-galaxy-phones" target="_blank" rel="nofollow"><strong>up to $1,200 off w/ trade-in + $200 gift card</strong></a><strong></strong></li><li><strong>Amazon: </strong><a href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12KX1X4" target="_blank" rel="nofollow"><strong>$1,899 + $350 gift card</strong></a></li></ul><h3 class="article-body__section" id="section-galaxy-z-fold-8-deals"><span>Galaxy Z Fold 8 deals</span></h3><div class="product"><a data-dimension112="41449426-8f79-11f1-ac6a-cd8e71eb7761" data-action="Deal Block" data-label="Galaxy Z Fold 8: free w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Fold 8: free w/ trade-in + unlimited @ T-Mobile" href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:600px;"><p class="vanilla-image-block" style="padding-top:66.67%;"><img id="4gDqoyT3A5J9nTa6Axevfg" name="TMobileLogo_1.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/4gDqoyT3A5J9nTa6Axevfg-1920-80.jpg" mos="" align="middle" fullscreen="" width="600" height="400" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><strong>Galaxy Z Fold 8: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="41449426-8f79-11f1-ac6a-cd8e71eb7761" data-action="Deal Block" data-label="Galaxy Z Fold 8: free w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Fold 8: free w/ trade-in + unlimited @ T-Mobile" data-dimension25=""><strong>free w/ trade-in + unlimited @ T-Mobile</strong></a><br />New and existing T-Mobile customers can get the Galaxy Z Fold 8 for free with trade-in and Experience Beyond data plans. Or you'll get up to $1,100 off with trade-in and on Experience More plans. Other discounts are also available for other plans. <a class="view-deal button" href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="41449426-8f79-11f1-ac6a-cd8e71eb7761" data-action="Deal Block" data-label="Galaxy Z Fold 8: free w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Fold 8: free w/ trade-in + unlimited @ T-Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="41449494-8f79-11f1-a3b3-034c75c466ef" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8: up to $1,200 off w/ trade-in @ Samsung" href="https://www.samsung.com/us/smartphones/galaxy-z-fold8/buy/galaxy-z-fold8-256gb-unlocked-sku-sm-f971ulvaxaa/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1312px;"><p class="vanilla-image-block" style="padding-top:55.95%;"><img id="YFnsbuxZypxrkdepxUH3h9" name="Samsung logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/YFnsbuxZypxrkdepxUH3h9-1920-80.jpg" mos="" align="middle" fullscreen="" width="1312" height="734" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><strong>Galaxy Z Fold 8: </strong><a href="https://www.samsung.com/us/smartphones/galaxy-z-fold8/buy/galaxy-z-fold8-256gb-unlocked-sku-sm-f971ulvaxaa/" target="_blank" rel="nofollow" data-dimension112="41449494-8f79-11f1-a3b3-034c75c466ef" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8: up to $1,200 off w/ trade-in @ Samsung" data-dimension25=""><strong>up to $1,200 off w/ trade-in @ Samsung</strong></a><br />Samsung is knocking up to $1,200 off Galaxy Z Fold 8 when you trade-in an older phone. Alternatively, you'll get a $200 credit if you don't have a trade-in. The phone features an 7.6-inch AMOLED (1848 x 2448) 120Hz main display, 5.5-inch AMOLED (1248 x 1972) 120Hz cover display, Snapdragon 8 Elite CPU, 12GB of RAM, and 256GB of storage. On the rear you get a 50MP main wide-angle lens and 50MP ultra-wide lens. Selfie cams include a 10MP main display and 10MP cover camera. In our <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-hands-on-review">Galaxy Z Fold 8 hands-on</a>, we called it our favorite foldable to date. It loses the telephoto zoom, but you get a greatly reduced crease, brighter main screen, and lighter design.<a class="view-deal button" href="https://www.samsung.com/us/smartphones/galaxy-z-fold8/buy/galaxy-z-fold8-256gb-unlocked-sku-sm-f971ulvaxaa/" target="_blank" rel="nofollow" data-dimension112="41449494-8f79-11f1-a3b3-034c75c466ef" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8: up to $1,200 off w/ trade-in @ Samsung" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="41449502-8f79-11f1-874d-61a515c7a389" data-action="Deal Block" data-label="Galaxy Z Fold 8: free w/ trade-in + unlimited @ AT&amp;T" data-dimension48="Galaxy Z Fold 8: free w/ trade-in + unlimited @ AT&amp;T" href="https://www.att.com/buy/phones/samsung-galaxy-z-fold8.html" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:225px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="o9PdShQsgAk95AN7C5UMNR" name="AT&amp;T Logo.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/o9PdShQsgAk95AN7C5UMNR-1920-80.jpeg" mos="" align="middle" fullscreen="" width="225" height="225" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><strong>Galaxy Z Fold 8: </strong><a href="https://www.att.com/buy/phones/samsung-galaxy-z-fold8.html" target="_blank" rel="nofollow" data-dimension112="41449502-8f79-11f1-874d-61a515c7a389" data-action="Deal Block" data-label="Galaxy Z Fold 8: free w/ trade-in + unlimited @ AT&amp;T" data-dimension48="Galaxy Z Fold 8: free w/ trade-in + unlimited @ AT&amp;T" data-dimension25=""><strong>free w/ trade-in + unlimited @ AT&amp;T</strong></a><br />New and existing customers can get the Galaxy Z Fold 8 for free when you trade in a phone with an eligible data plan. <a class="view-deal button" href="https://www.att.com/buy/phones/samsung-galaxy-z-fold8.html" target="_blank" rel="nofollow" data-dimension112="41449502-8f79-11f1-874d-61a515c7a389" data-action="Deal Block" data-label="Galaxy Z Fold 8: free w/ trade-in + unlimited @ AT&amp;T" data-dimension48="Galaxy Z Fold 8: free w/ trade-in + unlimited @ AT&amp;T" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="41449566-8f79-11f1-bd42-25fd978ef78f" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,200 off + free $200 GC @ Best Buy" data-dimension48="Galaxy Z Fold 8: up to $1,200 off + free $200 GC @ Best Buy" href="https://www.bestbuy.com/productlist/promo/latest-samsung-galaxy-phones" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1331px;"><p class="vanilla-image-block" style="padding-top:68.52%;"><img id="yjsgCbZzcWDLMuhHtLHa7K" name="Best Buy deal block 2022.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yjsgCbZzcWDLMuhHtLHa7K-1920-80.jpeg" mos="" align="middle" fullscreen="" width="1331" height="912" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><strong>Galaxy Z Fold 8: </strong><a href="https://www.bestbuy.com/productlist/promo/latest-samsung-galaxy-phones" target="_blank" rel="nofollow" data-dimension112="41449566-8f79-11f1-bd42-25fd978ef78f" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,200 off + free $200 GC @ Best Buy" data-dimension48="Galaxy Z Fold 8: up to $1,200 off + free $200 GC @ Best Buy" data-dimension25=""><strong>up to $1,200 off + free $200 GC @ Best Buy</strong></a><br />Best Buy is offering one of the best Galaxy Z Fold 8 deals around. Purchase your phone at Best Buy with trade-in and you'll get up to $1,200 off. Plus, you'll get a free $200 Best Buy gift card. <a class="view-deal button" href="https://www.bestbuy.com/productlist/promo/latest-samsung-galaxy-phones" target="_blank" rel="nofollow" data-dimension112="41449566-8f79-11f1-bd42-25fd978ef78f" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,200 off + free $200 GC @ Best Buy" data-dimension48="Galaxy Z Fold 8: up to $1,200 off + free $200 GC @ Best Buy" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="414495d4-8f79-11f1-abf6-3dcb3004637c" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension48="Galaxy Z Fold 8: up to $1,200 off w/ trade-in + unlimited @ Verizon" href="https://www.verizon.com/smartphones/samsung-galaxy-z-fold8/?sku=sku6049305?isMyPlanFlow=true" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3321px;"><p class="vanilla-image-block" style="padding-top:40.98%;"><img id="R4vXmWQKAkSdQs7bVstjs8" name="Verizon logo 2024.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/R4vXmWQKAkSdQs7bVstjs8-1920-80.jpg" mos="" align="middle" fullscreen="" width="3321" height="1361" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><strong>Galaxy Z Fold 8: </strong><a href="https://www.verizon.com/smartphones/samsung-galaxy-z-fold8/?sku=sku6049305?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="414495d4-8f79-11f1-abf6-3dcb3004637c" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension48="Galaxy Z Fold 8: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension25=""><strong>up to $1,200 off w/ trade-in + unlimited @ Verizon</strong></a><br />Verizon is taking up to $1,200 off your Galaxy Z Fold 8 purchase with trade-in and eligible unlimited data plans. Or buy a Galaxy Fold 8 and get a free Galaxy Watch 9 and Galaxy Tab 10 FE 5G when you open a new line for each device. <a class="view-deal button" href="https://www.verizon.com/smartphones/samsung-galaxy-z-fold8/?sku=sku6049305?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="414495d4-8f79-11f1-abf6-3dcb3004637c" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension48="Galaxy Z Fold 8: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="41449660-8f79-11f1-bbc7-7fb18b0f86de" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Xfinity Mobile" data-dimension48="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Xfinity Mobile" href="https://www.xfinity.com/mobile/shop/phone/galaxy-z-fold8" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:300px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="NCwubcuyQYEeAmGJjMxYde" name="xfinitymobile-logo.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/NCwubcuyQYEeAmGJjMxYde-1920-80.jpeg" mos="" align="middle" fullscreen="" width="300" height="300" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><strong>Galaxy Z Fold 8: </strong><a href="https://www.xfinity.com/mobile/shop/phone/galaxy-z-fold8" target="_blank" rel="nofollow" data-dimension112="41449660-8f79-11f1-bbc7-7fb18b0f86de" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Xfinity Mobile" data-dimension48="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Xfinity Mobile" data-dimension25=""><strong>up to $1,000 off w/ trade-in @ Xfinity Mobile</strong></a><br />Xfinity Mobile is offering up to $1,000 off the Galaxy Z Fold 8 (via trade-in). Customers who don't have a phone to trade can still get $600 off. <a class="view-deal button" href="https://www.xfinity.com/mobile/shop/phone/galaxy-z-fold8" target="_blank" rel="nofollow" data-dimension112="41449660-8f79-11f1-bbc7-7fb18b0f86de" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Xfinity Mobile" data-dimension48="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Xfinity Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="414497d2-8f79-11f1-9643-f9639a8eb9cb" data-action="Deal Block" data-label="Samsung Galaxy Z Fold 8: for $1,899 @ Amazon" data-dimension48="Samsung Galaxy Z Fold 8: for $1,899 @ Amazon" href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12M2TY4" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:954px;"><p class="vanilla-image-block" style="padding-top:98.95%;"><img id="4EngEpxMLxWVDrp7aAo2xi" name="Galaxy Z Fold 8 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/4EngEpxMLxWVDrp7aAo2xi-1920-80.jpg" mos="" align="middle" fullscreen="" width="954" height="944" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><strong>Samsung Galaxy Z Fold 8: </strong><a href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12M2TY4" target="_blank" rel="nofollow" data-dimension112="414497d2-8f79-11f1-9643-f9639a8eb9cb" data-action="Deal Block" data-label="Samsung Galaxy Z Fold 8: for $1,899 @ Amazon" data-dimension48="Samsung Galaxy Z Fold 8: for $1,899 @ Amazon" data-dimension25=""><strong>for $1,899 @ Amazon</strong></a><br />Amazon is offering a free $350 Amazon gift card when you buy your Galaxy Z Fold 8 at Amazon. <a class="view-deal button" href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12M2TY4" target="_blank" rel="nofollow" data-dimension112="414497d2-8f79-11f1-9643-f9639a8eb9cb" data-action="Deal Block" data-label="Samsung Galaxy Z Fold 8: for $1,899 @ Amazon" data-dimension48="Samsung Galaxy Z Fold 8: for $1,899 @ Amazon" data-dimension25="">View Deal</a></p></div><h3 class="article-body__section" id="section-galaxy-z-fold-8-ultra-preorder-deals"><span>Galaxy Z Fold 8 Ultra preorder deals</span></h3><div class="product"><a data-dimension112="41449912-8f79-11f1-a0c4-f3d8c7aa50af" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,900 off w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,900 off w/ trade-in + unlimited @ T-Mobile" href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:600px;"><p class="vanilla-image-block" style="padding-top:66.67%;"><img id="4gDqoyT3A5J9nTa6Axevfg" name="TMobileLogo_1.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/4gDqoyT3A5J9nTa6Axevfg-1920-80.jpg" mos="" align="middle" fullscreen="" width="600" height="400" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 Ultra: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="41449912-8f79-11f1-a0c4-f3d8c7aa50af" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,900 off w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,900 off w/ trade-in + unlimited @ T-Mobile" data-dimension25=""><strong>up to $1,900 off w/ trade-in + unlimited @ T-Mobile</strong></a><br />New and existing T-Mobile customers can get up to $1,900 off the Galaxy Z Fold 8 Ultra with trade-in and Experience Beyond data plans. Or you'll get up to $1,100 off with trade-in and on Experience More plans. Other discounts are also available for other plans. <a class="view-deal button" href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="41449912-8f79-11f1-a0c4-f3d8c7aa50af" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,900 off w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,900 off w/ trade-in + unlimited @ T-Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="41449980-8f79-11f1-80b7-b1abdaa2cb44" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" href="https://www.samsung.com/us/smartphones/galaxy-z-fold8-ultra/buy/galaxy-z-fold8-ultra-256gb-unlocked-sku-sm-f976uzvaxaa/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1312px;"><p class="vanilla-image-block" style="padding-top:55.95%;"><img id="YFnsbuxZypxrkdepxUH3h9" name="Samsung logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/YFnsbuxZypxrkdepxUH3h9-1920-80.jpg" mos="" align="middle" fullscreen="" width="1312" height="734" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 Ultra: </strong><a href="https://www.samsung.com/us/smartphones/galaxy-z-fold8-ultra/buy/galaxy-z-fold8-ultra-256gb-unlocked-sku-sm-f976uzvaxaa/" target="_blank" rel="nofollow" data-dimension112="41449980-8f79-11f1-80b7-b1abdaa2cb44" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" data-dimension25=""><strong>up to $1,200 off w/ trade-in @ Samsung</strong></a><br />Samsung is knocking up to $1,200 off Galaxy Z Fold 8 Ultra purchases when you trade-in an older phone. Alternatively, you'll get a $200 credit if you don't have a trade-in. The phone features an 8-inch AMOLED (2504 x 2256) 120Hz main display, 6.5-inch AMOLED (1080 x 2520) 120Hz cover display, Snapdragon 8 Elite CPU, 12GB of RAM, and 256GB of storage. On the rear you get a 200MP main wide-angle lens, 50MP ultra-wide lens, and 10MP telephoto lens (3x optical). Selfie cams include a 10MP main display and 10MP cover camera. In our <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-ultra-hands-on-review">Galaxy Z Fold 8 Ultra review</a>, we said its greatly reduced crease, upgraded silicon carbon battery, faster charging, and upgraded ultrawide camera make it a meaningful upgrade.<a class="view-deal button" href="https://www.samsung.com/us/smartphones/galaxy-z-fold8-ultra/buy/galaxy-z-fold8-ultra-256gb-unlocked-sku-sm-f976uzvaxaa/" target="_blank" rel="nofollow" data-dimension112="41449980-8f79-11f1-80b7-b1abdaa2cb44" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="414499e4-8f79-11f1-a71f-9328405cf2c4" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off + free $200 GC @ Best Buy" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off + free $200 GC @ Best Buy" href="https://www.bestbuy.com/productlist/promo/latest-samsung-galaxy-phones" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1331px;"><p class="vanilla-image-block" style="padding-top:68.52%;"><img id="yjsgCbZzcWDLMuhHtLHa7K" name="Best Buy deal block 2022.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yjsgCbZzcWDLMuhHtLHa7K-1920-80.jpeg" mos="" align="middle" fullscreen="" width="1331" height="912" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 Ultra: </strong><a href="https://www.bestbuy.com/productlist/promo/latest-samsung-galaxy-phones" target="_blank" rel="nofollow" data-dimension112="414499e4-8f79-11f1-a71f-9328405cf2c4" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off + free $200 GC @ Best Buy" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off + free $200 GC @ Best Buy" data-dimension25=""><strong>up to $1,200 off + free $200 GC @ Best Buy</strong></a><br />Best Buy is offering one of the best Galaxy Z Fold 8 Ultra deals around. Buy your phone at Best Buy with trade-in and you'll get up to $1,200 off. Plus, you'll get a free $200 Best Buy gift card just for your purchase. <a class="view-deal button" href="https://www.bestbuy.com/productlist/promo/latest-samsung-galaxy-phones" target="_blank" rel="nofollow" data-dimension112="414499e4-8f79-11f1-a71f-9328405cf2c4" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off + free $200 GC @ Best Buy" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off + free $200 GC @ Best Buy" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="41449a48-8f79-11f1-9a8d-5137f7f6511a" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: $5/month w/ trade-in + unlimited @ AT&amp;T" data-dimension48="Galaxy Z Fold 8 Ultra: $5/month w/ trade-in + unlimited @ AT&amp;T" href="https://www.att.com/buy/phones/samsung-galaxy-z-fold8-ultra.html" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:225px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="o9PdShQsgAk95AN7C5UMNR" name="AT&amp;T Logo.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/o9PdShQsgAk95AN7C5UMNR-1920-80.jpeg" mos="" align="middle" fullscreen="" width="225" height="225" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 Ultra: </strong><a href="https://www.att.com/buy/phones/samsung-galaxy-z-fold8-ultra.html" target="_blank" rel="nofollow" data-dimension112="41449a48-8f79-11f1-9a8d-5137f7f6511a" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: $5/month w/ trade-in + unlimited @ AT&amp;T" data-dimension48="Galaxy Z Fold 8 Ultra: $5/month w/ trade-in + unlimited @ AT&amp;T" data-dimension25=""><strong>$5/month w/ trade-in + unlimited @ AT&amp;T</strong></a><br />New and existing customers can get the Galaxy Z Fold 8 Ultra for $5.56/month when you trade in a phone with an eligible data plan. That's up to $1,900 off the phone's full price. <a class="view-deal button" href="https://www.att.com/buy/phones/samsung-galaxy-z-fold8-ultra.html" target="_blank" rel="nofollow" data-dimension112="41449a48-8f79-11f1-9a8d-5137f7f6511a" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: $5/month w/ trade-in + unlimited @ AT&amp;T" data-dimension48="Galaxy Z Fold 8 Ultra: $5/month w/ trade-in + unlimited @ AT&amp;T" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="41449ab6-8f79-11f1-a62d-9f00e4deca92" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in + unlimited @ Verizon" href="https://www.verizon.com/smartphones/samsung-galaxy-z-fold8-ultra/?isMyPlanFlow=true" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3321px;"><p class="vanilla-image-block" style="padding-top:40.98%;"><img id="R4vXmWQKAkSdQs7bVstjs8" name="Verizon logo 2024.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/R4vXmWQKAkSdQs7bVstjs8-1920-80.jpg" mos="" align="middle" fullscreen="" width="3321" height="1361" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 Ultra: </strong><a href="https://www.verizon.com/smartphones/samsung-galaxy-z-fold8-ultra/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="41449ab6-8f79-11f1-a62d-9f00e4deca92" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension25=""><strong>up to $1,200 off w/ trade-in + unlimited @ Verizon</strong></a><br />Verizon is taking up to $1,200 off your Galaxy Z Fold 8 Ultra  with trade-in and eligible unlimited data plans. Or buy a Galaxy Fold 8 Ultra and get a free Galaxy Watch 9 and Galaxy Tab 10 FE 5G when you open a new line for each device. <a class="view-deal button" href="https://www.verizon.com/smartphones/samsung-galaxy-z-fold8-ultra/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="41449ab6-8f79-11f1-a62d-9f00e4deca92" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="41449b24-8f79-11f1-a28e-f1483432e178" data-action="Deal Block" data-label="Z Fold 8 Ultra" data-dimension48="Z Fold 8 Ultra" data-dimension25="$2099" href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12KX1X4" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1327px;"><p class="vanilla-image-block" style="padding-top:64.28%;"><img id="9Rhpe6TtrVFSNo9Vtn27Tm" name="Galaxy Z Fold 8 Ultra deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/9Rhpe6TtrVFSNo9Vtn27Tm-1920-80.jpg" mos="" align="middle" fullscreen="" width="1327" height="853" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p>Amazon is offering a free $350 Amazon gift card when you buy your Galaxy Z Fold 8 Ultra at Amazon. It's one of the most generous deals we've seen on the unlocked version of Samsung's foldable. <a class="view-deal button" href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12KX1X4" target="_blank" rel="nofollow" data-dimension112="41449b24-8f79-11f1-a28e-f1483432e178" data-action="Deal Block" data-label="Z Fold 8 Ultra" data-dimension48="Z Fold 8 Ultra" data-dimension25="$2099">View Deal</a></p></div><h3 class="article-body__section" id="section-shop-more-deals"><span>Shop more deals</span></h3><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=Everything&amp;rows=6&amp;view_mode=savings_squad&amp;widget_title=Top+Deals+Handpicked+by+Our+Editors&amp;widget_subtitle=Discover+the+best+discounts+currently+available%2C+curated+daily+by+the+Tom%27s+Guide+Savings+Squad.&amp;bg_color=transparent" data-vizualizer-embed="true"></div>    <script>    /**     * Tom's Guide Deals Finder - Vanilla JS Encapsulated Engine     */    (function() {      // --- Freyr Analytics Adapter ---      function initAnalytics() {        window.dataLayer = window.dataLayer || [];        window.googletag = window.googletag || {};        window.googletag.cmd = window.googletag.cmd || [];        window.hawk = window.hawk || { analytics: { freyr: [] } };        window.hawk.analytics = window.hawk.analytics || { freyr: [] };        window.hawk.analytics.freyr = window.hawk.analytics.freyr || [];        window.freyr = window.freyr || { cmd: [] };        const scriptSrc = 'https://freyr.futurecdn.net/freyr.js';        const hostname = typeof window !== 'undefined' ? window.location.hostname : '';        const isTestEnv = typeof window.navigator !== 'undefined' && (window.navigator.webdriver || window.navigator.userAgent.includes('Headless'));        const shouldSendRealAnalytics = !isTestEnv && hostname && hostname !== 'localhost' && hostname !== '127.0.0.1' && !hostname.includes('run.app');        if (shouldSendRealAnalytics && !document.querySelector(`script[src="${scriptSrc}"]`)) {          const script = document.createElement('script');          script.src = scriptSrc;          script.async = true;          document.head.appendChild(script);        }      }      function storeEventForDebug(name, data) {        if (!window.hawk || !window.hawk.analytics || !window.hawk.analytics.freyr) return;        window.hawk.analytics.freyr.push({ name, data });        try {          if (typeof window !== 'undefined' && window.localStorage) {            window.localStorage.setItem("hawk", JSON.stringify(window.hawk));          }        } catch (e) {          // Ignore storage issues        }        try {          window.dispatchEvent(new CustomEvent("hawk-analytics-update"));        } catch (e) {}      }      function sendToFreyr(eventName, data) {        if (typeof window === 'undefined') return;        window.freyr = window.freyr || { cmd: [] };        window.freyr.cmd.push(() => {          if (window.freyr && window.freyr.pushAndUpdate) {            window.freyr.pushAndUpdate(eventName, data);          }        });      }      function sendEvent(event, skip = false) {        try {          storeEventForDebug(event.name, event.data);          if (!skip) {            sendToFreyr(event.name, event.data);          }        } catch (e) {          // Ensure tracking errors don't surface to the user        }      }      function getCookie(name) {        try {          const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));          return match ? match[2] : null;        } catch (e) {          return null;        }      }      function getTimeAgo(dateString) {        if (!dateString) return '';        const date = new Date(dateString);        const now = new Date();        const diffInSeconds = Math.floor((now.getTime() - date.getTime()) / 1000);        if (diffInSeconds < 60) return 'Just now';        const diffInMinutes = Math.floor(diffInSeconds / 60);        if (diffInMinutes < 60) return `${diffInMinutes} min${diffInMinutes > 1 ? 's' : ''} ago`;        const diffInHours = Math.floor(diffInMinutes / 60);        if (diffInHours < 24) return `${diffInHours} hr${diffInHours > 1 ? 's' : ''} ago`;        const diffInDays = Math.floor(diffInHours / 24);        if (diffInDays < 30) return `${diffInDays} day${diffInDays > 1 ? 's' : ''} ago`;        const diffInMonths = Math.floor(diffInDays / 30);        if (diffInMonths < 12) return `${diffInMonths} mo${diffInMonths > 1 ? 's' : ''} ago`;        const diffInYears = Math.floor(diffInDays / 365);        return `${diffInYears} yr${diffInYears > 1 ? 's' : ''} ago`;      }      function normalizeCurrency(symbol) {        const map = {          '£': 'GBP',          '$': 'USD',          'A$': 'AUD',          'CA$': 'CAD',          '€': 'EUR'        };        return map[symbol] || symbol;      }      function trackElementInteraction(props) {        sendEvent({          name: 'elementInteraction',          data: {            element: {              action: props.action || "click",              id: props.id || undefined,              class: props.class || undefined,              name: props.name || undefined,              text: props.text || undefined,              label: props.label || undefined,              container: props.container || undefined,              url: props.url || undefined,              articleId: props.articleId || undefined            }          }        });      }      function generateRevenueId(url, productName, merchantName, modelId) {        const str = `${window.location.href}|${productName}|${merchantName}|${modelId || ''}|${new Date().toDateString()}|tomsguide`;        let hash = 0;        for (let i = 0; i < str.length; i++) {          const char = str.charCodeAt(i);          hash = ((hash << 5) - hash) + char;          hash = hash & hash;        }        let numericStr = Math.abs(hash).toString();        while (numericStr.length < 19) {          numericStr += Math.floor(Math.random() * 10).toString();        }        return numericStr.substring(0, 19);      }      function rewriteAffiliateLink(url, territory, revenueId) {        if (!url) return url;        const t = (territory || 'gb').toLowerCase();        return url.replace(/hawk-custom-tracking/g, `tomsguide-${t}-${revenueId}`);      }      function trackHawkEvent(params) {        const { clickType, widgetId, productCategoryName, product, productsArray, zeroBasedProductIndexOrNull, totalDealsOrProducts, areaClicked, merchant, revenueId, isoCurrencyCode, queryName, widgetTypeName } = params;        const data = {          event: "hawkEvent",          category: "Affiliates",          affiliate: {            action: {              type: clickType,              id: widgetId,              event: clickType === "appeared" ? "viewed" : "Click from",              timestamp: Date.now()            },            component: {              flag: "Editor",              product: productCategoryName || "deals",              category: `Signal Deal Finder ${widgetTypeName || "Carousel"} widget`,              type: clickType === "appeared" ? "review" : "signal product",              label: queryName || (product ? (product.name || "") : ""),              index: zeroBasedProductIndexOrNull === null || zeroBasedProductIndexOrNull === undefined ? -1 : zeroBasedProductIndexOrNull,              linkCount: totalDealsOrProducts || 0,              blockLayout: "",              areaClicked: areaClicked || ""            }          },          products: productsArray || (product && merchant ? [            {              product: {                primary: {                  id: product.id || product.matchId || null,                  name: product.name,                  type: "deal",                  price: product.price,                  previousPrice: product.previousPrice || null,                  currency: isoCurrencyCode || "USD",                  preorder: false,                  labels: [],                  link: product.link,                  originalLink: product.originalLink || null,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: null,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: product.globalId || null,                  inStock: product.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: isoCurrencyCode || "USD"                }              },              merchant: {                id: merchant.id || null,                name: merchant.name,                url: merchant.url || null,                network: merchant.network || null              },              model: {                id: product.modelId || null,                brand: product.brand || null,                name: product.name,                parent: product.parent || null              }            }          ] : []),          reviews: [],          _clear: true,          "gtm.uniqueEventId": Date.now() % 10000        };        sendEvent({ name: 'hawkEvent', data });      }      function trackDealClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card" });      }      function trackViewSimilarClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card View Similar" });      }      function trackPriceComparisonClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Price Comparison" });      }      function trackReviewClick(params) {        trackHawkEvent({ ...params, clickType: "review", areaClicked: "Signal Product Card Review Link" });      }      function trackShare(params) {        trackHawkEvent({ ...params, clickType: "share", areaClicked: "Signal Product Card Share" });      }      function trackDealsAppeared(widgetId, deals, revenueId, currency, queryName, widgetTypeName) {         if (!deals || deals.length === 0) return;                  const productsArray = deals.slice(0, 50).map((deal) => {            let voucherPct = null;            let rawPrice = parseFloat(deal.rawPrice) || parseFloat(deal.price) || null;            let rawMsrp = parseFloat(deal.rawMsrp) || parseFloat(deal.msrp) || null;            if (rawMsrp > rawPrice && rawPrice > 0) {              voucherPct = Math.round((1 - (rawPrice / rawMsrp)) * 100);            }            let numId = null;            if (deal.externalProductId && !isNaN(parseInt(deal.externalProductId))) {              numId = parseInt(deal.externalProductId);            } else if (deal.id && !isNaN(parseInt(deal.id))) {              numId = parseInt(deal.id);            } else {              numId = deal.matchId || null;            }            return {              product: {                primary: {                  id: numId,                  name: deal.productName || deal.title || "",                  type: "deal",                  price: rawPrice,                  previousPrice: rawMsrp,                  currency: currency || 'USD',                  preorder: false,                  labels: deal.modelBrand || deal.brand ? [                     { type: "brand", value: deal.modelBrand || deal.brand }                  ] : [],                  link: deal.url,                  originalLink: deal.url,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: voucherPct,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: deal.productKey || null,                  inStock: deal.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: currency || 'USD'                }              },              merchant: {                id: deal.merchantId ? parseInt(deal.merchantId) : null,                name: deal.merchant || "Retailer",                url: deal.merchantUrl || null,                network: deal.merchantNetwork || null              },              model: {                id: deal.modelId ? parseInt(deal.modelId) : null,                brand: deal.modelBrand || deal.brand || null,                name: deal.productName || deal.title || "",                parent: deal.modelParent || null              }            };         });                  trackHawkEvent({             clickType: "appeared",             widgetId: widgetId,             productCategoryName: "deals",             zeroBasedProductIndexOrNull: null,             totalDealsOrProducts: deals.length,             productsArray: productsArray,             queryName: queryName,             widgetTypeName: widgetTypeName         });      }      // 1. Setup Shadow DOM Sandbox      const currentScript = document.currentScript;      let hostContainer = null;      let template = null;            if (currentScript) {        let prev = currentScript.previousElementSibling;        while (prev) {          if (prev.tagName === 'TEMPLATE' && prev.classList.contains('tg-df-widget-template')) {            template = prev;          } else if (prev.tagName === 'DIV' && prev.classList.contains('tg-df-widget-host') && !prev.hasAttribute('data-initialized')) {            hostContainer = prev;            break;          }          prev = prev.previousElementSibling;        }      }            // Fallbacks in case script is deferred      if (!hostContainer) {        const hosts = document.querySelectorAll('.tg-df-widget-host:not([data-initialized])');        if (hosts.length > 0) hostContainer = hosts[0];      }            // Safely embedded template for CMS environments      const rawTemplate = `  \x3Cstyle>    /* --- Shadow DOM Base Reset --- */    *, *::before, *::after {      box-sizing: border-box;    }    img, picture, svg, video {      max-width: 100%;      height: auto;      display: block;    }    /*       1. Scoped CSS for Tom's Guide Deals Widget       All classes are prefixed with \`tg-df-\` to prevent CMS style leakage.    */    .tg-df-container {      container-type: inline-size;      container-name: tg-df;      --tg-df-blue: #1F69FF;      --tg-df-blue-hover: #004d8c;      --tg-df-text: #222222;      --tg-df-text-muted: #555555;      --tg-df-bg: #ffffff;      --tg-df-bg-secondary: #f4f4f4;      --tg-df-border: #e2e8f0;      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;      color: var(--tg-df-text);      background-color: transparent;       width: 100%;      max-width: 1200px;      margin: 0 auto;      padding-bottom: 24px;    }    .tg-df-container *, .tg-df-container *::before, .tg-df-container *::after {      margin: 0;      padding: 0;      box-sizing: border-box;    }    .tg-df-container img {      border: none;      margin: 0;      padding: 0;    }    .tg-df-container a {      text-decoration: none;      color: inherit;    }    /*       2. Search & Filter Bar    */    .tg-df-controls {      display: flex;      flex-direction: column;      align-items: center;      gap: 20px;      margin-bottom: 32px;      width: 100%;      position: relative;      z-index: 20;    }    .tg-df-top-bar {      display: flex;      width: 100%;      max-width: 760px;      gap: 12px;      margin: 0 auto;      align-items: center;    }    .tg-df-search-wrapper {      position: relative;      flex: 1;      width: 100%;      box-shadow: 0 8px 24px rgba(0,0,0,0.06);      border-radius: 40px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      z-index: 100;    }    .tg-df-autocomplete-dropdown {      position: absolute;      top: calc(100% + 4px);      left: 0;      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      max-height: 300px;      overflow-y: auto;      z-index: 200;      display: none;    }    .tg-df-autocomplete-dropdown.active {      display: block;    }    .tg-df-autocomplete-item {      padding: 12px 24px;      cursor: pointer;      font-size: 14px;      color: var(--tg-df-text);      transition: background 0.1s ease;    }    .tg-df-autocomplete-item:hover {      background: var(--tg-df-bg-secondary);    }    .tg-df-search-input {      width: 100%;      padding: 16px 64px 16px 24px;      font-size: 16px;      border: 2px solid transparent;      border-radius: 40px;      outline: none;      transition: border-color 0.2s ease, box-shadow 0.2s ease;      color: var(--tg-df-text);      background: transparent;    }    .tg-df-search-input:focus {      border-color: transparent;      box-shadow: 0 0 0 3px rgba(0, 108, 196, 0.15);    }    .tg-df-search-input::placeholder {      color: #999999;    }        .tg-df-search-btn {      position: absolute;      right: 8px;      top: 50%;      transform: translateY(-50%);      width: 40px;      height: 40px;      border-radius: 50%;      background: #222;      border: none;      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: background 0.2s ease;    }        .tg-df-search-btn:hover {      background: #000;    }    .tg-df-search-icon {      width: 16px;      height: 16px;      fill: #fff;    }    .tg-df-settings-wrapper {      position: relative;    }        .tg-df-settings-btn {      width: 48px;      height: 48px;      border-radius: 50%;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      box-shadow: 0 4px 12px rgba(0,0,0,0.04);      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: all 0.2s ease;      color: var(--tg-df-text-muted);      flex-shrink: 0;    }    .tg-df-settings-btn:hover {      background: var(--tg-df-bg-secondary);      border-color: #0000ff;      color: var(--tg-df-text);    }    .tg-df-settings-btn svg {      width: 24px;      height: 24px;      fill: currentColor;    }    .tg-df-settings-dropdown {      position: absolute;      top: calc(100% + 8px);      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      width: 280px;      padding: 20px;      display: none;      z-index: 100;      flex-direction: column;      gap: 20px;    }    .tg-df-settings-dropdown.active {      display: flex;    }        .tg-df-settings-dropdown-backdrop {      display: none;      position: fixed;      inset: 0;      z-index: 99;    }        .tg-df-settings-dropdown-backdrop.active {      display: block;    }    .tg-df-setting-item {      display: flex;      flex-direction: column;      gap: 10px;    }    .tg-df-setting-label {      font-size: 11px;      font-weight: 700;      color: var(--tg-df-text-muted);      text-transform: uppercase;      letter-spacing: 0.5px;    }        .tg-df-region-select {        padding: 10px 12px;        border-radius: 8px;        border: 1px solid var(--tg-df-border);        font-size: 15px;        outline: none;        background: var(--tg-df-bg-secondary);        color: var(--tg-df-text);        cursor: pointer;        width: 100%;    }    .tg-df-toggle {        position: relative;        display: inline-block;        width: 44px;        height: 24px;        flex-shrink: 0;    }    .tg-df-toggle input {        opacity: 0;        width: 0;        height: 0;    }    .tg-df-slider {        position: absolute;        cursor: pointer;        top: 0; left: 0; right: 0; bottom: 0;        background-color: #ccc;        transition: .2s;        border-radius: 24px;    }    .tg-df-slider:before {        position: absolute;        content: "";        height: 18px;        width: 18px;        left: 3px;        bottom: 3px;        background-color: white;        transition: .2s;        border-radius: 50%;    }    .tg-df-toggle input:checked + .tg-df-slider {        background-color: #1F69FF;    }    .tg-df-toggle input:checked + .tg-df-slider:before {        transform: translateX(20px);    }    .tg-df-dl-row {        flex-direction: row;        align-items: center;        justify-content: space-between;    }    .tg-df-dl-row-text {        font-size: 14px;        font-weight: 600;        color: var(--tg-df-text);    }    .tg-df-dl-row-subtext {        font-size: 12px;        font-weight: 400;        line-height: 1.3;        color: var(--tg-df-text-muted);        margin-top: 4px;        display: block;    }    .tg-df-filters-container {      position: relative;      width: 100%;      max-width: 800px;    }    .tg-df-scroll-btn {      display: none;      position: absolute;      top: 50%;      transform: translateY(-50%);      width: 32px;      height: 32px;      background: white;      border: 1px solid var(--tg-df-border);      border-radius: 50%;      align-items: center;      justify-content: center;      cursor: pointer;      z-index: 10;      box-shadow: 0 2px 8px rgba(0,0,0,0.1);      color: var(--tg-df-text-primary);      padding: 0;    }    .tg-df-scroll-btn svg {      width: 16px;      height: 16px;    }    .tg-df-scroll-btn:hover {      background: #f4f4f4;    }    .tg-df-scroll-btn.left {      left: 0px;    }    .tg-df-scroll-btn.right {      right: 0px;    }    @container tg-df (max-width: 768px) {      .tg-df-scroll-btn {        display: flex;        top: 22px; /* vertically center within the 44px high filter buttons */      }    }    .tg-df-filters {      display: grid;      width: 100%;      grid-template-columns: repeat(4, 1fr);      gap: 12px;      margin: 0 auto;      max-width: 800px;    }                 .tg-df-sort-wrapper {      position: relative;      display: flex;      align-items: center;      width: 100%;    }        .tg-df-sort-icon {      position: absolute;      left: 14px;      width: 14px;      height: 14px;      fill: var(--tg-df-text-muted);      pointer-events: none;    }    .tg-df-sort-select, .tg-df-filter-select {      width: 100%;      padding: 10px 36px 10px 38px;      font-size: 14px;      border: 1px solid var(--tg-df-border);      border-radius: 100px;      outline: none;      appearance: none;      background-color: var(--tg-df-bg-secondary);      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 12 12'%3E%3Cpath fill='%23555555' d='M6 8L1 3h10z'/%3E%3C/svg%3E");      background-repeat: no-repeat;      background-position: right 14px center;      color: var(--tg-df-text);      cursor: pointer;      font-weight: 500;      transition: all 0.2s ease;    }        .tg-df-price-input::-webkit-outer-spin-button,    .tg-df-price-input::-webkit-inner-spin-button {      -webkit-appearance: none;      margin: 0;    }    .tg-df-price-input {      -moz-appearance: textfield;    }    .tg-df-sort-select:hover, .tg-df-filter-select:hover {      background-color: #e2e8f0;    }    .tg-df-multiselect-container {      position: relative;    }    @container tg-df (max-width: 768px) {      .tg-df-filters-container {      position: relative;      width: 100%;      max-width: 800px;    }    .tg-df-scroll-btn {      display: none;      position: absolute;      top: 50%;      transform: translateY(-50%);      width: 32px;      height: 32px;      background: white;      border: 1px solid var(--tg-df-border);      border-radius: 50%;      align-items: center;      justify-content: center;      cursor: pointer;      z-index: 10;      box-shadow: 0 2px 8px rgba(0,0,0,0.1);      color: var(--tg-df-text-primary);      padding: 0;    }    .tg-df-scroll-btn svg {      width: 16px;      height: 16px;    }    .tg-df-scroll-btn:hover {      background: #f4f4f4;    }    .tg-df-scroll-btn.left {      left: 0px;    }    .tg-df-scroll-btn.right {      right: 0px;    }    @container tg-df (max-width: 768px) {      .tg-df-scroll-btn {        display: flex;        top: 22px; /* vertically center within the 44px high filter buttons */      }    }    .tg-df-filters {        width: 100%;        margin: 0;        margin-bottom: -320px;        padding: 0 16px 320px 16px;        display: flex;        flex-wrap: nowrap;        gap: 8px;        overflow-x: auto;        overflow-y: hidden;        pointer-events: none;        scrollbar-width: none;        -webkit-overflow-scrolling: touch;      }      .tg-df-filters::-webkit-scrollbar {        display: none;      }      .tg-df-sort-wrapper {        pointer-events: auto;        flex: 0 0 auto;        width: 175px;        min-width: 175px;      }    }        .tg-df-multiselect-trigger {      display: block;      background: #fff;      user-select: none;      width: 100%;      overflow: hidden;      white-space: nowrap;      text-overflow: ellipsis;    }        .tg-df-multiselect-dropdown {      display: none;      position: absolute;      top: calc(100% + 4px);      left: 0;      width: 100%;      min-width: 220px;      max-height: 300px;      overflow-y: auto;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);      z-index: 100;      padding: 8px 0;    }    .tg-df-multiselect-dropdown.active {      display: block;    }    .tg-df-ms-option {      padding: 8px 16px;      display: flex;      align-items: center;      gap: 8px;      cursor: pointer;      font-size: 14px;    }    .tg-df-ms-option:hover {      background-color: var(--tg-df-bg-secondary);    }        .tg-df-ms-option input {      cursor: pointer;      accent-color: #1f69ff;    }    .tg-df-sort-select:focus, .tg-df-filter-select:focus {      border-color: #0000ff;      box-shadow: 0 0 0 3px rgba(0, 0, 255, 0.2);      background-color: var(--tg-df-bg);    }    /*       3. Deal Grid Layout    */    .tg-df-grid.tg-df-grid-auto {      padding-top: 24px;    }    .tg-df-grid, .tg-df-grid.layout-grid {      display: grid;      grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));      gap: 10px;    }    .tg-df-grid.layout-row {      grid-template-columns: 1fr;      gap: 16px;    }        .tg-df-grid.layout-row .tg-df-card {      flex-direction: row;      align-items: stretch;      height: auto;      box-shadow: none;      border-bottom: 1px solid var(--tg-df-border);    }    .tg-df-grid.layout-row .tg-df-card:hover {      box-shadow: none;    }    .tg-df-grid.layout-row .tg-df-card-image-box {      width: 140px;      min-width: 140px;      aspect-ratio: 3/4;      border-right: none;      padding: 16px 16px 16px 32px;    }    .tg-df-grid.layout-row .tg-df-card-body {      padding: 16px;      justify-content: space-between;    }    .tg-df-grid.layout-row .tg-df-card-title {      font-size: 15px;      margin-bottom: 16px;    }    .tg-df-grid.layout-row .tg-df-card-stars { margin-bottom: 8px; }    .tg-df-grid.layout-row .tg-df-card-footer {      flex-direction: column;      align-items: flex-start;      gap: 0;    }    .tg-df-grid.layout-row .tg-df-card-merchant-pill {      margin-bottom: 4px;    }    .tg-df-grid.layout-row .tg-df-card-price-group {      margin-bottom: 8px;    }    .tg-df-grid.layout-row .tg-df-price-group {      width: auto;    }    .tg-df-grid.layout-row .tg-df-card-cta {      width: 100%;      max-width: 200px;      padding: 10px 24px;      font-size: 13px;      flex-shrink: 0;      text-align: center;      justify-content: center;    }    /*       4. Deal Card Design    */    .tg-df-card {      position: relative;      display: flex;      flex-direction: column;      background-color: #ffffff;      border-radius: 0;      overflow: hidden;      transition: transform 0.2s ease, box-shadow 0.2s ease;      text-decoration: none;      color: inherit;      height: 100%;      box-shadow: 0 0 16px rgba(0, 0, 0, 0.08);      border: 1px solid var(--tg-df-border);    }    .tg-df-card:hover {      box-shadow: 0 0 24px rgba(0, 0, 0, 0.12);    }    .tg-df-card-image-box {      width: 100%;      aspect-ratio: 3/4;      background-color: #f8f8f8;      display: flex;      align-items: center;      justify-content: center;      position: relative;      overflow: hidden;      padding: 32px;      flex: 0 0 auto;    }    .tg-df-card-image {      max-width: 100%;      max-height: 100%;      width: auto;      height: auto;      object-fit: contain;      mix-blend-mode: multiply; /* Helps white background images blend into secondary bg */      transition: transform 0.3s ease;    }    .tg-df-card:hover .tg-df-card-image {      transform: scale(1.05); /* Zoom in on hover */    }    .tg-df-card-discount-badge {      position: absolute;      top: 12px;      left: 12px;      background: #dc2626; /* Red */      color: #ffffff;      padding: 6px 8px;      font-size: 11px;      font-weight: 500;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      z-index: 10;    }        .tg-df-card-merchant-pill {      display: block;      padding: 0;      font-size: 11px;      font-weight: 600;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      color: var(--tg-df-text-muted);      margin-bottom: 8px;      white-space: nowrap;      overflow: hidden;      text-overflow: ellipsis;    }    .tg-df-card-body {      padding: 16px;      display: flex;      flex-direction: column;      flex-grow: 1;      min-width: 0;    }    .tg-df-card-badges {      display: flex;      flex-wrap: wrap;      gap: 6px;      margin-bottom: 8px;    }    .tg-df-tag {      display: inline-flex;      align-items: center;      padding: 4px 6px;      font-size: 11px;      font-weight: 700;      text-transform: uppercase;      border-radius: 4px;      gap: 4px;    }    .tg-df-tag-prime {      background-color: #00A8E1;      color: #fff;    }    .tg-df-tag-coupons {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-coupons:hover {      background-color: #e2e8f0;    }        .tg-df-tag-outline {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-outline:hover {      background-color: #e2e8f0;    }        @keyframes tg-df-spin {      0% { transform: rotate(0deg); }      100% { transform: rotate(360deg); }    }    .tg-df-coupon-spinner {      border: 2px solid #e2e8f0;      border-top: 2px solid #3b82f6;      border-radius: 50%;      width: 14px;      height: 14px;      animation: tg-df-spin 1s linear infinite;      margin: 4px 8px;      display: inline-block;    }        /* Vouchers Modal */    .tg-df-modal-backdrop {      position: fixed;      top: 0; left: 0; right: 0; bottom: 0;      background: rgba(0,0,0,0.5);      z-index: 10000;      display: flex;      align-items: center;      justify-content: center;      opacity: 0;      pointer-events: none;      transition: opacity 0.3s;    }    .tg-df-modal-backdrop.active {      opacity: 1;      pointer-events: auto;    }    .tg-df-modal {      background: #fff;      border-radius: 12px;      width: 90%;      max-width: 400px;      max-height: 80vh;      display: flex;      flex-direction: column;      box-shadow: 0 10px 40px rgba(0,0,0,0.2);      transform: translateY(20px);      transition: transform 0.3s;    }    .tg-df-modal-backdrop.active .tg-df-modal {      transform: translateY(0);    }    .tg-df-modal-header {      padding: 16px;      border-bottom: 1px solid #e2e8f0;      display: flex;      align-items: center;      justify-content: space-between;    }    .tg-df-modal-title {      font-size: 16px;      font-weight: 600;      margin: 0;    }    .tg-df-modal-close {      background: none;      border: none;      cursor: pointer;      padding: 4px;      color: #64748b;    }    .tg-df-modal-body {      padding: 16px;      overflow-y: auto;    }    .tg-df-voucher-item {      padding: 12px;      border: 1px dashed #cbd5e1;      border-radius: 8px;      margin-bottom: 10px;      background: #f8fafc;      display: flex;      align-items: center;      gap: 12px;      text-decoration: none;      color: inherit;      transition: background-color 0.2s, border-color 0.2s;    }    .tg-df-voucher-item:hover {      background: #f1f5f9;      border-color: #94a3b8;    }    .tg-df-voucher-item:last-child {      margin-bottom: 0;    }    .tg-df-voucher-logo {      width: 48px;      height: 48px;      object-fit: contain;      border-radius: 4px;      background: #fff;      border: 1px solid #e2e8f0;      flex-shrink: 0;    }    .tg-df-voucher-content {      flex: 1;      min-width: 0;    }    .tg-df-voucher-title {      font-size: 14px;      font-weight: 600;      margin: 0 0 4px 0;      line-height: 1.3;      color: #0f172a;    }    .tg-df-voucher-expiry {      font-size: 12px;      color: #64748b;      display: flex;      align-items: center;      gap: 4px;      margin-top: 6px;    }    .tg-df-voucher-code {      display: inline-flex;      align-items: center;      background: #f1f5f9;      border: 1px dashed #cbd5e1;      padding: 6px 10px;      font-family: monospace;      font-weight: 700;      font-size: 14px;      color: #0f172a;      border-radius: 4px;      margin-top: 8px;      cursor: pointer;      transition: all 0.2s ease;    }    .tg-df-voucher-code:hover {      background: #e2e8f0;      border-color: #94a3b8;    }    .tg-df-voucher-code.copied {      background: #ecfdf5;      border-color: #10b981;      color: #10b981;    }    .tg-df-voucher-cta {      display: inline-block;      margin-top: 8px;      font-size: 13px;      font-weight: 600;      color: #2563eb;      text-decoration: none;    }    .tg-df-card-title {      font-size: 15px;      font-weight: 400;      line-height: 1.4;      margin: 0 0 12px 0;      color: var(--tg-df-text);    }    .tg-df-card-footer {      margin-top: auto;      display: flex;      flex-direction: column;      width: 100%;    }    .tg-df-card-price-group {      display: flex;      flex-direction: row;      align-items: center;      gap: 8px;      margin-bottom: 12px;    }    .tg-df-card-price {      font-size: 16px;      font-weight: 700;      color: #dc2626; /* Red price */      line-height: 1;    }        .tg-df-card-msrp {      font-size: 13px;      color: var(--tg-df-text-muted);      text-decoration: line-through;    }    .tg-df-container .tg-df-card-cta {      display: flex;      align-items: center;      justify-content: center;      width: 100%;      box-sizing: border-box;      background-color: #1f69ff;      color: #ffffff;      font-size: 12px;      font-weight: 700;      text-transform: uppercase;      letter-spacing: 0.5px;      padding: 12px 16px;      border-radius: 0;      border: none;      cursor: pointer;      transition: background-color 0.2s ease;    }    .tg-df-card:hover .tg-df-card-cta,    .tg-df-card-cta:hover {      background-color: #1555cc;    }    /*       5. State & Skeleton Styles    */    .tg-df-message {      grid-column: 1 / -1;      text-align: center;      padding: 48px 24px;      color: var(--tg-df-text-muted);      font-size: 16px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;    }    @keyframes tg-df-shimmer {      0% { background-position: -200% 0; }      100% { background-position: 200% 0; }    }    .tg-df-skeleton {      background: linear-gradient(90deg, var(--tg-df-bg-secondary) 25%, #e2e8f0 50%, var(--tg-df-bg-secondary) 75%);      background-size: 200% 100%;      animation: tg-df-shimmer 1.5s infinite;      border-radius: 4px;    }    .tg-df-skeleton-img {      width: 100%;      height: 100%;      position: absolute;      top: 0; left: 0;    }        .tg-df-skeleton-text {      height: 16px;      margin-bottom: 8px;      width: 100%;    }    .tg-df-skeleton-text.short { width: 40%; }    .tg-df-skeleton-text.title { height: 20px; margin-bottom: 16px; }    /* Editor Floating Bar & Elements */    .tg-df-editor-bar {      position: sticky;      top: 120px;      z-index: 1000;      background: #111827;      color: #fff;      padding: 12px 16px;      border-radius: 8px;      margin-bottom: 16px;      display: flex;      align-items: center;      justify-content: space-between;      box-shadow: 0 4px 12px rgba(0,0,0,0.15);    }    .tg-df-editor-bar-text {      font-weight: 600;      font-size: 14px;    }    .tg-df-editor-copy-btn {      background: #10b981;      color: #fff;      padding: 6px 16px;      border: none;      border-radius: 4px;      font-weight: 600;      cursor: pointer;      display: flex;      align-items: center;      font-size: 13px;    }    .tg-df-editor-copy-btn:hover { background: #059669; }        .tg-df-deal-checkbox {      position: absolute;      top: 12px;      right: 12px;      z-index: 10;      width: 20px;      height: 20px;      cursor: pointer;      pointer-events: auto;    }    /*       6. Mobile List View (Stacks into a cleaner horizontal row/list)    */    @container tg-df (max-width: 599px) {      .tg-df-controls {        padding: 16px 16px 8px;      }            .tg-df-top-bar {        width: 100%;      }            .tg-df-settings-dropdown {        position: fixed;        top: auto;        bottom: 0;        left: 0;        right: 0;        width: 100%;        border-radius: 20px 20px 0 0;        padding: 24px;        box-shadow: 0 -8px 32px rgba(0,0,0,0.15);        z-index: 1000;        border: none;        border-top: 1px solid var(--tg-df-border);      }            .tg-df-settings-dropdown-backdrop.active {        background: rgba(0,0,0,0.4);      }            .tg-df-search-wrapper {        box-shadow: 0 0 16px rgba(0,0,0,0.08);      }                  .tg-df-sort-wrapper.tg-df-price-range-wrapper {        flex: 0 0 auto;        min-width: max-content;        width: auto;      }            .tg-df-sort-select, .tg-df-filter-select {        width: 100%;        text-align: left;        padding: 10px 24px 10px 32px;        background-position: right 8px center;        text-overflow: ellipsis;        white-space: nowrap;        overflow: hidden;      }      .tg-df-sort-icon {        left: 10px;      }      .tg-df-grid:not(.layout-grid):not(.layout-row),      .tg-df-grid.layout-row {        grid-template-columns: 1fr;        gap: 16px;      }            .tg-df-grid.tg-df-grid-auto {        padding-top: 24px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card,      .tg-df-grid.layout-row .tg-df-card {        flex-direction: row;        align-items: stretch;        height: auto;        box-shadow: none; /* simple line on mobile if preferred, or keep */        border-bottom: 1px solid var(--tg-df-border);      }      .tg-df-grid.tg-df-grid-auto .tg-df-card:hover,      .tg-df-grid.layout-row .tg-df-card:hover {        box-shadow: none;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-image-box,      .tg-df-grid.layout-row .tg-df-card-image-box {        width: 120px;        min-width: 120px;        aspect-ratio: 3/4;        border-right: none;        padding: 12px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-body,      .tg-df-grid.layout-row .tg-df-card-body {        padding: 12px;        justify-content: space-between;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-title,      .tg-df-grid.layout-row .tg-df-card-title {        font-size: 14px;        margin-bottom: 12px;      }      /* Single column mobile grid override */      .tg-df-grid.layout-grid {        grid-template-columns: 1fr;        gap: 16px;      }      .tg-df-grid.layout-grid .tg-df-card-image-box {        padding: 12px;      }      .tg-df-grid.layout-grid .tg-df-card-body {        padding: 10px;      }      .tg-df-grid.layout-grid .tg-df-card-title {        font-size: 13px;        margin-bottom: 8px;      }      .tg-df-grid.layout-grid .tg-df-card-price {        font-size: 14px;      }            .tg-df-card-footer {        flex-direction: column;        align-items: stretch;        gap: 0;        width: 100%;        min-width: 0;      }      .tg-df-card-merchant-pill {        margin-bottom: 4px;      }      .tg-df-card-price-group {        flex: 1 1 auto;        margin-bottom: 8px;      }      .tg-df-card-price {        font-size: 16px;      }      .tg-df-card-msrp {        display: block;       }      .tg-df-grid.layout-row .tg-df-card-cta,      .tg-df-container .tg-df-card-cta {        width: 100%;        max-width: none;        min-width: 0;        box-sizing: border-box;        padding: 8px 16px;        font-size: 12px;        flex: 0 0 auto;        text-align: center;        white-space: normal;        line-height: 1.2;      }    }    .tg-df-container.is-carousel {      min-height: 760px;      background-color: #E7F0FF;      padding: 0 0 24px 0;      border-radius: 24px;      width: 100vw;      max-width: 1200px;      position: relative;      left: 50%;      transform: translateX(-50%);    }    .tg-df-container.is-carousel.hide-header-details {      min-height: 480px;    }    /*       7. Carousel View Mode    */    .tg-df-container .tg-df-carousel-host {      /* Layout is now handled by container wrapper */    }    .tg-df-container .tg-df-carousel-eyebrow {      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      padding: 24px 16px 0 16px;      display: none;    }    .tg-df-container .tg-df-carousel-query-title {      color: #011535;      font-size: 28px;      font-weight: 600;      padding: 0 16px 24px 16px;      line-height: 1.2;      display: none;    }    .tg-df-container .tg-df-carousel-blue-box {      background-color: transparent;      border-radius: 0;      padding: 24px 24px 0 24px;      margin: 0;      color: #1F69FF;          position: relative;      overflow: hidden;    }    .tg-df-container .tg-df-carousel-bg-circle-1 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-2 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-3 {      display: none;    }    .tg-df-container .tg-df-carousel-box-content {      position: relative;      z-index: 10;    }    .tg-df-container .tg-df-carousel-box-eyebrow {      background-color: transparent;      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      display: inline-block;      padding: 0;      border-radius: 0;    }    .tg-df-container .tg-df-carousel-box-title {      font-size: 28px;      font-weight: 600;      line-height: 1.2;      margin-top: 8px;      color: #1e293b;    }    .tg-df-container .tg-df-countdown-wrapper {      position: absolute;      top: 0;      right: 0;      display: flex;      flex-direction: column;      align-items: flex-end;      gap: 12px;      transform: scale(0.67);      transform-origin: top right;    }    .tg-df-container .tg-df-countdown-title {      font-size: 14px;      font-weight: 600;      color: #011535;      margin: 0;    }    .tg-df-container .tg-df-countdown-blocks {      display: flex;      gap: 16px;    }    .tg-df-container .tg-df-countdown-item {      display: flex;      flex-direction: column;      align-items: center;      gap: 4px;    }    .tg-df-container .tg-df-countdown-box {      width: 59px;      height: 59px;      background: #03FE9E;      border-radius: 15px;      display: flex;      align-items: center;      justify-content: center;    }    .tg-df-container .tg-df-countdown-num {      font-family: 'Inter', sans-serif;      font-weight: 700;      font-size: 20px;      line-height: normal;      color: #011535;    }    .tg-df-container .tg-df-countdown-label {      font-family: 'Inter', sans-serif;      font-weight: 500;      font-size: 16px;      line-height: normal;      color: #1e293b;      text-transform: uppercase;    }    .tg-df-container .tg-df-carousel-box-subtitle {      font-size: 16px;      margin-top: 8px;      font-weight: 300;      color: #1e293b;      line-height: 24px;    }    .tg-df-container .tg-df-carousel-roundels-wrapper {      position: relative;      margin-top: 24px;      margin-left: -24px;      margin-right: -24px;    }    .tg-df-container .tg-df-carousel-roundels {      display: flex;      gap: 16px;      overflow-x: auto;            scrollbar-width: none;      padding-top: 12px;      padding-bottom: 24px;      padding-left: 24px;      padding-right: 24px;      margin-left: 0;      margin-right: 0;    }        .tg-df-container .tg-df-carousel-scroll-left,    .tg-df-container .tg-df-carousel-scroll-right {      position: absolute;      top: 50%;      transform: translateY(-50%);      height: 36px;      width: 36px;      display: flex;      align-items: center;      justify-content: center;      border-radius: 50%;      background-color: #ffffff;      border: 1px solid #e2e8f0;      box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);      color: #1F69FF;      cursor: pointer;      transition: all 0.2s;      margin-top: -4px;      z-index: 20;    }    .tg-df-container .tg-df-carousel-scroll-left { left: 8px; }    .tg-df-container .tg-df-carousel-scroll-right { right: 8px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left { left: 0px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right { right: 0px; }    .tg-df-carousel-filters-outer { margin-left: -24px; margin-right: -24px; padding-left: 24px; padding-right: 24px; }    .tg-df-grid-wrapper { position: relative; }    @container tg-df (max-width: 599px) { .tg-df-carousel-filters-outer { margin-left: -16px; margin-right: -16px; padding-left: 16px; padding-right: 16px; } }        .tg-df-container .tg-df-carousel-scroll-left:hover,    .tg-df-container .tg-df-carousel-scroll-right:hover {      background-color: rgba(255, 255, 255, 0.6);    }    .tg-df-container .tg-df-carousel-roundels::-webkit-scrollbar {      display: none;    }    .tg-df-container .tg-df-roundel {      display: flex;      flex-direction: column;      align-items: center;      gap: 8px;      cursor: pointer;      min-width: 120px;      flex-shrink: 0;    }    .tg-df-container .tg-df-roundel-img-box {      width: 120px;      height: 120px;      border-radius: 50%;      background: white;      display: flex;      align-items: center;      justify-content: center;      overflow: hidden;      box-shadow: 0px 3px 14px 0px rgba(30, 41, 59, 0.08);      transition: box-shadow 0.2s;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box img {      transform: scale(1.08);    }    .tg-df-container .tg-df-roundel-img-box img {      width: 100%;      height: 100%;      object-fit: contain;      padding: 10px;      box-sizing: border-box;      transition: transform 0.3s ease;    }    .tg-df-container .tg-df-roundel-label {      font-size: 13px;      font-weight: 400;      color: #1e293b;      text-align: center;    }    .tg-df-container .tg-df-carousel-filters-label {      font-size: 16px;      font-weight: 400;      color: #1e293b;      white-space: nowrap;      margin-right: 4px;    }    .tg-df-container .tg-df-carousel-filters-wrap {      display: flex;      align-items: center;      flex-wrap: nowrap;      gap: 8px;      margin-top: 8px;      overflow-x: auto;      scrollbar-width: none;      -webkit-overflow-scrolling: touch;      padding-bottom: 8px;      margin-left: -24px;      margin-right: -24px;      padding-left: 24px;      padding-right: 24px;    }    .tg-df-container .tg-df-carousel-filters-wrap::-webkit-scrollbar {      display: none;    }        .tg-df-container .tg-df-carousel-filter-btn img,    .tg-df-container .tg-df-carousel-filter-btn picture {      height: 20px;      width: 20px;      object-fit: contain;      object-position: center;      display: inline-flex;      align-items: center;      justify-content: center;      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn picture img {      margin-right: 0;      height: 100%;      width: 100%;    }    .tg-df-container .tg-df-carousel-filter-btn img.active-img,    .tg-df-container .tg-df-carousel-filter-btn picture:has(.active-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.inactive-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.inactive-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.active-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.active-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.active-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.active-img) {      display: inline-flex;    }    .tg-df-container .tg-df-carousel-filter-btn {      background: #ffffff;      border: 2px solid #1e293b;      color: #1e293b;      border-radius: 24px;      padding: 6px 16px;      font-size: 14px;      font-weight: 600;      cursor: pointer;      transition: all 0.2s;      flex-shrink: 0;      white-space: nowrap;    }    .tg-df-container .tg-df-carousel-filter-btn svg {      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn {      display: inline-flex;      align-items: center;    }    .tg-df-container .tg-df-carousel-filter-btn:hover {      background: #1e293b;      color: white;      border-color: #1e293b;    }    .tg-df-container .tg-df-carousel-filter-btn.active {      background: #1e293b;      color: white;      border-color: #1e293b;    }        .tg-df-grid.carousel-compact {      display: flex;      flex-wrap: nowrap;      overflow-x: auto;      gap: 16px;      padding: 16px 24px;      align-items: stretch;      scrollbar-width: none;    }    .tg-df-grid.carousel-compact::-webkit-scrollbar {      display: none;    }    .tg-df-grid.carousel-compact .tg-df-card {      flex: 0 0 auto;      width: 200px;      min-height: auto;      height: auto;      display: flex;      flex-direction: column;      border-radius: 15px;      border: none;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      overflow: visible;    }    .tg-df-grid.carousel-compact .tg-df-card-image-box {      padding: 12px;      background-color: transparent;      border-radius: 15px 15px 0 0;      height: 130px;    }    .tg-df-grid.carousel-compact .tg-df-card-image {      mix-blend-mode: normal;    }    .tg-df-grid.carousel-compact .tg-df-card-discount-badge {      border-radius: 0;      top: 0px;      left: 0px;      padding: 4px 8px;      font-size: 11px;    }    .tg-df-grid.carousel-compact .tg-df-card-body {      padding: 8px 12px 12px 12px;    }    .tg-df-grid.carousel-compact .tg-df-card-title {      font-size: 14px;      font-weight: 400;      margin-bottom: 8px;      color: #011535;    }    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):not(:has(.tg-df-tag-prime)):not(:has(.tg-df-coupon-wrapper:not([style*="none"]))) > .tg-df-card-title,    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):has(> .tg-df-card-title:first-child) > .tg-df-card-title {    }    .tg-df-grid.carousel-compact .tg-df-card-cta {      border-radius: 5px;      padding: 8px 10px;      margin-top: 4px;      background-color: #1F69FF;    }    .tg-df-grid.carousel-compact .tg-df-card-price-group {      margin-bottom: 2px;    }    .tg-df-grid.carousel-compact .tg-df-card-merchant-pill {      margin-bottom: 2px;    }    @container tg-df (max-width: 599px) {      .tg-df-container .tg-df-carousel-blue-box-title {        font-size: 24px;      }      .tg-df-container .tg-df-countdown-title {        display: none;      }      .tg-df-container .tg-df-countdown-wrapper {        position: absolute;        top: 0;        right: 0;        align-items: flex-end;        transform: scale(0.40);        transform-origin: top right;      }      .tg-df-container .tg-df-roundel {        min-width: 88px;      }      .tg-df-container .tg-df-roundel-img-box {        width: 88px;        height: 88px;      }    }    /* REPLICA BLOCK STYLES */    .tg-df-grid.layout-replica-2 { grid-template-columns: repeat(2, 1fr) !important; gap: 20px; }    .tg-df-grid.layout-replica-1 { grid-template-columns: 1fr !important; gap: 20px; }        .tg-df-container .hawk-deal-widget-container { border-bottom: 1px solid #e5e7eb; display: flex; flex-direction: column; margin: 0; padding: 20px 0; box-sizing: border-box; font-family: inherit; }    .tg-df-container .hawk-deal-widget-wrap { display: flex; flex-direction: row; align-items: flex-start; width: 100%; gap: 24px; }    .tg-df-container .hawk-deal-widget-image-container { display: flex; flex-shrink: 0; justify-content: center; width: 160px; height: 160px; align-items: center; background: white; margin-bottom: 0px; }    .tg-df-container .hawk-deal-widget-title-product-title { color: #111827; font-size: 18px; font-weight: 700; line-height: 1.4; display: inline; }    .tg-df-container .hawk-deal-widget-title-price { font-size: 18px; font-weight: 700; line-height: 1.4; white-space: nowrap; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-price-now { font-weight: 700; }    .tg-df-container .hawk-deal-widget-title-retailer-price:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-title-retailer { font-size: 18px; font-weight: 700; line-height: 1.4; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-was-price { color: #dc2626; font-size: 16px; font-weight: 500; line-height: 1.4; text-decoration: line-through; white-space: nowrap; margin-left: 8px; margin-right: 8px; }    .tg-df-container .hawk-deal-widget-text-body-container { position: relative; width: 100%; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-text-body-main { font-size: 16px; width: 100%; margin-bottom: 12px; }    .tg-df-container .hawk-deal-widget-text-body-description { display: block; font-size: 15px; margin-top: 12px; color: #4b5563; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-body-description p { margin: 0; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-cta-container { display: flex; flex-direction: column; gap: 12px; width: 100%; flex: 1; min-width: 0; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-footer { display: flex; justify-content: flex-end; width: 100%; margin-top: auto; }    .tg-df-container .hawk-deal-widget-button-wrapper { display: flex; flex-direction: column; align-items: flex-end; justify-content: flex-end; width: 100%; }    .tg-df-container .hawk-deal-widget-preferred-partner-wrapper { display: flex; flex-direction: row; }        @container tg-df (min-width: 600px) {      .tg-df-mobile-only { display: none !important; }    }    @container tg-df (max-width: 599px) {      .tg-df-desktop-only { display: none !important; }      .tg-df-grid.layout-replica-2 { grid-template-columns: 1fr !important; }      .tg-df-grid.savings-squad-cards { grid-template-columns: 1fr !important; display: flex; flex-direction: column; }    }    .tg-df-grid.savings-squad-cards .tg-df-card-title {      -webkit-line-clamp: unset !important;      display: block !important;      overflow: visible !important;    }    @container tg-df (max-width: 500px) {      .tg-df-container .hawk-deal-widget-wrap { display: block; }      .tg-df-container .hawk-deal-widget-image-container { display: block; float: left; margin: 0 16px 8px 0; width: 120px; max-width: 120px; height: auto; align-items: normal; justify-content: normal; }      .tg-df-container .hawk-deal-widget-text-cta-container { display: block; text-align: left; }      .tg-df-container .hawk-deal-widget-footer { display: block; margin-top: 16px; clear: both; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper .hawk-deal-widget-preferred-partner-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-affiliate-link-deal-button { box-sizing: border-box !important; display: flex !important; max-width: none !important; width: 100% !important; margin: 0 !important; }    }        .tg-df-container .hawk-affiliate-link-deal-button {       align-items: center; background-color: #1f69ff; box-sizing: border-box; color: #ffffff !important; display: flex; font-size: 14px; font-weight: 700; justify-content: center; letter-spacing: 0.5px; line-height: 1; min-width: 160px; padding: 14px 24px; text-align: center; text-decoration: none; text-transform: uppercase; width: 100%; word-break: normal; border-radius: 4px; border: 0; transition: background-color 0.2s;     }    .tg-df-container .hawk-affiliate-link-deal-button:hover { background-color: #0056e0; text-decoration: none; }    .tg-df-container .hawk-lazy-image-deal-widget { display: block; height: auto; margin: auto; max-height: 160px; max-width: 100%; mix-blend-mode: multiply; object-fit: contain; }    .tg-df-container .hawk-deal-widget-text-cta-container a { color: #2563eb; text-decoration: none; display: inline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:has(.hawk-deal-widget-title-product-title) { color: #111827; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-product-title,    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-retailer-price { text-decoration: underline; }    .tg-df-savings-squad-header { margin-bottom: 24px; text-align: center; display: none; }    .tg-df-banner-img-desktop { display: block; width: 100%; height: auto; margin-bottom: 32px; }    .tg-df-banner-img-mobile { display: none; width: 100%; height: auto; margin-bottom: 32px; }    @container tg-df (max-width: 600px) {      .tg-df-banner-img-desktop { display: none; }      .tg-df-banner-img-mobile { display: block; }    }    .tg-df-header-title { font-size: 28px; font-weight: 700; color: var(--tg-df-text); margin: 32px 0 12px 0; line-height: 1.3; }    .tg-df-header-subtitle { font-size: 16px; color: var(--tg-df-text-muted); margin: 0 0 32px 0; line-height: 1.5; }  \x3C/style>  \x3C!-- Widget Container --\x3E  \x3Cdiv class="tg-df-container" id="signal-deals-finder-root">    \x3Cdiv class="tg-df-savings-squad-header" id="tg-df-savings-squad-header">      \x3Cpicture>        \x3Cimg src="https://cdn.mos.cms.futurecdn.net/flexiimages/xkh2og7m3d1778189998.png" alt="Deals Banner" class="tg-df-banner-img-desktop" />        \x3Cimg src="https://cdn.mos.cms.futurecdn.net/flexiimages/gmak6rtdf41778245089.png" alt="Deals Banner Mobile" class="tg-df-banner-img-mobile" />      \x3C/picture>      \x3Cdiv class="tg-df-header-text">        \x3Ch2 class="tg-df-header-title" id="tg-df-header-title">Editor's Choice Deals\x3C/h2>        \x3Cp class="tg-df-header-subtitle" id="tg-df-header-subtitle">Discover the best discounts currently available, curated daily by the Tom's Guide Savings Squad.\x3C/p>      \x3C/div>    \x3C/div>    \x3C!-- Editor Floating Bar --\x3E    \x3Cdiv class="tg-df-editor-bar" id="tg-df-editor-bar" style="display:none;">      \x3Cdiv class="tg-df-editor-bar-text" style="display: flex; align-items: center;">        \x3Cspan id="tg-df-selected-count">0\x3C/span>\x26nbsp;Deals Selected        \x3Cbutton class="tg-df-editor-clear-btn" id="tg-df-editor-clear" type="button" style="margin-left: 12px; font-size: 13px; color: #9ca3af; background: none; border: none; cursor: pointer; text-decoration: underline;">Clear All\x3C/button>      \x3C/div>      \x3Cbutton class="tg-df-editor-copy-btn" id="tg-df-editor-copy" type="button">        \x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">\x3C/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">\x3C/path>\x3C/svg>        Copy to CMS      \x3C/button>    \x3C/div>    \x3Cdiv class="tg-df-carousel-host" id="tg-df-carousel-host" style="display: none;">      \x3Cdiv class="tg-df-carousel-eyebrow">DEAL FINDER\x3C/div>      \x3Cdiv class="tg-df-carousel-query-title" id="tg-df-carousel-title-label">Best Deals\x3C/div>            \x3Cdiv class="tg-df-carousel-blue-box">        \x3Cdiv class="tg-df-carousel-bg-circle-1" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-2" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-3" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-box-content">          \x3Cdiv class="tg-df-countdown-wrapper" id="tg-df-countdown-wrapper" style="display:none;">            \x3Cdiv class="tg-df-countdown-title" id="tg-df-countdown-title">Prime Day starts in\x3C/div>            \x3Cdiv class="tg-df-countdown-blocks">              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-days">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">DAYS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-hrs">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">HRS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-min">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">MIN\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-sec">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">SEC\x3C/div>\x3C/div>            \x3C/div>          \x3C/div>          \x3Cdiv class="tg-df-carousel-box-eyebrow">DEAL FINDER\x3C/div>          \x3Cdiv class="tg-df-carousel-box-title">Find Deals Fast\x3C/div>          \x3Cdiv class="tg-df-carousel-box-subtitle">The latest deals from the biggest retailers, all in one place\x3C/div>                    \x3Cdiv class="tg-df-carousel-roundels-wrapper">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-roundels">                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Televisions" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/wcMxTsHgqu3roMbAx7RLnT-132-100.png" alt="TVs" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">TVs\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Phones" data-pr="over50">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/G3KGaRGzj24F6PUsw4bWpT-132-100.png" alt="Phones" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Phones\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Computing" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/znNvsLzx8NEgNkD9HSFSnT-132-100.png" alt="Computing" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Computing\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Gaming" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/Pgew8yaRQeZFHqHjTzvBnT-132-100.png" alt="Gaming" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Gaming\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Mattresses" data-pr="over500">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/cW7xsaLyesxkHFVSiC4kmT-132-100.png" alt="Mattresses" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Mattresses\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Audio" data-pr="over30">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/pCvBVHuhaQVjKt3VgCjbqT-132-100.png" alt="Audio" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Audio\x3C/span>            \x3C/div>                  \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>        \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-carousel-filters-outer" style="position: relative;">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-filters-wrap">                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="0">All\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_lightning">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_prime">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-d="10">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 10% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="15">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 15% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="25">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 25% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-pr="under50">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>            Under $50\x3C/button>        \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3C/div>    \x3C/div>    \x3C/div>      \x3C!-- Search & Filter Controls --\x3E      \x3Cdiv class="tg-df-top-bar" id="tg-df-top-bar" style="position: relative; z-index: 100; margin: 0 auto 20px;">        \x3Cdiv class="tg-df-search-wrapper">          \x3Cinput type="text" class="tg-df-search-input" placeholder="Search for deals, products, or brands...">          \x3Cbutton type="button" class="tg-df-search-btn" aria-label="Search">              \x3Csvg class="tg-df-search-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">                \x3Cpath d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/>              \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-autocomplete-dropdown" id="tg-df-autocomplete">\x3C/div>        \x3C/div>      \x3C/div>    \x3Cdiv class="tg-df-controls" id="tg-df-controls" style="display:flex;">              \x3Cdiv class="tg-df-filters-container" style="position: relative; width: 100%; max-width: 800px; margin: 0 auto;">          \x3Cbutton class="tg-df-scroll-btn left" style="display: none;" onclick="this.parentElement.querySelector('.tg-df-filters').scrollBy({left: -200, behavior: 'smooth'})">            \x3Csvg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">\x3Cpath d="M15 18l-6-6 6-6"/>\x3C/svg>          \x3C/button>          \x3Cbutton class="tg-df-scroll-btn right" style="display: none;" onclick="this.parentElement.querySelector('.tg-df-filters').scrollBy({left: 200, behavior: 'smooth'})">            \x3Csvg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">\x3Cpath d="M9 18l6-6-6-6"/>\x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-filters">          \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-category-filter-wrapper" style="display: none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-category-filter" aria-label="Category">            \x3Coption value="all">All Categories\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-multiselect-container" id="tg-df-brand-filter-wrapper" style="display:none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M4.25 5.61C6.27 8.2 10 13 10 13v6c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-6s3.72-4.8 5.74-7.39A.998.998 0 0 0 18.95 4H5.04c-.83 0-1.3.95-.79 1.61z"/>          \x3C/svg>          \x3Cdiv class="tg-df-filter-select tg-df-multiselect-trigger" id="tg-df-brand-trigger" tabindex="0">            Any Brand          \x3C/div>          \x3Cdiv class="tg-df-multiselect-dropdown" id="tg-df-brand-dropdown">            \x3C!-- Populated via script --\x3E          \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-price-range-wrapper" id="tg-df-custom-price-wrapper" style="display: flex; align-items:center; justify-content:center; padding: 10px 20px; gap: 8px; border: 1px solid var(--tg-df-border); border-radius: 100px; background-color: var(--tg-df-bg);">          \x3Cspan style="font-size:14px; font-weight:500; color:var(--tg-df-text-primary);">Price\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-min" placeholder="Min" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">          \x3Cspan style="color:var(--tg-df-text-muted)">-\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-max" placeholder="Max" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-legacy-price-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-price-filter" aria-label="Filter Prices">            \x3Coption value="all">All Prices\x3C/option>            \x3Coption value="under50">Under $50\x3C/option>            \x3Coption value="50_100">$50 - $100\x3C/option>            \x3Coption value="100_200">$100 - $200\x3C/option>            \x3Coption value="200_500">$200 - $500\x3C/option>            \x3Coption value="over500">Over $500\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-discount-filter-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-discount-filter" aria-label="Discount Amount">            \x3Coption value="all">Any discount\x3C/option>            \x3Coption value="5">Min 5%\x3C/option>            \x3Coption value="10">Min 10%\x3C/option>            \x3Coption value="15">Min 15%\x3C/option>            \x3Coption value="20">Min 20%\x3C/option>            \x3Coption value="25">Min 25%\x3C/option>            \x3Coption value="30">Min 30%\x3C/option>            \x3Coption value="40">Min 40%\x3C/option>            \x3Coption value="50">Min 50%\x3C/option>            \x3Coption value="60">Min 60%\x3C/option>            \x3Coption value="70">Min 70%\x3C/option>          \x3C/select>          \x3C/div>        \x3C/div>        \x3C/div>      \x3C/div>    \x3C!-- Deals Grid Wrapper --\x3E    \x3Cdiv class="tg-df-grid-wrapper tg-df-carousel-cards-wrapper" id="tg-df-grid-wrapper">      \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3Cdiv class="tg-df-grid" id="tg-df-grid">        \x3C!-- Content populated by JavaScript --\x3E      \x3C/div>      \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>    \x3C/div>        \x3C!-- Vouchers Modal --\x3E    \x3Cdiv class="tg-df-modal-backdrop" id="tg-df-vouchers-modal">      \x3Cdiv class="tg-df-modal">        \x3Cdiv class="tg-df-modal-header">          \x3Ch3 class="tg-df-modal-title" id="tg-df-vouchers-title">Available Coupons & Deals\x3C/h3>          \x3Cbutton class="tg-df-modal-close" id="tg-df-vouchers-close">            \x3Csvg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">              \x3Cline x1="18" y1="6" x2="6" y2="18">\x3C/line>              \x3Cline x1="6" y1="6" x2="18" y2="18">\x3C/line>            \x3C/svg>          \x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-modal-body" id="tg-df-vouchers-content">          \x3C!-- Vouchers injected here --\x3E        \x3C/div>      \x3C/div>    \x3C/div>  \x3C/div>`;      if (!template) {        template = document.createElement('template');        template.innerHTML = rawTemplate;      }      let shadowRoot = null;      if (hostContainer && template) {        hostContainer.setAttribute('data-initialized', 'true');        shadowRoot = hostContainer.attachShadow({ mode: 'open' });        shadowRoot.appendChild(template.content.cloneNode(true));      }      class DealsFinderWidget {        constructor(config) {          this.rootNode = config.rootNode || document;          this.hostContainer = config.hostContainer || null;          this.rootId = config.rootId || 'signal-deals-finder-root';          this.root = this.rootNode.querySelector('#' + this.rootId);          if (!this.root) return;          this.widgetId = (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'widget-' + Date.now() + '-' + Math.random().toString(36).slice(2);          this.grid = this.root.querySelector('#tg-df-grid');          this.tagsContainer = this.root.querySelector('#tg-df-tags-container');          this.categoryFilter = this.root.querySelector('#tg-df-category-filter');          this.categoryFilterWrapper = this.root.querySelector('#tg-df-category-filter-wrapper');          this.searchInput = this.root.querySelector('.tg-df-search-input');          this.autocompleteDropdown = this.root.querySelector('#tg-df-autocomplete');          this.sortSelect = this.root.querySelector('.tg-df-sort-select');          this.searchBtn = this.root.querySelector('.tg-df-search-btn');                    this.settingsToggle = this.root.querySelector('#tg-df-settings-toggle');          this.settingsPanel = this.root.querySelector('#tg-df-settings-panel');          this.settingsBackdrop = this.root.querySelector('#tg-df-settings-backdrop');          this.regionSelect = this.root.querySelector('#tg-df-region-select');          this.retailerSelect = this.root.querySelector('#tg-df-retailer-select');          this.offerTypeSelect = this.root.querySelector('#tg-df-offer-type-select');          this.viewModeSelect = this.root.querySelector('#tg-df-view-mode-select');          this.rowsSelect = this.root.querySelector('#tg-df-rows-select');          this.dealModeToggle = this.root.querySelector('#tg-df-deal-mode');          this.editorModeToggle = this.root.querySelector('#tg-df-editor-mode');          this.priceFilter = this.root.querySelector('#tg-df-price-filter');          this.discountFilter = this.root.querySelector('#tg-df-discount-filter');                    this.editorBar = this.root.querySelector('#tg-df-editor-bar');          this.editorSelectedCount = this.root.querySelector('#tg-df-selected-count');          this.editorCopyBtn = this.root.querySelector('#tg-df-editor-copy');          this.editorClearBtn = this.root.querySelector('#tg-df-editor-clear');                    this.apiUrl = 'https://search-api.fie.future.net.uk/widget.php';          this.deals = [];          this.displayLimit = 12;          this.airedaleArticles = null;          this.airedaleTags = [];          this.airedaleTagCounts = {};          this.activeDealTag = null;          this.selectedBrands = [];          this.currentQuery = '';          this.editorMode = this.hostContainer ? this.hostContainer.hasAttribute('data-editor-mode') : false;          this.viewModeOverride = this.hostContainer ? this.hostContainer.getAttribute('data-view-mode') : null;          this.selectedDeals = new Map();                    this.brandFilterWrapper = this.root.querySelector('#tg-df-brand-filter-wrapper');          this.brandTrigger = this.root.querySelector('#tg-df-brand-trigger');          this.brandDropdown = this.root.querySelector('#tg-df-brand-dropdown');                    this.customPriceWrapper = this.root.querySelector('#tg-df-custom-price-wrapper');          this.customPriceMin = this.root.querySelector('#tg-df-custom-price-min');          this.customPriceMax = this.root.querySelector('#tg-df-custom-price-max');          this.legacyPriceWrapper = this.root.querySelector('#tg-df-legacy-price-wrapper');          this.discountFilterWrapper = this.root.querySelector('#tg-df-discount-filter-wrapper');          this.initResizeObserver();          this.init();        }        getViewMode() {          console.log("DEBUG getViewMode -> override:", this.viewModeOverride, "editorMode:", this.editorMode);          if (this.viewModeOverride && (!this.editorMode || !this.viewModeSelect)) {            return this.viewModeOverride;          }          return (this.viewModeSelect && this.viewModeSelect.value) ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');        }        applyLayoutMode() {          if (!this.grid) return;          const mode = this.getViewMode();          console.log("[DEBUG] applyLayoutMode CALLED! mode=", mode);          this.grid.classList.remove('layout-row', 'layout-grid', 'tg-df-grid-auto', 'carousel-compact', 'layout-replica-1', 'layout-replica-2');                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          const showHeaderDetails = params.get('show_header_details') !== 'false';          const carouselHost = this.root.querySelector('#tg-df-carousel-host');          const controlsDiv = this.root.querySelector('#tg-df-controls');          const topBarDiv = this.root.querySelector('#tg-df-top-bar');          const headerElement = this.root.querySelector('#tg-df-savings-squad-header');          if (headerElement) {             headerElement.style.display = (mode === 'savings_squad' && showHeaderDetails) ? 'block' : 'none';          }          if (mode === 'carousel') {             this.grid.classList.add('carousel-compact');             if (carouselHost) carouselHost.style.display = 'block';             if (controlsDiv) controlsDiv.style.display = 'none';             if (topBarDiv) topBarDiv.style.display = 'none';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.add('is-carousel');             }          } else {             if (carouselHost) carouselHost.style.display = 'none';             if (controlsDiv) controlsDiv.style.display = 'flex';             if (topBarDiv) topBarDiv.style.display = 'block';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          }          if (mode === 'grid') {            this.grid.classList.add('layout-grid');          } else if (mode === 'row') {            this.grid.classList.add('layout-row');          } else if (mode === 'savings_squad') {            this.grid.classList.add('tg-df-grid-auto', 'savings-squad-cards');          } else if (mode !== 'carousel') {            this.grid.classList.add('tg-df-grid-auto');          }                    const settingsWrapper = this.root.querySelector('.tg-df-settings-wrapper');          if (settingsWrapper) {            settingsWrapper.style.display = mode === 'auto' ? 'none' : 'block';          }          if (this.customPriceWrapper) {             this.customPriceWrapper.style.display = mode === 'auto' ? 'flex' : 'none';          }          if (this.legacyPriceWrapper) {             this.legacyPriceWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }          if (this.discountFilterWrapper) {             this.discountFilterWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }        }        initResizeObserver() {          try {            if (window.parent === window) return;          } catch (e) {            // cross origin frame check threw          }          const emitHeight = () => {            try {              const height = document.documentElement.scrollHeight || document.body.scrollHeight;              const msg = { type: 'embed-size', height: height };              if (window.parent && window.parent !== window) {                window.parent.postMessage(msg, '*');                window.parent.postMessage(JSON.stringify({ ...msg, sentinel: 'amp' }), '*');              }            } catch (e) {}          };                    if (window.ResizeObserver) {            try {              const ro = new ResizeObserver(() => emitHeight());              ro.observe(document.body);              if (this.root) ro.observe(this.root);            } catch(e){ console.warn(e); }          }          window.addEventListener('resize', emitHeight);          setTimeout(emitHeight, 300);        }        initCountdown() {          this.cdWrapper = this.root.querySelector('#tg-df-countdown-wrapper');                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          this.showCountdown = params.get('show_countdown') === 'true';          const showHeaderDetails = params.get('show_header_details') !== 'false';          const eyebrow = this.root.querySelector('.tg-df-carousel-box-eyebrow');          const title = this.root.querySelector('.tg-df-carousel-box-title');          const subtitle = this.root.querySelector('.tg-df-carousel-box-subtitle');          if (!showHeaderDetails) {            let containerElement = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (containerElement) containerElement.classList.add('hide-header-details');            if (eyebrow) eyebrow.style.display = 'none';            if (title) title.style.display = 'none';            if (subtitle) subtitle.style.display = 'none';          }          if (!this.cdWrapper) return;          this.cdTitle = this.root.querySelector('#tg-df-countdown-title');          this.cdDays = this.root.querySelector('#tg-df-cd-days');          this.cdHrs = this.root.querySelector('#tg-df-cd-hrs');          this.cdMin = this.root.querySelector('#tg-df-cd-min');          this.cdSec = this.root.querySelector('#tg-df-cd-sec');          this.updateCountdown();          this.cdInterval = setInterval(() => this.updateCountdown(), 1000);        }        updateCountdown() {          if (!this.cdWrapper) return;          if (!this.showCountdown) {            this.cdWrapper.style.display = 'none';            return;          }          const area = this.getAreaCode();          let offset = '-04:00';          if (['DE', 'FR', 'IT', 'ES', 'NL'].includes(area)) {             offset = '+02:00';          } else if (['GB', 'IE', 'UK'].includes(area)) {             offset = '+01:00';          }          const startTime = new Date('2026-06-23T00:00:00' + offset).getTime();          const endTime = new Date('2026-06-26T00:00:00' + offset).getTime();          const now = Date.now();          let targetTime = 0;          if (now < startTime) {             targetTime = startTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day starts in';             this.cdWrapper.style.display = 'flex';          } else if (now < endTime) {             targetTime = endTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day ends in';             this.cdWrapper.style.display = 'flex';          } else {             this.cdWrapper.style.display = 'none';             if (this.cdInterval) clearInterval(this.cdInterval);             return;          }          const diff = Math.max(0, targetTime - now);          const d = Math.floor(diff / (1000 * 60 * 60 * 24));          const h = Math.floor((diff / (1000 * 60 * 60)) % 24);          const m = Math.floor((diff / 1000 / 60) % 60);          const s = Math.floor((diff / 1000) % 60);          if (this.cdDays) this.cdDays.textContent = d;          if (this.cdHrs) this.cdHrs.textContent = h;          if (this.cdMin) this.cdMin.textContent = m;          if (this.cdSec) this.cdSec.textContent = s;        }        init() {          this.initCountdown();          try {            initAnalytics();          } catch (e) {            console.warn('Deals Widget Analytics Error:', e);          }                    this.bindEvents();                    let initialQuery = '';                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          let initialViewMode = params.get('view_mode');          if (!this.viewModeOverride && initialViewMode) {            this.viewModeOverride = initialViewMode;          }          if (!params.has('search') && !params.has('q') && !params.has('query') && initialViewMode !== 'savings_squad') {             initialQuery = 'Gaming laptops';          }          const website = params.get('website') || 'tomsguide';          this.website = website;          if (website === 'techradar') {            const squadHeader = this.root.querySelector('.tg-df-savings-squad-header');            if (squadHeader) {               const pic = squadHeader.querySelector('picture');               if (pic) pic.style.display = 'none';            }            const style = document.createElement('style');            style.innerHTML = `              .tg-df-container .hawk-affiliate-link-deal-button, .tg-df-container .tg-df-card-cta { background-color: #5DAF08 !important; }              .tg-df-container .hawk-affiliate-link-deal-button:hover, .tg-df-container .tg-df-card-cta:hover { background-color: #4a8c06 !important; }            `;            this.root.appendChild(style);          }                    if (this.regionSelect) {            this.regionSelect.value = params.get('region') || 'auto';            this.updatePriceDropdownCurrency();          }                    if (this.retailerSelect && params.has('retailer')) {            this.retailerSelect.value = params.get('retailer');          }                    if (params.has('brands')) {            const b = params.get('brands');            if (b) {              this.selectedBrands = b.split(',');            }          }                    if (this.offerTypeSelect && params.has('offer_type')) {            this.offerTypeSelect.value = params.get('offer_type');          }          if (this.viewModeSelect && params.has('view_mode')) {            this.viewModeSelect.value = params.get('view_mode');          }          if (this.rowsSelect && params.has('rows')) {            this.rowsSelect.value = params.get('rows');          }          if (params.has('price')) {            const priceVal = params.get('price');            if (this.priceFilter) {               // Try assigning it directly to select. If it's not present implicitly ignores               this.priceFilter.value = priceVal;            }            if (priceVal.includes('_')) {               const parts = priceVal.split('_');               if (this.customPriceMin && parts[0]) this.customPriceMin.value = parts[0];               if (this.customPriceMax && parts[1]) this.customPriceMax.value = parts[1];            }          }          if (this.discountFilter && params.has('min_discount_ratio')) {            // Need to convert back from ratio (e.g. 0.8) to select value (e.g. "20")            const ratioStr = params.get('min_discount_ratio');            const ratioFloat = parseFloat(ratioStr);            if (!isNaN(ratioFloat)) {               const percentage = Math.round((1 - ratioFloat) * 100);               this.discountFilter.value = percentage.toString();            }          }          if (this.sortSelect) {            this.sortSelect.value = params.get('sort') || 'date_desc';          }          if (this.dealModeToggle && params.has('deal_mode')) {            this.dealModeToggle.checked = params.get('deal_mode') === 'true' || params.get('deal_mode') === '1';          }          const headerTitleEl = this.root.querySelector('#tg-df-header-title');          const headerSubtitleEl = this.root.querySelector('#tg-df-header-subtitle');          if (params.has('widget_title') && headerTitleEl) {             headerTitleEl.textContent = params.get('widget_title');          }          if (params.has('widget_subtitle') && headerSubtitleEl) {             headerSubtitleEl.textContent = params.get('widget_subtitle');          }                    // Re-apply layout after params have updated control values          this.applyLayoutMode();                    if (params.get('search')) {            initialQuery = params.get('search');          } else if (params.get('q')) {            initialQuery = params.get('q');          } else if (params.get('query')) {            initialQuery = params.get('query');          }                    this.currentQuery = initialQuery;          if (this.searchInput) {            if (this.getViewMode() === 'savings_squad') {              this.searchInput.value = '';            } else {              this.searchInput.value = this.currentQuery;            }          }                    if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {            this.fetchDeals(this.currentQuery);          } else {            this.render();          }        }        updatePriceDropdownCurrency() {          if (!this.priceFilter || !this.regionSelect) return;          const currencySymbols = {            'US': '$',            'GB': '£',            'CA': '$CA',            'AU': '$AU',            'DE': '€',            'FR': '€',            'IT': '€',          };          const area = this.getAreaCode();          const cur = currencySymbols[area || 'US'] || '$';                    const options = this.priceFilter.options;          for (let i = 0; i < options.length; i++) {            const opt = options[i];            if (opt.value === 'all') {              opt.innerText = 'All Prices';            } else if (opt.value === 'under50') {              opt.innerText = `Under ${cur}50`;            } else if (opt.value === '50_100') {              opt.innerText = `${cur}50 - ${cur}100`;            } else if (opt.value === '100_200') {              opt.innerText = `${cur}100 - ${cur}200`;            } else if (opt.value === '200_500') {              opt.innerText = `${cur}200 - ${cur}500`;            } else if (opt.value === 'over500') {              opt.innerText = `Over ${cur}500`;            }          }        }        populateBrandDropdown(values) {          if (!this.brandDropdown || !this.brandFilterWrapper) return;          this.brandFilterWrapper.style.display = 'flex'; // show the wrapper                    let html = '';          const allChecked = this.selectedBrands.length === 0 ? 'checked' : '';          const _div = '<' + '/div>';          const _span = '<' + '/span>';          html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="" ${allChecked} class="tg-df-brand-chk"> Any Brand${_div}`;                    values.forEach(v => {             if (!v.formatted_value || v.formatted_value === 'Any Brand') return;             const isChecked = this.selectedBrands.includes(v.formatted_value) ? 'checked' : '';             html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="${this.escapeHTML(v.formatted_value)}" ${isChecked} class="tg-df-brand-chk"> ${this.escapeHTML(v.formatted_value)} \x3Cspan style="color:var(--tg-df-text-muted);font-size:12px">(${v.count || 0})${_span}${_div}`;          });                    this.brandDropdown.innerHTML = html;                    // Re-bind listeners          const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');          chks.forEach(chk => {            chk.addEventListener('change', (e) => {              const val = e.target.value;              if (val === '') {                this.selectedBrands = [];              } else {                if (e.target.checked) {                   if (!this.selectedBrands.includes(val)) this.selectedBrands.push(val);                } else {                   this.selectedBrands = this.selectedBrands.filter(b => b !== val);                }              }                            if (this.selectedBrands.length === 0) {                 this.brandTrigger.innerText = 'Any Brand';              } else if (this.selectedBrands.length === 1) {                 this.brandTrigger.innerText = this.selectedBrands[0];              } else {                 this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;              }                            // Only call API if changed from UI interactions              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.updateURLParams();                 this.fetchDeals(this.currentQuery);              }            });          });                    // Update button text on load          if (this.selectedBrands.length === 0) {             this.brandTrigger.innerText = 'Any Brand';          } else if (this.selectedBrands.length === 1) {             this.brandTrigger.innerText = this.selectedBrands[0];          } else {             this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;          }        }        updateURLParams() {          const url = new URL(window.location);          if (this.currentQuery && this.currentQuery !== 'Gaming laptops') {            url.searchParams.set('q', this.currentQuery);          } else {            url.searchParams.delete('q');            url.searchParams.delete('search');            url.searchParams.delete('query');          }                    if (this.regionSelect && this.regionSelect.value !== 'auto') {            url.searchParams.set('region', this.regionSelect.value);          } else {            url.searchParams.delete('region');          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.set('retailer', this.retailerSelect.value);          } else {            url.searchParams.delete('retailer');          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.set('brands', this.selectedBrands.join(','));          } else {            url.searchParams.delete('brands');          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.set('offer_type', this.offerTypeSelect.value);          } else {            url.searchParams.delete('offer_type');          }                    if (this.viewModeSelect && this.viewModeSelect.value !== 'auto') {            url.searchParams.set('view_mode', this.viewModeSelect.value);          } else {            url.searchParams.delete('view_mode');          }                    if (this.rowsSelect && this.rowsSelect.value !== '12') {            url.searchParams.set('rows', this.rowsSelect.value);          } else {            url.searchParams.delete('rows');          }                    const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             url.searchParams.set('price', `${min}_${max}`);          } else if (this.priceFilter && this.priceFilter.value !== 'all') {            url.searchParams.set('price', this.priceFilter.value);          } else {            url.searchParams.delete('price');          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {               const ratio = (100 - v) / 100;               url.searchParams.set('min_discount_ratio', ratio.toString());            }          } else {            url.searchParams.delete('min_discount_ratio');          }                    if (this.sortSelect && this.sortSelect.value !== 'date_desc') {            url.searchParams.set('sort', this.sortSelect.value);          } else {            url.searchParams.delete('sort');          }                    if (this.dealModeToggle && this.dealModeToggle.checked) {            url.searchParams.set('deal_mode', 'true');          } else {            url.searchParams.delete('deal_mode');          }                    window.history.replaceState({}, '', url);        }        bindEvents() {          const handleFiltersScroll = () => {            const filters = this.root.querySelector('.tg-df-filters');            const leftBtn = this.root.querySelector('.tg-df-scroll-btn.left');            const rightBtn = this.root.querySelector('.tg-df-scroll-btn.right');            if (filters && leftBtn && rightBtn) {              const { scrollLeft, scrollWidth, clientWidth } = filters;              leftBtn.style.display = scrollLeft > 0 ? 'flex' : 'none';              rightBtn.style.display = Math.ceil(scrollLeft + clientWidth) < scrollWidth - 5 ? 'flex' : 'none';            }          };          const filters = this.root.querySelector('.tg-df-filters');          if (filters) {            filters.addEventListener('scroll', handleFiltersScroll);            window.addEventListener('resize', handleFiltersScroll);            setTimeout(handleFiltersScroll, 100);                        // Also call after rendering dropdowns            const origRenderCategories = this.renderCategories;            if (origRenderCategories) {               this.renderCategories = (...args) => {                 origRenderCategories.apply(this, args);                 setTimeout(handleFiltersScroll, 50);               };            }          }                const roundels = this.root.querySelectorAll('.tg-df-carousel-cat');          roundels.forEach(r => {             r.addEventListener('click', () => {                const q = r.getAttribute('data-query');                const pr = r.getAttribute('data-pr');                if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: q,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = q;                const label = this.root.querySelector('#tg-df-carousel-title-label');                if (label) label.textContent = 'Best ' + q;                if (this.priceFilter) this.priceFilter.value = pr || 'all';                if (this.discountFilter) this.discountFilter.value = '5';                if (this.searchInput) this.searchInput.value = q;                                roundels.forEach(ro => ro.classList.remove('active'));                r.classList.add('active');                this.fetchDeals(this.currentQuery);             });          });          const discBtns = this.root.querySelectorAll('.tg-df-carousel-filter-btn');          discBtns.forEach(b => {             b.addEventListener('click', () => {                const d = b.getAttribute('data-d');                const pr = b.getAttribute('data-pr');                const ot = b.getAttribute('data-ot');                let label = b.innerText ? b.innerText.trim() : '';                let filterType = 'unknown';                let filterVal = 'unknown';                if (d !== null) { filterType = 'discount'; filterVal = d; }                else if (pr !== null) { filterType = 'price'; filterVal = pr; }                else if (ot !== null) { filterType = 'offertype'; filterVal = ot; }                if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-${filterType}-${filterVal}`, name: 'Filter Button', label: label });                                if (d !== null) {                   if (this.discountFilter) this.discountFilter.value = this.discountFilter.value === d ? '0' : d;                } else if (pr !== null) {                   if (this.priceFilter) this.priceFilter.value = this.priceFilter.value === pr ? 'all' : pr;                } else if (ot !== null) {                   if (this.offerTypeSelect) this.offerTypeSelect.value = this.offerTypeSelect.value === ot ? 'all' : ot;                } else {                   if (this.discountFilter) this.discountFilter.value = '0';                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.offerTypeSelect) this.offerTypeSelect.value = 'all';                }                if (d === null && pr === null && ot === null && b.getAttribute("data-type") !== "custom") {                   discBtns.forEach(ro => ro.classList.remove('active'));                   b.classList.add('active');                } else if (b.getAttribute("data-type") !== "custom") {                   // Only operate on hardcoded buttons (those without data-type)                   discBtns.forEach(ro => {                      if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active');                   });                                      let makeActive = true;                   if (d !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-d') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (pr !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-pr') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (ot !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-ot') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   }                                      if (makeActive) b.classList.add('active');                                      // Check if anything is active, if not activate "All"                   let anyActive = false;                   discBtns.forEach(ro => { if (ro.classList.contains('active') && ro.getAttribute('data-type') !== 'custom') anyActive = true; });                   if (!anyActive) {                       discBtns.forEach(ro => { if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.add('active'); });                   }                }                                this.fetchDeals(this.currentQuery);             });          });          if (this.brandTrigger && this.brandDropdown) {            this.brandTrigger.addEventListener('click', () => {              this.brandDropdown.classList.toggle('active');            });            document.addEventListener('click', (e) => {              if (this.brandFilterWrapper && !e.composedPath().includes(this.brandFilterWrapper)) {                this.brandDropdown.classList.remove('active');              }            });          }          const showAutocomplete = () => {             if (this.getViewMode() !== 'savings_squad' || !this.autocompleteDropdown || !this.airedaleTags) return;                          let terms = this.airedaleTags;             if (this.airedaleBrands) {                terms = terms.concat(this.airedaleBrands.map(b => b.formatted_value));             }             terms = [...new Set(terms)];                          const query = this.searchInput.value.trim();             let matches = [];             if (query.length > 0) {                 matches = terms.filter(t => t.toLowerCase().includes(query.toLowerCase()) && t.toLowerCase() !== query.toLowerCase());             } else {                 matches = terms;             }                          if (matches.length > 0) {                 this.autocompleteDropdown.innerHTML = matches.map(m => `\x3Cdiv class="tg-df-autocomplete-item" data-tag="${this.escapeHTML(m)}">${this.escapeHTML(m)}<` + `/div>`).join('');                 this.autocompleteDropdown.classList.add('active');             } else {                 this.autocompleteDropdown.classList.remove('active');             }          };          let debounceTimer;          if(this.searchInput) {            this.searchInput.addEventListener('focus', showAutocomplete);            this.searchInput.addEventListener('input', (e) => {              clearTimeout(debounceTimer);              const query = e.target.value.trim();              this.currentQuery = query;              showAutocomplete();              debounceTimer = setTimeout(() => {                this.updateURLParams();                if (query.length > 2) {                  this.fetchDeals(query);                } else if (query.length === 0) {                  if (this.getViewMode() === 'savings_squad') {                    this.activeDealTag = null;                    this.currentQuery = '';                    if (this.categoryFilter) this.categoryFilter.value = 'all';                    this.fetchDeals('');                  } else {                    this.deals = [];                    this.render();                  }                }              }, 400);            });            this.searchInput.addEventListener('keypress', (e) => {              if (e.key === 'Enter') {                if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');                clearTimeout(debounceTimer);                const query = e.target.value.trim();                this.currentQuery = query;                                let isTag = false;                if (this.airedaleTags && this.airedaleTags.includes(query)) isTag = true;                if (this.airedaleBrands && this.airedaleBrands.some(b => b.formatted_value === query)) isTag = true;                this.activeDealTag = isTag ? query : null;                                trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                this.updateURLParams();                if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                   if (query.length === 0 && this.getViewMode() === 'savings_squad') {                       if (this.categoryFilter) this.categoryFilter.value = 'all';                   }                   this.fetchDeals(query);                }              }            });          }          if (this.autocompleteDropdown) {             this.autocompleteDropdown.addEventListener('click', (e) => {                const item = e.target.closest('.tg-df-autocomplete-item');                if (item) {                   const tag = item.getAttribute('data-tag');                   this.currentQuery = tag;                   if (this.searchInput) this.searchInput.value = tag;                   this.activeDealTag = tag;                   if (this.categoryFilter && this.airedaleTags.includes(tag)) {                       this.categoryFilter.value = tag;                   }                   this.autocompleteDropdown.classList.remove('active');                   this.updateURLParams();                   this.fetchDeals(tag);                }             });             document.addEventListener('click', (e) => {               if (this.autocompleteDropdown && this.searchInput && !e.composedPath().includes(this.searchInput) && !e.composedPath().includes(this.autocompleteDropdown)) {                 this.autocompleteDropdown.classList.remove('active');               }             });          }          if (this.searchBtn) {            this.searchBtn.addEventListener('click', () => {              if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');              clearTimeout(debounceTimer);              const query = this.searchInput.value.trim();              trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                            let isTag = false;              if (this.airedaleTags && this.airedaleTags.includes(query)) isTag = true;              if (this.airedaleBrands && this.airedaleBrands.some(b => b.formatted_value === query)) isTag = true;              this.activeDealTag = isTag ? query : null;                            this.currentQuery = query;              this.updateURLParams();              if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                 if (query.length === 0 && this.getViewMode() === 'savings_squad') {                     if (this.categoryFilter) this.categoryFilter.value = 'all';                 }                 this.fetchDeals(query);              }            });          }          if(this.sortSelect && this.sortSelect.querySelector('option[value="date_desc"]') === null) {              const option = document.createElement('option');              option.value = "date_desc";              option.text = "Newest First";              this.sortSelect.insertBefore(option, this.sortSelect.firstChild);          }          if(this.sortSelect) this.sortSelect.addEventListener('change', () => {            trackElementInteraction({ id: `sort-option-${this.sortSelect.value}`, name: 'Sort', label: `Sort: ${this.sortSelect.options[this.sortSelect.selectedIndex].text}` });            this.updateURLParams();            if (this.deals.length > 0) {              this.sortData();              this.render();            }          });                    const priceFilter = this.root.querySelector('#tg-df-price-filter');          if (priceFilter) {            this.priceFilter = priceFilter;            this.priceFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-price-${this.priceFilter.value}`, name: 'Price', label: this.priceFilter.options[this.priceFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          const updateCustomPrice = () => {             this.updateURLParams();             if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);             } else {                this.render();             }          };          if (this.customPriceMin) {             this.customPriceMin.addEventListener('change', updateCustomPrice);             this.customPriceMin.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          if (this.customPriceMax) {             this.customPriceMax.addEventListener('change', updateCustomPrice);             this.customPriceMax.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          const discountFilter = this.root.querySelector('#tg-df-discount-filter');          if (discountFilter) {            this.discountFilter = discountFilter;            this.discountFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-discount-${this.discountFilter.value}`, name: 'Discount', label: this.discountFilter.options[this.discountFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          if (this.categoryFilter) {            this.categoryFilter.addEventListener('change', (e) => {               const val = e.target.value === 'all' ? null : e.target.value;               this.activeDealTag = val;               if (val) {                 this.currentQuery = val;               } else {                 if (this.searchInput && this.currentQuery === document.querySelector('#tg-df-brand-trigger')?.getAttribute('data-active-brand')) {                     // don't clear current query if a brand is selected                 } else if (this.searchInput) {                     this.currentQuery = '';                     this.searchInput.value = '';                 }               }               this.fetchSavingsSquad();            });          }                    if (this.settingsToggle) {            this.settingsToggle.addEventListener('click', () => {              const o = this.settingsPanel.classList.toggle('active');              this.settingsBackdrop.classList.toggle('active');              if (o) trackElementInteraction({ id: 'filter-open', name: 'Filters', label: 'Open filters' });            });          }                    if (this.settingsBackdrop) {            this.settingsBackdrop.addEventListener('click', () => {              this.settingsPanel.classList.remove('active');              this.settingsBackdrop.classList.remove('active');            });          }                    if (this.regionSelect) {            this.regionSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-region-${this.regionSelect.value}`, name: 'Region', label: this.regionSelect.options[this.regionSelect.selectedIndex].text });              this.updateURLParams();              this.updatePriceDropdownCurrency();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.retailerSelect) {            this.retailerSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-merchant-${this.retailerSelect.value}`, name: 'Retailer', label: this.retailerSelect.options[this.retailerSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.offerTypeSelect) {            this.offerTypeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-offertype-${this.offerTypeSelect.value}`, name: 'Offer Type', label: this.offerTypeSelect.options[this.offerTypeSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.viewModeSelect) {            this._prevViewMode = this.viewModeSelect.value;            this.viewModeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-viewmode-${this.viewModeSelect.value}`, name: 'View Mode', label: this.viewModeSelect.options[this.viewModeSelect.selectedIndex].text });                            // Reset all active toggles and filters to prevent config carry-over              this.selectedBrands = [];              if (this.brandTrigger) this.brandTrigger.innerText = 'Select Brands';              if (this.brandDropdown) {                const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                chks.forEach(chk => { chk.checked = false; });              }              if (this.priceFilter) this.priceFilter.value = 'all';              if (this.customPriceMin) this.customPriceMin.value = '';              if (this.customPriceMax) this.customPriceMax.value = '';              if (this.sortSelect) this.sortSelect.value = 'date_desc';              if (this.discountFilter) this.discountFilter.value = '0';              if (this.retailerSelect) this.retailerSelect.value = '';              if (this.offerTypeSelect) this.offerTypeSelect.value = '';              if (this.rowsSelect) this.rowsSelect.value = '12';              if (this.categoryFilter) this.categoryFilter.value = 'all';              this.activeDealTag = null;              this.updateURLParams();              this.applyLayoutMode();                            if (this.getViewMode() === 'savings_squad' || this._prevViewMode === 'savings_squad') {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }              this._prevViewMode = this.viewModeSelect.value;            });          }                    if (this.rowsSelect) {            this.rowsSelect.addEventListener('change', () => {              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.dealModeToggle) {            this.dealModeToggle.addEventListener('change', () => {              this.updateURLParams();              this.render();            });          }          if (this.editorModeToggle) {             this.editorModeToggle.addEventListener('change', (e) => {                this.editorMode = e.target.checked;                this.render();                this.updateFloatingCopyBar();             });          }          if (this.editorCopyBtn) {             this.editorCopyBtn.addEventListener('click', () => {                this.copySelectedDealsToCMS();             });          }          if (this.editorClearBtn) {             this.editorClearBtn.addEventListener('click', () => {                this.selectedDeals.clear();                this.render();                this.updateFloatingCopyBar();             });          }          if (this.grid) {            this.grid.addEventListener('change', (e) => {               if (e.target.classList.contains('tg-df-deal-checkbox')) {                  const dealId = e.target.getAttribute('data-id');                  if (e.target.checked) {                     const dealObj = this.deals.find(d => d.id === dealId);                     if (dealObj) this.selectedDeals.set(dealId, dealObj);                  } else {                     this.selectedDeals.delete(dealId);                  }                  this.updateFloatingCopyBar();               }            });            this.grid.addEventListener('click', (e) => {              const dealCard = e.target.closest('[data-action="deal-click"]');              const similarCard = e.target.closest('[data-action="view-similar-click"]');              const cardLink = dealCard || similarCard;              if (cardLink) {                const productName = cardLink.getAttribute('data-product-name');                const merchantName = cardLink.getAttribute('data-merchant-name');                const productId = cardLink.getAttribute('data-analytics-id');                const price = parseFloat(cardLink.getAttribute('data-price')) || null;                const prevPriceStr = cardLink.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = cardLink.getAttribute('data-original-link');                const rewrittenLink = cardLink.getAttribute('href');                const revenueId = cardLink.getAttribute('data-revenue-id');                const index = parseInt(cardLink.getAttribute('data-index'), 10) || 0;                const inStock = cardLink.getAttribute('data-in-stock') === 'true';                const totalText = cardLink.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: cardLink.getAttribute('data-model-id') || null,                    matchId: cardLink.getAttribute('data-match-id') || null,                    brand: cardLink.getAttribute('data-model-brand') || null,                    parent: cardLink.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: cardLink.getAttribute('data-merchant-id') || null,                    network: cardLink.getAttribute('data-merchant-network') || null,                    url: cardLink.getAttribute('data-merchant-url') || null,                    name: merchantName                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: normalizeCurrency(this.escapeHTML(cardLink.getAttribute('data-currency') || '$'))                };                if (dealCard) {                  trackDealClick(trackingParams);                } else {                  trackViewSimilarClick(trackingParams);                }              }              const couponsBtn = e.target.closest('[data-action="coupons-click"]');              if (couponsBtn) {                trackElementInteraction({                  id: 'product-card-show-coupons',                  name: 'Coupons',                  label: `Product card coupons: ${couponsBtn.getAttribute('data-merchant')}`                });              }            });          }          this.setupScrollListeners();        }        setupScrollListeners() {          const containers = [             this.root.querySelector('.tg-df-carousel-roundels'),             this.root.querySelector('.tg-df-carousel-filters-wrap'),             this.root.querySelector('#tg-df-grid')          ];                    containers.forEach(container => {             if (!container) return;                          const checkScroll = () => {                if (!container.parentElement) return;                const leftBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-left');                const rightBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-right');                                if (leftBtn) {                   if (container.scrollLeft <= 5) leftBtn.style.display = 'none';                   else leftBtn.style.display = 'flex';                }                                if (rightBtn) {                   if (container.scrollWidth <= container.clientWidth) {                       rightBtn.style.display = 'none';                   } else if (container.scrollLeft >= container.scrollWidth - container.clientWidth - 5) {                       rightBtn.style.display = 'none';                   } else {                       rightBtn.style.display = 'flex';                   }                }             };                          container.addEventListener('scroll', checkScroll);             checkScroll();                          window.addEventListener('resize', checkScroll);                          const observer = new MutationObserver(checkScroll);             observer.observe(container, { childList: true, subtree: true, characterData: false });          });        }        get widgetTypeName() {          const mode = this.viewModeSelect ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');          switch(mode) {              case 'carousel': return 'Carousel';              case 'savings_squad': return 'Savings Squad';              case 'grid': return 'Grid';              case 'row': return 'Row';              default: return 'Auto Collection';          }        }        getRowsLimit() {          if (this.rowsSelect && this.rowsSelect.value) return parseInt(this.rowsSelect.value, 10);          let configSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {             configSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {             configSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(configSource);          if (params.has('rows')) return parseInt(params.get('rows'), 10) || 12;          return 12;        }        getAreaCode() {          if (this.regionSelect && this.regionSelect.value) {            if (this.regionSelect.value === 'auto') return null;            return this.regionSelect.value;          }          let area = null;          try {            const locale = window.navigator.language || window.navigator.userLanguage;            if (locale && locale.includes('-')) {              area = locale.split('-')[1].toUpperCase();            } else if (locale && locale.length === 2) {              if (locale.toUpperCase() === 'EN') { area = 'US'; }              else { area = locale.toUpperCase(); }            }          } catch (e) { /* Ignore */ }                    // Map to known valid options or fallback to US          const valid = ['US', 'GB', 'CA', 'AU', 'DE', 'FR', 'IT'];          if (area === 'UK') area = 'GB';          if (valid.includes(area)) {             return area;          }          return 'US';        }        async fetchDeals(query) {          this.showLoading();          this.deals = [];          this.displayLimit = this.getRowsLimit();                    try {            console.log("getViewMode returns:", this.getViewMode());            if (this.getViewMode() === 'savings_squad') {               await this.fetchSavingsSquad();            } else {               if (this.isBroadQuery(query)) {                 await this.fetchAdviserDeals(query);               } else {                 await this.fetchHawkDeals(query);                 if (this.deals.length === 0) {                   await this.fetchAdviserDeals(query);                 }               }            }          } catch (error) {            console.warn("[Tom's Guide Widget] Fetch error:", error);            this.showError();          }        }        async fetchSavingsSquad() {          let topArticles = this.airedaleArticles;          if (!topArticles) {            const siteParam = this.website || 'tomsguide';            const airedaleUrl = `https://airedale.futurecdn.net/feeds/feed_1781000519267.json?site=${siteParam}&articleType=deals&limit=50`;            let res;            try {               res = await fetch(airedaleUrl);            } catch(e) {               try { res = await fetch(`https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=${siteParam}&articleType=deals&limit=50`); } catch (err) { console.warn("Fallback fetch failed", err); return; }            }            if (!res.ok) throw new Error('Airedale API Error');            const articles = await res.json();            topArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);            this.airedaleArticles = topArticles;                        let tagCounts = {};            topArticles.forEach((a) => {              let articleTags = new Set();              if (a.articlecategory && Array.isArray(a.articlecategory)) {                 a.articlecategory.forEach((t) => articleTags.add(t));              }              articleTags.forEach(t => {                 tagCounts[t] = (tagCounts[t] || 0) + 1;              });            });                        this.airedaleTags = Object.keys(tagCounts).sort((a, b) => tagCounts[b] - tagCounts[a]);            this.airedaleTagCounts = tagCounts;          }                    let targetArticles = topArticles;          if (!this.activeDealTag && this.currentQuery) {             const tagMatch = this.airedaleTags.find(t => t.toLowerCase() === this.currentQuery.toLowerCase());             if (tagMatch) {                this.activeDealTag = tagMatch;             }          }          if (this.activeDealTag) {             const cleanTag = this.activeDealTag.toLowerCase().replace(/&/g, '').replace(/[^a-z0-9]+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');             const encodedTag = encodeURIComponent(cleanTag);             const siteParam = this.website || 'tomsguide';             const url = `https://airedale.futurecdn.net/feeds/feed_1781000519267.json?site=${siteParam}&articleType=deals&limit=50&articleCategoryHandle=${encodedTag}`;             try {                const res = await fetch(url);                if (res.ok) {                   const articles = await res.json();                   targetArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);                }             } catch(e) {                console.warn("Failed to fetch by activeDealTag", e);             }          }          let extractedDeals = [];          let seenUrls = new Set();                    let overallBrandsCounts = {};                    // First pass: extract ALL brands from topArticles so the dropdown has all options          topArticles.forEach((article) => {             if (!article.articlepage) return;             let pageData = [];             try { pageData = JSON.parse(article.articlepage[0]); } catch(e){ console.warn(e); }             const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');             savingsSquad.forEach((block) => {                const data = block.data || {};                if (data.brand) {                   const cleanBrand = data.brand.replace(/^\d+\.\s*/, '').trim();                   overallBrandsCounts[cleanBrand] = (overallBrandsCounts[cleanBrand] || 0) + 1;                }             });          });          targetArticles.forEach((article) => {             if (!article.articlepage) return;                          let pageData = [];             try {                pageData = JSON.parse(article.articlepage[0]);             } catch(e){ console.warn(e); }                          const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');                          savingsSquad.forEach((block, idx) => {                const data = block.data || {};                const isFeatured = block.type === 'featured-product';                                const link = data.link || {};                const priceObj = data.price || {};                const image = data.image || {};                                if (data.brand) {                   data.brand = data.brand.replace(/^\d+\.\s*/, '').trim();                }                const externalUrl = isFeatured ? data.url : (link.href || null);                let summaryTitle = isFeatured ? (data.name || data.brand) : (data.productName || link.label || article.articlename);                let description = isFeatured ? (data.strapline || '') : (data.text || '');                                if (!isFeatured && !data.productName && data.text) {                   const brSplit = data.text.split(new RegExp('\x3Cbr\\s*\\/?\\x3E', 'i'));                   if (brSplit.length > 1) {                     summaryTitle = brSplit[0].replace(/<[^>]+>/g, '').trim();                     description = brSplit.slice(1).join(' ').replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').trim();                   } else {                     const match = data.text.match(/\x3Cstrong>(.*?)<\/strong>/);                     if (match) {                       summaryTitle = match[1].replace(/<[^>]+>/g, '').trim();                       if (summaryTitle.endsWith(':')) summaryTitle = summaryTitle.slice(0, -1);                     }                   }                }                                let imageUrl = isFeatured ? image.mos : (image.src || null);                if (imageUrl && imageUrl.startsWith('//')) imageUrl = 'https:' + imageUrl;                                description = description.replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').replace(/View Deal$/i, '').trim();                                let merchantName = data.retailer || '';                if (!merchantName && externalUrl) {                   try {                     merchantName = new URL(externalUrl).hostname.replace('www.', '').split('.')[0];                     merchantName = merchantName.charAt(0).toUpperCase() + merchantName.slice(1);                   }catch(e){ console.warn(e); }                }                if (!merchantName) merchantName = 'Retailer';                const q = (this.currentQuery || '').toLowerCase();                const activeTagLogic = (this.activeDealTag || '').toLowerCase();                if (q.length > 2 && q !== activeTagLogic) {                   const searchTarget = `${summaryTitle || ''} ${description || ''}`.toLowerCase();                   if (!searchTarget.includes(q)) return;                }                let rawPrice = 0;                let rawMsrp = 0;                let currencyStr = '$';                if (isFeatured) {                   rawPrice = typeof data.salePrice === 'number' && data.salePrice > 0 ? data.salePrice : (typeof data.price === 'number' ? data.price : 0);                   rawMsrp = typeof data.salePrice === 'number' && typeof data.price === 'number' && data.price > data.salePrice ? data.price : 0;                   currencyStr = data.currency === 'GBP' ? '£' : '$';                } else {                   rawPrice = priceObj.amount ? parseFloat(priceObj.amount) : 0;                   rawMsrp = priceObj.amountWas ? parseFloat(priceObj.amountWas) : 0;                   currencyStr = priceObj.currency === 'GBP' ? '£' : '$';                }                                let savingAmt = 0;                let savingLabel = '';                if (rawPrice > 0 && rawMsrp > rawPrice) {                   savingAmt = parseFloat((rawMsrp - rawPrice).toFixed(2));                   savingLabel = `Save ${currencyStr}${savingAmt}`;                }                                // Apply Brand filter                if (this.selectedBrands && this.selectedBrands.length > 0) {                   const itemBrand = (data.brand || '').toLowerCase();                   const hasMatch = this.selectedBrands.some(sb => sb.toLowerCase() === itemBrand);                   if (!hasMatch) return;                }                // Apply Price filter                let priceFilterVal = null;                const min = this.customPriceMin ? this.customPriceMin.value : '';                const max = this.customPriceMax ? this.customPriceMax.value : '';                if (min || max) {                   priceFilterVal = `${min}_${max}`;                } else if (this.priceFilter && this.priceFilter.value !== 'all') {                   priceFilterVal = this.priceFilter.value;                }                if (priceFilterVal && rawPrice > 0) {                   if (priceFilterVal === 'under50' && rawPrice >= 50) return;                   if (priceFilterVal === 'over50' && rawPrice <= 50) return;                   if (priceFilterVal === 'over30' && rawPrice <= 30) return;                   if (priceFilterVal === 'over500' && rawPrice <= 500) return;                   if (priceFilterVal.includes('_')) {                      const parts = priceFilterVal.split('_');                      const min = parseFloat(parts[0]);                      const max = parseFloat(parts[1]);                      if (!isNaN(min) && rawPrice < min) return;                      if (!isNaN(max) && rawPrice > max) return;                   }                }                // Apply Discount filter                if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {                   const requiredDiscount = parseInt(this.discountFilter.value);                   if (!isNaN(requiredDiscount) && requiredDiscount > 0) {                      if (!rawMsrp || rawMsrp <= rawPrice) return;                      const ratio = Math.round((1 - (rawPrice / rawMsrp)) * 100);                      if (ratio < requiredDiscount) return;                   }                }                                if (externalUrl) {                   if (seenUrls.has(externalUrl)) return;                  seenUrls.add(externalUrl);                }                                extractedDeals.push({                   id: `airedale-${article.id || Math.random()}-${idx}`,                   url: externalUrl,                   image: imageUrl,                   fallbackImage: imageUrl,                   title: summaryTitle,                   brand: data.brand || '',                   productName: data.productName || '',                   merchant: merchantName,                   rawPrice: rawPrice,                   rawMsrp: rawMsrp,                   price: rawPrice > 0 ? rawPrice.toString() : '',                   msrp: rawMsrp > 0 ? rawMsrp.toString() : '',                   currency: currencyStr,                   isCheckPrice: !rawPrice,                   savingLabel: savingLabel,                   savingType: rawMsrp > rawPrice ? 'amount' : 'none',                   isPrime: false,                   starRating: null,                   description: description,                   text: data.text || '',                   authorName: article.articleauthortext ? article.articleauthortext[0] : (article.articleauthor ? article.articleauthor[0] : ''),                   authorRole: article.articleauthorrole ? article.articleauthorrole[0] : '',                   authorImage: article.articleauthormedia ? article.articleauthormedia[0] : '',                   documentUrl: article.documenturl ? article.documenturl[0] : '',                   modifiedDate: article.contentmodifieddate || article.modifieddate || ''                });             });          });                    const airedaleBrandsList = Object.keys(overallBrandsCounts).map(b => ({              formatted_value: b,              count: overallBrandsCounts[b]          })).sort((a,b) => b.count - a.count);                    if (this.getViewMode() === 'savings_squad') {             this.populateBrandDropdown(airedaleBrandsList.slice(0, 15));             if (this.brandFilterWrapper) {                if (airedaleBrandsList.length === 0) {                    this.brandFilterWrapper.style.display = 'none';                } else {                    this.brandFilterWrapper.style.display = 'flex';                }             }          }                    this.deals = extractedDeals;          this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        isBroadQuery(query) {          const q = query.toLowerCase();          const intentModifiers = ['deals', 'best', 'sale', 'under', 'cheap', 'offers', 'discount'];          return intentModifiers.some(term => q.includes(term));        }        async fetchHawkDeals(query) {          const url = new URL(this.apiUrl);          url.searchParams.append('model_name', query);          const areaCode = this.getAreaCode();          if (areaCode) {            url.searchParams.append('area', areaCode);          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.append('filter_merchant_name', this.retailerSelect.value);          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.append('filter_label[text_brand]', this.selectedBrands.join(','));          }                    let priceVal = null;          const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             priceVal = `${min}_${max}`;          } else if (this.priceFilter && this.priceFilter.value !== 'all') {             priceVal = this.priceFilter.value;          }          if (priceVal) {            if (priceVal === 'under50') {              url.searchParams.append('filter_max_price', '50');            } else if (priceVal === 'over50') {              url.searchParams.append('filter_min_price', '50');            } else if (priceVal === 'over30') {              url.searchParams.append('filter_min_price', '30');            } else if (priceVal === 'over500') {              url.searchParams.append('filter_min_price', '500');            } else if (priceVal.includes('_')) {              const parts = priceVal.split('_');              if (parts[0]) url.searchParams.append('filter_min_price', parts[0]);              if (parts[1]) url.searchParams.append('filter_max_price', parts[1]);            }          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {              const ratio = (100 - v) / 100;              url.searchParams.append('min_discount_ratio', ratio.toString());            }          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.append('offer', this.offerTypeSelect.value);          }                    url.searchParams.append('filter_product_types', 'deals');                    url.searchParams.append('rows', this.getRowsLimit().toString());          let response;          try {             response = await fetch(url.toString());          } catch(e) {             if (window.location.protocol === 'file:') {                console.warn("[Tom's Guide Widget] fetch from file:// blocked by local CORS policy, falling back to Adviser mock.");                await this.fetchAdviserDeals(query);                return;             }             console.warn("Hawk fetch failed", e);             this.deals = [];             this.render();             return;          }          if (!response.ok) {            throw new Error('Hawk API Response Error');          }          const rawData = await response.json();          // Safely locate data array from potentially wrapped response          let offers = [];          let modelInfoArray = [];                    let brandFilterData = null;          if (rawData && rawData.widget && rawData.widget.data && Array.isArray(rawData.widget.data.filters)) {             brandFilterData = rawData.widget.data.filters.find(f => f.type === 'label_text_brand');          } else if (rawData && rawData.data && Array.isArray(rawData.data.filters)) {             brandFilterData = rawData.data.filters.find(f => f.type === 'label_text_brand');          }          if (brandFilterData && Array.isArray(brandFilterData.values) && brandFilterData.values.length > 0) {             this.populateBrandDropdown(brandFilterData.values);          } else {             if (this.brandFilterWrapper && this.selectedBrands.length === 0) {                this.brandFilterWrapper.style.display = 'none';             }          }                    if (rawData && rawData.widget && rawData.widget.data) {            if (Array.isArray(rawData.widget.data.offers)) offers = rawData.widget.data.offers;            if (rawData.widget.data.model_info && typeof rawData.widget.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.widget.data.model_info) ? rawData.widget.data.model_info : Object.values(rawData.widget.data.model_info);            }          } else if (rawData && rawData.data) {            if (Array.isArray(rawData.data.offers)) offers = rawData.data.offers;            if (rawData.data.model_info && typeof rawData.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.data.model_info) ? rawData.data.model_info : Object.values(rawData.data.model_info);            }          } else {            if (Array.isArray(rawData)) offers = rawData;            else if (rawData && Array.isArray(rawData.offers)) offers = rawData.offers;            else if (rawData && rawData.offers && Array.isArray(rawData.offers.offer)) offers = rawData.offers.offer;            else if (rawData && rawData.offers) offers = [].concat(rawData.offers);                        if (rawData && rawData.model_info && typeof rawData.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.model_info) ? rawData.model_info : Object.values(rawData.model_info);            }          }          let modelDetails = {};          modelInfoArray.forEach(m => {            const mId = m.model_id || m.id;            if (mId) {              modelDetails[mId] = {                score: m.score != null ? parseFloat(m.score) : null,                brand: m.brand || null,                parent: (m.parents && Array.isArray(m.parents) && m.parents.length > 0) ? m.parents[0].name : null              };            }          });          offers.forEach(item => {            let data = { ...item };            const mId = data.model_id;            if (mId && modelDetails[mId]) {              data.review_score = modelDetails[mId].score;              data.model_brand = modelDetails[mId].brand;              data.model_parent = modelDetails[mId].parent;            } else {              data.review_score = null;            }                        let itemOffers = [];            if (Array.isArray(item.offers)) itemOffers = item.offers;            else if (Array.isArray(item.offer)) itemOffers = item.offer;            else if (item.offers && typeof item.offers === 'object') itemOffers = [item.offers];            else if (item.offer && typeof item.offer === 'object') itemOffers = [item.offer];            if (itemOffers.length > 0) {              itemOffers.forEach(subItem => {                let subData = { ...item, ...subItem };                const subId = subData.model_id;                if (subId && modelDetails[subId]) {                  subData.review_score = modelDetails[subId].score;                  subData.model_brand = modelDetails[subId].brand;                  subData.model_parent = modelDetails[subId].parent;                } else if (data.review_score != null) {                  subData.review_score = data.review_score;                }                if (subData.merchant && typeof subData.merchant === 'object') {                  subData.merchant_name = subData.merchant.name;                }                this.deals.push(this.extractDealData(subData));              });              return;            }                        if (item.merchant && typeof item.merchant === 'object') {              data.merchant_name = item.merchant.name;            }                        this.deals.push(this.extractDealData(data));          });                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        async fetchAdviserDeals(query) {          // ======================================================================          // TODO: ADVISER API REPLACEMENT          // The code below simulates the Adviser API response using mock data.          // Once the real endpoint is ready, remove getAdviserMockData() and           // perform an actual fetch() request similar to fetchHawkDeals().          // Example:          // const area = this.getAreaCode();          // let apiUrl = `https://your-adviser-api.com/search?q=${query}&area=${area}`;          // if (this.priceFilter && this.priceFilter.value !== 'all') {          //   const val = this.priceFilter.value;          //   if (val === 'under50') apiUrl += '&filter_max_price=50';          //   else if (val === '50_100') apiUrl += '&filter_max_price=100';          //   else if (val === '100_200') apiUrl += '&filter_max_price=200';          //   else if (val === '200_500') apiUrl += '&filter_max_price=500';          // }          // const res = await fetch(apiUrl);          // const rawData = await res.json();          // ======================================================================          // Simulating network latency          await new Promise(resolve => setTimeout(resolve, 400));                    const rawData = this.getAdviserMockData();          let offers = [];                    if (rawData && rawData.data && rawData.data.Get && Array.isArray(rawData.data.Get.Deal)) {            offers = rawData.data.Get.Deal;          }                    // Basic client-side filtering for the mock if we want it to react to the query          const q = query.toLowerCase();          const selectedRetailer = (this.retailerSelect && this.retailerSelect.value) ? this.retailerSelect.value.toLowerCase() : null;                    offers.forEach(item => {            const dataObj = item;                        // Apply retailer filter            const itemRetailer = (dataObj.dataRetailer || '').toLowerCase();            if (selectedRetailer && itemRetailer !== selectedRetailer && !itemRetailer.includes(selectedRetailer)) {              return;            }                        // Apply mock price filter            let price = dataObj.dataDiscountedPrice || 0;            if (typeof price === 'string') {              price = parseFloat(price.replace(/[^0-9.]/g, ''));            }            let priceVal = null;            const min = this.customPriceMin ? this.customPriceMin.value : '';            const max = this.customPriceMax ? this.customPriceMax.value : '';            if (min || max) {               priceVal = `${min}_${max}`;            } else if (this.priceFilter && this.priceFilter.value !== 'all') {               priceVal = this.priceFilter.value;            }            if (priceVal) {              if (priceVal === 'under50' && price >= 50) return;              if (priceVal === 'over50' && price <= 50) return;              if (priceVal === 'over30' && price <= 30) return;              if (priceVal === 'over500' && price <= 500) return;              if (priceVal.includes('_')) {                 const parts = priceVal.split('_');                 if (parts[0] && price < parseFloat(parts[0])) return;                 if (parts[1] && price > parseFloat(parts[1])) return;              }            }                        // Map Adviser schema to our widget's expected schema            const mappedData = {              url: dataObj.linkHREF || dataObj.dataLink || '#',              image: dataObj.imageURL || (dataObj.image && dataObj.image.src) || '',              title: dataObj.dataProduct || (dataObj.product && dataObj.product.name) || 'Product Deal',              merchant: dataObj.dataRetailer || 'Retailer',              price: dataObj.dataDiscountedPrice || 0,              currency: dataObj.dataCurrency === 'USD' ? '$' : (dataObj.dataCurrency || '$'),              msrp: dataObj.dataOriginalPrice || null            };                        const titleLow = mappedData.title.toLowerCase();            const merchLow = mappedData.merchant.toLowerCase();                        // Smarter mock filtering            let isMatch = false;            if (q === '' || this.isBroadQuery(q)) {              isMatch = true;            } else if (titleLow.includes(q) || merchLow.includes(q)) {              isMatch = true;            } else if ((q.includes('laptop') || q.includes('mac') || q.includes('pc')) && (titleLow.includes('macbook') || titleLow.includes('laptop'))) {              isMatch = true;            } else if ((q.includes('tv') || q.includes('television')) && (titleLow.includes('tv') || titleLow.includes('oled') || titleLow.includes('qled'))) {              isMatch = true;            } else if ((q.includes('phone') || q.includes('smartphone')) && (titleLow.includes('galaxy') || titleLow.includes('phone'))) {              isMatch = true;            } else if ((q.match(/watch|fitness|run|shoe/)) && (titleLow.includes('forerunner') || titleLow.includes('saucony') || titleLow.includes('watch'))) {              isMatch = true;            }                        if (isMatch) {               this.deals.push(this.extractDealData(mappedData));            }          });                    let rowLimit = this.getRowsLimit();          // Intentionally omitting the slice here to allow "Load More" to work if the API returns more                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        getAdviserMockData() {          return {            "data": {              "Get": {                "Deal": [                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 300,                    "dataOriginalPrice": 399,                    "dataProduct": "Samsung Galaxy A36",                    "dataRetailer": "Samsung",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/MqDYsukV3JBG54te6dEs7j.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 14,                    "dataOriginalPrice": 24,                    "dataProduct": "Blink Mini",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/3JurmAjHsDa5tPdaHAwEV8.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 59,                    "dataOriginalPrice": 99,                    "dataProduct": "Ring Video Doorbell",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/rAh4uR7AsAsALCCLTXnLNJ.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 10,                    "dataOriginalPrice": 599,                    "dataProduct": "MacBook Neo",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/Lg4Dvg68j9SbB5CPNrTEpH.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 749,                    "dataOriginalPrice": 849,                    "dataProduct": "65\\\" Fire TV Omni 4K QLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/SG34ZWodUkLTxJvMTbjPYR.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 71,                    "dataOriginalPrice": 160,                    "dataProduct": "Saucony Hurricane 24",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/vxf7UD5T2Am7guVzFoFcZ4.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 649,                    "dataOriginalPrice": 749,                    "dataProduct": "Garmin Forerunner 970",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/3GKnEu7CdhtxPMfnPCMCiA.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1049,                    "dataOriginalPrice": 1499,                    "dataProduct": "LG 48\\\" C4 4K OLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/imvwZV9zoMD6fn9Afuge35.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1499,                    "dataOriginalPrice": 2199,                    "dataProduct": "Samsung 49\\\" Odyssey Neo G9 4K Gaming Monitor",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/XWDEJ5dUAE2nhK8k3Jk7k7.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 299,                    "dataOriginalPrice": 699,                    "dataProduct": "EGOHOME Black Memory Foam Mattress (queen)",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/hMUemtAejNETLVYxNrktzm.jpg"                  }                ]              }            }          };        }        decodeHTML(html) {          if (!html) return '';          const txt = document.createElement("textarea");          txt.innerHTML = String(html);          return txt.value;        }        extractDealData(item) {          const priceRawStr = String(item.price || item.current_price || '0');          const msrpRawStr = String(item.was_price || item.msrp || item.original_price || '0');          const rawPrice = parseFloat(priceRawStr.replace(/[^\d.]/g, '')) || 0;          const rawMsrp = parseFloat(msrpRawStr.replace(/[^\d.]/g, '')) || 0;          const isCheckPrice = rawPrice === 0 || priceRawStr === '0.00' || priceRawStr === '0';                    let originalImageUrl = item.image || item.image_url || item.product_image || '';          let imageUrl = originalImageUrl;          if ((!imageUrl || isCheckPrice) && item.model_image_url) {             imageUrl = item.model_image_url;             originalImageUrl = imageUrl;          } else if ((!imageUrl || isCheckPrice) && item.model_image) {             imageUrl = item.model_image;             originalImageUrl = imageUrl;          }                    if (imageUrl) {            imageUrl = imageUrl.replace(/-(\d+)-(\d+)(\.[a-z.]+)$/i, '$3');          }                    let fallbackImage = '';          if (originalImageUrl && originalImageUrl !== imageUrl) {             fallbackImage = originalImageUrl;          } else if (item.model_image && item.model_image !== imageUrl) {             fallbackImage = item.model_image;          } else if (item.model_image_url && item.model_image_url !== imageUrl) {             fallbackImage = item.model_image_url;          }                    const rawCurrency = item.currency || item.currency_symbol || '$';                    let savingLabel = item.percentage_saving_label || '';          if (!savingLabel && rawMsrp > rawPrice && rawPrice > 0) {            const pct = Math.round(((rawMsrp - rawPrice) / rawMsrp) * 100);            if (pct > 0) {              savingLabel = `${pct}% OFF`;            }          }                    const isPrime = item.shipping && item.shipping.prime === true;                    let scoreRaw = (item.review_score !== undefined && item.review_score !== null && item.review_score > 0) ? parseFloat(item.review_score) : null;          let starRating = 0;          if (scoreRaw !== null) {            starRating = Math.round((scoreRaw > 10 ? scoreRaw / 20 : scoreRaw / 2) * 2) / 2;          }                    return {            id: item.offer_id || item.link || item.url || item.offer_link || Math.random().toString(),            url: item.link || item.url || item.offer_link || '#',            image: imageUrl,            fallbackImage: fallbackImage,            title: item.name || item.title || item.model_name || item.product_name || 'Unknown Product',            brand: item.brand || '',            productName: item.model_name || item.product_name || item.name || '',            merchant: item.merchant_name || item.merchant || item.retailer || 'Retailer',            price: item.price !== undefined ? String(item.price) : '0.00',            currency: this.decodeHTML(rawCurrency),            msrp: item.was_price || item.msrp || item.original_price || null,            rawPrice: rawPrice,            rawMsrp: rawMsrp,            hasWasPrice: (item.was_price !== undefined && item.was_price !== null),            isCheckPrice: isCheckPrice,            savingLabel: savingLabel,            isPrime: isPrime,            starRating: starRating > 0 ? starRating : null,            modelId: item.model_id || '',            productKey: item.product_key || '',            merchantId: (item.merchant && typeof item.merchant === 'object') ? item.merchant.id || '' : '',            matchId: item.match_id || '',            merchantNetwork: (item.merchant && typeof item.merchant === 'object') ? item.merchant.an || '' : '',            merchantUrl: (item.merchant && typeof item.merchant === 'object') ? item.merchant.url || '' : '',            modelBrand: item.model_brand || item.brand || '',            modelParent: item.model_parent || ''          };        }        sortData() {          const sortVal = this.sortSelect ? this.sortSelect.value : 'date_desc';          if (sortVal === 'price_asc') {            this.deals.sort((a, b) => a.rawPrice - b.rawPrice);          } else if (sortVal === 'price_desc') {            this.deals.sort((a, b) => b.rawPrice - a.rawPrice);          } else if (sortVal === 'discount_desc') {            this.deals.sort((a, b) => {              const aDiscount = a.rawMsrp > a.rawPrice ? (a.rawMsrp - a.rawPrice) : 0;              const bDiscount = b.rawMsrp > b.rawPrice ? (b.rawMsrp - b.rawPrice) : 0;              return bDiscount - aDiscount;            });          } else if (sortVal === 'date_desc') {             this.deals.sort((a, b) => {                let dateA = 0;                let dateB = 0;                if (a && a.modifiedDate) {                   const valA = Array.isArray(a.modifiedDate) ? a.modifiedDate[0] : a.modifiedDate;                   dateA = new Date(valA).getTime();                   if (isNaN(dateA)) dateA = 0;                }                if (b && b.modifiedDate) {                   const valB = Array.isArray(b.modifiedDate) ? b.modifiedDate[0] : b.modifiedDate;                   dateB = new Date(valB).getTime();                   if (isNaN(dateB)) dateB = 0;                }                return dateB - dateA;             });          }        }        getFilteredDeals() {          let filteredDeals = [...this.deals];                    if (this.dealModeToggle && this.dealModeToggle.checked) {            filteredDeals = filteredDeals.filter(d => d.hasWasPrice || (d.msrp && d.rawMsrp > d.rawPrice));          }                    return filteredDeals;        }        showLoading() {          const _div = '<' + '/div>';          const skeletonCardHtml = `            \x3Cdiv class="tg-df-card">              \x3Cdiv class="tg-df-card-image-box">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-img">${_div}              ${_div}              \x3Cdiv class="tg-df-card-body">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-card-footer mt-auto">                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="height:24px;">${_div}                ${_div}              ${_div}              \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text" style="height:44px; margin:0; border-radius:0;">${_div}            ${_div}`;          this.grid.innerHTML = Array(4).fill(skeletonCardHtml).join('');        }        showError() {          const _div = '<' + '/div>';          this.grid.innerHTML = `\x3Cdiv class="tg-df-message">            An error occurred while finding deals. Please check your connection and try again.          ${_div}`;        }        escapeHTML(str) {          if (!str) return '';          return String(str).replace(/[&<>'"]/g, tag => ({              '&': '&', '<': '<', '>': '>', "'": ''', '"': '"'          }[tag] || tag));        }                bindCouponButtons() {          const btns = this.root.querySelectorAll('.tg-df-tag-coupons');          btns.forEach(btn => {            btn.addEventListener('click', (e) => {              e.preventDefault();              e.stopPropagation();              const merchant = btn.getAttribute('data-merchant');              this.openVouchersModal(merchant);            });          });                    const closeBtn = this.root.querySelector('#tg-df-vouchers-close');          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (closeBtn) {            closeBtn.onclick = () => this.closeVouchersModal();          }          if (backdrop) {            backdrop.onclick = (e) => {              if (e.target === backdrop) this.closeVouchersModal();            };          }        }                closeVouchersModal() {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (backdrop) backdrop.classList.remove('active');        }                async checkMerchantsCouponsBulk(merchants) {          if (!merchants || merchants.length === 0) return {};          const controller = new AbortController();          const timeoutId = setTimeout(() => controller.abort(), 4000);          try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchants.join(','));            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '120');            url.searchParams.append('origin', 'widgets-clientside');                        let res; try { res = await fetch(url.toString(), { signal: controller.signal }); } catch (e) { return {}; }            clearTimeout(timeoutId);            if (!res.ok) return {};            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        const foundMerchants = new Set();            offers.forEach(o => {              let mName = o.merchant_name || o.merchant || o.retailer;              if (mName && typeof mName === 'object') mName = mName.name;              if (mName) foundMerchants.add(String(mName).toLowerCase());            });            const resultMap = {};            merchants.forEach(m => {              if (m) resultMap[m] = foundMerchants.has(String(m).toLowerCase());            });            return resultMap;          } catch (e) {            return {};          }        }                async openVouchersModal(merchantName) {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          const title = this.root.querySelector('#tg-df-vouchers-title');          const content = this.root.querySelector('#tg-df-vouchers-content');                    if (!backdrop || !content) return;                    // HACK: Hide closing tags          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h4 = '<' + '/h4>';          const _svg = '<' + '/svg>';          const _circle = '<' + '/circle>';          const _polyline = '<' + '/polyline>';          const _rect = '<' + '/rect>';          const _path = '<' + '/path>';                    title.innerText = `${merchantName} Coupons & Deals`;          content.innerHTML = `\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}                               \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}`;          backdrop.classList.add('active');                    try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchantName);            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '50');            url.searchParams.append('origin', 'widgets-clientside');                        const res = await fetch(url.toString());            if (!res.ok) throw new Error('API Error');            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        if (offers.length === 0) {              content.innerHTML = `\x3Cdiv class="tg-df-message">No vouchers currently available for ${this.escapeHTML(merchantName)}.${_div}`;              return;            }                        content.innerHTML = offers.map((v, idx) => {              let offerObj = v;              if (v.offers && v.offers.offer) {                offerObj = Array.isArray(v.offers.offer) ? v.offers.offer[0] : v.offers.offer;              } else if (v.offer) {                offerObj = Array.isArray(v.offer) ? v.offer[0] : v.offer;              }              let logoUrl = v.logo_url || offerObj.logo_url || '';              if (!logoUrl && v.merchant) {                if (Array.isArray(v.merchant) && v.merchant.length > 0) logoUrl = v.merchant[0].logo_url || '';                else logoUrl = v.merchant.logo_url || '';              }                            const offerName = offerObj.name || offerObj.title || v.name || v.title || 'Special Offer';              const endTime = offerObj.end_time || v.end_time || '';              const linkUrl = offerObj.link || offerObj.url || v.link || v.url || '#';                            let foundVoucherCode = '';              const findVoucherCode = (obj) => {                if (!obj || typeof obj !== 'object') return;                if (obj.type === 'voucher_code' && obj.display_value) {                  foundVoucherCode = obj.display_value;                  return;                }                if (Array.isArray(obj)) {                  for (const item of obj) {                    findVoucherCode(item);                    if (foundVoucherCode) return;                  }                } else {                  for (const k in obj) {                    if (Object.prototype.hasOwnProperty.call(obj, k)) {                      findVoucherCode(obj[k]);                      if (foundVoucherCode) return;                    }                  }                }              };              findVoucherCode(offerObj);              if (!foundVoucherCode) findVoucherCode(v);                            const voucherCode = foundVoucherCode || offerObj.voucher_code || v.voucher_code || '';              const codeHtml = voucherCode ? `\x3Cspan class="tg-df-voucher-code" data-action="copy-code" data-code="${this.escapeHTML(voucherCode)}" title="Copy to clipboard">                \x3Cspan class="tg-df-voucher-code-text">${this.escapeHTML(voucherCode)}${_span}                \x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-left:6px;flex-shrink:0;" class="tg-df-voucher-copy-icon">                  \x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">${_rect}                  \x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">${_path}                ${_svg}              ${_span}` : '';                            const logoHtml = logoUrl                 ? `\x3Cimg src="${this.escapeHTML(logoUrl)}" alt="${this.escapeHTML(offerName)}" class="tg-df-voucher-logo" />`                 : `\x3Cdiv class="tg-df-voucher-logo" style="background:#e2e8f0;">${_div}`;                            let expiryHtml = '';              if (endTime) {                let dStr = endTime;                if (!isNaN(dStr) && String(dStr).length === 10) dStr = Number(dStr) * 1000;                const d = new Date(dStr);                if (!isNaN(d.getTime())) {                  const options = { year: 'numeric', month: 'short', day: 'numeric' };                  expiryHtml = `                    \x3Cdiv class="tg-df-voucher-expiry">                      \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                        \x3Ccircle cx="12" cy="12" r="10">${_circle}                        \x3Cpolyline points="12 6 12 12 16 14">${_polyline}                      ${_svg}                      Expires ${d.toLocaleDateString(undefined, options)}                    ${_div}`;                }              }              const revenueIdVal = generateRevenueId(linkUrl, offerName, merchantName, null);              const rewrittenLinkUrl = rewriteAffiliateLink(linkUrl, area, revenueIdVal);              return `                \x3Ca href="${this.escapeHTML(rewrittenLinkUrl)}" target="_blank" rel="noopener nofollow" class="tg-df-voucher-item"                  data-action="voucher-click"                  data-product-name="${this.escapeHTML(offerName)}"                  data-merchant-name="${this.escapeHTML(merchantName)}"                  data-analytics-id="${this.escapeHTML(offerObj.offer_id || offerObj.id || v.id || '')}"                  data-price=""                  data-previous-price=""                  data-original-link="${this.escapeHTML(linkUrl)}"                  data-revenue-id="${revenueIdVal}"                  data-index="${idx}"                  data-total="${offers.length}"                  data-in-stock="true"                  data-currency="USD"                  data-model-id="${this.escapeHTML(offerObj.model_id || v.model_id || offerObj.id || v.id || '')}"                  data-merchant-id="${this.escapeHTML(offerObj.merchant_id || offerObj.merchant?.id || '')}"                >                  ${logoHtml}                  \x3Cdiv class="tg-df-voucher-content">                    \x3Ch4 class="tg-df-voucher-title">${this.escapeHTML(offerName)}${_h4}                    ${codeHtml}                    ${expiryHtml}                  ${_div}                ${_a}              `;            }).join('');                        // Attach copy functionality            const copyBtns = content.querySelectorAll('[data-action="copy-code"]');            copyBtns.forEach(btn => {              btn.addEventListener('click', async (e) => {                e.preventDefault();                e.stopPropagation();                                const code = btn.getAttribute('data-code');                if (!code) return;                                try {                  const copyToClipboard = async (text) => {                     if (window.navigator.clipboard && window.isSecureContext) {                        try { await window.navigator.clipboard.writeText(text); return; } catch (e) {}                     }                     const textArea = document.createElement("textarea");                     textArea.value = text;                     textArea.style.position = "fixed";                     document.body.appendChild(textArea);                     textArea.focus();                     textArea.select();                     document.execCommand('copy');                     textArea.remove();                  };                  await copyToClipboard(code);                                    // Visual feedback                  btn.classList.add('copied');                  const textSpan = btn.querySelector('.tg-df-voucher-code-text');                  const iconSvg = btn.querySelector('.tg-df-voucher-copy-icon');                                    const origText = textSpan.innerText;                  const origIcon = iconSvg.innerHTML;                                    textSpan.innerText = 'Copied!';                  iconSvg.innerHTML = `\x3Cpolyline points="20 6 9 17 4 12">${_polyline}`;                                    setTimeout(() => {                    if (btn) {                      btn.classList.remove('copied');                      if (textSpan) textSpan.innerText = origText;                      if (iconSvg) iconSvg.innerHTML = origIcon;                    }                  }, 2000);                                    trackElementInteraction({                    id: 'voucher-code-copy',                    name: 'Copy Voucher Code',                    label: `Copied ${code} for ${merchantName}`                  });                } catch (err) {                  console.warn('Failed to copy text: ', err);                }              });            });            // Attach voucher click tracking            const voucherBtns = content.querySelectorAll('[data-action="voucher-click"]');            voucherBtns.forEach(btn => {              btn.addEventListener('click', (e) => {                if (e.target.closest('[data-action="copy-code"]')) return;                                const productName = btn.getAttribute('data-product-name');                const merchantNameAttr = btn.getAttribute('data-merchant-name');                const productId = btn.getAttribute('data-analytics-id');                const price = parseFloat(btn.getAttribute('data-price')) || null;                const prevPriceStr = btn.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = btn.getAttribute('data-original-link');                const rewrittenLink = btn.getAttribute('href');                const revenueId = btn.getAttribute('data-revenue-id');                const index = parseInt(btn.getAttribute('data-index'), 10) || 0;                const inStock = btn.getAttribute('data-in-stock') === 'true';                const totalText = btn.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: btn.getAttribute('data-model-id') || null,                    matchId: btn.getAttribute('data-match-id') || null,                    brand: btn.getAttribute('data-model-brand') || null,                    parent: btn.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: btn.getAttribute('data-merchant-id') || null,                    network: btn.getAttribute('data-merchant-network') || null,                    url: btn.getAttribute('data-merchant-url') || null,                    name: merchantNameAttr                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: btn.getAttribute('data-currency') || 'USD'                };                if (typeof trackDealClick === 'function') {                  trackDealClick(trackingParams);                }              });            });                                  } catch (e) {            console.warn(e);            content.innerHTML = `\x3Cdiv class="tg-df-message">Failed to load vouchers.${_div}`;          }        }        render() {          try {            if (this.getViewMode() === 'savings_squad' && this.airedaleTags.length > 0) {              if (this.categoryFilterWrapper) {                 this.categoryFilterWrapper.style.display = 'flex';              }              if (this.categoryFilter) {                 const _option = '<' + '/option>';                 let optionsHtml = `\x3Coption value="all">All Categories${_option}`;                 this.airedaleTags.forEach(tag => {                    const isSelected = this.activeDealTag === tag ? 'selected' : '';                    optionsHtml += `\x3Coption value="${this.escapeHTML(tag)}" ${isSelected}>${this.escapeHTML(tag)}${_option}`;                 });                 this.categoryFilter.innerHTML = optionsHtml;                 this.categoryFilter.value = this.activeDealTag || 'all';              }            } else {               if (this.categoryFilterWrapper) {                  this.categoryFilterWrapper.style.display = 'none';               }            }            const displayDeals = this.getFilteredDeals();          // HACK: Hide closing tags from the CMS HTML sanitizer so it doesn't strip them during in-page injection          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h3 = '<' + '/h3>';          const _p = '<' + '/p>';          const _strong = '<' + '/strong>';          const _sup = '<' + '/sup>';          const _button = '<' + '/button>';          if (displayDeals.length === 0) {            if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {              if (this.deals.length > 0) {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No deals match your selected filters.                ${_div}`;              } else if (this.getViewMode() === 'savings_squad' && this.currentQuery.length <= 2) {                 // Do not show "no exact matches" if query is empty for savings_squad                 this.grid.innerHTML = '';              } else {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No exact matches found for "\x3Cstrong>${this.escapeHTML(this.currentQuery)}${_strong}". Try adjusting your search term.                ${_div}`;              }            } else {              this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                Search product or category names to discover the best deals from across the web.              ${_div}`;            }            return;          }          let dealsHtml = displayDeals.slice(0, this.displayLimit).map((deal, index) => {            try {               const currencySym = this.escapeHTML(deal.currency);               const isoCurrencyCode = normalizeCurrency(currencySym);               const escapedPrice = this.escapeHTML(deal.price);               const escapedMsrp = this.escapeHTML(deal.msrp);               const areaCode = this.getAreaCode();                              const revenueId = generateRevenueId(deal.url, deal.title, deal.merchant, null);               const originalLink = deal.url;               const rewrittenLink = rewriteAffiliateLink(deal.url, areaCode, revenueId);                        const productCategoryName = 'deals';            const dataAttr = `              data-action="${deal.isCheckPrice ? 'view-similar-click' : 'deal-click'}"              data-analytics-id="${this.escapeHTML(deal.externalProductId || deal.id || '')}"              data-product-name="${this.escapeHTML(deal.title)}"              data-merchant-name="${this.escapeHTML(deal.merchant)}"              data-price="${deal.rawPrice || ''}"              data-previous-price="${deal.rawMsrp || ''}"              data-original-link="${this.escapeHTML(originalLink)}"              data-revenue-id="${revenueId}"              data-index="${index}"              data-total="${displayDeals.length}"              data-in-stock="${deal.inStock !== false}"              data-currency="${this.escapeHTML(isoCurrencyCode)}"              data-model-id="${this.escapeHTML(deal.modelId || '')}"              data-product-key="${this.escapeHTML(deal.productKey || '')}"              data-merchant-id="${this.escapeHTML(deal.merchantId || '')}"            `;                        let priceGroupHtml = '';            let isSavingsSquadMode = this.getViewMode() === 'savings_squad';            let ctaText = 'View Deal';            let formattedPrice = '';            let msrpHtml = '';                        if (deal.isCheckPrice) {              ctaText = 'View Deal';              if (isSavingsSquadMode) {                priceGroupHtml = ``;              } else {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-price-group">                    \x3Cspan class="tg-df-card-price" style="font-size: 15px; font-weight: 500; font-style: italic;">See price at retailer${_span}                  ${_div}                `;              }            } else {              // Format Price              formattedPrice = escapedPrice.includes(currencySym)                 ? escapedPrice                 : `${currencySym}${escapedPrice}`;                              // Format MSRP              msrpHtml = deal.msrp && deal.rawMsrp > deal.rawPrice                ? `\x3Cspan class="tg-df-card-msrp">${escapedMsrp.includes(currencySym) ? escapedMsrp : currencySym + escapedMsrp}${_span}`                : '';                              priceGroupHtml = isSavingsSquadMode ? `` : `                \x3Cdiv class="tg-df-card-price-group">                  \x3Cspan class="tg-df-card-price">${formattedPrice}${_span}                  ${msrpHtml}                ${_div}              `;            }                        const discountBadgeHtml = deal.savingLabel && !deal.isCheckPrice              ? `\x3Cspan class="tg-df-card-discount-badge">${this.escapeHTML(deal.savingLabel)}${_span}`              : '';                          // HACK for CMS            const _button = '<' + '/button>';            const _svg = '<' + '/svg>';            const _path = '<' + '/path>';            const _rect = '<' + '/rect>';            const _circle = '<' + '/circle>';            const _polyline = '<' + '/polyline>';            const _line = '<' + '/line>';                        let badgesHtml = '';            const primeBadge = deal.isPrime ? `              \x3Cspan class="tg-df-tag tg-df-tag-prime">                \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="currentColor">                  \x3Cpath d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z">${_path}                ${_svg} Prime              ${_span}            ` : '';                        const couponsBadge = deal.merchant && deal.merchant.toLowerCase().includes('amazon') ? '' : `              \x3Cdiv class="tg-df-coupon-wrapper" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:inline-flex; align-items:center;">                \x3Cdiv class="tg-df-coupon-spinner">${_div}                \x3Cbutton type="button" class="tg-df-tag tg-df-tag-coupons" data-action="coupons-click" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:none;">                  \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                    \x3Cpath d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z">${_path}                    \x3Cline x1="7" y1="7" x2="7.01" y2="7">${_line}                  ${_svg} Coupons                ${_button}              ${_div}            `;                        // Note: We always add coupons badge if there's a chance, but to allow 3-line titles we check wrapper display state            badgesHtml = `              \x3Cdiv class="tg-df-card-badges">                ${primeBadge}                ${couponsBadge}              ${_div}            `;            const _linearGradient = '<' + '/linearGradient>';            const _polygon = '<' + '/polygon>';            const _stop = '<' + '/stop>';            const _defs = '<' + '/defs>';                        let starHtml = '';            if (deal.starRating) {              let rating = deal.starRating;                            if (rating > 0) {                const fullStars = Math.floor(rating);                const halfStar = (rating - fullStars) >= 0.5 ? 1 : 0;                const emptyStars = Math.max(0, 5 - fullStars - halfStar);                const blue = '#1f69ff'; // Tom's guide brand color from VIEW DEAL button                const gray = '#cbd5e1';                                const starSvgFull = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="${blue}" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                const gradId = 'half_grad_' + Math.floor(Math.random()*1000000);                const starSvgHalf = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cdefs>\x3ClinearGradient id="${gradId}" x1="0" x2="1" y1="0" y2="0">\x3Cstop offset="50%" stop-color="${blue}">${_stop}\x3Cstop offset="50%" stop-color="transparent">${_stop}${_linearGradient}${_defs}                  \x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26" fill="url(#${gradId})">${_polygon}${_svg}`;                                  const starSvgEmpty = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="${gray}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                let stars = [];                for (let i=0; i<fullStars; i++) stars.push(starSvgFull);                if (halfStar) stars.push(starSvgHalf);                for (let i=0; i<emptyStars; i++) stars.push(starSvgEmpty);                                starHtml = `\x3Cdiv class="tg-df-card-stars" style="display:flex;align-items:center;margin-bottom:8px;font-size:13px;font-weight:600;color:var(--tg-df-text-muted);">                  \x3Cspan style="margin-right:6px;">Tom's Guide:${_span}                  \x3Cdiv style="display:flex;gap:2px;">                    ${stars.join('')}                  ${_div}                ${_div}`;              }            }            let htmlOutput = '';            if (isSavingsSquadMode) {              htmlOutput += `              \x3Cdiv class="hawk-deal-widget-container tg-df-mobile-only" data-collapsible="true">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''} style="margin-bottom: 10px;">` : ''}                \x3Cdiv class="hawk-deal-widget-wrap">                  \x3Cdiv class="hawk-deal-widget-image-container">                    \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" rel="sponsored noopener" target="_blank" class="hawk-affiliate-link-deal-widget" ${dataAttr}>                      \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="hawk-lazy-image-deal-widget" loading="lazy" width="140" height="160" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                    ${_a}                  ${_div}                  \x3Cdiv class="hawk-deal-widget-text-cta-container">                    \x3Cdiv class="hawk-deal-widget-text-body-container">                      \x3Cdiv class="hawk-deal-widget-text-body-main">                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          ${deal.isCheckPrice ? `                            \x3Cspan class="hawk-deal-widget-title-product-title">${this.escapeHTML(deal.title)}${_span}                          ` : `                            \x3Cspan class="hawk-deal-widget-title-product-title">${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_span}                          `}                        ${_a}                        ${!deal.isCheckPrice && deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan class="hawk-deal-widget-title-was-price">was ${currencySym}${escapedMsrp}${_span}                          ${_a}                        ` : ''}                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          \x3Cspan class="hawk-deal-widget-title-retailer-price">                            ${!deal.isCheckPrice ? `                              \x3Cspan class="hawk-deal-widget-title-price">now ${formattedPrice}${_span}                              \x3Cspan class="hawk-deal-widget-title-retailer"> at ${this.escapeHTML(deal.merchant)}${_span}                            ` : `                              \x3Cspan class="hawk-deal-widget-title-price">See price at ${this.escapeHTML(deal.merchant)}${_span}                            `}                          ${_span}                        ${_a}                        ${deal.description ? `\x3Cdiv class="hawk-deal-widget-text-body-description tg-df-card-desc-container" style="margin-bottom: 12px; position: relative;">                          \x3Cp class="tg-df-card-desc-content" style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 0; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;">${this.escapeHTML(deal.description)}${_p}                          \x3Cbutton type="button" class="tg-df-card-desc-btn" style="display: none; appearance: none; border: none; color: #000000; font-size: 11px; font-weight: 700; text-transform: uppercase; cursor: pointer; font-family: inherit; position: absolute; bottom: 2px; right: 0; background: linear-gradient(to right, transparent, #fff 20%, #fff); padding: 0 0 0 16px;" onclick="                            var c = this.parentNode;                            if (this.dataset.expanded === 'true') {                              var pd = (c.tagName === 'P') ? c : this.previousElementSibling;                              if (c.tagName === 'P') { c.parentNode.appendChild(this); pd = c; }                              pd.style.display = '-webkit-box';                              pd.style.webkitLineClamp = '3';                              this.textContent = 'READ MORE';                              this.style.position = 'absolute';                              this.style.background = 'linear-gradient(to right, transparent, #fff 20%, #fff)';                              this.style.paddingLeft = '16px';                              this.dataset.expanded = 'false';                            } else {                              var pd = this.previousElementSibling;                              pd.style.display = 'inline';                              pd.style.webkitLineClamp = 'unset';                              this.textContent = 'READ LESS';                              this.style.position = 'static';                              this.style.background = 'transparent';                              this.style.paddingLeft = '4px';                              this.dataset.expanded = 'true';                              pd.appendChild(this);                            }                          ">READ MORE${_button}                        \x3C/div>` : ''}                      ${_div}                    ${_div}                    ${deal.authorName ? `                      \x3Cdiv class="tg-df-author-line-mobile" style="padding: 0 0 12px 0; background: transparent;">                         \x3Cdiv style="display: flex; align-items: center; gap: 12px;">                            ${deal.authorImage ? `\x3Cimg src="${this.escapeHTML(deal.authorImage)}" alt="${this.escapeHTML(deal.authorName)}" class="tg-df-author-img" width="40" height="40" style="border-radius: 50%; object-fit: cover; flex-shrink: 0; aspect-ratio: 1 / 1; min-width: 40px; min-height: 40px;">` : ''}                            \x3Cdiv style="display: flex; flex-direction: column;">                               \x3Cdiv style="font-size: 10px; color: var(--tg-df-text-muted); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 2px; font-weight: 600;">\x3Cspan style="color: #FF6600;">${this.escapeHTML(deal.merchant)}${_span} deal recommended by:${_div}                               \x3Cdiv style="font-size: 11px; color: var(--tg-df-text); line-height: 1.3;">                                  \x3Cstrong>\x3Ca href="https://www.tomsguide.com/${this.escapeHTML(deal.documentUrl || '').replace(/^\/+/, '')}" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit; border-bottom: 1px dotted var(--tg-df-text-muted);">${this.escapeHTML(deal.authorName)}${_a}${_strong}                                  ${deal.authorRole && !['null', 'nul', 'undefined'].includes(String(deal.authorRole).toLowerCase()) ? ` • ${this.escapeHTML(deal.authorRole)}` : ''}                                  ${deal.modifiedDate ? `\x3Cdiv style="color: var(--tg-df-text-muted); margin-top: 2px;">${getTimeAgo(deal.modifiedDate)}${_div}` : ''}                               ${_div}                            ${_div}                         ${_div}                      ${_div}                    ` : ''}                    \x3Cdiv class="hawk-deal-widget-footer">                      \x3Cdiv class="hawk-deal-widget-button-wrapper">                        \x3Cdiv class="hawk-deal-widget-preferred-partner-wrapper">                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-deal-button" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan>View Deal${_span}                          ${_a}                        ${_div}                      ${_div}                    ${_div}                  ${_div}                ${_div}              ${_div}              `;            }            htmlOutput += `              \x3Cdiv class="tg-df-card ${isSavingsSquadMode ? 'tg-df-desktop-only' : ''}">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''}>` : ''}                \x3Cdiv class="tg-df-card-image-box">                  ${discountBadgeHtml}                  \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" style="display: flex; align-items: center; justify-content: center; width: 100%; height: 100%;">                    \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="tg-df-card-image" loading="lazy" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                  ${_a}                  \x3Cdiv class="tg-df-card-merchant-wrapper" style="position: absolute; bottom: 0; right: 0; background: transparent; padding: 8px 12px; z-index: 10;">                     \x3Cspan class="tg-df-card-merchant-pill" style="text-align: right; margin-bottom: 0;" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                ${_div}                \x3Cdiv class="tg-df-card-body">                  ${starHtml}                  ${badgesHtml}                  \x3Ch3 class="tg-df-card-title tg-df-custom-savings-squad-title" title="${this.escapeHTML(deal.title)}">                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" disable-tracking="true" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit;">                      ${isSavingsSquadMode                         ? (deal.isCheckPrice                             ? (deal.title && deal.title.includes(':')                                 ? `\x3Cstrong>${this.escapeHTML(deal.title.substring(0, deal.title.indexOf(':') + 1))}${_strong}\x3Cspan style="color: #1f69ff; font-weight: normal;">${this.escapeHTML(deal.title.substring(deal.title.indexOf(':') + 1))}${_span}`                                : this.escapeHTML(deal.title)                              )                             : `\x3Cstrong>${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_strong} ${deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `\x3Cspan style="color: #d0021b; text-decoration: line-through; font-weight: normal; margin-right: 4px;">was ${currencySym}${escapedMsrp}${_span} ` : ''}\x3Cspan style="color: #1f69ff; font-weight: normal;">now ${formattedPrice} at ${this.escapeHTML(deal.merchant)}${_span}`                          )                        : this.escapeHTML(deal.title)                      }                    ${_a}                  ${_h3}                  ${deal.description ? `\x3Cdiv class="tg-df-card-desc-container" style="margin-bottom: 12px; position: relative;">                    \x3Cp class="tg-df-card-desc-content" style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 0; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;">${this.escapeHTML(deal.description)}${_p}                    \x3Cbutton type="button" class="tg-df-card-desc-btn" style="display: none; appearance: none; border: none; color: #000000; font-size: 11px; font-weight: 700; text-transform: uppercase; cursor: pointer; font-family: inherit; position: absolute; bottom: 2px; right: 0; background: linear-gradient(to right, transparent, #fff 20%, #fff); padding: 0 0 0 16px;" onclick="                      var c = this.parentNode;                      if (this.dataset.expanded === 'true') {                        var pd = (c.tagName === 'P') ? c : this.previousElementSibling;                        if (c.tagName === 'P') { c.parentNode.appendChild(this); pd = c; }                        pd.style.display = '-webkit-box';                        pd.style.webkitLineClamp = '3';                        this.textContent = 'READ MORE';                        this.style.position = 'absolute';                        this.style.background = 'linear-gradient(to right, transparent, #fff 20%, #fff)';                        this.style.paddingLeft = '16px';                        this.dataset.expanded = 'false';                      } else {                        var pd = this.previousElementSibling;                        pd.style.display = 'inline';                        pd.style.webkitLineClamp = 'unset';                        this.textContent = 'READ LESS';                        this.style.position = 'static';                        this.style.background = 'transparent';                        this.style.paddingLeft = '4px';                        this.dataset.expanded = 'true';                        pd.appendChild(this);                      }                    ">READ MORE${_button}                  \x3C/div>` : ''}                  \x3Cdiv class="tg-df-card-footer">                    ${deal.authorName ? `                    \x3Cdiv class="tg-df-author-line-desktop" style="padding: 0 0 ${isSavingsSquadMode ? 0 : 12}px 0;">                       \x3Cdiv style="display: flex; align-items: center; gap: 10px;">                          ${deal.authorImage ? `\x3Cimg src="${this.escapeHTML(deal.authorImage)}" alt="${this.escapeHTML(deal.authorName)}" class="tg-df-author-img" width="36" height="36" style="border-radius: 50%; object-fit: cover; flex-shrink: 0; aspect-ratio: 1 / 1; min-width: 36px; min-height: 36px;">` : ''}                          \x3Cdiv style="display: flex; flex-direction: column;">                             \x3Cdiv style="font-size: 10px; color: var(--tg-df-text-muted); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 2px; font-weight: 600;">Recommended by:${_div}                             \x3Cdiv style="font-size: 11px; color: var(--tg-df-text); line-height: 1.2;">                                \x3Cstrong>\x3Ca href="https://www.tomsguide.com/${this.escapeHTML(deal.documentUrl || '').replace(/^\/+/, '')}" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit; border-bottom: 1px dotted var(--tg-df-text-muted);">${this.escapeHTML(deal.authorName)}${_a}${_strong}                                ${deal.authorRole && !['null', 'nul', 'undefined'].includes(String(deal.authorRole).toLowerCase()) ? ` • ${this.escapeHTML(deal.authorRole)}` : ''}                                ${deal.modifiedDate ? `\x3Cspan style="color: var(--tg-df-text-muted);"> • ${getTimeAgo(deal.modifiedDate)}${_span}` : ''}                             ${_div}                          ${_div}                       ${_div}                    ${_div}                    ` : ''}                    ${priceGroupHtml}                  ${_div}                ${_div}                \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" class="tg-df-card-cta" style="text-decoration: none; border-radius: 0;">${ctaText}${_a}              ${_div}            `;                        return htmlOutput;            } catch (e) {               console.log("Error rendering deal in map for index", index, typeof deal === 'object' ? JSON.stringify(deal) : deal, "MSG:", e.message);               return '';            }          }).join('');                    if (displayDeals.length > this.displayLimit) {            dealsHtml += `              \x3Cdiv style="width: 100%; display: flex; justify-content: center; margin-top: 16px; grid-column: 1 / -1;">                \x3Cbutton type="button" class="tg-df-tag-outline tg-df-load-more" style="padding: 8px 24px; border-radius: 100px; font-weight: 600; font-size: 14px; cursor: pointer;">Load More${_button}              ${_div}            `;          }                    this.grid.innerHTML = dealsHtml;          // Inject JSON-LD          try {            let targetNode = this.hostContainer || document.head;            let jsonLdScript = targetNode.querySelector('#tg-df-json-ld-' + this.widgetId);            if (!jsonLdScript) {                jsonLdScript = document.createElement('script');                jsonLdScript.type = 'application/ld+json';                jsonLdScript.id = 'tg-df-json-ld-' + this.widgetId;                targetNode.appendChild(jsonLdScript);            }            const jsonLdData = {              "@context": "https://schema.org",              "@type": "ItemList",              "itemListElement": displayDeals.slice(0, this.displayLimit).map((deal, index) => {                 let isoCurrency = "USD";                 if (deal.currency === '£') isoCurrency = "GBP";                 else if (deal.currency === '€') isoCurrency = "EUR";                 else if (deal.currency === 'A$') isoCurrency = "AUD";                 else if (deal.currency === 'CA$') isoCurrency = "CAD";                 const areaCode = typeof this.getAreaCode === 'function' ? this.getAreaCode() : 'US';                 const revenueId = typeof generateRevenueId === 'function' ? generateRevenueId(deal.url, deal.title, deal.merchant, null) : '';                 const rewrittenLink = typeof rewriteAffiliateLink === 'function' ? rewriteAffiliateLink(deal.url, areaCode, revenueId) : deal.url;                 return {                   "@type": "ListItem",                   "position": index + 1,                   "item": {                     "@type": "Product",                     "name": deal.title,                     "image": deal.image || "",                     "description": deal.description || "",                     "brand": {                       "@type": "Brand",                       "name": deal.brand || ""                     },                     "offers": {                       "@type": "Offer",                       "priceCurrency": isoCurrency,                       "price": deal.rawPrice || 0,                       "url": rewrittenLink,                       "seller": {                         "@type": "Organization",                         "name": deal.merchant || ""                       }                     }                   }                 };              }).filter(item => item.item.name)            };            jsonLdScript.textContent = JSON.stringify(jsonLdData);          } catch(e) { console.warn("JSON-LD generation failed", e); }          setTimeout(() => {            const contents = this.root.querySelectorAll('.tg-df-card-desc-content');            contents.forEach(p => {              if (p.scrollHeight > p.clientHeight || p.scrollHeight > 60) {                if (p.nextElementSibling) {                  p.nextElementSibling.style.display = 'block';                }              }            });                        // Allow hawklinks.js to discover and rewrite our widget links             // by appending the .article-body class and manually triggering processArticle.            let container = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (container && !container.classList.contains('article-body')) {               container.classList.add('article-body');            }            if (this.grid && !this.grid.classList.contains('article-body')) this.grid.classList.add('article-body');            document.dispatchEvent(new CustomEvent('processArticle', { detail: { element: this.root } }));          }, 50);          const loadMoreBtn = this.grid.querySelector('.tg-df-load-more');          if (loadMoreBtn) {            loadMoreBtn.addEventListener('click', () => {              if (typeof trackElementInteraction === 'function') {                trackElementInteraction({ id: 'load-more', name: 'Load more', label: 'Load More Results' });              }              this.displayLimit += this.getRowsLimit();              this.render();            });          }                      this.bindCouponButtons();            this.checkAndUpdateCoupons();          } catch(e) {            console.warn("Widget render error", e);          }        }                async checkAndUpdateCoupons() {          const wrappers = Array.from(this.root.querySelectorAll('.tg-df-coupon-wrapper'));          if (wrappers.length === 0) return;                    const merchants = [...new Set(wrappers.map(w => w.getAttribute('data-merchant')).filter(Boolean))];          if (merchants.length === 0) return;          const couponResultsMap = await this.checkMerchantsCouponsBulk(merchants);                    for (const merchant of merchants) {            const hasCoupons = !!couponResultsMap[merchant];            const merchantWrappers = wrappers.filter(w => w.getAttribute('data-merchant') === merchant);            merchantWrappers.forEach(wrapper => {              const spinner = wrapper.querySelector('.tg-df-coupon-spinner');              const btn = wrapper.querySelector('.tg-df-tag-coupons');                            if (spinner) spinner.style.display = 'none';                            if (hasCoupons && btn) {                btn.style.display = 'inline-flex';              } else if (!hasCoupons) {                wrapper.style.display = 'none';              }            });          }        }        updateFloatingCopyBar() {          if (!this.editorBar || !this.editorSelectedCount) return;          if (this.editorMode && this.selectedDeals.size > 0) {            this.editorBar.style.display = 'flex';            this.editorSelectedCount.innerText = this.selectedDeals.size;          } else {            this.editorBar.style.display = 'none';          }        }        async copySelectedDealsToCMS() {           function htmlToSlate(htmlString) {              if (!htmlString) return [{ type: 'paragraph', children: [{ text: '' }] }];              let doc;              if (typeof window !== 'undefined' && window.DOMParser) {                 doc = new DOMParser().parseFromString(htmlString, 'text/html');              } else {                 doc = document.implementation.createHTMLDocument('');                 doc.body.innerHTML = htmlString;              }                            function parseNode(node, marks = {}) {                  if (node.nodeType === 3) {                      const text = node.textContent;                      if (!text) return null;                      return { text: text, ...marks };                  }                  if (node.nodeType === 1) {                      const tagName = node.tagName.toLowerCase();                      if (tagName === 'br') {                          return { type: 'line-break', children: [{ text: '' }] };                      }                      if (tagName === 'p') {                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return { type: 'paragraph', children };                      }                      if (tagName === 'strong' || tagName === 'b') {                          const newMarks = { ...marks, bold: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'em' || tagName === 'i') {                          const newMarks = { ...marks, italic: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'a') {                          const href = node.getAttribute('href') || '';                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return {                              type: 'link',                              url: href,                              isNoFollow: (node.getAttribute('rel') || '').includes('nofollow'),                              isSponsored: (node.getAttribute('rel') || '').includes('sponsored'),                              isOpenNewTab: node.getAttribute('target') === '_blank',                              isPreventDataRewrite: false,                              children: children                          };                      }                      return Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                  }                  return null;              }                            let blocksArray = [];              let currentParagraphChildren = [];              function flushParagraph() {                  if (currentParagraphChildren.length > 0) {                      blocksArray.push({ type: 'paragraph', children: currentParagraphChildren });                      currentParagraphChildren = [];                  }              }              Array.from(doc.body.childNodes).forEach(node => {                  const parsed = parseNode(node, {});                  const parsedItems = Array.isArray(parsed) ? parsed : (parsed ? [parsed] : []);                  parsedItems.forEach(item => {                      if (item.type === 'paragraph') {                          flushParagraph();                          blocksArray.push(item);                      } else {                          currentParagraphChildren.push(item);                      }                  });              });              flushParagraph();              if (blocksArray.length === 0) {                  blocksArray = [{ type: 'paragraph', children: [{ text: '' }] }];              }              return blocksArray;           }           const blocks = [];                      this.editorCopyBtn.innerHTML = '\x3Cspan class="tg-df-coupon-spinner" style="display:inline-block; margin-right:8px; border-top-color:#fff;">' + '<' + '/span> Copying...';           for (const deal of Array.from(this.selectedDeals.values())) {              const url = deal.url;              const merchant = deal.merchant;              const title = deal.title;              const image = deal.image;              const currentPrice = deal.currency + deal.rawPrice;              const wasPrice = deal.hasWasPrice && deal.rawMsrp > deal.rawPrice ? deal.currency + deal.rawMsrp : '';                            let couponsChildren = [];              try {                  const area = this.getAreaCode();                  const apiUrl = new URL('https://search-api.fie.future.net.uk/widget.php');                  apiUrl.searchParams.append('model_name', 'Everything');                  apiUrl.searchParams.append('language', 'en-GB');                  apiUrl.searchParams.append('area', area);                  apiUrl.searchParams.append('combine_product_types', '1');                  apiUrl.searchParams.append('filter_merchant_name', merchant);                  apiUrl.searchParams.append('all_filters', 'false');                  apiUrl.searchParams.append('exclude_unlabelled', 'false');                  apiUrl.searchParams.append('include_specs', 'false');                  apiUrl.searchParams.append('sort', 'voucher');                  apiUrl.searchParams.append('distinct_merchants', 'natural');                  apiUrl.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');                  apiUrl.searchParams.append('rows', '3');                  apiUrl.searchParams.append('origin', 'widgets-clientside');                                    let res; try { res = await fetch(apiUrl.toString()); } catch (e) { return; }                  if (res.ok) {                      const data = await res.json();                      let offers = [];                      if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {                        offers = data.widget.data.offers;                      } else if (data && data.data && Array.isArray(data.data.offers)) {                        offers = data.data.offers;                      }                                            if (offers.length > 0) {                          couponsChildren.push({ text: "Also check out these coupons: ", bold: true });                          offers.slice(0, 3).forEach((offer, idx) => {                              const actualOffer = offer.offer || offer;                              const offerName = actualOffer.name || actualOffer.title || offer.model_name || offer.title || offer.name || 'Coupon';                              const linkUrl = actualOffer.link || actualOffer.url || actualOffer.offer_link || '#';                              couponsChildren.push({ type: "line-break", children: [{ text: "" }] });                              couponsChildren.push({ text: "🎟️ " });                              couponsChildren.push({                                  type: "link",                                  url: linkUrl,                                  isNoFollow: true,                                  isSponsored: false,                                  isOpenNewTab: true,                                  isPreventDataRewrite: false,                                  children: [{ text: offerName, bold: true }]                              });                          });                      }                  }              } catch (err) {                  console.warn('Failed to fetch coupons for', merchant, err);              }              let descriptionValue = [];              if (deal.text) {                 descriptionValue = htmlToSlate(deal.text);              } else {                 const dealDescriptions = [                   `Don't miss out on this fantastic deal for the ${title}. It is currently available at ${merchant} for a highly competitive price.`,                   `We've spotted an excellent price drop on the ${title}. Grab it now at ${merchant} before it's gone.`,                   `The ${title} is currently seeing a generous discount over at ${merchant}. This is a perfect time to buy if you've been holding out.`,                   `If you're in the market for the ${title}, ${merchant} has just the deal for you.`,                   `Score the ${title} for less at ${merchant} right now. This is a rare chance to save big.`,                   `Upgrade your setup with the ${title}, now available at a stellar price via ${merchant}.`                 ];                 const randomDescription = dealDescriptions[Math.floor(Math.random() * dealDescriptions.length)];                 descriptionValue = [                    { type: "paragraph", children: [{ text: randomDescription }] }                 ];              }                            if (couponsChildren.length > 0) {                 let lastBlock = descriptionValue[descriptionValue.length - 1];                 if (lastBlock && lastBlock.type === 'paragraph') {                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ text: "Also check out these coupons: ", bold: true });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children = lastBlock.children.concat(couponsChildren);                 } else {                     descriptionValue.push({                         type: "paragraph",                         children: [                             { type: "line-break", children: [{ text: "" }] },                             { type: "line-break", children: [{ text: "" }] },                             { text: "Also check out these coupons: ", bold: true },                             { type: "line-break", children: [{ text: "" }] },                             ...couponsChildren                         ]                     });                 }              }              function normalizeCurrencyToISO(symbol) {                const map = { '£': 'GBP', '$': 'USD', 'A$': 'AUD', 'CA$': 'CAD', '€': 'EUR' };                return map[symbol] || symbol;              }              const isoCurrency = normalizeCurrencyToISO(deal.currency);              blocks.push({                 id: (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'cms-' + Date.now() + Math.random(),                 blockTypeName: "deal",                 excludeFrom: [],                 collapsible: false,                 props: {                    description: {                       value: descriptionValue,                       touched: false,                       validationMessage: ""                    },                    image: {                       value: {                          credit: [{ type: "paragraph", children: [{ text: merchant }] }],                          dateCreated: Date.now(),                          dateModified: Date.now(),                          distribution: [],                          fileSize: 0,                          height: 1000,                          id: deal.id,                          imageRights: "",                          src: image,                          name: title + ".jpg",                          tags: [],                          width: 1000                       },                       touched: false,                       validationMessage: ""                    },                    showDealButton: { value: true, touched: false, validationMessage: "" },                    isPreferredPartner: { value: false, touched: false, validationMessage: "" },                    linkHref: { value: url, touched: false, validationMessage: "" },                    linkLabel: { value: "", touched: false, validationMessage: "" },                    linkIsNoFollow: { value: true, touched: false, validationMessage: "" },                    linkIsSponsored: { value: false, touched: false, validationMessage: "" },                    linkIsOpenNewWindow: { value: true, touched: false, validationMessage: "" },                    customPromoFlags: { value: [], touched: false, validationMessage: "" },                    showStarDeal: { value: false, touched: false, validationMessage: "" },                    savingType: { value: "none", touched: false, validationMessage: "" },                    starDealPromoFlag: { value: "", touched: false, validationMessage: "" },                    showEditorsChoice: { value: false, touched: false, validationMessage: "" },                    editorsChoiceTitle: { value: "", touched: false, validationMessage: "" },                    hawkPriceCurrency: { value: { value: isoCurrency, label: isoCurrency }, touched: false, validationMessage: "" },                    hawkPrice: { value: deal.hasWasPrice ? String(deal.rawMsrp) : String(deal.rawPrice), touched: false, validationMessage: "" },                    hawkSalePrice: { value: String(deal.rawPrice), touched: false, validationMessage: "" },                    lastCheckedPriceDate: { value: "", touched: false, validationMessage: "" },                    hawkModel: { touched: false, validationMessage: "" },                    productId: { value: "", touched: false, validationMessage: "" },                    voucherId: { value: "", touched: false, validationMessage: "" },                    brand: { value: deal.brand || merchant, touched: false, validationMessage: "" },                    productName: { value: title, touched: false, validationMessage: "" },                    label: { value: "", touched: false, validationMessage: "" },                    retailer: { value: merchant, touched: false, validationMessage: "" },                    priceCheckError: false                 },                 failedFetchError: ""              });           }           const payload = {              type: "articleBuilderPages",              data: blocks           };           const jsonStr = JSON.stringify(payload);                      if (navigator.clipboard && navigator.clipboard.writeText) {              navigator.clipboard.writeText(jsonStr).then(() => {                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              }).catch(err => {                 console.warn('Failed to copy text: ', err);                 alert('Failed to copy deals to clipboard. See console.');              });           } else {              // Fallback              const textArea = document.createElement("textarea");              textArea.value = jsonStr;              document.body.appendChild(textArea);              textArea.focus();              textArea.select();              try {                 document.execCommand('copy');                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              } catch (err) {                 console.warn('Fallback: Oops, unable to copy', err);                 alert('Fallback: Failed to copy deals to clipboard.');              }              document.body.removeChild(textArea);           }        }      }      // Initialize the Widget      if (document.readyState === 'loading') {        document.addEventListener('DOMContentLoaded', () => new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer }));      } else {        new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer });      }    })();  </script></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/best-galaxy-z-fold-8-deals-and-galaxy-z-fold-8-ultra-sales</link>
                                                                            <description>
                            <![CDATA[ Samsung Galaxy Z Fold 8 and Galaxy Z Fold 8 Ultra deals are officially here. I've rounded up the best discounts, trade-in offers, and freebies at retailers and carriers alike. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">TrUAVRfePg8tVbzzGwL3dD</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/kGBrQMgLzjcqtKeGQ6v4dS-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 07 Aug 2026 12:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ louis.ramirez@futurenet.com (Louis Ramirez) ]]></author>                    <dc:creator><![CDATA[ Louis Ramirez ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/oYF2xVwCb4pTGhAJi8Yqr5-320-70.jpeg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;As deals editor-in-chief at Tom’s Guide, Louis refuses to pay full price for anything. He has over 10 years of experience finding the best deals and coupons to bring readers. Louis price checks against multiple retailers and searches high and low for sales on 4K TVs, Apple devices, streaming services, mattresses, kitchen appliances, and more. He&#039;s also always looking for the the best coupon codes to turn good deals into stellar buys.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;He has covered major retail events like Amazon Prime Day, Black Friday, and Cyber Monday for more than a decade and knows how to spot an epic deal from a fake discount. He&#039;s also great at helping people negotiate better prices on everything from gym memberships to their home internet service. Louis&#039; work has also helped readers find PS5 restock, baby formula, Clorox wipes, and everything in between. For his next major purchase, Louis is hoping to find a killer deal on an M3-based Mac. &lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;A born-and-bred New Yorker, Louis is always in search of the perfect cup of coffee. On his free time, he enjoys swimming, running, and any workout that pushes his Apple Watch to the max. He&#039;s also a big fan of international films, horror movies, and K-dramas. His work has appeared on Gizmodo, CNET, Digital Trends, Dealnews, and Time Out New York.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/kGBrQMgLzjcqtKeGQ6v4dS-1920-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Samsung Galaxy Z Fold 8 playing Spider-Man: Brand New Day Trailer with deal tag]]></media:description>                                                            <media:text><![CDATA[Samsung Galaxy Z Fold 8 playing Spider-Man: Brand New Day Trailer with deal tag]]></media:text>
                                <media:title type="plain"><![CDATA[Samsung Galaxy Z Fold 8 playing Spider-Man: Brand New Day Trailer with deal tag]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/kGBrQMgLzjcqtKeGQ6v4dS-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The Galaxy Z Fold 8 and Galaxy Z Fold 8 Ultra are officially available for purchase. Samsung's new phones are among the <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">best foldable phones</a> we've tested, but they're also some one of the priciest. The Galaxy Z Fold 8 starts at $1,899, whereas the Galaxy Z Fold 8 Ultra starts at $2,099.</p><p>The good news is that there are plenty of Galaxy Z Fold 8 deals you can get right now on both phones. For example, you can get <a href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow">up to $1,900 off either phone at T-Mobile</a> with trade-in and an eligible data plan. Alternatively, you can get <a href="https://www.samsung.com/us/smartphones/galaxy-z-fold8-ultra/buy/galaxy-z-fold8-ultra-256gb-unlocked-sku-sm-f976uzvaxaa/" target="_blank" rel="nofollow">up to $1,200 off the Galaxy Z Fold 8 Ultra at Samsung</a> with trade-in. Or you'll get the same <a href="https://www.samsung.com/us/smartphones/galaxy-z-fold8-ultra/buy/galaxy-z-fold8-ultra-256gb-unlocked-sku-sm-f976uzvaxaa/" target="_blank" rel="nofollow">$200 Samsung credit</a> without a trade. </p><p>Below I've rounded up all of the best Galaxy Z Fold 8 and Galaxy Z Fold 8 Ultra deals you can get. (For more ways to save, check out the <a href="https://www.tomsguide.com/savings-squad">Tom's Guide Savings Squad</a> hub).</p><h3 class="article-body__section" id="section-quick-links-galaxy-z-fold-8"><span>Quick Links: Galaxy Z Fold 8</span></h3><ul><li><strong>T-Mobile: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><strong>free w/ trade-in + unlimited</strong></a><strong></strong></li><li><strong>Samsung: </strong><a href="https://www.samsung.com/us/smartphones/galaxy-z-fold8/buy/galaxy-z-fold8-256gb-unlocked-sku-sm-f971ulvaxaa/" target="_blank" rel="nofollow"><strong>up to $1,200 off w/ trade-in or $200 credit</strong></a></li><li><strong>AT&amp;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&amp;T: </strong><a href="https://www.att.com/buy/phones/samsung-galaxy-z-fold8-ultra.html" target="_blank" rel="nofollow"><strong>$5/month w/ trade-in + unlimited</strong></a></li><li><strong>Verizon: </strong><a href="https://www.verizon.com/smartphones/samsung-galaxy-z-fold8-ultra/?isMyPlanFlow=true" target="_blank" rel="nofollow"><strong>up to $1,200 off w/ trade-in or free watch + tablet</strong></a></li><li><strong>Xfinity Mobile: </strong><a href="https://www.xfinity.com/mobile/shop/phone/galaxy-z-fold8-ultra" target="_blank" rel="nofollow"><strong>up to $1,000 off w/ trade-in + unlimited</strong></a></li><li><strong>Best Buy: </strong><a href="https://www.bestbuy.com/productlist/promo/latest-samsung-galaxy-phones" target="_blank" rel="nofollow"><strong>up to $1,200 off w/ trade-in + $200 gift card</strong></a><strong></strong></li><li><strong>Amazon: </strong><a href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12KX1X4" target="_blank" rel="nofollow"><strong>$1,899 + $350 gift card</strong></a></li></ul><h3 class="article-body__section" id="section-galaxy-z-fold-8-deals"><span>Galaxy Z Fold 8 deals</span></h3><div class="product"><a data-dimension112="41449426-8f79-11f1-ac6a-cd8e71eb7761" data-action="Deal Block" data-label="Galaxy Z Fold 8: free w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Fold 8: free w/ trade-in + unlimited @ T-Mobile" href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:600px;"><p class="vanilla-image-block" style="padding-top:66.67%;"><img id="4gDqoyT3A5J9nTa6Axevfg" name="TMobileLogo_1.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/4gDqoyT3A5J9nTa6Axevfg-1920-80.jpg" mos="" align="middle" fullscreen="" width="600" height="400" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><strong>Galaxy Z Fold 8: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="41449426-8f79-11f1-ac6a-cd8e71eb7761" data-action="Deal Block" data-label="Galaxy Z Fold 8: free w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Fold 8: free w/ trade-in + unlimited @ T-Mobile" data-dimension25=""><strong>free w/ trade-in + unlimited @ T-Mobile</strong></a><br />New and existing T-Mobile customers can get the Galaxy Z Fold 8 for free with trade-in and Experience Beyond data plans. Or you'll get up to $1,100 off with trade-in and on Experience More plans. Other discounts are also available for other plans. <a class="view-deal button" href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="41449426-8f79-11f1-ac6a-cd8e71eb7761" data-action="Deal Block" data-label="Galaxy Z Fold 8: free w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Fold 8: free w/ trade-in + unlimited @ T-Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="41449494-8f79-11f1-a3b3-034c75c466ef" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8: up to $1,200 off w/ trade-in @ Samsung" href="https://www.samsung.com/us/smartphones/galaxy-z-fold8/buy/galaxy-z-fold8-256gb-unlocked-sku-sm-f971ulvaxaa/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1312px;"><p class="vanilla-image-block" style="padding-top:55.95%;"><img id="YFnsbuxZypxrkdepxUH3h9" name="Samsung logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/YFnsbuxZypxrkdepxUH3h9-1920-80.jpg" mos="" align="middle" fullscreen="" width="1312" height="734" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><strong>Galaxy Z Fold 8: </strong><a href="https://www.samsung.com/us/smartphones/galaxy-z-fold8/buy/galaxy-z-fold8-256gb-unlocked-sku-sm-f971ulvaxaa/" target="_blank" rel="nofollow" data-dimension112="41449494-8f79-11f1-a3b3-034c75c466ef" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8: up to $1,200 off w/ trade-in @ Samsung" data-dimension25=""><strong>up to $1,200 off w/ trade-in @ Samsung</strong></a><br />Samsung is knocking up to $1,200 off Galaxy Z Fold 8 when you trade-in an older phone. Alternatively, you'll get a $200 credit if you don't have a trade-in. The phone features an 7.6-inch AMOLED (1848 x 2448) 120Hz main display, 5.5-inch AMOLED (1248 x 1972) 120Hz cover display, Snapdragon 8 Elite CPU, 12GB of RAM, and 256GB of storage. On the rear you get a 50MP main wide-angle lens and 50MP ultra-wide lens. Selfie cams include a 10MP main display and 10MP cover camera. In our <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-hands-on-review">Galaxy Z Fold 8 hands-on</a>, we called it our favorite foldable to date. It loses the telephoto zoom, but you get a greatly reduced crease, brighter main screen, and lighter design.<a class="view-deal button" href="https://www.samsung.com/us/smartphones/galaxy-z-fold8/buy/galaxy-z-fold8-256gb-unlocked-sku-sm-f971ulvaxaa/" target="_blank" rel="nofollow" data-dimension112="41449494-8f79-11f1-a3b3-034c75c466ef" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8: up to $1,200 off w/ trade-in @ Samsung" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="41449502-8f79-11f1-874d-61a515c7a389" data-action="Deal Block" data-label="Galaxy Z Fold 8: free w/ trade-in + unlimited @ AT&amp;T" data-dimension48="Galaxy Z Fold 8: free w/ trade-in + unlimited @ AT&amp;T" href="https://www.att.com/buy/phones/samsung-galaxy-z-fold8.html" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:225px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="o9PdShQsgAk95AN7C5UMNR" name="AT&amp;T Logo.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/o9PdShQsgAk95AN7C5UMNR-1920-80.jpeg" mos="" align="middle" fullscreen="" width="225" height="225" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><strong>Galaxy Z Fold 8: </strong><a href="https://www.att.com/buy/phones/samsung-galaxy-z-fold8.html" target="_blank" rel="nofollow" data-dimension112="41449502-8f79-11f1-874d-61a515c7a389" data-action="Deal Block" data-label="Galaxy Z Fold 8: free w/ trade-in + unlimited @ AT&amp;T" data-dimension48="Galaxy Z Fold 8: free w/ trade-in + unlimited @ AT&amp;T" data-dimension25=""><strong>free w/ trade-in + unlimited @ AT&amp;T</strong></a><br />New and existing customers can get the Galaxy Z Fold 8 for free when you trade in a phone with an eligible data plan. <a class="view-deal button" href="https://www.att.com/buy/phones/samsung-galaxy-z-fold8.html" target="_blank" rel="nofollow" data-dimension112="41449502-8f79-11f1-874d-61a515c7a389" data-action="Deal Block" data-label="Galaxy Z Fold 8: free w/ trade-in + unlimited @ AT&amp;T" data-dimension48="Galaxy Z Fold 8: free w/ trade-in + unlimited @ AT&amp;T" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="41449566-8f79-11f1-bd42-25fd978ef78f" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,200 off + free $200 GC @ Best Buy" data-dimension48="Galaxy Z Fold 8: up to $1,200 off + free $200 GC @ Best Buy" href="https://www.bestbuy.com/productlist/promo/latest-samsung-galaxy-phones" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1331px;"><p class="vanilla-image-block" style="padding-top:68.52%;"><img id="yjsgCbZzcWDLMuhHtLHa7K" name="Best Buy deal block 2022.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yjsgCbZzcWDLMuhHtLHa7K-1920-80.jpeg" mos="" align="middle" fullscreen="" width="1331" height="912" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><strong>Galaxy Z Fold 8: </strong><a href="https://www.bestbuy.com/productlist/promo/latest-samsung-galaxy-phones" target="_blank" rel="nofollow" data-dimension112="41449566-8f79-11f1-bd42-25fd978ef78f" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,200 off + free $200 GC @ Best Buy" data-dimension48="Galaxy Z Fold 8: up to $1,200 off + free $200 GC @ Best Buy" data-dimension25=""><strong>up to $1,200 off + free $200 GC @ Best Buy</strong></a><br />Best Buy is offering one of the best Galaxy Z Fold 8 deals around. Purchase your phone at Best Buy with trade-in and you'll get up to $1,200 off. Plus, you'll get a free $200 Best Buy gift card. <a class="view-deal button" href="https://www.bestbuy.com/productlist/promo/latest-samsung-galaxy-phones" target="_blank" rel="nofollow" data-dimension112="41449566-8f79-11f1-bd42-25fd978ef78f" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,200 off + free $200 GC @ Best Buy" data-dimension48="Galaxy Z Fold 8: up to $1,200 off + free $200 GC @ Best Buy" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="414495d4-8f79-11f1-abf6-3dcb3004637c" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension48="Galaxy Z Fold 8: up to $1,200 off w/ trade-in + unlimited @ Verizon" href="https://www.verizon.com/smartphones/samsung-galaxy-z-fold8/?sku=sku6049305?isMyPlanFlow=true" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3321px;"><p class="vanilla-image-block" style="padding-top:40.98%;"><img id="R4vXmWQKAkSdQs7bVstjs8" name="Verizon logo 2024.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/R4vXmWQKAkSdQs7bVstjs8-1920-80.jpg" mos="" align="middle" fullscreen="" width="3321" height="1361" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><strong>Galaxy Z Fold 8: </strong><a href="https://www.verizon.com/smartphones/samsung-galaxy-z-fold8/?sku=sku6049305?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="414495d4-8f79-11f1-abf6-3dcb3004637c" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension48="Galaxy Z Fold 8: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension25=""><strong>up to $1,200 off w/ trade-in + unlimited @ Verizon</strong></a><br />Verizon is taking up to $1,200 off your Galaxy Z Fold 8 purchase with trade-in and eligible unlimited data plans. Or buy a Galaxy Fold 8 and get a free Galaxy Watch 9 and Galaxy Tab 10 FE 5G when you open a new line for each device. <a class="view-deal button" href="https://www.verizon.com/smartphones/samsung-galaxy-z-fold8/?sku=sku6049305?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="414495d4-8f79-11f1-abf6-3dcb3004637c" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension48="Galaxy Z Fold 8: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="41449660-8f79-11f1-bbc7-7fb18b0f86de" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Xfinity Mobile" data-dimension48="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Xfinity Mobile" href="https://www.xfinity.com/mobile/shop/phone/galaxy-z-fold8" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:300px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="NCwubcuyQYEeAmGJjMxYde" name="xfinitymobile-logo.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/NCwubcuyQYEeAmGJjMxYde-1920-80.jpeg" mos="" align="middle" fullscreen="" width="300" height="300" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><strong>Galaxy Z Fold 8: </strong><a href="https://www.xfinity.com/mobile/shop/phone/galaxy-z-fold8" target="_blank" rel="nofollow" data-dimension112="41449660-8f79-11f1-bbc7-7fb18b0f86de" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Xfinity Mobile" data-dimension48="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Xfinity Mobile" data-dimension25=""><strong>up to $1,000 off w/ trade-in @ Xfinity Mobile</strong></a><br />Xfinity Mobile is offering up to $1,000 off the Galaxy Z Fold 8 (via trade-in). Customers who don't have a phone to trade can still get $600 off. <a class="view-deal button" href="https://www.xfinity.com/mobile/shop/phone/galaxy-z-fold8" target="_blank" rel="nofollow" data-dimension112="41449660-8f79-11f1-bbc7-7fb18b0f86de" data-action="Deal Block" data-label="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Xfinity Mobile" data-dimension48="Galaxy Z Fold 8: up to $1,000 off w/ trade-in @ Xfinity Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="414497d2-8f79-11f1-9643-f9639a8eb9cb" data-action="Deal Block" data-label="Samsung Galaxy Z Fold 8: for $1,899 @ Amazon" data-dimension48="Samsung Galaxy Z Fold 8: for $1,899 @ Amazon" href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12M2TY4" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:954px;"><p class="vanilla-image-block" style="padding-top:98.95%;"><img id="4EngEpxMLxWVDrp7aAo2xi" name="Galaxy Z Fold 8 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/4EngEpxMLxWVDrp7aAo2xi-1920-80.jpg" mos="" align="middle" fullscreen="" width="954" height="944" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><strong>Samsung Galaxy Z Fold 8: </strong><a href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12M2TY4" target="_blank" rel="nofollow" data-dimension112="414497d2-8f79-11f1-9643-f9639a8eb9cb" data-action="Deal Block" data-label="Samsung Galaxy Z Fold 8: for $1,899 @ Amazon" data-dimension48="Samsung Galaxy Z Fold 8: for $1,899 @ Amazon" data-dimension25=""><strong>for $1,899 @ Amazon</strong></a><br />Amazon is offering a free $350 Amazon gift card when you buy your Galaxy Z Fold 8 at Amazon. <a class="view-deal button" href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12M2TY4" target="_blank" rel="nofollow" data-dimension112="414497d2-8f79-11f1-9643-f9639a8eb9cb" data-action="Deal Block" data-label="Samsung Galaxy Z Fold 8: for $1,899 @ Amazon" data-dimension48="Samsung Galaxy Z Fold 8: for $1,899 @ Amazon" data-dimension25="">View Deal</a></p></div><h3 class="article-body__section" id="section-galaxy-z-fold-8-ultra-preorder-deals"><span>Galaxy Z Fold 8 Ultra preorder deals</span></h3><div class="product"><a data-dimension112="41449912-8f79-11f1-a0c4-f3d8c7aa50af" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,900 off w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,900 off w/ trade-in + unlimited @ T-Mobile" href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:600px;"><p class="vanilla-image-block" style="padding-top:66.67%;"><img id="4gDqoyT3A5J9nTa6Axevfg" name="TMobileLogo_1.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/4gDqoyT3A5J9nTa6Axevfg-1920-80.jpg" mos="" align="middle" fullscreen="" width="600" height="400" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 Ultra: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="41449912-8f79-11f1-a0c4-f3d8c7aa50af" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,900 off w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,900 off w/ trade-in + unlimited @ T-Mobile" data-dimension25=""><strong>up to $1,900 off w/ trade-in + unlimited @ T-Mobile</strong></a><br />New and existing T-Mobile customers can get up to $1,900 off the Galaxy Z Fold 8 Ultra with trade-in and Experience Beyond data plans. Or you'll get up to $1,100 off with trade-in and on Experience More plans. Other discounts are also available for other plans. <a class="view-deal button" href="https://tmobilepostpaid.pxf.io/c/1943169/3981416/38171?subId1=hawk-custom-tracking" target="_blank" rel="nofollow" data-dimension112="41449912-8f79-11f1-a0c4-f3d8c7aa50af" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,900 off w/ trade-in + unlimited @ T-Mobile" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,900 off w/ trade-in + unlimited @ T-Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="41449980-8f79-11f1-80b7-b1abdaa2cb44" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" href="https://www.samsung.com/us/smartphones/galaxy-z-fold8-ultra/buy/galaxy-z-fold8-ultra-256gb-unlocked-sku-sm-f976uzvaxaa/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1312px;"><p class="vanilla-image-block" style="padding-top:55.95%;"><img id="YFnsbuxZypxrkdepxUH3h9" name="Samsung logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/YFnsbuxZypxrkdepxUH3h9-1920-80.jpg" mos="" align="middle" fullscreen="" width="1312" height="734" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 Ultra: </strong><a href="https://www.samsung.com/us/smartphones/galaxy-z-fold8-ultra/buy/galaxy-z-fold8-ultra-256gb-unlocked-sku-sm-f976uzvaxaa/" target="_blank" rel="nofollow" data-dimension112="41449980-8f79-11f1-80b7-b1abdaa2cb44" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" data-dimension25=""><strong>up to $1,200 off w/ trade-in @ Samsung</strong></a><br />Samsung is knocking up to $1,200 off Galaxy Z Fold 8 Ultra purchases when you trade-in an older phone. Alternatively, you'll get a $200 credit if you don't have a trade-in. The phone features an 8-inch AMOLED (2504 x 2256) 120Hz main display, 6.5-inch AMOLED (1080 x 2520) 120Hz cover display, Snapdragon 8 Elite CPU, 12GB of RAM, and 256GB of storage. On the rear you get a 200MP main wide-angle lens, 50MP ultra-wide lens, and 10MP telephoto lens (3x optical). Selfie cams include a 10MP main display and 10MP cover camera. In our <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-ultra-hands-on-review">Galaxy Z Fold 8 Ultra review</a>, we said its greatly reduced crease, upgraded silicon carbon battery, faster charging, and upgraded ultrawide camera make it a meaningful upgrade.<a class="view-deal button" href="https://www.samsung.com/us/smartphones/galaxy-z-fold8-ultra/buy/galaxy-z-fold8-ultra-256gb-unlocked-sku-sm-f976uzvaxaa/" target="_blank" rel="nofollow" data-dimension112="41449980-8f79-11f1-80b7-b1abdaa2cb44" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="414499e4-8f79-11f1-a71f-9328405cf2c4" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off + free $200 GC @ Best Buy" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off + free $200 GC @ Best Buy" href="https://www.bestbuy.com/productlist/promo/latest-samsung-galaxy-phones" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1331px;"><p class="vanilla-image-block" style="padding-top:68.52%;"><img id="yjsgCbZzcWDLMuhHtLHa7K" name="Best Buy deal block 2022.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yjsgCbZzcWDLMuhHtLHa7K-1920-80.jpeg" mos="" align="middle" fullscreen="" width="1331" height="912" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 Ultra: </strong><a href="https://www.bestbuy.com/productlist/promo/latest-samsung-galaxy-phones" target="_blank" rel="nofollow" data-dimension112="414499e4-8f79-11f1-a71f-9328405cf2c4" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off + free $200 GC @ Best Buy" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off + free $200 GC @ Best Buy" data-dimension25=""><strong>up to $1,200 off + free $200 GC @ Best Buy</strong></a><br />Best Buy is offering one of the best Galaxy Z Fold 8 Ultra deals around. Buy your phone at Best Buy with trade-in and you'll get up to $1,200 off. Plus, you'll get a free $200 Best Buy gift card just for your purchase. <a class="view-deal button" href="https://www.bestbuy.com/productlist/promo/latest-samsung-galaxy-phones" target="_blank" rel="nofollow" data-dimension112="414499e4-8f79-11f1-a71f-9328405cf2c4" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off + free $200 GC @ Best Buy" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off + free $200 GC @ Best Buy" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="41449a48-8f79-11f1-9a8d-5137f7f6511a" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: $5/month w/ trade-in + unlimited @ AT&amp;T" data-dimension48="Galaxy Z Fold 8 Ultra: $5/month w/ trade-in + unlimited @ AT&amp;T" href="https://www.att.com/buy/phones/samsung-galaxy-z-fold8-ultra.html" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:225px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="o9PdShQsgAk95AN7C5UMNR" name="AT&amp;T Logo.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/o9PdShQsgAk95AN7C5UMNR-1920-80.jpeg" mos="" align="middle" fullscreen="" width="225" height="225" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 Ultra: </strong><a href="https://www.att.com/buy/phones/samsung-galaxy-z-fold8-ultra.html" target="_blank" rel="nofollow" data-dimension112="41449a48-8f79-11f1-9a8d-5137f7f6511a" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: $5/month w/ trade-in + unlimited @ AT&amp;T" data-dimension48="Galaxy Z Fold 8 Ultra: $5/month w/ trade-in + unlimited @ AT&amp;T" data-dimension25=""><strong>$5/month w/ trade-in + unlimited @ AT&amp;T</strong></a><br />New and existing customers can get the Galaxy Z Fold 8 Ultra for $5.56/month when you trade in a phone with an eligible data plan. That's up to $1,900 off the phone's full price. <a class="view-deal button" href="https://www.att.com/buy/phones/samsung-galaxy-z-fold8-ultra.html" target="_blank" rel="nofollow" data-dimension112="41449a48-8f79-11f1-9a8d-5137f7f6511a" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: $5/month w/ trade-in + unlimited @ AT&amp;T" data-dimension48="Galaxy Z Fold 8 Ultra: $5/month w/ trade-in + unlimited @ AT&amp;T" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="41449ab6-8f79-11f1-a62d-9f00e4deca92" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in + unlimited @ Verizon" href="https://www.verizon.com/smartphones/samsung-galaxy-z-fold8-ultra/?isMyPlanFlow=true" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3321px;"><p class="vanilla-image-block" style="padding-top:40.98%;"><img id="R4vXmWQKAkSdQs7bVstjs8" name="Verizon logo 2024.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/R4vXmWQKAkSdQs7bVstjs8-1920-80.jpg" mos="" align="middle" fullscreen="" width="3321" height="1361" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 Ultra: </strong><a href="https://www.verizon.com/smartphones/samsung-galaxy-z-fold8-ultra/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="41449ab6-8f79-11f1-a62d-9f00e4deca92" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension25=""><strong>up to $1,200 off w/ trade-in + unlimited @ Verizon</strong></a><br />Verizon is taking up to $1,200 off your Galaxy Z Fold 8 Ultra  with trade-in and eligible unlimited data plans. Or buy a Galaxy Fold 8 Ultra and get a free Galaxy Watch 9 and Galaxy Tab 10 FE 5G when you open a new line for each device. <a class="view-deal button" href="https://www.verizon.com/smartphones/samsung-galaxy-z-fold8-ultra/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="41449ab6-8f79-11f1-a62d-9f00e4deca92" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in + unlimited @ Verizon" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="41449b24-8f79-11f1-a28e-f1483432e178" data-action="Deal Block" data-label="Z Fold 8 Ultra" data-dimension48="Z Fold 8 Ultra" data-dimension25="$2099" href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12KX1X4" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1327px;"><p class="vanilla-image-block" style="padding-top:64.28%;"><img id="9Rhpe6TtrVFSNo9Vtn27Tm" name="Galaxy Z Fold 8 Ultra deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/9Rhpe6TtrVFSNo9Vtn27Tm-1920-80.jpg" mos="" align="middle" fullscreen="" width="1327" height="853" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p>Amazon is offering a free $350 Amazon gift card when you buy your Galaxy Z Fold 8 Ultra at Amazon. It's one of the most generous deals we've seen on the unlocked version of Samsung's foldable. <a class="view-deal button" href="https://www.amazon.com/Samsung-Galaxy-Fold8-Violet-Shadow/dp/B0H12KX1X4" target="_blank" rel="nofollow" data-dimension112="41449b24-8f79-11f1-a28e-f1483432e178" data-action="Deal Block" data-label="Z Fold 8 Ultra" data-dimension48="Z Fold 8 Ultra" data-dimension25="$2099">View Deal</a></p></div><h3 class="article-body__section" id="section-shop-more-deals"><span>Shop more deals</span></h3><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=Everything&amp;rows=6&amp;view_mode=savings_squad&amp;widget_title=Top+Deals+Handpicked+by+Our+Editors&amp;widget_subtitle=Discover+the+best+discounts+currently+available%2C+curated+daily+by+the+Tom%27s+Guide+Savings+Squad.&amp;bg_color=transparent" data-vizualizer-embed="true"></div>    <script>    /**     * Tom's Guide Deals Finder - Vanilla JS Encapsulated Engine     */    (function() {      // --- Freyr Analytics Adapter ---      function initAnalytics() {        window.dataLayer = window.dataLayer || [];        window.googletag = window.googletag || {};        window.googletag.cmd = window.googletag.cmd || [];        window.hawk = window.hawk || { analytics: { freyr: [] } };        window.hawk.analytics = window.hawk.analytics || { freyr: [] };        window.hawk.analytics.freyr = window.hawk.analytics.freyr || [];        window.freyr = window.freyr || { cmd: [] };        const scriptSrc = 'https://freyr.futurecdn.net/freyr.js';        const hostname = typeof window !== 'undefined' ? window.location.hostname : '';        const isTestEnv = typeof window.navigator !== 'undefined' && (window.navigator.webdriver || window.navigator.userAgent.includes('Headless'));        const shouldSendRealAnalytics = !isTestEnv && hostname && hostname !== 'localhost' && hostname !== '127.0.0.1' && !hostname.includes('run.app');        if (shouldSendRealAnalytics && !document.querySelector(`script[src="${scriptSrc}"]`)) {          const script = document.createElement('script');          script.src = scriptSrc;          script.async = true;          document.head.appendChild(script);        }      }      function storeEventForDebug(name, data) {        if (!window.hawk || !window.hawk.analytics || !window.hawk.analytics.freyr) return;        window.hawk.analytics.freyr.push({ name, data });        try {          if (typeof window !== 'undefined' && window.localStorage) {            window.localStorage.setItem("hawk", JSON.stringify(window.hawk));          }        } catch (e) {          // Ignore storage issues        }        try {          window.dispatchEvent(new CustomEvent("hawk-analytics-update"));        } catch (e) {}      }      function sendToFreyr(eventName, data) {        if (typeof window === 'undefined') return;        window.freyr = window.freyr || { cmd: [] };        window.freyr.cmd.push(() => {          if (window.freyr && window.freyr.pushAndUpdate) {            window.freyr.pushAndUpdate(eventName, data);          }        });      }      function sendEvent(event, skip = false) {        try {          storeEventForDebug(event.name, event.data);          if (!skip) {            sendToFreyr(event.name, event.data);          }        } catch (e) {          // Ensure tracking errors don't surface to the user        }      }      function getCookie(name) {        try {          const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));          return match ? match[2] : null;        } catch (e) {          return null;        }      }      function getTimeAgo(dateString) {        if (!dateString) return '';        const date = new Date(dateString);        const now = new Date();        const diffInSeconds = Math.floor((now.getTime() - date.getTime()) / 1000);        if (diffInSeconds < 60) return 'Just now';        const diffInMinutes = Math.floor(diffInSeconds / 60);        if (diffInMinutes < 60) return `${diffInMinutes} min${diffInMinutes > 1 ? 's' : ''} ago`;        const diffInHours = Math.floor(diffInMinutes / 60);        if (diffInHours < 24) return `${diffInHours} hr${diffInHours > 1 ? 's' : ''} ago`;        const diffInDays = Math.floor(diffInHours / 24);        if (diffInDays < 30) return `${diffInDays} day${diffInDays > 1 ? 's' : ''} ago`;        const diffInMonths = Math.floor(diffInDays / 30);        if (diffInMonths < 12) return `${diffInMonths} mo${diffInMonths > 1 ? 's' : ''} ago`;        const diffInYears = Math.floor(diffInDays / 365);        return `${diffInYears} yr${diffInYears > 1 ? 's' : ''} ago`;      }      function normalizeCurrency(symbol) {        const map = {          '£': 'GBP',          '$': 'USD',          'A$': 'AUD',          'CA$': 'CAD',          '€': 'EUR'        };        return map[symbol] || symbol;      }      function trackElementInteraction(props) {        sendEvent({          name: 'elementInteraction',          data: {            element: {              action: props.action || "click",              id: props.id || undefined,              class: props.class || undefined,              name: props.name || undefined,              text: props.text || undefined,              label: props.label || undefined,              container: props.container || undefined,              url: props.url || undefined,              articleId: props.articleId || undefined            }          }        });      }      function generateRevenueId(url, productName, merchantName, modelId) {        const str = `${window.location.href}|${productName}|${merchantName}|${modelId || ''}|${new Date().toDateString()}|tomsguide`;        let hash = 0;        for (let i = 0; i < str.length; i++) {          const char = str.charCodeAt(i);          hash = ((hash << 5) - hash) + char;          hash = hash & hash;        }        let numericStr = Math.abs(hash).toString();        while (numericStr.length < 19) {          numericStr += Math.floor(Math.random() * 10).toString();        }        return numericStr.substring(0, 19);      }      function rewriteAffiliateLink(url, territory, revenueId) {        if (!url) return url;        const t = (territory || 'gb').toLowerCase();        return url.replace(/hawk-custom-tracking/g, `tomsguide-${t}-${revenueId}`);      }      function trackHawkEvent(params) {        const { clickType, widgetId, productCategoryName, product, productsArray, zeroBasedProductIndexOrNull, totalDealsOrProducts, areaClicked, merchant, revenueId, isoCurrencyCode, queryName, widgetTypeName } = params;        const data = {          event: "hawkEvent",          category: "Affiliates",          affiliate: {            action: {              type: clickType,              id: widgetId,              event: clickType === "appeared" ? "viewed" : "Click from",              timestamp: Date.now()            },            component: {              flag: "Editor",              product: productCategoryName || "deals",              category: `Signal Deal Finder ${widgetTypeName || "Carousel"} widget`,              type: clickType === "appeared" ? "review" : "signal product",              label: queryName || (product ? (product.name || "") : ""),              index: zeroBasedProductIndexOrNull === null || zeroBasedProductIndexOrNull === undefined ? -1 : zeroBasedProductIndexOrNull,              linkCount: totalDealsOrProducts || 0,              blockLayout: "",              areaClicked: areaClicked || ""            }          },          products: productsArray || (product && merchant ? [            {              product: {                primary: {                  id: product.id || product.matchId || null,                  name: product.name,                  type: "deal",                  price: product.price,                  previousPrice: product.previousPrice || null,                  currency: isoCurrencyCode || "USD",                  preorder: false,                  labels: [],                  link: product.link,                  originalLink: product.originalLink || null,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: null,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: product.globalId || null,                  inStock: product.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: isoCurrencyCode || "USD"                }              },              merchant: {                id: merchant.id || null,                name: merchant.name,                url: merchant.url || null,                network: merchant.network || null              },              model: {                id: product.modelId || null,                brand: product.brand || null,                name: product.name,                parent: product.parent || null              }            }          ] : []),          reviews: [],          _clear: true,          "gtm.uniqueEventId": Date.now() % 10000        };        sendEvent({ name: 'hawkEvent', data });      }      function trackDealClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card" });      }      function trackViewSimilarClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card View Similar" });      }      function trackPriceComparisonClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Price Comparison" });      }      function trackReviewClick(params) {        trackHawkEvent({ ...params, clickType: "review", areaClicked: "Signal Product Card Review Link" });      }      function trackShare(params) {        trackHawkEvent({ ...params, clickType: "share", areaClicked: "Signal Product Card Share" });      }      function trackDealsAppeared(widgetId, deals, revenueId, currency, queryName, widgetTypeName) {         if (!deals || deals.length === 0) return;                  const productsArray = deals.slice(0, 50).map((deal) => {            let voucherPct = null;            let rawPrice = parseFloat(deal.rawPrice) || parseFloat(deal.price) || null;            let rawMsrp = parseFloat(deal.rawMsrp) || parseFloat(deal.msrp) || null;            if (rawMsrp > rawPrice && rawPrice > 0) {              voucherPct = Math.round((1 - (rawPrice / rawMsrp)) * 100);            }            let numId = null;            if (deal.externalProductId && !isNaN(parseInt(deal.externalProductId))) {              numId = parseInt(deal.externalProductId);            } else if (deal.id && !isNaN(parseInt(deal.id))) {              numId = parseInt(deal.id);            } else {              numId = deal.matchId || null;            }            return {              product: {                primary: {                  id: numId,                  name: deal.productName || deal.title || "",                  type: "deal",                  price: rawPrice,                  previousPrice: rawMsrp,                  currency: currency || 'USD',                  preorder: false,                  labels: deal.modelBrand || deal.brand ? [                     { type: "brand", value: deal.modelBrand || deal.brand }                  ] : [],                  link: deal.url,                  originalLink: deal.url,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: voucherPct,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: deal.productKey || null,                  inStock: deal.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: currency || 'USD'                }              },              merchant: {                id: deal.merchantId ? parseInt(deal.merchantId) : null,                name: deal.merchant || "Retailer",                url: deal.merchantUrl || null,                network: deal.merchantNetwork || null              },              model: {                id: deal.modelId ? parseInt(deal.modelId) : null,                brand: deal.modelBrand || deal.brand || null,                name: deal.productName || deal.title || "",                parent: deal.modelParent || null              }            };         });                  trackHawkEvent({             clickType: "appeared",             widgetId: widgetId,             productCategoryName: "deals",             zeroBasedProductIndexOrNull: null,             totalDealsOrProducts: deals.length,             productsArray: productsArray,             queryName: queryName,             widgetTypeName: widgetTypeName         });      }      // 1. Setup Shadow DOM Sandbox      const currentScript = document.currentScript;      let hostContainer = null;      let template = null;            if (currentScript) {        let prev = currentScript.previousElementSibling;        while (prev) {          if (prev.tagName === 'TEMPLATE' && prev.classList.contains('tg-df-widget-template')) {            template = prev;          } else if (prev.tagName === 'DIV' && prev.classList.contains('tg-df-widget-host') && !prev.hasAttribute('data-initialized')) {            hostContainer = prev;            break;          }          prev = prev.previousElementSibling;        }      }            // Fallbacks in case script is deferred      if (!hostContainer) {        const hosts = document.querySelectorAll('.tg-df-widget-host:not([data-initialized])');        if (hosts.length > 0) hostContainer = hosts[0];      }            // Safely embedded template for CMS environments      const rawTemplate = `  \x3Cstyle>    /* --- Shadow DOM Base Reset --- */    *, *::before, *::after {      box-sizing: border-box;    }    img, picture, svg, video {      max-width: 100%;      height: auto;      display: block;    }    /*       1. Scoped CSS for Tom's Guide Deals Widget       All classes are prefixed with \`tg-df-\` to prevent CMS style leakage.    */    .tg-df-container {      container-type: inline-size;      container-name: tg-df;      --tg-df-blue: #1F69FF;      --tg-df-blue-hover: #004d8c;      --tg-df-text: #222222;      --tg-df-text-muted: #555555;      --tg-df-bg: #ffffff;      --tg-df-bg-secondary: #f4f4f4;      --tg-df-border: #e2e8f0;      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;      color: var(--tg-df-text);      background-color: transparent;       width: 100%;      max-width: 1200px;      margin: 0 auto;      padding-bottom: 24px;    }    .tg-df-container *, .tg-df-container *::before, .tg-df-container *::after {      margin: 0;      padding: 0;      box-sizing: border-box;    }    .tg-df-container img {      border: none;      margin: 0;      padding: 0;    }    .tg-df-container a {      text-decoration: none;      color: inherit;    }    /*       2. Search & Filter Bar    */    .tg-df-controls {      display: flex;      flex-direction: column;      align-items: center;      gap: 20px;      margin-bottom: 32px;      width: 100%;      position: relative;      z-index: 20;    }    .tg-df-top-bar {      display: flex;      width: 100%;      max-width: 760px;      gap: 12px;      margin: 0 auto;      align-items: center;    }    .tg-df-search-wrapper {      position: relative;      flex: 1;      width: 100%;      box-shadow: 0 8px 24px rgba(0,0,0,0.06);      border-radius: 40px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      z-index: 100;    }    .tg-df-autocomplete-dropdown {      position: absolute;      top: calc(100% + 4px);      left: 0;      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      max-height: 300px;      overflow-y: auto;      z-index: 200;      display: none;    }    .tg-df-autocomplete-dropdown.active {      display: block;    }    .tg-df-autocomplete-item {      padding: 12px 24px;      cursor: pointer;      font-size: 14px;      color: var(--tg-df-text);      transition: background 0.1s ease;    }    .tg-df-autocomplete-item:hover {      background: var(--tg-df-bg-secondary);    }    .tg-df-search-input {      width: 100%;      padding: 16px 64px 16px 24px;      font-size: 16px;      border: 2px solid transparent;      border-radius: 40px;      outline: none;      transition: border-color 0.2s ease, box-shadow 0.2s ease;      color: var(--tg-df-text);      background: transparent;    }    .tg-df-search-input:focus {      border-color: transparent;      box-shadow: 0 0 0 3px rgba(0, 108, 196, 0.15);    }    .tg-df-search-input::placeholder {      color: #999999;    }        .tg-df-search-btn {      position: absolute;      right: 8px;      top: 50%;      transform: translateY(-50%);      width: 40px;      height: 40px;      border-radius: 50%;      background: #222;      border: none;      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: background 0.2s ease;    }        .tg-df-search-btn:hover {      background: #000;    }    .tg-df-search-icon {      width: 16px;      height: 16px;      fill: #fff;    }    .tg-df-settings-wrapper {      position: relative;    }        .tg-df-settings-btn {      width: 48px;      height: 48px;      border-radius: 50%;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      box-shadow: 0 4px 12px rgba(0,0,0,0.04);      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: all 0.2s ease;      color: var(--tg-df-text-muted);      flex-shrink: 0;    }    .tg-df-settings-btn:hover {      background: var(--tg-df-bg-secondary);      border-color: #0000ff;      color: var(--tg-df-text);    }    .tg-df-settings-btn svg {      width: 24px;      height: 24px;      fill: currentColor;    }    .tg-df-settings-dropdown {      position: absolute;      top: calc(100% + 8px);      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      width: 280px;      padding: 20px;      display: none;      z-index: 100;      flex-direction: column;      gap: 20px;    }    .tg-df-settings-dropdown.active {      display: flex;    }        .tg-df-settings-dropdown-backdrop {      display: none;      position: fixed;      inset: 0;      z-index: 99;    }        .tg-df-settings-dropdown-backdrop.active {      display: block;    }    .tg-df-setting-item {      display: flex;      flex-direction: column;      gap: 10px;    }    .tg-df-setting-label {      font-size: 11px;      font-weight: 700;      color: var(--tg-df-text-muted);      text-transform: uppercase;      letter-spacing: 0.5px;    }        .tg-df-region-select {        padding: 10px 12px;        border-radius: 8px;        border: 1px solid var(--tg-df-border);        font-size: 15px;        outline: none;        background: var(--tg-df-bg-secondary);        color: var(--tg-df-text);        cursor: pointer;        width: 100%;    }    .tg-df-toggle {        position: relative;        display: inline-block;        width: 44px;        height: 24px;        flex-shrink: 0;    }    .tg-df-toggle input {        opacity: 0;        width: 0;        height: 0;    }    .tg-df-slider {        position: absolute;        cursor: pointer;        top: 0; left: 0; right: 0; bottom: 0;        background-color: #ccc;        transition: .2s;        border-radius: 24px;    }    .tg-df-slider:before {        position: absolute;        content: "";        height: 18px;        width: 18px;        left: 3px;        bottom: 3px;        background-color: white;        transition: .2s;        border-radius: 50%;    }    .tg-df-toggle input:checked + .tg-df-slider {        background-color: #1F69FF;    }    .tg-df-toggle input:checked + .tg-df-slider:before {        transform: translateX(20px);    }    .tg-df-dl-row {        flex-direction: row;        align-items: center;        justify-content: space-between;    }    .tg-df-dl-row-text {        font-size: 14px;        font-weight: 600;        color: var(--tg-df-text);    }    .tg-df-dl-row-subtext {        font-size: 12px;        font-weight: 400;        line-height: 1.3;        color: var(--tg-df-text-muted);        margin-top: 4px;        display: block;    }    .tg-df-filters-container {      position: relative;      width: 100%;      max-width: 800px;    }    .tg-df-scroll-btn {      display: none;      position: absolute;      top: 50%;      transform: translateY(-50%);      width: 32px;      height: 32px;      background: white;      border: 1px solid var(--tg-df-border);      border-radius: 50%;      align-items: center;      justify-content: center;      cursor: pointer;      z-index: 10;      box-shadow: 0 2px 8px rgba(0,0,0,0.1);      color: var(--tg-df-text-primary);      padding: 0;    }    .tg-df-scroll-btn svg {      width: 16px;      height: 16px;    }    .tg-df-scroll-btn:hover {      background: #f4f4f4;    }    .tg-df-scroll-btn.left {      left: 0px;    }    .tg-df-scroll-btn.right {      right: 0px;    }    @container tg-df (max-width: 768px) {      .tg-df-scroll-btn {        display: flex;        top: 22px; /* vertically center within the 44px high filter buttons */      }    }    .tg-df-filters {      display: grid;      width: 100%;      grid-template-columns: repeat(4, 1fr);      gap: 12px;      margin: 0 auto;      max-width: 800px;    }                 .tg-df-sort-wrapper {      position: relative;      display: flex;      align-items: center;      width: 100%;    }        .tg-df-sort-icon {      position: absolute;      left: 14px;      width: 14px;      height: 14px;      fill: var(--tg-df-text-muted);      pointer-events: none;    }    .tg-df-sort-select, .tg-df-filter-select {      width: 100%;      padding: 10px 36px 10px 38px;      font-size: 14px;      border: 1px solid var(--tg-df-border);      border-radius: 100px;      outline: none;      appearance: none;      background-color: var(--tg-df-bg-secondary);      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 12 12'%3E%3Cpath fill='%23555555' d='M6 8L1 3h10z'/%3E%3C/svg%3E");      background-repeat: no-repeat;      background-position: right 14px center;      color: var(--tg-df-text);      cursor: pointer;      font-weight: 500;      transition: all 0.2s ease;    }        .tg-df-price-input::-webkit-outer-spin-button,    .tg-df-price-input::-webkit-inner-spin-button {      -webkit-appearance: none;      margin: 0;    }    .tg-df-price-input {      -moz-appearance: textfield;    }    .tg-df-sort-select:hover, .tg-df-filter-select:hover {      background-color: #e2e8f0;    }    .tg-df-multiselect-container {      position: relative;    }    @container tg-df (max-width: 768px) {      .tg-df-filters-container {      position: relative;      width: 100%;      max-width: 800px;    }    .tg-df-scroll-btn {      display: none;      position: absolute;      top: 50%;      transform: translateY(-50%);      width: 32px;      height: 32px;      background: white;      border: 1px solid var(--tg-df-border);      border-radius: 50%;      align-items: center;      justify-content: center;      cursor: pointer;      z-index: 10;      box-shadow: 0 2px 8px rgba(0,0,0,0.1);      color: var(--tg-df-text-primary);      padding: 0;    }    .tg-df-scroll-btn svg {      width: 16px;      height: 16px;    }    .tg-df-scroll-btn:hover {      background: #f4f4f4;    }    .tg-df-scroll-btn.left {      left: 0px;    }    .tg-df-scroll-btn.right {      right: 0px;    }    @container tg-df (max-width: 768px) {      .tg-df-scroll-btn {        display: flex;        top: 22px; /* vertically center within the 44px high filter buttons */      }    }    .tg-df-filters {        width: 100%;        margin: 0;        margin-bottom: -320px;        padding: 0 16px 320px 16px;        display: flex;        flex-wrap: nowrap;        gap: 8px;        overflow-x: auto;        overflow-y: hidden;        pointer-events: none;        scrollbar-width: none;        -webkit-overflow-scrolling: touch;      }      .tg-df-filters::-webkit-scrollbar {        display: none;      }      .tg-df-sort-wrapper {        pointer-events: auto;        flex: 0 0 auto;        width: 175px;        min-width: 175px;      }    }        .tg-df-multiselect-trigger {      display: block;      background: #fff;      user-select: none;      width: 100%;      overflow: hidden;      white-space: nowrap;      text-overflow: ellipsis;    }        .tg-df-multiselect-dropdown {      display: none;      position: absolute;      top: calc(100% + 4px);      left: 0;      width: 100%;      min-width: 220px;      max-height: 300px;      overflow-y: auto;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);      z-index: 100;      padding: 8px 0;    }    .tg-df-multiselect-dropdown.active {      display: block;    }    .tg-df-ms-option {      padding: 8px 16px;      display: flex;      align-items: center;      gap: 8px;      cursor: pointer;      font-size: 14px;    }    .tg-df-ms-option:hover {      background-color: var(--tg-df-bg-secondary);    }        .tg-df-ms-option input {      cursor: pointer;      accent-color: #1f69ff;    }    .tg-df-sort-select:focus, .tg-df-filter-select:focus {      border-color: #0000ff;      box-shadow: 0 0 0 3px rgba(0, 0, 255, 0.2);      background-color: var(--tg-df-bg);    }    /*       3. Deal Grid Layout    */    .tg-df-grid.tg-df-grid-auto {      padding-top: 24px;    }    .tg-df-grid, .tg-df-grid.layout-grid {      display: grid;      grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));      gap: 10px;    }    .tg-df-grid.layout-row {      grid-template-columns: 1fr;      gap: 16px;    }        .tg-df-grid.layout-row .tg-df-card {      flex-direction: row;      align-items: stretch;      height: auto;      box-shadow: none;      border-bottom: 1px solid var(--tg-df-border);    }    .tg-df-grid.layout-row .tg-df-card:hover {      box-shadow: none;    }    .tg-df-grid.layout-row .tg-df-card-image-box {      width: 140px;      min-width: 140px;      aspect-ratio: 3/4;      border-right: none;      padding: 16px 16px 16px 32px;    }    .tg-df-grid.layout-row .tg-df-card-body {      padding: 16px;      justify-content: space-between;    }    .tg-df-grid.layout-row .tg-df-card-title {      font-size: 15px;      margin-bottom: 16px;    }    .tg-df-grid.layout-row .tg-df-card-stars { margin-bottom: 8px; }    .tg-df-grid.layout-row .tg-df-card-footer {      flex-direction: column;      align-items: flex-start;      gap: 0;    }    .tg-df-grid.layout-row .tg-df-card-merchant-pill {      margin-bottom: 4px;    }    .tg-df-grid.layout-row .tg-df-card-price-group {      margin-bottom: 8px;    }    .tg-df-grid.layout-row .tg-df-price-group {      width: auto;    }    .tg-df-grid.layout-row .tg-df-card-cta {      width: 100%;      max-width: 200px;      padding: 10px 24px;      font-size: 13px;      flex-shrink: 0;      text-align: center;      justify-content: center;    }    /*       4. Deal Card Design    */    .tg-df-card {      position: relative;      display: flex;      flex-direction: column;      background-color: #ffffff;      border-radius: 0;      overflow: hidden;      transition: transform 0.2s ease, box-shadow 0.2s ease;      text-decoration: none;      color: inherit;      height: 100%;      box-shadow: 0 0 16px rgba(0, 0, 0, 0.08);      border: 1px solid var(--tg-df-border);    }    .tg-df-card:hover {      box-shadow: 0 0 24px rgba(0, 0, 0, 0.12);    }    .tg-df-card-image-box {      width: 100%;      aspect-ratio: 3/4;      background-color: #f8f8f8;      display: flex;      align-items: center;      justify-content: center;      position: relative;      overflow: hidden;      padding: 32px;      flex: 0 0 auto;    }    .tg-df-card-image {      max-width: 100%;      max-height: 100%;      width: auto;      height: auto;      object-fit: contain;      mix-blend-mode: multiply; /* Helps white background images blend into secondary bg */      transition: transform 0.3s ease;    }    .tg-df-card:hover .tg-df-card-image {      transform: scale(1.05); /* Zoom in on hover */    }    .tg-df-card-discount-badge {      position: absolute;      top: 12px;      left: 12px;      background: #dc2626; /* Red */      color: #ffffff;      padding: 6px 8px;      font-size: 11px;      font-weight: 500;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      z-index: 10;    }        .tg-df-card-merchant-pill {      display: block;      padding: 0;      font-size: 11px;      font-weight: 600;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      color: var(--tg-df-text-muted);      margin-bottom: 8px;      white-space: nowrap;      overflow: hidden;      text-overflow: ellipsis;    }    .tg-df-card-body {      padding: 16px;      display: flex;      flex-direction: column;      flex-grow: 1;      min-width: 0;    }    .tg-df-card-badges {      display: flex;      flex-wrap: wrap;      gap: 6px;      margin-bottom: 8px;    }    .tg-df-tag {      display: inline-flex;      align-items: center;      padding: 4px 6px;      font-size: 11px;      font-weight: 700;      text-transform: uppercase;      border-radius: 4px;      gap: 4px;    }    .tg-df-tag-prime {      background-color: #00A8E1;      color: #fff;    }    .tg-df-tag-coupons {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-coupons:hover {      background-color: #e2e8f0;    }        .tg-df-tag-outline {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-outline:hover {      background-color: #e2e8f0;    }        @keyframes tg-df-spin {      0% { transform: rotate(0deg); }      100% { transform: rotate(360deg); }    }    .tg-df-coupon-spinner {      border: 2px solid #e2e8f0;      border-top: 2px solid #3b82f6;      border-radius: 50%;      width: 14px;      height: 14px;      animation: tg-df-spin 1s linear infinite;      margin: 4px 8px;      display: inline-block;    }        /* Vouchers Modal */    .tg-df-modal-backdrop {      position: fixed;      top: 0; left: 0; right: 0; bottom: 0;      background: rgba(0,0,0,0.5);      z-index: 10000;      display: flex;      align-items: center;      justify-content: center;      opacity: 0;      pointer-events: none;      transition: opacity 0.3s;    }    .tg-df-modal-backdrop.active {      opacity: 1;      pointer-events: auto;    }    .tg-df-modal {      background: #fff;      border-radius: 12px;      width: 90%;      max-width: 400px;      max-height: 80vh;      display: flex;      flex-direction: column;      box-shadow: 0 10px 40px rgba(0,0,0,0.2);      transform: translateY(20px);      transition: transform 0.3s;    }    .tg-df-modal-backdrop.active .tg-df-modal {      transform: translateY(0);    }    .tg-df-modal-header {      padding: 16px;      border-bottom: 1px solid #e2e8f0;      display: flex;      align-items: center;      justify-content: space-between;    }    .tg-df-modal-title {      font-size: 16px;      font-weight: 600;      margin: 0;    }    .tg-df-modal-close {      background: none;      border: none;      cursor: pointer;      padding: 4px;      color: #64748b;    }    .tg-df-modal-body {      padding: 16px;      overflow-y: auto;    }    .tg-df-voucher-item {      padding: 12px;      border: 1px dashed #cbd5e1;      border-radius: 8px;      margin-bottom: 10px;      background: #f8fafc;      display: flex;      align-items: center;      gap: 12px;      text-decoration: none;      color: inherit;      transition: background-color 0.2s, border-color 0.2s;    }    .tg-df-voucher-item:hover {      background: #f1f5f9;      border-color: #94a3b8;    }    .tg-df-voucher-item:last-child {      margin-bottom: 0;    }    .tg-df-voucher-logo {      width: 48px;      height: 48px;      object-fit: contain;      border-radius: 4px;      background: #fff;      border: 1px solid #e2e8f0;      flex-shrink: 0;    }    .tg-df-voucher-content {      flex: 1;      min-width: 0;    }    .tg-df-voucher-title {      font-size: 14px;      font-weight: 600;      margin: 0 0 4px 0;      line-height: 1.3;      color: #0f172a;    }    .tg-df-voucher-expiry {      font-size: 12px;      color: #64748b;      display: flex;      align-items: center;      gap: 4px;      margin-top: 6px;    }    .tg-df-voucher-code {      display: inline-flex;      align-items: center;      background: #f1f5f9;      border: 1px dashed #cbd5e1;      padding: 6px 10px;      font-family: monospace;      font-weight: 700;      font-size: 14px;      color: #0f172a;      border-radius: 4px;      margin-top: 8px;      cursor: pointer;      transition: all 0.2s ease;    }    .tg-df-voucher-code:hover {      background: #e2e8f0;      border-color: #94a3b8;    }    .tg-df-voucher-code.copied {      background: #ecfdf5;      border-color: #10b981;      color: #10b981;    }    .tg-df-voucher-cta {      display: inline-block;      margin-top: 8px;      font-size: 13px;      font-weight: 600;      color: #2563eb;      text-decoration: none;    }    .tg-df-card-title {      font-size: 15px;      font-weight: 400;      line-height: 1.4;      margin: 0 0 12px 0;      color: var(--tg-df-text);    }    .tg-df-card-footer {      margin-top: auto;      display: flex;      flex-direction: column;      width: 100%;    }    .tg-df-card-price-group {      display: flex;      flex-direction: row;      align-items: center;      gap: 8px;      margin-bottom: 12px;    }    .tg-df-card-price {      font-size: 16px;      font-weight: 700;      color: #dc2626; /* Red price */      line-height: 1;    }        .tg-df-card-msrp {      font-size: 13px;      color: var(--tg-df-text-muted);      text-decoration: line-through;    }    .tg-df-container .tg-df-card-cta {      display: flex;      align-items: center;      justify-content: center;      width: 100%;      box-sizing: border-box;      background-color: #1f69ff;      color: #ffffff;      font-size: 12px;      font-weight: 700;      text-transform: uppercase;      letter-spacing: 0.5px;      padding: 12px 16px;      border-radius: 0;      border: none;      cursor: pointer;      transition: background-color 0.2s ease;    }    .tg-df-card:hover .tg-df-card-cta,    .tg-df-card-cta:hover {      background-color: #1555cc;    }    /*       5. State & Skeleton Styles    */    .tg-df-message {      grid-column: 1 / -1;      text-align: center;      padding: 48px 24px;      color: var(--tg-df-text-muted);      font-size: 16px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;    }    @keyframes tg-df-shimmer {      0% { background-position: -200% 0; }      100% { background-position: 200% 0; }    }    .tg-df-skeleton {      background: linear-gradient(90deg, var(--tg-df-bg-secondary) 25%, #e2e8f0 50%, var(--tg-df-bg-secondary) 75%);      background-size: 200% 100%;      animation: tg-df-shimmer 1.5s infinite;      border-radius: 4px;    }    .tg-df-skeleton-img {      width: 100%;      height: 100%;      position: absolute;      top: 0; left: 0;    }        .tg-df-skeleton-text {      height: 16px;      margin-bottom: 8px;      width: 100%;    }    .tg-df-skeleton-text.short { width: 40%; }    .tg-df-skeleton-text.title { height: 20px; margin-bottom: 16px; }    /* Editor Floating Bar & Elements */    .tg-df-editor-bar {      position: sticky;      top: 120px;      z-index: 1000;      background: #111827;      color: #fff;      padding: 12px 16px;      border-radius: 8px;      margin-bottom: 16px;      display: flex;      align-items: center;      justify-content: space-between;      box-shadow: 0 4px 12px rgba(0,0,0,0.15);    }    .tg-df-editor-bar-text {      font-weight: 600;      font-size: 14px;    }    .tg-df-editor-copy-btn {      background: #10b981;      color: #fff;      padding: 6px 16px;      border: none;      border-radius: 4px;      font-weight: 600;      cursor: pointer;      display: flex;      align-items: center;      font-size: 13px;    }    .tg-df-editor-copy-btn:hover { background: #059669; }        .tg-df-deal-checkbox {      position: absolute;      top: 12px;      right: 12px;      z-index: 10;      width: 20px;      height: 20px;      cursor: pointer;      pointer-events: auto;    }    /*       6. Mobile List View (Stacks into a cleaner horizontal row/list)    */    @container tg-df (max-width: 599px) {      .tg-df-controls {        padding: 16px 16px 8px;      }            .tg-df-top-bar {        width: 100%;      }            .tg-df-settings-dropdown {        position: fixed;        top: auto;        bottom: 0;        left: 0;        right: 0;        width: 100%;        border-radius: 20px 20px 0 0;        padding: 24px;        box-shadow: 0 -8px 32px rgba(0,0,0,0.15);        z-index: 1000;        border: none;        border-top: 1px solid var(--tg-df-border);      }            .tg-df-settings-dropdown-backdrop.active {        background: rgba(0,0,0,0.4);      }            .tg-df-search-wrapper {        box-shadow: 0 0 16px rgba(0,0,0,0.08);      }                  .tg-df-sort-wrapper.tg-df-price-range-wrapper {        flex: 0 0 auto;        min-width: max-content;        width: auto;      }            .tg-df-sort-select, .tg-df-filter-select {        width: 100%;        text-align: left;        padding: 10px 24px 10px 32px;        background-position: right 8px center;        text-overflow: ellipsis;        white-space: nowrap;        overflow: hidden;      }      .tg-df-sort-icon {        left: 10px;      }      .tg-df-grid:not(.layout-grid):not(.layout-row),      .tg-df-grid.layout-row {        grid-template-columns: 1fr;        gap: 16px;      }            .tg-df-grid.tg-df-grid-auto {        padding-top: 24px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card,      .tg-df-grid.layout-row .tg-df-card {        flex-direction: row;        align-items: stretch;        height: auto;        box-shadow: none; /* simple line on mobile if preferred, or keep */        border-bottom: 1px solid var(--tg-df-border);      }      .tg-df-grid.tg-df-grid-auto .tg-df-card:hover,      .tg-df-grid.layout-row .tg-df-card:hover {        box-shadow: none;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-image-box,      .tg-df-grid.layout-row .tg-df-card-image-box {        width: 120px;        min-width: 120px;        aspect-ratio: 3/4;        border-right: none;        padding: 12px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-body,      .tg-df-grid.layout-row .tg-df-card-body {        padding: 12px;        justify-content: space-between;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-title,      .tg-df-grid.layout-row .tg-df-card-title {        font-size: 14px;        margin-bottom: 12px;      }      /* Single column mobile grid override */      .tg-df-grid.layout-grid {        grid-template-columns: 1fr;        gap: 16px;      }      .tg-df-grid.layout-grid .tg-df-card-image-box {        padding: 12px;      }      .tg-df-grid.layout-grid .tg-df-card-body {        padding: 10px;      }      .tg-df-grid.layout-grid .tg-df-card-title {        font-size: 13px;        margin-bottom: 8px;      }      .tg-df-grid.layout-grid .tg-df-card-price {        font-size: 14px;      }            .tg-df-card-footer {        flex-direction: column;        align-items: stretch;        gap: 0;        width: 100%;        min-width: 0;      }      .tg-df-card-merchant-pill {        margin-bottom: 4px;      }      .tg-df-card-price-group {        flex: 1 1 auto;        margin-bottom: 8px;      }      .tg-df-card-price {        font-size: 16px;      }      .tg-df-card-msrp {        display: block;       }      .tg-df-grid.layout-row .tg-df-card-cta,      .tg-df-container .tg-df-card-cta {        width: 100%;        max-width: none;        min-width: 0;        box-sizing: border-box;        padding: 8px 16px;        font-size: 12px;        flex: 0 0 auto;        text-align: center;        white-space: normal;        line-height: 1.2;      }    }    .tg-df-container.is-carousel {      min-height: 760px;      background-color: #E7F0FF;      padding: 0 0 24px 0;      border-radius: 24px;      width: 100vw;      max-width: 1200px;      position: relative;      left: 50%;      transform: translateX(-50%);    }    .tg-df-container.is-carousel.hide-header-details {      min-height: 480px;    }    /*       7. Carousel View Mode    */    .tg-df-container .tg-df-carousel-host {      /* Layout is now handled by container wrapper */    }    .tg-df-container .tg-df-carousel-eyebrow {      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      padding: 24px 16px 0 16px;      display: none;    }    .tg-df-container .tg-df-carousel-query-title {      color: #011535;      font-size: 28px;      font-weight: 600;      padding: 0 16px 24px 16px;      line-height: 1.2;      display: none;    }    .tg-df-container .tg-df-carousel-blue-box {      background-color: transparent;      border-radius: 0;      padding: 24px 24px 0 24px;      margin: 0;      color: #1F69FF;          position: relative;      overflow: hidden;    }    .tg-df-container .tg-df-carousel-bg-circle-1 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-2 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-3 {      display: none;    }    .tg-df-container .tg-df-carousel-box-content {      position: relative;      z-index: 10;    }    .tg-df-container .tg-df-carousel-box-eyebrow {      background-color: transparent;      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      display: inline-block;      padding: 0;      border-radius: 0;    }    .tg-df-container .tg-df-carousel-box-title {      font-size: 28px;      font-weight: 600;      line-height: 1.2;      margin-top: 8px;      color: #1e293b;    }    .tg-df-container .tg-df-countdown-wrapper {      position: absolute;      top: 0;      right: 0;      display: flex;      flex-direction: column;      align-items: flex-end;      gap: 12px;      transform: scale(0.67);      transform-origin: top right;    }    .tg-df-container .tg-df-countdown-title {      font-size: 14px;      font-weight: 600;      color: #011535;      margin: 0;    }    .tg-df-container .tg-df-countdown-blocks {      display: flex;      gap: 16px;    }    .tg-df-container .tg-df-countdown-item {      display: flex;      flex-direction: column;      align-items: center;      gap: 4px;    }    .tg-df-container .tg-df-countdown-box {      width: 59px;      height: 59px;      background: #03FE9E;      border-radius: 15px;      display: flex;      align-items: center;      justify-content: center;    }    .tg-df-container .tg-df-countdown-num {      font-family: 'Inter', sans-serif;      font-weight: 700;      font-size: 20px;      line-height: normal;      color: #011535;    }    .tg-df-container .tg-df-countdown-label {      font-family: 'Inter', sans-serif;      font-weight: 500;      font-size: 16px;      line-height: normal;      color: #1e293b;      text-transform: uppercase;    }    .tg-df-container .tg-df-carousel-box-subtitle {      font-size: 16px;      margin-top: 8px;      font-weight: 300;      color: #1e293b;      line-height: 24px;    }    .tg-df-container .tg-df-carousel-roundels-wrapper {      position: relative;      margin-top: 24px;      margin-left: -24px;      margin-right: -24px;    }    .tg-df-container .tg-df-carousel-roundels {      display: flex;      gap: 16px;      overflow-x: auto;            scrollbar-width: none;      padding-top: 12px;      padding-bottom: 24px;      padding-left: 24px;      padding-right: 24px;      margin-left: 0;      margin-right: 0;    }        .tg-df-container .tg-df-carousel-scroll-left,    .tg-df-container .tg-df-carousel-scroll-right {      position: absolute;      top: 50%;      transform: translateY(-50%);      height: 36px;      width: 36px;      display: flex;      align-items: center;      justify-content: center;      border-radius: 50%;      background-color: #ffffff;      border: 1px solid #e2e8f0;      box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);      color: #1F69FF;      cursor: pointer;      transition: all 0.2s;      margin-top: -4px;      z-index: 20;    }    .tg-df-container .tg-df-carousel-scroll-left { left: 8px; }    .tg-df-container .tg-df-carousel-scroll-right { right: 8px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left { left: 0px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right { right: 0px; }    .tg-df-carousel-filters-outer { margin-left: -24px; margin-right: -24px; padding-left: 24px; padding-right: 24px; }    .tg-df-grid-wrapper { position: relative; }    @container tg-df (max-width: 599px) { .tg-df-carousel-filters-outer { margin-left: -16px; margin-right: -16px; padding-left: 16px; padding-right: 16px; } }        .tg-df-container .tg-df-carousel-scroll-left:hover,    .tg-df-container .tg-df-carousel-scroll-right:hover {      background-color: rgba(255, 255, 255, 0.6);    }    .tg-df-container .tg-df-carousel-roundels::-webkit-scrollbar {      display: none;    }    .tg-df-container .tg-df-roundel {      display: flex;      flex-direction: column;      align-items: center;      gap: 8px;      cursor: pointer;      min-width: 120px;      flex-shrink: 0;    }    .tg-df-container .tg-df-roundel-img-box {      width: 120px;      height: 120px;      border-radius: 50%;      background: white;      display: flex;      align-items: center;      justify-content: center;      overflow: hidden;      box-shadow: 0px 3px 14px 0px rgba(30, 41, 59, 0.08);      transition: box-shadow 0.2s;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box img {      transform: scale(1.08);    }    .tg-df-container .tg-df-roundel-img-box img {      width: 100%;      height: 100%;      object-fit: contain;      padding: 10px;      box-sizing: border-box;      transition: transform 0.3s ease;    }    .tg-df-container .tg-df-roundel-label {      font-size: 13px;      font-weight: 400;      color: #1e293b;      text-align: center;    }    .tg-df-container .tg-df-carousel-filters-label {      font-size: 16px;      font-weight: 400;      color: #1e293b;      white-space: nowrap;      margin-right: 4px;    }    .tg-df-container .tg-df-carousel-filters-wrap {      display: flex;      align-items: center;      flex-wrap: nowrap;      gap: 8px;      margin-top: 8px;      overflow-x: auto;      scrollbar-width: none;      -webkit-overflow-scrolling: touch;      padding-bottom: 8px;      margin-left: -24px;      margin-right: -24px;      padding-left: 24px;      padding-right: 24px;    }    .tg-df-container .tg-df-carousel-filters-wrap::-webkit-scrollbar {      display: none;    }        .tg-df-container .tg-df-carousel-filter-btn img,    .tg-df-container .tg-df-carousel-filter-btn picture {      height: 20px;      width: 20px;      object-fit: contain;      object-position: center;      display: inline-flex;      align-items: center;      justify-content: center;      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn picture img {      margin-right: 0;      height: 100%;      width: 100%;    }    .tg-df-container .tg-df-carousel-filter-btn img.active-img,    .tg-df-container .tg-df-carousel-filter-btn picture:has(.active-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.inactive-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.inactive-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.active-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.active-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.active-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.active-img) {      display: inline-flex;    }    .tg-df-container .tg-df-carousel-filter-btn {      background: #ffffff;      border: 2px solid #1e293b;      color: #1e293b;      border-radius: 24px;      padding: 6px 16px;      font-size: 14px;      font-weight: 600;      cursor: pointer;      transition: all 0.2s;      flex-shrink: 0;      white-space: nowrap;    }    .tg-df-container .tg-df-carousel-filter-btn svg {      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn {      display: inline-flex;      align-items: center;    }    .tg-df-container .tg-df-carousel-filter-btn:hover {      background: #1e293b;      color: white;      border-color: #1e293b;    }    .tg-df-container .tg-df-carousel-filter-btn.active {      background: #1e293b;      color: white;      border-color: #1e293b;    }        .tg-df-grid.carousel-compact {      display: flex;      flex-wrap: nowrap;      overflow-x: auto;      gap: 16px;      padding: 16px 24px;      align-items: stretch;      scrollbar-width: none;    }    .tg-df-grid.carousel-compact::-webkit-scrollbar {      display: none;    }    .tg-df-grid.carousel-compact .tg-df-card {      flex: 0 0 auto;      width: 200px;      min-height: auto;      height: auto;      display: flex;      flex-direction: column;      border-radius: 15px;      border: none;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      overflow: visible;    }    .tg-df-grid.carousel-compact .tg-df-card-image-box {      padding: 12px;      background-color: transparent;      border-radius: 15px 15px 0 0;      height: 130px;    }    .tg-df-grid.carousel-compact .tg-df-card-image {      mix-blend-mode: normal;    }    .tg-df-grid.carousel-compact .tg-df-card-discount-badge {      border-radius: 0;      top: 0px;      left: 0px;      padding: 4px 8px;      font-size: 11px;    }    .tg-df-grid.carousel-compact .tg-df-card-body {      padding: 8px 12px 12px 12px;    }    .tg-df-grid.carousel-compact .tg-df-card-title {      font-size: 14px;      font-weight: 400;      margin-bottom: 8px;      color: #011535;    }    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):not(:has(.tg-df-tag-prime)):not(:has(.tg-df-coupon-wrapper:not([style*="none"]))) > .tg-df-card-title,    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):has(> .tg-df-card-title:first-child) > .tg-df-card-title {    }    .tg-df-grid.carousel-compact .tg-df-card-cta {      border-radius: 5px;      padding: 8px 10px;      margin-top: 4px;      background-color: #1F69FF;    }    .tg-df-grid.carousel-compact .tg-df-card-price-group {      margin-bottom: 2px;    }    .tg-df-grid.carousel-compact .tg-df-card-merchant-pill {      margin-bottom: 2px;    }    @container tg-df (max-width: 599px) {      .tg-df-container .tg-df-carousel-blue-box-title {        font-size: 24px;      }      .tg-df-container .tg-df-countdown-title {        display: none;      }      .tg-df-container .tg-df-countdown-wrapper {        position: absolute;        top: 0;        right: 0;        align-items: flex-end;        transform: scale(0.40);        transform-origin: top right;      }      .tg-df-container .tg-df-roundel {        min-width: 88px;      }      .tg-df-container .tg-df-roundel-img-box {        width: 88px;        height: 88px;      }    }    /* REPLICA BLOCK STYLES */    .tg-df-grid.layout-replica-2 { grid-template-columns: repeat(2, 1fr) !important; gap: 20px; }    .tg-df-grid.layout-replica-1 { grid-template-columns: 1fr !important; gap: 20px; }        .tg-df-container .hawk-deal-widget-container { border-bottom: 1px solid #e5e7eb; display: flex; flex-direction: column; margin: 0; padding: 20px 0; box-sizing: border-box; font-family: inherit; }    .tg-df-container .hawk-deal-widget-wrap { display: flex; flex-direction: row; align-items: flex-start; width: 100%; gap: 24px; }    .tg-df-container .hawk-deal-widget-image-container { display: flex; flex-shrink: 0; justify-content: center; width: 160px; height: 160px; align-items: center; background: white; margin-bottom: 0px; }    .tg-df-container .hawk-deal-widget-title-product-title { color: #111827; font-size: 18px; font-weight: 700; line-height: 1.4; display: inline; }    .tg-df-container .hawk-deal-widget-title-price { font-size: 18px; font-weight: 700; line-height: 1.4; white-space: nowrap; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-price-now { font-weight: 700; }    .tg-df-container .hawk-deal-widget-title-retailer-price:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-title-retailer { font-size: 18px; font-weight: 700; line-height: 1.4; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-was-price { color: #dc2626; font-size: 16px; font-weight: 500; line-height: 1.4; text-decoration: line-through; white-space: nowrap; margin-left: 8px; margin-right: 8px; }    .tg-df-container .hawk-deal-widget-text-body-container { position: relative; width: 100%; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-text-body-main { font-size: 16px; width: 100%; margin-bottom: 12px; }    .tg-df-container .hawk-deal-widget-text-body-description { display: block; font-size: 15px; margin-top: 12px; color: #4b5563; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-body-description p { margin: 0; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-cta-container { display: flex; flex-direction: column; gap: 12px; width: 100%; flex: 1; min-width: 0; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-footer { display: flex; justify-content: flex-end; width: 100%; margin-top: auto; }    .tg-df-container .hawk-deal-widget-button-wrapper { display: flex; flex-direction: column; align-items: flex-end; justify-content: flex-end; width: 100%; }    .tg-df-container .hawk-deal-widget-preferred-partner-wrapper { display: flex; flex-direction: row; }        @container tg-df (min-width: 600px) {      .tg-df-mobile-only { display: none !important; }    }    @container tg-df (max-width: 599px) {      .tg-df-desktop-only { display: none !important; }      .tg-df-grid.layout-replica-2 { grid-template-columns: 1fr !important; }      .tg-df-grid.savings-squad-cards { grid-template-columns: 1fr !important; display: flex; flex-direction: column; }    }    .tg-df-grid.savings-squad-cards .tg-df-card-title {      -webkit-line-clamp: unset !important;      display: block !important;      overflow: visible !important;    }    @container tg-df (max-width: 500px) {      .tg-df-container .hawk-deal-widget-wrap { display: block; }      .tg-df-container .hawk-deal-widget-image-container { display: block; float: left; margin: 0 16px 8px 0; width: 120px; max-width: 120px; height: auto; align-items: normal; justify-content: normal; }      .tg-df-container .hawk-deal-widget-text-cta-container { display: block; text-align: left; }      .tg-df-container .hawk-deal-widget-footer { display: block; margin-top: 16px; clear: both; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper .hawk-deal-widget-preferred-partner-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-affiliate-link-deal-button { box-sizing: border-box !important; display: flex !important; max-width: none !important; width: 100% !important; margin: 0 !important; }    }        .tg-df-container .hawk-affiliate-link-deal-button {       align-items: center; background-color: #1f69ff; box-sizing: border-box; color: #ffffff !important; display: flex; font-size: 14px; font-weight: 700; justify-content: center; letter-spacing: 0.5px; line-height: 1; min-width: 160px; padding: 14px 24px; text-align: center; text-decoration: none; text-transform: uppercase; width: 100%; word-break: normal; border-radius: 4px; border: 0; transition: background-color 0.2s;     }    .tg-df-container .hawk-affiliate-link-deal-button:hover { background-color: #0056e0; text-decoration: none; }    .tg-df-container .hawk-lazy-image-deal-widget { display: block; height: auto; margin: auto; max-height: 160px; max-width: 100%; mix-blend-mode: multiply; object-fit: contain; }    .tg-df-container .hawk-deal-widget-text-cta-container a { color: #2563eb; text-decoration: none; display: inline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:has(.hawk-deal-widget-title-product-title) { color: #111827; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-product-title,    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-retailer-price { text-decoration: underline; }    .tg-df-savings-squad-header { margin-bottom: 24px; text-align: center; display: none; }    .tg-df-banner-img-desktop { display: block; width: 100%; height: auto; margin-bottom: 32px; }    .tg-df-banner-img-mobile { display: none; width: 100%; height: auto; margin-bottom: 32px; }    @container tg-df (max-width: 600px) {      .tg-df-banner-img-desktop { display: none; }      .tg-df-banner-img-mobile { display: block; }    }    .tg-df-header-title { font-size: 28px; font-weight: 700; color: var(--tg-df-text); margin: 32px 0 12px 0; line-height: 1.3; }    .tg-df-header-subtitle { font-size: 16px; color: var(--tg-df-text-muted); margin: 0 0 32px 0; line-height: 1.5; }  \x3C/style>  \x3C!-- Widget Container --\x3E  \x3Cdiv class="tg-df-container" id="signal-deals-finder-root">    \x3Cdiv class="tg-df-savings-squad-header" id="tg-df-savings-squad-header">      \x3Cpicture>        \x3Cimg src="https://cdn.mos.cms.futurecdn.net/flexiimages/xkh2og7m3d1778189998.png" alt="Deals Banner" class="tg-df-banner-img-desktop" />        \x3Cimg src="https://cdn.mos.cms.futurecdn.net/flexiimages/gmak6rtdf41778245089.png" alt="Deals Banner Mobile" class="tg-df-banner-img-mobile" />      \x3C/picture>      \x3Cdiv class="tg-df-header-text">        \x3Ch2 class="tg-df-header-title" id="tg-df-header-title">Editor's Choice Deals\x3C/h2>        \x3Cp class="tg-df-header-subtitle" id="tg-df-header-subtitle">Discover the best discounts currently available, curated daily by the Tom's Guide Savings Squad.\x3C/p>      \x3C/div>    \x3C/div>    \x3C!-- Editor Floating Bar --\x3E    \x3Cdiv class="tg-df-editor-bar" id="tg-df-editor-bar" style="display:none;">      \x3Cdiv class="tg-df-editor-bar-text" style="display: flex; align-items: center;">        \x3Cspan id="tg-df-selected-count">0\x3C/span>\x26nbsp;Deals Selected        \x3Cbutton class="tg-df-editor-clear-btn" id="tg-df-editor-clear" type="button" style="margin-left: 12px; font-size: 13px; color: #9ca3af; background: none; border: none; cursor: pointer; text-decoration: underline;">Clear All\x3C/button>      \x3C/div>      \x3Cbutton class="tg-df-editor-copy-btn" id="tg-df-editor-copy" type="button">        \x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">\x3C/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">\x3C/path>\x3C/svg>        Copy to CMS      \x3C/button>    \x3C/div>    \x3Cdiv class="tg-df-carousel-host" id="tg-df-carousel-host" style="display: none;">      \x3Cdiv class="tg-df-carousel-eyebrow">DEAL FINDER\x3C/div>      \x3Cdiv class="tg-df-carousel-query-title" id="tg-df-carousel-title-label">Best Deals\x3C/div>            \x3Cdiv class="tg-df-carousel-blue-box">        \x3Cdiv class="tg-df-carousel-bg-circle-1" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-2" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-3" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-box-content">          \x3Cdiv class="tg-df-countdown-wrapper" id="tg-df-countdown-wrapper" style="display:none;">            \x3Cdiv class="tg-df-countdown-title" id="tg-df-countdown-title">Prime Day starts in\x3C/div>            \x3Cdiv class="tg-df-countdown-blocks">              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-days">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">DAYS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-hrs">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">HRS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-min">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">MIN\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-sec">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">SEC\x3C/div>\x3C/div>            \x3C/div>          \x3C/div>          \x3Cdiv class="tg-df-carousel-box-eyebrow">DEAL FINDER\x3C/div>          \x3Cdiv class="tg-df-carousel-box-title">Find Deals Fast\x3C/div>          \x3Cdiv class="tg-df-carousel-box-subtitle">The latest deals from the biggest retailers, all in one place\x3C/div>                    \x3Cdiv class="tg-df-carousel-roundels-wrapper">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-roundels">                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Televisions" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/wcMxTsHgqu3roMbAx7RLnT-132-100.png" alt="TVs" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">TVs\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Phones" data-pr="over50">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/G3KGaRGzj24F6PUsw4bWpT-132-100.png" alt="Phones" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Phones\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Computing" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/znNvsLzx8NEgNkD9HSFSnT-132-100.png" alt="Computing" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Computing\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Gaming" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/Pgew8yaRQeZFHqHjTzvBnT-132-100.png" alt="Gaming" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Gaming\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Mattresses" data-pr="over500">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/cW7xsaLyesxkHFVSiC4kmT-132-100.png" alt="Mattresses" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Mattresses\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Audio" data-pr="over30">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/pCvBVHuhaQVjKt3VgCjbqT-132-100.png" alt="Audio" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Audio\x3C/span>            \x3C/div>                  \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>        \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-carousel-filters-outer" style="position: relative;">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-filters-wrap">                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="0">All\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_lightning">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_prime">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-d="10">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 10% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="15">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 15% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="25">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 25% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-pr="under50">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>            Under $50\x3C/button>        \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3C/div>    \x3C/div>    \x3C/div>      \x3C!-- Search & Filter Controls --\x3E      \x3Cdiv class="tg-df-top-bar" id="tg-df-top-bar" style="position: relative; z-index: 100; margin: 0 auto 20px;">        \x3Cdiv class="tg-df-search-wrapper">          \x3Cinput type="text" class="tg-df-search-input" placeholder="Search for deals, products, or brands...">          \x3Cbutton type="button" class="tg-df-search-btn" aria-label="Search">              \x3Csvg class="tg-df-search-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">                \x3Cpath d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/>              \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-autocomplete-dropdown" id="tg-df-autocomplete">\x3C/div>        \x3C/div>      \x3C/div>    \x3Cdiv class="tg-df-controls" id="tg-df-controls" style="display:flex;">              \x3Cdiv class="tg-df-filters-container" style="position: relative; width: 100%; max-width: 800px; margin: 0 auto;">          \x3Cbutton class="tg-df-scroll-btn left" style="display: none;" onclick="this.parentElement.querySelector('.tg-df-filters').scrollBy({left: -200, behavior: 'smooth'})">            \x3Csvg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">\x3Cpath d="M15 18l-6-6 6-6"/>\x3C/svg>          \x3C/button>          \x3Cbutton class="tg-df-scroll-btn right" style="display: none;" onclick="this.parentElement.querySelector('.tg-df-filters').scrollBy({left: 200, behavior: 'smooth'})">            \x3Csvg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">\x3Cpath d="M9 18l6-6-6-6"/>\x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-filters">          \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-category-filter-wrapper" style="display: none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-category-filter" aria-label="Category">            \x3Coption value="all">All Categories\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-multiselect-container" id="tg-df-brand-filter-wrapper" style="display:none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M4.25 5.61C6.27 8.2 10 13 10 13v6c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-6s3.72-4.8 5.74-7.39A.998.998 0 0 0 18.95 4H5.04c-.83 0-1.3.95-.79 1.61z"/>          \x3C/svg>          \x3Cdiv class="tg-df-filter-select tg-df-multiselect-trigger" id="tg-df-brand-trigger" tabindex="0">            Any Brand          \x3C/div>          \x3Cdiv class="tg-df-multiselect-dropdown" id="tg-df-brand-dropdown">            \x3C!-- Populated via script --\x3E          \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-price-range-wrapper" id="tg-df-custom-price-wrapper" style="display: flex; align-items:center; justify-content:center; padding: 10px 20px; gap: 8px; border: 1px solid var(--tg-df-border); border-radius: 100px; background-color: var(--tg-df-bg);">          \x3Cspan style="font-size:14px; font-weight:500; color:var(--tg-df-text-primary);">Price\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-min" placeholder="Min" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">          \x3Cspan style="color:var(--tg-df-text-muted)">-\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-max" placeholder="Max" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-legacy-price-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-price-filter" aria-label="Filter Prices">            \x3Coption value="all">All Prices\x3C/option>            \x3Coption value="under50">Under $50\x3C/option>            \x3Coption value="50_100">$50 - $100\x3C/option>            \x3Coption value="100_200">$100 - $200\x3C/option>            \x3Coption value="200_500">$200 - $500\x3C/option>            \x3Coption value="over500">Over $500\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-discount-filter-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-discount-filter" aria-label="Discount Amount">            \x3Coption value="all">Any discount\x3C/option>            \x3Coption value="5">Min 5%\x3C/option>            \x3Coption value="10">Min 10%\x3C/option>            \x3Coption value="15">Min 15%\x3C/option>            \x3Coption value="20">Min 20%\x3C/option>            \x3Coption value="25">Min 25%\x3C/option>            \x3Coption value="30">Min 30%\x3C/option>            \x3Coption value="40">Min 40%\x3C/option>            \x3Coption value="50">Min 50%\x3C/option>            \x3Coption value="60">Min 60%\x3C/option>            \x3Coption value="70">Min 70%\x3C/option>          \x3C/select>          \x3C/div>        \x3C/div>        \x3C/div>      \x3C/div>    \x3C!-- Deals Grid Wrapper --\x3E    \x3Cdiv class="tg-df-grid-wrapper tg-df-carousel-cards-wrapper" id="tg-df-grid-wrapper">      \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3Cdiv class="tg-df-grid" id="tg-df-grid">        \x3C!-- Content populated by JavaScript --\x3E      \x3C/div>      \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>    \x3C/div>        \x3C!-- Vouchers Modal --\x3E    \x3Cdiv class="tg-df-modal-backdrop" id="tg-df-vouchers-modal">      \x3Cdiv class="tg-df-modal">        \x3Cdiv class="tg-df-modal-header">          \x3Ch3 class="tg-df-modal-title" id="tg-df-vouchers-title">Available Coupons & Deals\x3C/h3>          \x3Cbutton class="tg-df-modal-close" id="tg-df-vouchers-close">            \x3Csvg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">              \x3Cline x1="18" y1="6" x2="6" y2="18">\x3C/line>              \x3Cline x1="6" y1="6" x2="18" y2="18">\x3C/line>            \x3C/svg>          \x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-modal-body" id="tg-df-vouchers-content">          \x3C!-- Vouchers injected here --\x3E        \x3C/div>      \x3C/div>    \x3C/div>  \x3C/div>`;      if (!template) {        template = document.createElement('template');        template.innerHTML = rawTemplate;      }      let shadowRoot = null;      if (hostContainer && template) {        hostContainer.setAttribute('data-initialized', 'true');        shadowRoot = hostContainer.attachShadow({ mode: 'open' });        shadowRoot.appendChild(template.content.cloneNode(true));      }      class DealsFinderWidget {        constructor(config) {          this.rootNode = config.rootNode || document;          this.hostContainer = config.hostContainer || null;          this.rootId = config.rootId || 'signal-deals-finder-root';          this.root = this.rootNode.querySelector('#' + this.rootId);          if (!this.root) return;          this.widgetId = (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'widget-' + Date.now() + '-' + Math.random().toString(36).slice(2);          this.grid = this.root.querySelector('#tg-df-grid');          this.tagsContainer = this.root.querySelector('#tg-df-tags-container');          this.categoryFilter = this.root.querySelector('#tg-df-category-filter');          this.categoryFilterWrapper = this.root.querySelector('#tg-df-category-filter-wrapper');          this.searchInput = this.root.querySelector('.tg-df-search-input');          this.autocompleteDropdown = this.root.querySelector('#tg-df-autocomplete');          this.sortSelect = this.root.querySelector('.tg-df-sort-select');          this.searchBtn = this.root.querySelector('.tg-df-search-btn');                    this.settingsToggle = this.root.querySelector('#tg-df-settings-toggle');          this.settingsPanel = this.root.querySelector('#tg-df-settings-panel');          this.settingsBackdrop = this.root.querySelector('#tg-df-settings-backdrop');          this.regionSelect = this.root.querySelector('#tg-df-region-select');          this.retailerSelect = this.root.querySelector('#tg-df-retailer-select');          this.offerTypeSelect = this.root.querySelector('#tg-df-offer-type-select');          this.viewModeSelect = this.root.querySelector('#tg-df-view-mode-select');          this.rowsSelect = this.root.querySelector('#tg-df-rows-select');          this.dealModeToggle = this.root.querySelector('#tg-df-deal-mode');          this.editorModeToggle = this.root.querySelector('#tg-df-editor-mode');          this.priceFilter = this.root.querySelector('#tg-df-price-filter');          this.discountFilter = this.root.querySelector('#tg-df-discount-filter');                    this.editorBar = this.root.querySelector('#tg-df-editor-bar');          this.editorSelectedCount = this.root.querySelector('#tg-df-selected-count');          this.editorCopyBtn = this.root.querySelector('#tg-df-editor-copy');          this.editorClearBtn = this.root.querySelector('#tg-df-editor-clear');                    this.apiUrl = 'https://search-api.fie.future.net.uk/widget.php';          this.deals = [];          this.displayLimit = 12;          this.airedaleArticles = null;          this.airedaleTags = [];          this.airedaleTagCounts = {};          this.activeDealTag = null;          this.selectedBrands = [];          this.currentQuery = '';          this.editorMode = this.hostContainer ? this.hostContainer.hasAttribute('data-editor-mode') : false;          this.viewModeOverride = this.hostContainer ? this.hostContainer.getAttribute('data-view-mode') : null;          this.selectedDeals = new Map();                    this.brandFilterWrapper = this.root.querySelector('#tg-df-brand-filter-wrapper');          this.brandTrigger = this.root.querySelector('#tg-df-brand-trigger');          this.brandDropdown = this.root.querySelector('#tg-df-brand-dropdown');                    this.customPriceWrapper = this.root.querySelector('#tg-df-custom-price-wrapper');          this.customPriceMin = this.root.querySelector('#tg-df-custom-price-min');          this.customPriceMax = this.root.querySelector('#tg-df-custom-price-max');          this.legacyPriceWrapper = this.root.querySelector('#tg-df-legacy-price-wrapper');          this.discountFilterWrapper = this.root.querySelector('#tg-df-discount-filter-wrapper');          this.initResizeObserver();          this.init();        }        getViewMode() {          console.log("DEBUG getViewMode -> override:", this.viewModeOverride, "editorMode:", this.editorMode);          if (this.viewModeOverride && (!this.editorMode || !this.viewModeSelect)) {            return this.viewModeOverride;          }          return (this.viewModeSelect && this.viewModeSelect.value) ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');        }        applyLayoutMode() {          if (!this.grid) return;          const mode = this.getViewMode();          console.log("[DEBUG] applyLayoutMode CALLED! mode=", mode);          this.grid.classList.remove('layout-row', 'layout-grid', 'tg-df-grid-auto', 'carousel-compact', 'layout-replica-1', 'layout-replica-2');                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          const showHeaderDetails = params.get('show_header_details') !== 'false';          const carouselHost = this.root.querySelector('#tg-df-carousel-host');          const controlsDiv = this.root.querySelector('#tg-df-controls');          const topBarDiv = this.root.querySelector('#tg-df-top-bar');          const headerElement = this.root.querySelector('#tg-df-savings-squad-header');          if (headerElement) {             headerElement.style.display = (mode === 'savings_squad' && showHeaderDetails) ? 'block' : 'none';          }          if (mode === 'carousel') {             this.grid.classList.add('carousel-compact');             if (carouselHost) carouselHost.style.display = 'block';             if (controlsDiv) controlsDiv.style.display = 'none';             if (topBarDiv) topBarDiv.style.display = 'none';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.add('is-carousel');             }          } else {             if (carouselHost) carouselHost.style.display = 'none';             if (controlsDiv) controlsDiv.style.display = 'flex';             if (topBarDiv) topBarDiv.style.display = 'block';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          }          if (mode === 'grid') {            this.grid.classList.add('layout-grid');          } else if (mode === 'row') {            this.grid.classList.add('layout-row');          } else if (mode === 'savings_squad') {            this.grid.classList.add('tg-df-grid-auto', 'savings-squad-cards');          } else if (mode !== 'carousel') {            this.grid.classList.add('tg-df-grid-auto');          }                    const settingsWrapper = this.root.querySelector('.tg-df-settings-wrapper');          if (settingsWrapper) {            settingsWrapper.style.display = mode === 'auto' ? 'none' : 'block';          }          if (this.customPriceWrapper) {             this.customPriceWrapper.style.display = mode === 'auto' ? 'flex' : 'none';          }          if (this.legacyPriceWrapper) {             this.legacyPriceWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }          if (this.discountFilterWrapper) {             this.discountFilterWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }        }        initResizeObserver() {          try {            if (window.parent === window) return;          } catch (e) {            // cross origin frame check threw          }          const emitHeight = () => {            try {              const height = document.documentElement.scrollHeight || document.body.scrollHeight;              const msg = { type: 'embed-size', height: height };              if (window.parent && window.parent !== window) {                window.parent.postMessage(msg, '*');                window.parent.postMessage(JSON.stringify({ ...msg, sentinel: 'amp' }), '*');              }            } catch (e) {}          };                    if (window.ResizeObserver) {            try {              const ro = new ResizeObserver(() => emitHeight());              ro.observe(document.body);              if (this.root) ro.observe(this.root);            } catch(e){ console.warn(e); }          }          window.addEventListener('resize', emitHeight);          setTimeout(emitHeight, 300);        }        initCountdown() {          this.cdWrapper = this.root.querySelector('#tg-df-countdown-wrapper');                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          this.showCountdown = params.get('show_countdown') === 'true';          const showHeaderDetails = params.get('show_header_details') !== 'false';          const eyebrow = this.root.querySelector('.tg-df-carousel-box-eyebrow');          const title = this.root.querySelector('.tg-df-carousel-box-title');          const subtitle = this.root.querySelector('.tg-df-carousel-box-subtitle');          if (!showHeaderDetails) {            let containerElement = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (containerElement) containerElement.classList.add('hide-header-details');            if (eyebrow) eyebrow.style.display = 'none';            if (title) title.style.display = 'none';            if (subtitle) subtitle.style.display = 'none';          }          if (!this.cdWrapper) return;          this.cdTitle = this.root.querySelector('#tg-df-countdown-title');          this.cdDays = this.root.querySelector('#tg-df-cd-days');          this.cdHrs = this.root.querySelector('#tg-df-cd-hrs');          this.cdMin = this.root.querySelector('#tg-df-cd-min');          this.cdSec = this.root.querySelector('#tg-df-cd-sec');          this.updateCountdown();          this.cdInterval = setInterval(() => this.updateCountdown(), 1000);        }        updateCountdown() {          if (!this.cdWrapper) return;          if (!this.showCountdown) {            this.cdWrapper.style.display = 'none';            return;          }          const area = this.getAreaCode();          let offset = '-04:00';          if (['DE', 'FR', 'IT', 'ES', 'NL'].includes(area)) {             offset = '+02:00';          } else if (['GB', 'IE', 'UK'].includes(area)) {             offset = '+01:00';          }          const startTime = new Date('2026-06-23T00:00:00' + offset).getTime();          const endTime = new Date('2026-06-26T00:00:00' + offset).getTime();          const now = Date.now();          let targetTime = 0;          if (now < startTime) {             targetTime = startTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day starts in';             this.cdWrapper.style.display = 'flex';          } else if (now < endTime) {             targetTime = endTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day ends in';             this.cdWrapper.style.display = 'flex';          } else {             this.cdWrapper.style.display = 'none';             if (this.cdInterval) clearInterval(this.cdInterval);             return;          }          const diff = Math.max(0, targetTime - now);          const d = Math.floor(diff / (1000 * 60 * 60 * 24));          const h = Math.floor((diff / (1000 * 60 * 60)) % 24);          const m = Math.floor((diff / 1000 / 60) % 60);          const s = Math.floor((diff / 1000) % 60);          if (this.cdDays) this.cdDays.textContent = d;          if (this.cdHrs) this.cdHrs.textContent = h;          if (this.cdMin) this.cdMin.textContent = m;          if (this.cdSec) this.cdSec.textContent = s;        }        init() {          this.initCountdown();          try {            initAnalytics();          } catch (e) {            console.warn('Deals Widget Analytics Error:', e);          }                    this.bindEvents();                    let initialQuery = '';                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          let initialViewMode = params.get('view_mode');          if (!this.viewModeOverride && initialViewMode) {            this.viewModeOverride = initialViewMode;          }          if (!params.has('search') && !params.has('q') && !params.has('query') && initialViewMode !== 'savings_squad') {             initialQuery = 'Gaming laptops';          }          const website = params.get('website') || 'tomsguide';          this.website = website;          if (website === 'techradar') {            const squadHeader = this.root.querySelector('.tg-df-savings-squad-header');            if (squadHeader) {               const pic = squadHeader.querySelector('picture');               if (pic) pic.style.display = 'none';            }            const style = document.createElement('style');            style.innerHTML = `              .tg-df-container .hawk-affiliate-link-deal-button, .tg-df-container .tg-df-card-cta { background-color: #5DAF08 !important; }              .tg-df-container .hawk-affiliate-link-deal-button:hover, .tg-df-container .tg-df-card-cta:hover { background-color: #4a8c06 !important; }            `;            this.root.appendChild(style);          }                    if (this.regionSelect) {            this.regionSelect.value = params.get('region') || 'auto';            this.updatePriceDropdownCurrency();          }                    if (this.retailerSelect && params.has('retailer')) {            this.retailerSelect.value = params.get('retailer');          }                    if (params.has('brands')) {            const b = params.get('brands');            if (b) {              this.selectedBrands = b.split(',');            }          }                    if (this.offerTypeSelect && params.has('offer_type')) {            this.offerTypeSelect.value = params.get('offer_type');          }          if (this.viewModeSelect && params.has('view_mode')) {            this.viewModeSelect.value = params.get('view_mode');          }          if (this.rowsSelect && params.has('rows')) {            this.rowsSelect.value = params.get('rows');          }          if (params.has('price')) {            const priceVal = params.get('price');            if (this.priceFilter) {               // Try assigning it directly to select. If it's not present implicitly ignores               this.priceFilter.value = priceVal;            }            if (priceVal.includes('_')) {               const parts = priceVal.split('_');               if (this.customPriceMin && parts[0]) this.customPriceMin.value = parts[0];               if (this.customPriceMax && parts[1]) this.customPriceMax.value = parts[1];            }          }          if (this.discountFilter && params.has('min_discount_ratio')) {            // Need to convert back from ratio (e.g. 0.8) to select value (e.g. "20")            const ratioStr = params.get('min_discount_ratio');            const ratioFloat = parseFloat(ratioStr);            if (!isNaN(ratioFloat)) {               const percentage = Math.round((1 - ratioFloat) * 100);               this.discountFilter.value = percentage.toString();            }          }          if (this.sortSelect) {            this.sortSelect.value = params.get('sort') || 'date_desc';          }          if (this.dealModeToggle && params.has('deal_mode')) {            this.dealModeToggle.checked = params.get('deal_mode') === 'true' || params.get('deal_mode') === '1';          }          const headerTitleEl = this.root.querySelector('#tg-df-header-title');          const headerSubtitleEl = this.root.querySelector('#tg-df-header-subtitle');          if (params.has('widget_title') && headerTitleEl) {             headerTitleEl.textContent = params.get('widget_title');          }          if (params.has('widget_subtitle') && headerSubtitleEl) {             headerSubtitleEl.textContent = params.get('widget_subtitle');          }                    // Re-apply layout after params have updated control values          this.applyLayoutMode();                    if (params.get('search')) {            initialQuery = params.get('search');          } else if (params.get('q')) {            initialQuery = params.get('q');          } else if (params.get('query')) {            initialQuery = params.get('query');          }                    this.currentQuery = initialQuery;          if (this.searchInput) {            if (this.getViewMode() === 'savings_squad') {              this.searchInput.value = '';            } else {              this.searchInput.value = this.currentQuery;            }          }                    if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {            this.fetchDeals(this.currentQuery);          } else {            this.render();          }        }        updatePriceDropdownCurrency() {          if (!this.priceFilter || !this.regionSelect) return;          const currencySymbols = {            'US': '$',            'GB': '£',            'CA': '$CA',            'AU': '$AU',            'DE': '€',            'FR': '€',            'IT': '€',          };          const area = this.getAreaCode();          const cur = currencySymbols[area || 'US'] || '$';                    const options = this.priceFilter.options;          for (let i = 0; i < options.length; i++) {            const opt = options[i];            if (opt.value === 'all') {              opt.innerText = 'All Prices';            } else if (opt.value === 'under50') {              opt.innerText = `Under ${cur}50`;            } else if (opt.value === '50_100') {              opt.innerText = `${cur}50 - ${cur}100`;            } else if (opt.value === '100_200') {              opt.innerText = `${cur}100 - ${cur}200`;            } else if (opt.value === '200_500') {              opt.innerText = `${cur}200 - ${cur}500`;            } else if (opt.value === 'over500') {              opt.innerText = `Over ${cur}500`;            }          }        }        populateBrandDropdown(values) {          if (!this.brandDropdown || !this.brandFilterWrapper) return;          this.brandFilterWrapper.style.display = 'flex'; // show the wrapper                    let html = '';          const allChecked = this.selectedBrands.length === 0 ? 'checked' : '';          const _div = '<' + '/div>';          const _span = '<' + '/span>';          html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="" ${allChecked} class="tg-df-brand-chk"> Any Brand${_div}`;                    values.forEach(v => {             if (!v.formatted_value || v.formatted_value === 'Any Brand') return;             const isChecked = this.selectedBrands.includes(v.formatted_value) ? 'checked' : '';             html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="${this.escapeHTML(v.formatted_value)}" ${isChecked} class="tg-df-brand-chk"> ${this.escapeHTML(v.formatted_value)} \x3Cspan style="color:var(--tg-df-text-muted);font-size:12px">(${v.count || 0})${_span}${_div}`;          });                    this.brandDropdown.innerHTML = html;                    // Re-bind listeners          const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');          chks.forEach(chk => {            chk.addEventListener('change', (e) => {              const val = e.target.value;              if (val === '') {                this.selectedBrands = [];              } else {                if (e.target.checked) {                   if (!this.selectedBrands.includes(val)) this.selectedBrands.push(val);                } else {                   this.selectedBrands = this.selectedBrands.filter(b => b !== val);                }              }                            if (this.selectedBrands.length === 0) {                 this.brandTrigger.innerText = 'Any Brand';              } else if (this.selectedBrands.length === 1) {                 this.brandTrigger.innerText = this.selectedBrands[0];              } else {                 this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;              }                            // Only call API if changed from UI interactions              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.updateURLParams();                 this.fetchDeals(this.currentQuery);              }            });          });                    // Update button text on load          if (this.selectedBrands.length === 0) {             this.brandTrigger.innerText = 'Any Brand';          } else if (this.selectedBrands.length === 1) {             this.brandTrigger.innerText = this.selectedBrands[0];          } else {             this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;          }        }        updateURLParams() {          const url = new URL(window.location);          if (this.currentQuery && this.currentQuery !== 'Gaming laptops') {            url.searchParams.set('q', this.currentQuery);          } else {            url.searchParams.delete('q');            url.searchParams.delete('search');            url.searchParams.delete('query');          }                    if (this.regionSelect && this.regionSelect.value !== 'auto') {            url.searchParams.set('region', this.regionSelect.value);          } else {            url.searchParams.delete('region');          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.set('retailer', this.retailerSelect.value);          } else {            url.searchParams.delete('retailer');          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.set('brands', this.selectedBrands.join(','));          } else {            url.searchParams.delete('brands');          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.set('offer_type', this.offerTypeSelect.value);          } else {            url.searchParams.delete('offer_type');          }                    if (this.viewModeSelect && this.viewModeSelect.value !== 'auto') {            url.searchParams.set('view_mode', this.viewModeSelect.value);          } else {            url.searchParams.delete('view_mode');          }                    if (this.rowsSelect && this.rowsSelect.value !== '12') {            url.searchParams.set('rows', this.rowsSelect.value);          } else {            url.searchParams.delete('rows');          }                    const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             url.searchParams.set('price', `${min}_${max}`);          } else if (this.priceFilter && this.priceFilter.value !== 'all') {            url.searchParams.set('price', this.priceFilter.value);          } else {            url.searchParams.delete('price');          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {               const ratio = (100 - v) / 100;               url.searchParams.set('min_discount_ratio', ratio.toString());            }          } else {            url.searchParams.delete('min_discount_ratio');          }                    if (this.sortSelect && this.sortSelect.value !== 'date_desc') {            url.searchParams.set('sort', this.sortSelect.value);          } else {            url.searchParams.delete('sort');          }                    if (this.dealModeToggle && this.dealModeToggle.checked) {            url.searchParams.set('deal_mode', 'true');          } else {            url.searchParams.delete('deal_mode');          }                    window.history.replaceState({}, '', url);        }        bindEvents() {          const handleFiltersScroll = () => {            const filters = this.root.querySelector('.tg-df-filters');            const leftBtn = this.root.querySelector('.tg-df-scroll-btn.left');            const rightBtn = this.root.querySelector('.tg-df-scroll-btn.right');            if (filters && leftBtn && rightBtn) {              const { scrollLeft, scrollWidth, clientWidth } = filters;              leftBtn.style.display = scrollLeft > 0 ? 'flex' : 'none';              rightBtn.style.display = Math.ceil(scrollLeft + clientWidth) < scrollWidth - 5 ? 'flex' : 'none';            }          };          const filters = this.root.querySelector('.tg-df-filters');          if (filters) {            filters.addEventListener('scroll', handleFiltersScroll);            window.addEventListener('resize', handleFiltersScroll);            setTimeout(handleFiltersScroll, 100);                        // Also call after rendering dropdowns            const origRenderCategories = this.renderCategories;            if (origRenderCategories) {               this.renderCategories = (...args) => {                 origRenderCategories.apply(this, args);                 setTimeout(handleFiltersScroll, 50);               };            }          }                const roundels = this.root.querySelectorAll('.tg-df-carousel-cat');          roundels.forEach(r => {             r.addEventListener('click', () => {                const q = r.getAttribute('data-query');                const pr = r.getAttribute('data-pr');                if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: q,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = q;                const label = this.root.querySelector('#tg-df-carousel-title-label');                if (label) label.textContent = 'Best ' + q;                if (this.priceFilter) this.priceFilter.value = pr || 'all';                if (this.discountFilter) this.discountFilter.value = '5';                if (this.searchInput) this.searchInput.value = q;                                roundels.forEach(ro => ro.classList.remove('active'));                r.classList.add('active');                this.fetchDeals(this.currentQuery);             });          });          const discBtns = this.root.querySelectorAll('.tg-df-carousel-filter-btn');          discBtns.forEach(b => {             b.addEventListener('click', () => {                const d = b.getAttribute('data-d');                const pr = b.getAttribute('data-pr');                const ot = b.getAttribute('data-ot');                let label = b.innerText ? b.innerText.trim() : '';                let filterType = 'unknown';                let filterVal = 'unknown';                if (d !== null) { filterType = 'discount'; filterVal = d; }                else if (pr !== null) { filterType = 'price'; filterVal = pr; }                else if (ot !== null) { filterType = 'offertype'; filterVal = ot; }                if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-${filterType}-${filterVal}`, name: 'Filter Button', label: label });                                if (d !== null) {                   if (this.discountFilter) this.discountFilter.value = this.discountFilter.value === d ? '0' : d;                } else if (pr !== null) {                   if (this.priceFilter) this.priceFilter.value = this.priceFilter.value === pr ? 'all' : pr;                } else if (ot !== null) {                   if (this.offerTypeSelect) this.offerTypeSelect.value = this.offerTypeSelect.value === ot ? 'all' : ot;                } else {                   if (this.discountFilter) this.discountFilter.value = '0';                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.offerTypeSelect) this.offerTypeSelect.value = 'all';                }                if (d === null && pr === null && ot === null && b.getAttribute("data-type") !== "custom") {                   discBtns.forEach(ro => ro.classList.remove('active'));                   b.classList.add('active');                } else if (b.getAttribute("data-type") !== "custom") {                   // Only operate on hardcoded buttons (those without data-type)                   discBtns.forEach(ro => {                      if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active');                   });                                      let makeActive = true;                   if (d !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-d') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (pr !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-pr') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (ot !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-ot') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   }                                      if (makeActive) b.classList.add('active');                                      // Check if anything is active, if not activate "All"                   let anyActive = false;                   discBtns.forEach(ro => { if (ro.classList.contains('active') && ro.getAttribute('data-type') !== 'custom') anyActive = true; });                   if (!anyActive) {                       discBtns.forEach(ro => { if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.add('active'); });                   }                }                                this.fetchDeals(this.currentQuery);             });          });          if (this.brandTrigger && this.brandDropdown) {            this.brandTrigger.addEventListener('click', () => {              this.brandDropdown.classList.toggle('active');            });            document.addEventListener('click', (e) => {              if (this.brandFilterWrapper && !e.composedPath().includes(this.brandFilterWrapper)) {                this.brandDropdown.classList.remove('active');              }            });          }          const showAutocomplete = () => {             if (this.getViewMode() !== 'savings_squad' || !this.autocompleteDropdown || !this.airedaleTags) return;                          let terms = this.airedaleTags;             if (this.airedaleBrands) {                terms = terms.concat(this.airedaleBrands.map(b => b.formatted_value));             }             terms = [...new Set(terms)];                          const query = this.searchInput.value.trim();             let matches = [];             if (query.length > 0) {                 matches = terms.filter(t => t.toLowerCase().includes(query.toLowerCase()) && t.toLowerCase() !== query.toLowerCase());             } else {                 matches = terms;             }                          if (matches.length > 0) {                 this.autocompleteDropdown.innerHTML = matches.map(m => `\x3Cdiv class="tg-df-autocomplete-item" data-tag="${this.escapeHTML(m)}">${this.escapeHTML(m)}<` + `/div>`).join('');                 this.autocompleteDropdown.classList.add('active');             } else {                 this.autocompleteDropdown.classList.remove('active');             }          };          let debounceTimer;          if(this.searchInput) {            this.searchInput.addEventListener('focus', showAutocomplete);            this.searchInput.addEventListener('input', (e) => {              clearTimeout(debounceTimer);              const query = e.target.value.trim();              this.currentQuery = query;              showAutocomplete();              debounceTimer = setTimeout(() => {                this.updateURLParams();                if (query.length > 2) {                  this.fetchDeals(query);                } else if (query.length === 0) {                  if (this.getViewMode() === 'savings_squad') {                    this.activeDealTag = null;                    this.currentQuery = '';                    if (this.categoryFilter) this.categoryFilter.value = 'all';                    this.fetchDeals('');                  } else {                    this.deals = [];                    this.render();                  }                }              }, 400);            });            this.searchInput.addEventListener('keypress', (e) => {              if (e.key === 'Enter') {                if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');                clearTimeout(debounceTimer);                const query = e.target.value.trim();                this.currentQuery = query;                                let isTag = false;                if (this.airedaleTags && this.airedaleTags.includes(query)) isTag = true;                if (this.airedaleBrands && this.airedaleBrands.some(b => b.formatted_value === query)) isTag = true;                this.activeDealTag = isTag ? query : null;                                trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                this.updateURLParams();                if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                   if (query.length === 0 && this.getViewMode() === 'savings_squad') {                       if (this.categoryFilter) this.categoryFilter.value = 'all';                   }                   this.fetchDeals(query);                }              }            });          }          if (this.autocompleteDropdown) {             this.autocompleteDropdown.addEventListener('click', (e) => {                const item = e.target.closest('.tg-df-autocomplete-item');                if (item) {                   const tag = item.getAttribute('data-tag');                   this.currentQuery = tag;                   if (this.searchInput) this.searchInput.value = tag;                   this.activeDealTag = tag;                   if (this.categoryFilter && this.airedaleTags.includes(tag)) {                       this.categoryFilter.value = tag;                   }                   this.autocompleteDropdown.classList.remove('active');                   this.updateURLParams();                   this.fetchDeals(tag);                }             });             document.addEventListener('click', (e) => {               if (this.autocompleteDropdown && this.searchInput && !e.composedPath().includes(this.searchInput) && !e.composedPath().includes(this.autocompleteDropdown)) {                 this.autocompleteDropdown.classList.remove('active');               }             });          }          if (this.searchBtn) {            this.searchBtn.addEventListener('click', () => {              if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');              clearTimeout(debounceTimer);              const query = this.searchInput.value.trim();              trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                            let isTag = false;              if (this.airedaleTags && this.airedaleTags.includes(query)) isTag = true;              if (this.airedaleBrands && this.airedaleBrands.some(b => b.formatted_value === query)) isTag = true;              this.activeDealTag = isTag ? query : null;                            this.currentQuery = query;              this.updateURLParams();              if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                 if (query.length === 0 && this.getViewMode() === 'savings_squad') {                     if (this.categoryFilter) this.categoryFilter.value = 'all';                 }                 this.fetchDeals(query);              }            });          }          if(this.sortSelect && this.sortSelect.querySelector('option[value="date_desc"]') === null) {              const option = document.createElement('option');              option.value = "date_desc";              option.text = "Newest First";              this.sortSelect.insertBefore(option, this.sortSelect.firstChild);          }          if(this.sortSelect) this.sortSelect.addEventListener('change', () => {            trackElementInteraction({ id: `sort-option-${this.sortSelect.value}`, name: 'Sort', label: `Sort: ${this.sortSelect.options[this.sortSelect.selectedIndex].text}` });            this.updateURLParams();            if (this.deals.length > 0) {              this.sortData();              this.render();            }          });                    const priceFilter = this.root.querySelector('#tg-df-price-filter');          if (priceFilter) {            this.priceFilter = priceFilter;            this.priceFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-price-${this.priceFilter.value}`, name: 'Price', label: this.priceFilter.options[this.priceFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          const updateCustomPrice = () => {             this.updateURLParams();             if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);             } else {                this.render();             }          };          if (this.customPriceMin) {             this.customPriceMin.addEventListener('change', updateCustomPrice);             this.customPriceMin.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          if (this.customPriceMax) {             this.customPriceMax.addEventListener('change', updateCustomPrice);             this.customPriceMax.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          const discountFilter = this.root.querySelector('#tg-df-discount-filter');          if (discountFilter) {            this.discountFilter = discountFilter;            this.discountFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-discount-${this.discountFilter.value}`, name: 'Discount', label: this.discountFilter.options[this.discountFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          if (this.categoryFilter) {            this.categoryFilter.addEventListener('change', (e) => {               const val = e.target.value === 'all' ? null : e.target.value;               this.activeDealTag = val;               if (val) {                 this.currentQuery = val;               } else {                 if (this.searchInput && this.currentQuery === document.querySelector('#tg-df-brand-trigger')?.getAttribute('data-active-brand')) {                     // don't clear current query if a brand is selected                 } else if (this.searchInput) {                     this.currentQuery = '';                     this.searchInput.value = '';                 }               }               this.fetchSavingsSquad();            });          }                    if (this.settingsToggle) {            this.settingsToggle.addEventListener('click', () => {              const o = this.settingsPanel.classList.toggle('active');              this.settingsBackdrop.classList.toggle('active');              if (o) trackElementInteraction({ id: 'filter-open', name: 'Filters', label: 'Open filters' });            });          }                    if (this.settingsBackdrop) {            this.settingsBackdrop.addEventListener('click', () => {              this.settingsPanel.classList.remove('active');              this.settingsBackdrop.classList.remove('active');            });          }                    if (this.regionSelect) {            this.regionSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-region-${this.regionSelect.value}`, name: 'Region', label: this.regionSelect.options[this.regionSelect.selectedIndex].text });              this.updateURLParams();              this.updatePriceDropdownCurrency();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.retailerSelect) {            this.retailerSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-merchant-${this.retailerSelect.value}`, name: 'Retailer', label: this.retailerSelect.options[this.retailerSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.offerTypeSelect) {            this.offerTypeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-offertype-${this.offerTypeSelect.value}`, name: 'Offer Type', label: this.offerTypeSelect.options[this.offerTypeSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.viewModeSelect) {            this._prevViewMode = this.viewModeSelect.value;            this.viewModeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-viewmode-${this.viewModeSelect.value}`, name: 'View Mode', label: this.viewModeSelect.options[this.viewModeSelect.selectedIndex].text });                            // Reset all active toggles and filters to prevent config carry-over              this.selectedBrands = [];              if (this.brandTrigger) this.brandTrigger.innerText = 'Select Brands';              if (this.brandDropdown) {                const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                chks.forEach(chk => { chk.checked = false; });              }              if (this.priceFilter) this.priceFilter.value = 'all';              if (this.customPriceMin) this.customPriceMin.value = '';              if (this.customPriceMax) this.customPriceMax.value = '';              if (this.sortSelect) this.sortSelect.value = 'date_desc';              if (this.discountFilter) this.discountFilter.value = '0';              if (this.retailerSelect) this.retailerSelect.value = '';              if (this.offerTypeSelect) this.offerTypeSelect.value = '';              if (this.rowsSelect) this.rowsSelect.value = '12';              if (this.categoryFilter) this.categoryFilter.value = 'all';              this.activeDealTag = null;              this.updateURLParams();              this.applyLayoutMode();                            if (this.getViewMode() === 'savings_squad' || this._prevViewMode === 'savings_squad') {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }              this._prevViewMode = this.viewModeSelect.value;            });          }                    if (this.rowsSelect) {            this.rowsSelect.addEventListener('change', () => {              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.dealModeToggle) {            this.dealModeToggle.addEventListener('change', () => {              this.updateURLParams();              this.render();            });          }          if (this.editorModeToggle) {             this.editorModeToggle.addEventListener('change', (e) => {                this.editorMode = e.target.checked;                this.render();                this.updateFloatingCopyBar();             });          }          if (this.editorCopyBtn) {             this.editorCopyBtn.addEventListener('click', () => {                this.copySelectedDealsToCMS();             });          }          if (this.editorClearBtn) {             this.editorClearBtn.addEventListener('click', () => {                this.selectedDeals.clear();                this.render();                this.updateFloatingCopyBar();             });          }          if (this.grid) {            this.grid.addEventListener('change', (e) => {               if (e.target.classList.contains('tg-df-deal-checkbox')) {                  const dealId = e.target.getAttribute('data-id');                  if (e.target.checked) {                     const dealObj = this.deals.find(d => d.id === dealId);                     if (dealObj) this.selectedDeals.set(dealId, dealObj);                  } else {                     this.selectedDeals.delete(dealId);                  }                  this.updateFloatingCopyBar();               }            });            this.grid.addEventListener('click', (e) => {              const dealCard = e.target.closest('[data-action="deal-click"]');              const similarCard = e.target.closest('[data-action="view-similar-click"]');              const cardLink = dealCard || similarCard;              if (cardLink) {                const productName = cardLink.getAttribute('data-product-name');                const merchantName = cardLink.getAttribute('data-merchant-name');                const productId = cardLink.getAttribute('data-analytics-id');                const price = parseFloat(cardLink.getAttribute('data-price')) || null;                const prevPriceStr = cardLink.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = cardLink.getAttribute('data-original-link');                const rewrittenLink = cardLink.getAttribute('href');                const revenueId = cardLink.getAttribute('data-revenue-id');                const index = parseInt(cardLink.getAttribute('data-index'), 10) || 0;                const inStock = cardLink.getAttribute('data-in-stock') === 'true';                const totalText = cardLink.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: cardLink.getAttribute('data-model-id') || null,                    matchId: cardLink.getAttribute('data-match-id') || null,                    brand: cardLink.getAttribute('data-model-brand') || null,                    parent: cardLink.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: cardLink.getAttribute('data-merchant-id') || null,                    network: cardLink.getAttribute('data-merchant-network') || null,                    url: cardLink.getAttribute('data-merchant-url') || null,                    name: merchantName                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: normalizeCurrency(this.escapeHTML(cardLink.getAttribute('data-currency') || '$'))                };                if (dealCard) {                  trackDealClick(trackingParams);                } else {                  trackViewSimilarClick(trackingParams);                }              }              const couponsBtn = e.target.closest('[data-action="coupons-click"]');              if (couponsBtn) {                trackElementInteraction({                  id: 'product-card-show-coupons',                  name: 'Coupons',                  label: `Product card coupons: ${couponsBtn.getAttribute('data-merchant')}`                });              }            });          }          this.setupScrollListeners();        }        setupScrollListeners() {          const containers = [             this.root.querySelector('.tg-df-carousel-roundels'),             this.root.querySelector('.tg-df-carousel-filters-wrap'),             this.root.querySelector('#tg-df-grid')          ];                    containers.forEach(container => {             if (!container) return;                          const checkScroll = () => {                if (!container.parentElement) return;                const leftBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-left');                const rightBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-right');                                if (leftBtn) {                   if (container.scrollLeft <= 5) leftBtn.style.display = 'none';                   else leftBtn.style.display = 'flex';                }                                if (rightBtn) {                   if (container.scrollWidth <= container.clientWidth) {                       rightBtn.style.display = 'none';                   } else if (container.scrollLeft >= container.scrollWidth - container.clientWidth - 5) {                       rightBtn.style.display = 'none';                   } else {                       rightBtn.style.display = 'flex';                   }                }             };                          container.addEventListener('scroll', checkScroll);             checkScroll();                          window.addEventListener('resize', checkScroll);                          const observer = new MutationObserver(checkScroll);             observer.observe(container, { childList: true, subtree: true, characterData: false });          });        }        get widgetTypeName() {          const mode = this.viewModeSelect ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');          switch(mode) {              case 'carousel': return 'Carousel';              case 'savings_squad': return 'Savings Squad';              case 'grid': return 'Grid';              case 'row': return 'Row';              default: return 'Auto Collection';          }        }        getRowsLimit() {          if (this.rowsSelect && this.rowsSelect.value) return parseInt(this.rowsSelect.value, 10);          let configSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {             configSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {             configSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(configSource);          if (params.has('rows')) return parseInt(params.get('rows'), 10) || 12;          return 12;        }        getAreaCode() {          if (this.regionSelect && this.regionSelect.value) {            if (this.regionSelect.value === 'auto') return null;            return this.regionSelect.value;          }          let area = null;          try {            const locale = window.navigator.language || window.navigator.userLanguage;            if (locale && locale.includes('-')) {              area = locale.split('-')[1].toUpperCase();            } else if (locale && locale.length === 2) {              if (locale.toUpperCase() === 'EN') { area = 'US'; }              else { area = locale.toUpperCase(); }            }          } catch (e) { /* Ignore */ }                    // Map to known valid options or fallback to US          const valid = ['US', 'GB', 'CA', 'AU', 'DE', 'FR', 'IT'];          if (area === 'UK') area = 'GB';          if (valid.includes(area)) {             return area;          }          return 'US';        }        async fetchDeals(query) {          this.showLoading();          this.deals = [];          this.displayLimit = this.getRowsLimit();                    try {            console.log("getViewMode returns:", this.getViewMode());            if (this.getViewMode() === 'savings_squad') {               await this.fetchSavingsSquad();            } else {               if (this.isBroadQuery(query)) {                 await this.fetchAdviserDeals(query);               } else {                 await this.fetchHawkDeals(query);                 if (this.deals.length === 0) {                   await this.fetchAdviserDeals(query);                 }               }            }          } catch (error) {            console.warn("[Tom's Guide Widget] Fetch error:", error);            this.showError();          }        }        async fetchSavingsSquad() {          let topArticles = this.airedaleArticles;          if (!topArticles) {            const siteParam = this.website || 'tomsguide';            const airedaleUrl = `https://airedale.futurecdn.net/feeds/feed_1781000519267.json?site=${siteParam}&articleType=deals&limit=50`;            let res;            try {               res = await fetch(airedaleUrl);            } catch(e) {               try { res = await fetch(`https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=${siteParam}&articleType=deals&limit=50`); } catch (err) { console.warn("Fallback fetch failed", err); return; }            }            if (!res.ok) throw new Error('Airedale API Error');            const articles = await res.json();            topArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);            this.airedaleArticles = topArticles;                        let tagCounts = {};            topArticles.forEach((a) => {              let articleTags = new Set();              if (a.articlecategory && Array.isArray(a.articlecategory)) {                 a.articlecategory.forEach((t) => articleTags.add(t));              }              articleTags.forEach(t => {                 tagCounts[t] = (tagCounts[t] || 0) + 1;              });            });                        this.airedaleTags = Object.keys(tagCounts).sort((a, b) => tagCounts[b] - tagCounts[a]);            this.airedaleTagCounts = tagCounts;          }                    let targetArticles = topArticles;          if (!this.activeDealTag && this.currentQuery) {             const tagMatch = this.airedaleTags.find(t => t.toLowerCase() === this.currentQuery.toLowerCase());             if (tagMatch) {                this.activeDealTag = tagMatch;             }          }          if (this.activeDealTag) {             const cleanTag = this.activeDealTag.toLowerCase().replace(/&/g, '').replace(/[^a-z0-9]+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');             const encodedTag = encodeURIComponent(cleanTag);             const siteParam = this.website || 'tomsguide';             const url = `https://airedale.futurecdn.net/feeds/feed_1781000519267.json?site=${siteParam}&articleType=deals&limit=50&articleCategoryHandle=${encodedTag}`;             try {                const res = await fetch(url);                if (res.ok) {                   const articles = await res.json();                   targetArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);                }             } catch(e) {                console.warn("Failed to fetch by activeDealTag", e);             }          }          let extractedDeals = [];          let seenUrls = new Set();                    let overallBrandsCounts = {};                    // First pass: extract ALL brands from topArticles so the dropdown has all options          topArticles.forEach((article) => {             if (!article.articlepage) return;             let pageData = [];             try { pageData = JSON.parse(article.articlepage[0]); } catch(e){ console.warn(e); }             const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');             savingsSquad.forEach((block) => {                const data = block.data || {};                if (data.brand) {                   const cleanBrand = data.brand.replace(/^\d+\.\s*/, '').trim();                   overallBrandsCounts[cleanBrand] = (overallBrandsCounts[cleanBrand] || 0) + 1;                }             });          });          targetArticles.forEach((article) => {             if (!article.articlepage) return;                          let pageData = [];             try {                pageData = JSON.parse(article.articlepage[0]);             } catch(e){ console.warn(e); }                          const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');                          savingsSquad.forEach((block, idx) => {                const data = block.data || {};                const isFeatured = block.type === 'featured-product';                                const link = data.link || {};                const priceObj = data.price || {};                const image = data.image || {};                                if (data.brand) {                   data.brand = data.brand.replace(/^\d+\.\s*/, '').trim();                }                const externalUrl = isFeatured ? data.url : (link.href || null);                let summaryTitle = isFeatured ? (data.name || data.brand) : (data.productName || link.label || article.articlename);                let description = isFeatured ? (data.strapline || '') : (data.text || '');                                if (!isFeatured && !data.productName && data.text) {                   const brSplit = data.text.split(new RegExp('\x3Cbr\\s*\\/?\\x3E', 'i'));                   if (brSplit.length > 1) {                     summaryTitle = brSplit[0].replace(/<[^>]+>/g, '').trim();                     description = brSplit.slice(1).join(' ').replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').trim();                   } else {                     const match = data.text.match(/\x3Cstrong>(.*?)<\/strong>/);                     if (match) {                       summaryTitle = match[1].replace(/<[^>]+>/g, '').trim();                       if (summaryTitle.endsWith(':')) summaryTitle = summaryTitle.slice(0, -1);                     }                   }                }                                let imageUrl = isFeatured ? image.mos : (image.src || null);                if (imageUrl && imageUrl.startsWith('//')) imageUrl = 'https:' + imageUrl;                                description = description.replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').replace(/View Deal$/i, '').trim();                                let merchantName = data.retailer || '';                if (!merchantName && externalUrl) {                   try {                     merchantName = new URL(externalUrl).hostname.replace('www.', '').split('.')[0];                     merchantName = merchantName.charAt(0).toUpperCase() + merchantName.slice(1);                   }catch(e){ console.warn(e); }                }                if (!merchantName) merchantName = 'Retailer';                const q = (this.currentQuery || '').toLowerCase();                const activeTagLogic = (this.activeDealTag || '').toLowerCase();                if (q.length > 2 && q !== activeTagLogic) {                   const searchTarget = `${summaryTitle || ''} ${description || ''}`.toLowerCase();                   if (!searchTarget.includes(q)) return;                }                let rawPrice = 0;                let rawMsrp = 0;                let currencyStr = '$';                if (isFeatured) {                   rawPrice = typeof data.salePrice === 'number' && data.salePrice > 0 ? data.salePrice : (typeof data.price === 'number' ? data.price : 0);                   rawMsrp = typeof data.salePrice === 'number' && typeof data.price === 'number' && data.price > data.salePrice ? data.price : 0;                   currencyStr = data.currency === 'GBP' ? '£' : '$';                } else {                   rawPrice = priceObj.amount ? parseFloat(priceObj.amount) : 0;                   rawMsrp = priceObj.amountWas ? parseFloat(priceObj.amountWas) : 0;                   currencyStr = priceObj.currency === 'GBP' ? '£' : '$';                }                                let savingAmt = 0;                let savingLabel = '';                if (rawPrice > 0 && rawMsrp > rawPrice) {                   savingAmt = parseFloat((rawMsrp - rawPrice).toFixed(2));                   savingLabel = `Save ${currencyStr}${savingAmt}`;                }                                // Apply Brand filter                if (this.selectedBrands && this.selectedBrands.length > 0) {                   const itemBrand = (data.brand || '').toLowerCase();                   const hasMatch = this.selectedBrands.some(sb => sb.toLowerCase() === itemBrand);                   if (!hasMatch) return;                }                // Apply Price filter                let priceFilterVal = null;                const min = this.customPriceMin ? this.customPriceMin.value : '';                const max = this.customPriceMax ? this.customPriceMax.value : '';                if (min || max) {                   priceFilterVal = `${min}_${max}`;                } else if (this.priceFilter && this.priceFilter.value !== 'all') {                   priceFilterVal = this.priceFilter.value;                }                if (priceFilterVal && rawPrice > 0) {                   if (priceFilterVal === 'under50' && rawPrice >= 50) return;                   if (priceFilterVal === 'over50' && rawPrice <= 50) return;                   if (priceFilterVal === 'over30' && rawPrice <= 30) return;                   if (priceFilterVal === 'over500' && rawPrice <= 500) return;                   if (priceFilterVal.includes('_')) {                      const parts = priceFilterVal.split('_');                      const min = parseFloat(parts[0]);                      const max = parseFloat(parts[1]);                      if (!isNaN(min) && rawPrice < min) return;                      if (!isNaN(max) && rawPrice > max) return;                   }                }                // Apply Discount filter                if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {                   const requiredDiscount = parseInt(this.discountFilter.value);                   if (!isNaN(requiredDiscount) && requiredDiscount > 0) {                      if (!rawMsrp || rawMsrp <= rawPrice) return;                      const ratio = Math.round((1 - (rawPrice / rawMsrp)) * 100);                      if (ratio < requiredDiscount) return;                   }                }                                if (externalUrl) {                   if (seenUrls.has(externalUrl)) return;                  seenUrls.add(externalUrl);                }                                extractedDeals.push({                   id: `airedale-${article.id || Math.random()}-${idx}`,                   url: externalUrl,                   image: imageUrl,                   fallbackImage: imageUrl,                   title: summaryTitle,                   brand: data.brand || '',                   productName: data.productName || '',                   merchant: merchantName,                   rawPrice: rawPrice,                   rawMsrp: rawMsrp,                   price: rawPrice > 0 ? rawPrice.toString() : '',                   msrp: rawMsrp > 0 ? rawMsrp.toString() : '',                   currency: currencyStr,                   isCheckPrice: !rawPrice,                   savingLabel: savingLabel,                   savingType: rawMsrp > rawPrice ? 'amount' : 'none',                   isPrime: false,                   starRating: null,                   description: description,                   text: data.text || '',                   authorName: article.articleauthortext ? article.articleauthortext[0] : (article.articleauthor ? article.articleauthor[0] : ''),                   authorRole: article.articleauthorrole ? article.articleauthorrole[0] : '',                   authorImage: article.articleauthormedia ? article.articleauthormedia[0] : '',                   documentUrl: article.documenturl ? article.documenturl[0] : '',                   modifiedDate: article.contentmodifieddate || article.modifieddate || ''                });             });          });                    const airedaleBrandsList = Object.keys(overallBrandsCounts).map(b => ({              formatted_value: b,              count: overallBrandsCounts[b]          })).sort((a,b) => b.count - a.count);                    if (this.getViewMode() === 'savings_squad') {             this.populateBrandDropdown(airedaleBrandsList.slice(0, 15));             if (this.brandFilterWrapper) {                if (airedaleBrandsList.length === 0) {                    this.brandFilterWrapper.style.display = 'none';                } else {                    this.brandFilterWrapper.style.display = 'flex';                }             }          }                    this.deals = extractedDeals;          this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        isBroadQuery(query) {          const q = query.toLowerCase();          const intentModifiers = ['deals', 'best', 'sale', 'under', 'cheap', 'offers', 'discount'];          return intentModifiers.some(term => q.includes(term));        }        async fetchHawkDeals(query) {          const url = new URL(this.apiUrl);          url.searchParams.append('model_name', query);          const areaCode = this.getAreaCode();          if (areaCode) {            url.searchParams.append('area', areaCode);          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.append('filter_merchant_name', this.retailerSelect.value);          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.append('filter_label[text_brand]', this.selectedBrands.join(','));          }                    let priceVal = null;          const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             priceVal = `${min}_${max}`;          } else if (this.priceFilter && this.priceFilter.value !== 'all') {             priceVal = this.priceFilter.value;          }          if (priceVal) {            if (priceVal === 'under50') {              url.searchParams.append('filter_max_price', '50');            } else if (priceVal === 'over50') {              url.searchParams.append('filter_min_price', '50');            } else if (priceVal === 'over30') {              url.searchParams.append('filter_min_price', '30');            } else if (priceVal === 'over500') {              url.searchParams.append('filter_min_price', '500');            } else if (priceVal.includes('_')) {              const parts = priceVal.split('_');              if (parts[0]) url.searchParams.append('filter_min_price', parts[0]);              if (parts[1]) url.searchParams.append('filter_max_price', parts[1]);            }          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {              const ratio = (100 - v) / 100;              url.searchParams.append('min_discount_ratio', ratio.toString());            }          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.append('offer', this.offerTypeSelect.value);          }                    url.searchParams.append('filter_product_types', 'deals');                    url.searchParams.append('rows', this.getRowsLimit().toString());          let response;          try {             response = await fetch(url.toString());          } catch(e) {             if (window.location.protocol === 'file:') {                console.warn("[Tom's Guide Widget] fetch from file:// blocked by local CORS policy, falling back to Adviser mock.");                await this.fetchAdviserDeals(query);                return;             }             console.warn("Hawk fetch failed", e);             this.deals = [];             this.render();             return;          }          if (!response.ok) {            throw new Error('Hawk API Response Error');          }          const rawData = await response.json();          // Safely locate data array from potentially wrapped response          let offers = [];          let modelInfoArray = [];                    let brandFilterData = null;          if (rawData && rawData.widget && rawData.widget.data && Array.isArray(rawData.widget.data.filters)) {             brandFilterData = rawData.widget.data.filters.find(f => f.type === 'label_text_brand');          } else if (rawData && rawData.data && Array.isArray(rawData.data.filters)) {             brandFilterData = rawData.data.filters.find(f => f.type === 'label_text_brand');          }          if (brandFilterData && Array.isArray(brandFilterData.values) && brandFilterData.values.length > 0) {             this.populateBrandDropdown(brandFilterData.values);          } else {             if (this.brandFilterWrapper && this.selectedBrands.length === 0) {                this.brandFilterWrapper.style.display = 'none';             }          }                    if (rawData && rawData.widget && rawData.widget.data) {            if (Array.isArray(rawData.widget.data.offers)) offers = rawData.widget.data.offers;            if (rawData.widget.data.model_info && typeof rawData.widget.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.widget.data.model_info) ? rawData.widget.data.model_info : Object.values(rawData.widget.data.model_info);            }          } else if (rawData && rawData.data) {            if (Array.isArray(rawData.data.offers)) offers = rawData.data.offers;            if (rawData.data.model_info && typeof rawData.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.data.model_info) ? rawData.data.model_info : Object.values(rawData.data.model_info);            }          } else {            if (Array.isArray(rawData)) offers = rawData;            else if (rawData && Array.isArray(rawData.offers)) offers = rawData.offers;            else if (rawData && rawData.offers && Array.isArray(rawData.offers.offer)) offers = rawData.offers.offer;            else if (rawData && rawData.offers) offers = [].concat(rawData.offers);                        if (rawData && rawData.model_info && typeof rawData.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.model_info) ? rawData.model_info : Object.values(rawData.model_info);            }          }          let modelDetails = {};          modelInfoArray.forEach(m => {            const mId = m.model_id || m.id;            if (mId) {              modelDetails[mId] = {                score: m.score != null ? parseFloat(m.score) : null,                brand: m.brand || null,                parent: (m.parents && Array.isArray(m.parents) && m.parents.length > 0) ? m.parents[0].name : null              };            }          });          offers.forEach(item => {            let data = { ...item };            const mId = data.model_id;            if (mId && modelDetails[mId]) {              data.review_score = modelDetails[mId].score;              data.model_brand = modelDetails[mId].brand;              data.model_parent = modelDetails[mId].parent;            } else {              data.review_score = null;            }                        let itemOffers = [];            if (Array.isArray(item.offers)) itemOffers = item.offers;            else if (Array.isArray(item.offer)) itemOffers = item.offer;            else if (item.offers && typeof item.offers === 'object') itemOffers = [item.offers];            else if (item.offer && typeof item.offer === 'object') itemOffers = [item.offer];            if (itemOffers.length > 0) {              itemOffers.forEach(subItem => {                let subData = { ...item, ...subItem };                const subId = subData.model_id;                if (subId && modelDetails[subId]) {                  subData.review_score = modelDetails[subId].score;                  subData.model_brand = modelDetails[subId].brand;                  subData.model_parent = modelDetails[subId].parent;                } else if (data.review_score != null) {                  subData.review_score = data.review_score;                }                if (subData.merchant && typeof subData.merchant === 'object') {                  subData.merchant_name = subData.merchant.name;                }                this.deals.push(this.extractDealData(subData));              });              return;            }                        if (item.merchant && typeof item.merchant === 'object') {              data.merchant_name = item.merchant.name;            }                        this.deals.push(this.extractDealData(data));          });                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        async fetchAdviserDeals(query) {          // ======================================================================          // TODO: ADVISER API REPLACEMENT          // The code below simulates the Adviser API response using mock data.          // Once the real endpoint is ready, remove getAdviserMockData() and           // perform an actual fetch() request similar to fetchHawkDeals().          // Example:          // const area = this.getAreaCode();          // let apiUrl = `https://your-adviser-api.com/search?q=${query}&area=${area}`;          // if (this.priceFilter && this.priceFilter.value !== 'all') {          //   const val = this.priceFilter.value;          //   if (val === 'under50') apiUrl += '&filter_max_price=50';          //   else if (val === '50_100') apiUrl += '&filter_max_price=100';          //   else if (val === '100_200') apiUrl += '&filter_max_price=200';          //   else if (val === '200_500') apiUrl += '&filter_max_price=500';          // }          // const res = await fetch(apiUrl);          // const rawData = await res.json();          // ======================================================================          // Simulating network latency          await new Promise(resolve => setTimeout(resolve, 400));                    const rawData = this.getAdviserMockData();          let offers = [];                    if (rawData && rawData.data && rawData.data.Get && Array.isArray(rawData.data.Get.Deal)) {            offers = rawData.data.Get.Deal;          }                    // Basic client-side filtering for the mock if we want it to react to the query          const q = query.toLowerCase();          const selectedRetailer = (this.retailerSelect && this.retailerSelect.value) ? this.retailerSelect.value.toLowerCase() : null;                    offers.forEach(item => {            const dataObj = item;                        // Apply retailer filter            const itemRetailer = (dataObj.dataRetailer || '').toLowerCase();            if (selectedRetailer && itemRetailer !== selectedRetailer && !itemRetailer.includes(selectedRetailer)) {              return;            }                        // Apply mock price filter            let price = dataObj.dataDiscountedPrice || 0;            if (typeof price === 'string') {              price = parseFloat(price.replace(/[^0-9.]/g, ''));            }            let priceVal = null;            const min = this.customPriceMin ? this.customPriceMin.value : '';            const max = this.customPriceMax ? this.customPriceMax.value : '';            if (min || max) {               priceVal = `${min}_${max}`;            } else if (this.priceFilter && this.priceFilter.value !== 'all') {               priceVal = this.priceFilter.value;            }            if (priceVal) {              if (priceVal === 'under50' && price >= 50) return;              if (priceVal === 'over50' && price <= 50) return;              if (priceVal === 'over30' && price <= 30) return;              if (priceVal === 'over500' && price <= 500) return;              if (priceVal.includes('_')) {                 const parts = priceVal.split('_');                 if (parts[0] && price < parseFloat(parts[0])) return;                 if (parts[1] && price > parseFloat(parts[1])) return;              }            }                        // Map Adviser schema to our widget's expected schema            const mappedData = {              url: dataObj.linkHREF || dataObj.dataLink || '#',              image: dataObj.imageURL || (dataObj.image && dataObj.image.src) || '',              title: dataObj.dataProduct || (dataObj.product && dataObj.product.name) || 'Product Deal',              merchant: dataObj.dataRetailer || 'Retailer',              price: dataObj.dataDiscountedPrice || 0,              currency: dataObj.dataCurrency === 'USD' ? '$' : (dataObj.dataCurrency || '$'),              msrp: dataObj.dataOriginalPrice || null            };                        const titleLow = mappedData.title.toLowerCase();            const merchLow = mappedData.merchant.toLowerCase();                        // Smarter mock filtering            let isMatch = false;            if (q === '' || this.isBroadQuery(q)) {              isMatch = true;            } else if (titleLow.includes(q) || merchLow.includes(q)) {              isMatch = true;            } else if ((q.includes('laptop') || q.includes('mac') || q.includes('pc')) && (titleLow.includes('macbook') || titleLow.includes('laptop'))) {              isMatch = true;            } else if ((q.includes('tv') || q.includes('television')) && (titleLow.includes('tv') || titleLow.includes('oled') || titleLow.includes('qled'))) {              isMatch = true;            } else if ((q.includes('phone') || q.includes('smartphone')) && (titleLow.includes('galaxy') || titleLow.includes('phone'))) {              isMatch = true;            } else if ((q.match(/watch|fitness|run|shoe/)) && (titleLow.includes('forerunner') || titleLow.includes('saucony') || titleLow.includes('watch'))) {              isMatch = true;            }                        if (isMatch) {               this.deals.push(this.extractDealData(mappedData));            }          });                    let rowLimit = this.getRowsLimit();          // Intentionally omitting the slice here to allow "Load More" to work if the API returns more                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        getAdviserMockData() {          return {            "data": {              "Get": {                "Deal": [                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 300,                    "dataOriginalPrice": 399,                    "dataProduct": "Samsung Galaxy A36",                    "dataRetailer": "Samsung",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/MqDYsukV3JBG54te6dEs7j.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 14,                    "dataOriginalPrice": 24,                    "dataProduct": "Blink Mini",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/3JurmAjHsDa5tPdaHAwEV8.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 59,                    "dataOriginalPrice": 99,                    "dataProduct": "Ring Video Doorbell",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/rAh4uR7AsAsALCCLTXnLNJ.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 10,                    "dataOriginalPrice": 599,                    "dataProduct": "MacBook Neo",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/Lg4Dvg68j9SbB5CPNrTEpH.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 749,                    "dataOriginalPrice": 849,                    "dataProduct": "65\\\" Fire TV Omni 4K QLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/SG34ZWodUkLTxJvMTbjPYR.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 71,                    "dataOriginalPrice": 160,                    "dataProduct": "Saucony Hurricane 24",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/vxf7UD5T2Am7guVzFoFcZ4.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 649,                    "dataOriginalPrice": 749,                    "dataProduct": "Garmin Forerunner 970",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/3GKnEu7CdhtxPMfnPCMCiA.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1049,                    "dataOriginalPrice": 1499,                    "dataProduct": "LG 48\\\" C4 4K OLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/imvwZV9zoMD6fn9Afuge35.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1499,                    "dataOriginalPrice": 2199,                    "dataProduct": "Samsung 49\\\" Odyssey Neo G9 4K Gaming Monitor",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/XWDEJ5dUAE2nhK8k3Jk7k7.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 299,                    "dataOriginalPrice": 699,                    "dataProduct": "EGOHOME Black Memory Foam Mattress (queen)",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/hMUemtAejNETLVYxNrktzm.jpg"                  }                ]              }            }          };        }        decodeHTML(html) {          if (!html) return '';          const txt = document.createElement("textarea");          txt.innerHTML = String(html);          return txt.value;        }        extractDealData(item) {          const priceRawStr = String(item.price || item.current_price || '0');          const msrpRawStr = String(item.was_price || item.msrp || item.original_price || '0');          const rawPrice = parseFloat(priceRawStr.replace(/[^\d.]/g, '')) || 0;          const rawMsrp = parseFloat(msrpRawStr.replace(/[^\d.]/g, '')) || 0;          const isCheckPrice = rawPrice === 0 || priceRawStr === '0.00' || priceRawStr === '0';                    let originalImageUrl = item.image || item.image_url || item.product_image || '';          let imageUrl = originalImageUrl;          if ((!imageUrl || isCheckPrice) && item.model_image_url) {             imageUrl = item.model_image_url;             originalImageUrl = imageUrl;          } else if ((!imageUrl || isCheckPrice) && item.model_image) {             imageUrl = item.model_image;             originalImageUrl = imageUrl;          }                    if (imageUrl) {            imageUrl = imageUrl.replace(/-(\d+)-(\d+)(\.[a-z.]+)$/i, '$3');          }                    let fallbackImage = '';          if (originalImageUrl && originalImageUrl !== imageUrl) {             fallbackImage = originalImageUrl;          } else if (item.model_image && item.model_image !== imageUrl) {             fallbackImage = item.model_image;          } else if (item.model_image_url && item.model_image_url !== imageUrl) {             fallbackImage = item.model_image_url;          }                    const rawCurrency = item.currency || item.currency_symbol || '$';                    let savingLabel = item.percentage_saving_label || '';          if (!savingLabel && rawMsrp > rawPrice && rawPrice > 0) {            const pct = Math.round(((rawMsrp - rawPrice) / rawMsrp) * 100);            if (pct > 0) {              savingLabel = `${pct}% OFF`;            }          }                    const isPrime = item.shipping && item.shipping.prime === true;                    let scoreRaw = (item.review_score !== undefined && item.review_score !== null && item.review_score > 0) ? parseFloat(item.review_score) : null;          let starRating = 0;          if (scoreRaw !== null) {            starRating = Math.round((scoreRaw > 10 ? scoreRaw / 20 : scoreRaw / 2) * 2) / 2;          }                    return {            id: item.offer_id || item.link || item.url || item.offer_link || Math.random().toString(),            url: item.link || item.url || item.offer_link || '#',            image: imageUrl,            fallbackImage: fallbackImage,            title: item.name || item.title || item.model_name || item.product_name || 'Unknown Product',            brand: item.brand || '',            productName: item.model_name || item.product_name || item.name || '',            merchant: item.merchant_name || item.merchant || item.retailer || 'Retailer',            price: item.price !== undefined ? String(item.price) : '0.00',            currency: this.decodeHTML(rawCurrency),            msrp: item.was_price || item.msrp || item.original_price || null,            rawPrice: rawPrice,            rawMsrp: rawMsrp,            hasWasPrice: (item.was_price !== undefined && item.was_price !== null),            isCheckPrice: isCheckPrice,            savingLabel: savingLabel,            isPrime: isPrime,            starRating: starRating > 0 ? starRating : null,            modelId: item.model_id || '',            productKey: item.product_key || '',            merchantId: (item.merchant && typeof item.merchant === 'object') ? item.merchant.id || '' : '',            matchId: item.match_id || '',            merchantNetwork: (item.merchant && typeof item.merchant === 'object') ? item.merchant.an || '' : '',            merchantUrl: (item.merchant && typeof item.merchant === 'object') ? item.merchant.url || '' : '',            modelBrand: item.model_brand || item.brand || '',            modelParent: item.model_parent || ''          };        }        sortData() {          const sortVal = this.sortSelect ? this.sortSelect.value : 'date_desc';          if (sortVal === 'price_asc') {            this.deals.sort((a, b) => a.rawPrice - b.rawPrice);          } else if (sortVal === 'price_desc') {            this.deals.sort((a, b) => b.rawPrice - a.rawPrice);          } else if (sortVal === 'discount_desc') {            this.deals.sort((a, b) => {              const aDiscount = a.rawMsrp > a.rawPrice ? (a.rawMsrp - a.rawPrice) : 0;              const bDiscount = b.rawMsrp > b.rawPrice ? (b.rawMsrp - b.rawPrice) : 0;              return bDiscount - aDiscount;            });          } else if (sortVal === 'date_desc') {             this.deals.sort((a, b) => {                let dateA = 0;                let dateB = 0;                if (a && a.modifiedDate) {                   const valA = Array.isArray(a.modifiedDate) ? a.modifiedDate[0] : a.modifiedDate;                   dateA = new Date(valA).getTime();                   if (isNaN(dateA)) dateA = 0;                }                if (b && b.modifiedDate) {                   const valB = Array.isArray(b.modifiedDate) ? b.modifiedDate[0] : b.modifiedDate;                   dateB = new Date(valB).getTime();                   if (isNaN(dateB)) dateB = 0;                }                return dateB - dateA;             });          }        }        getFilteredDeals() {          let filteredDeals = [...this.deals];                    if (this.dealModeToggle && this.dealModeToggle.checked) {            filteredDeals = filteredDeals.filter(d => d.hasWasPrice || (d.msrp && d.rawMsrp > d.rawPrice));          }                    return filteredDeals;        }        showLoading() {          const _div = '<' + '/div>';          const skeletonCardHtml = `            \x3Cdiv class="tg-df-card">              \x3Cdiv class="tg-df-card-image-box">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-img">${_div}              ${_div}              \x3Cdiv class="tg-df-card-body">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-card-footer mt-auto">                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="height:24px;">${_div}                ${_div}              ${_div}              \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text" style="height:44px; margin:0; border-radius:0;">${_div}            ${_div}`;          this.grid.innerHTML = Array(4).fill(skeletonCardHtml).join('');        }        showError() {          const _div = '<' + '/div>';          this.grid.innerHTML = `\x3Cdiv class="tg-df-message">            An error occurred while finding deals. Please check your connection and try again.          ${_div}`;        }        escapeHTML(str) {          if (!str) return '';          return String(str).replace(/[&<>'"]/g, tag => ({              '&': '&', '<': '<', '>': '>', "'": ''', '"': '"'          }[tag] || tag));        }                bindCouponButtons() {          const btns = this.root.querySelectorAll('.tg-df-tag-coupons');          btns.forEach(btn => {            btn.addEventListener('click', (e) => {              e.preventDefault();              e.stopPropagation();              const merchant = btn.getAttribute('data-merchant');              this.openVouchersModal(merchant);            });          });                    const closeBtn = this.root.querySelector('#tg-df-vouchers-close');          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (closeBtn) {            closeBtn.onclick = () => this.closeVouchersModal();          }          if (backdrop) {            backdrop.onclick = (e) => {              if (e.target === backdrop) this.closeVouchersModal();            };          }        }                closeVouchersModal() {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (backdrop) backdrop.classList.remove('active');        }                async checkMerchantsCouponsBulk(merchants) {          if (!merchants || merchants.length === 0) return {};          const controller = new AbortController();          const timeoutId = setTimeout(() => controller.abort(), 4000);          try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchants.join(','));            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '120');            url.searchParams.append('origin', 'widgets-clientside');                        let res; try { res = await fetch(url.toString(), { signal: controller.signal }); } catch (e) { return {}; }            clearTimeout(timeoutId);            if (!res.ok) return {};            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        const foundMerchants = new Set();            offers.forEach(o => {              let mName = o.merchant_name || o.merchant || o.retailer;              if (mName && typeof mName === 'object') mName = mName.name;              if (mName) foundMerchants.add(String(mName).toLowerCase());            });            const resultMap = {};            merchants.forEach(m => {              if (m) resultMap[m] = foundMerchants.has(String(m).toLowerCase());            });            return resultMap;          } catch (e) {            return {};          }        }                async openVouchersModal(merchantName) {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          const title = this.root.querySelector('#tg-df-vouchers-title');          const content = this.root.querySelector('#tg-df-vouchers-content');                    if (!backdrop || !content) return;                    // HACK: Hide closing tags          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h4 = '<' + '/h4>';          const _svg = '<' + '/svg>';          const _circle = '<' + '/circle>';          const _polyline = '<' + '/polyline>';          const _rect = '<' + '/rect>';          const _path = '<' + '/path>';                    title.innerText = `${merchantName} Coupons & Deals`;          content.innerHTML = `\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}                               \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}`;          backdrop.classList.add('active');                    try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchantName);            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '50');            url.searchParams.append('origin', 'widgets-clientside');                        const res = await fetch(url.toString());            if (!res.ok) throw new Error('API Error');            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        if (offers.length === 0) {              content.innerHTML = `\x3Cdiv class="tg-df-message">No vouchers currently available for ${this.escapeHTML(merchantName)}.${_div}`;              return;            }                        content.innerHTML = offers.map((v, idx) => {              let offerObj = v;              if (v.offers && v.offers.offer) {                offerObj = Array.isArray(v.offers.offer) ? v.offers.offer[0] : v.offers.offer;              } else if (v.offer) {                offerObj = Array.isArray(v.offer) ? v.offer[0] : v.offer;              }              let logoUrl = v.logo_url || offerObj.logo_url || '';              if (!logoUrl && v.merchant) {                if (Array.isArray(v.merchant) && v.merchant.length > 0) logoUrl = v.merchant[0].logo_url || '';                else logoUrl = v.merchant.logo_url || '';              }                            const offerName = offerObj.name || offerObj.title || v.name || v.title || 'Special Offer';              const endTime = offerObj.end_time || v.end_time || '';              const linkUrl = offerObj.link || offerObj.url || v.link || v.url || '#';                            let foundVoucherCode = '';              const findVoucherCode = (obj) => {                if (!obj || typeof obj !== 'object') return;                if (obj.type === 'voucher_code' && obj.display_value) {                  foundVoucherCode = obj.display_value;                  return;                }                if (Array.isArray(obj)) {                  for (const item of obj) {                    findVoucherCode(item);                    if (foundVoucherCode) return;                  }                } else {                  for (const k in obj) {                    if (Object.prototype.hasOwnProperty.call(obj, k)) {                      findVoucherCode(obj[k]);                      if (foundVoucherCode) return;                    }                  }                }              };              findVoucherCode(offerObj);              if (!foundVoucherCode) findVoucherCode(v);                            const voucherCode = foundVoucherCode || offerObj.voucher_code || v.voucher_code || '';              const codeHtml = voucherCode ? `\x3Cspan class="tg-df-voucher-code" data-action="copy-code" data-code="${this.escapeHTML(voucherCode)}" title="Copy to clipboard">                \x3Cspan class="tg-df-voucher-code-text">${this.escapeHTML(voucherCode)}${_span}                \x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-left:6px;flex-shrink:0;" class="tg-df-voucher-copy-icon">                  \x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">${_rect}                  \x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">${_path}                ${_svg}              ${_span}` : '';                            const logoHtml = logoUrl                 ? `\x3Cimg src="${this.escapeHTML(logoUrl)}" alt="${this.escapeHTML(offerName)}" class="tg-df-voucher-logo" />`                 : `\x3Cdiv class="tg-df-voucher-logo" style="background:#e2e8f0;">${_div}`;                            let expiryHtml = '';              if (endTime) {                let dStr = endTime;                if (!isNaN(dStr) && String(dStr).length === 10) dStr = Number(dStr) * 1000;                const d = new Date(dStr);                if (!isNaN(d.getTime())) {                  const options = { year: 'numeric', month: 'short', day: 'numeric' };                  expiryHtml = `                    \x3Cdiv class="tg-df-voucher-expiry">                      \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                        \x3Ccircle cx="12" cy="12" r="10">${_circle}                        \x3Cpolyline points="12 6 12 12 16 14">${_polyline}                      ${_svg}                      Expires ${d.toLocaleDateString(undefined, options)}                    ${_div}`;                }              }              const revenueIdVal = generateRevenueId(linkUrl, offerName, merchantName, null);              const rewrittenLinkUrl = rewriteAffiliateLink(linkUrl, area, revenueIdVal);              return `                \x3Ca href="${this.escapeHTML(rewrittenLinkUrl)}" target="_blank" rel="noopener nofollow" class="tg-df-voucher-item"                  data-action="voucher-click"                  data-product-name="${this.escapeHTML(offerName)}"                  data-merchant-name="${this.escapeHTML(merchantName)}"                  data-analytics-id="${this.escapeHTML(offerObj.offer_id || offerObj.id || v.id || '')}"                  data-price=""                  data-previous-price=""                  data-original-link="${this.escapeHTML(linkUrl)}"                  data-revenue-id="${revenueIdVal}"                  data-index="${idx}"                  data-total="${offers.length}"                  data-in-stock="true"                  data-currency="USD"                  data-model-id="${this.escapeHTML(offerObj.model_id || v.model_id || offerObj.id || v.id || '')}"                  data-merchant-id="${this.escapeHTML(offerObj.merchant_id || offerObj.merchant?.id || '')}"                >                  ${logoHtml}                  \x3Cdiv class="tg-df-voucher-content">                    \x3Ch4 class="tg-df-voucher-title">${this.escapeHTML(offerName)}${_h4}                    ${codeHtml}                    ${expiryHtml}                  ${_div}                ${_a}              `;            }).join('');                        // Attach copy functionality            const copyBtns = content.querySelectorAll('[data-action="copy-code"]');            copyBtns.forEach(btn => {              btn.addEventListener('click', async (e) => {                e.preventDefault();                e.stopPropagation();                                const code = btn.getAttribute('data-code');                if (!code) return;                                try {                  const copyToClipboard = async (text) => {                     if (window.navigator.clipboard && window.isSecureContext) {                        try { await window.navigator.clipboard.writeText(text); return; } catch (e) {}                     }                     const textArea = document.createElement("textarea");                     textArea.value = text;                     textArea.style.position = "fixed";                     document.body.appendChild(textArea);                     textArea.focus();                     textArea.select();                     document.execCommand('copy');                     textArea.remove();                  };                  await copyToClipboard(code);                                    // Visual feedback                  btn.classList.add('copied');                  const textSpan = btn.querySelector('.tg-df-voucher-code-text');                  const iconSvg = btn.querySelector('.tg-df-voucher-copy-icon');                                    const origText = textSpan.innerText;                  const origIcon = iconSvg.innerHTML;                                    textSpan.innerText = 'Copied!';                  iconSvg.innerHTML = `\x3Cpolyline points="20 6 9 17 4 12">${_polyline}`;                                    setTimeout(() => {                    if (btn) {                      btn.classList.remove('copied');                      if (textSpan) textSpan.innerText = origText;                      if (iconSvg) iconSvg.innerHTML = origIcon;                    }                  }, 2000);                                    trackElementInteraction({                    id: 'voucher-code-copy',                    name: 'Copy Voucher Code',                    label: `Copied ${code} for ${merchantName}`                  });                } catch (err) {                  console.warn('Failed to copy text: ', err);                }              });            });            // Attach voucher click tracking            const voucherBtns = content.querySelectorAll('[data-action="voucher-click"]');            voucherBtns.forEach(btn => {              btn.addEventListener('click', (e) => {                if (e.target.closest('[data-action="copy-code"]')) return;                                const productName = btn.getAttribute('data-product-name');                const merchantNameAttr = btn.getAttribute('data-merchant-name');                const productId = btn.getAttribute('data-analytics-id');                const price = parseFloat(btn.getAttribute('data-price')) || null;                const prevPriceStr = btn.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = btn.getAttribute('data-original-link');                const rewrittenLink = btn.getAttribute('href');                const revenueId = btn.getAttribute('data-revenue-id');                const index = parseInt(btn.getAttribute('data-index'), 10) || 0;                const inStock = btn.getAttribute('data-in-stock') === 'true';                const totalText = btn.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: btn.getAttribute('data-model-id') || null,                    matchId: btn.getAttribute('data-match-id') || null,                    brand: btn.getAttribute('data-model-brand') || null,                    parent: btn.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: btn.getAttribute('data-merchant-id') || null,                    network: btn.getAttribute('data-merchant-network') || null,                    url: btn.getAttribute('data-merchant-url') || null,                    name: merchantNameAttr                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: btn.getAttribute('data-currency') || 'USD'                };                if (typeof trackDealClick === 'function') {                  trackDealClick(trackingParams);                }              });            });                                  } catch (e) {            console.warn(e);            content.innerHTML = `\x3Cdiv class="tg-df-message">Failed to load vouchers.${_div}`;          }        }        render() {          try {            if (this.getViewMode() === 'savings_squad' && this.airedaleTags.length > 0) {              if (this.categoryFilterWrapper) {                 this.categoryFilterWrapper.style.display = 'flex';              }              if (this.categoryFilter) {                 const _option = '<' + '/option>';                 let optionsHtml = `\x3Coption value="all">All Categories${_option}`;                 this.airedaleTags.forEach(tag => {                    const isSelected = this.activeDealTag === tag ? 'selected' : '';                    optionsHtml += `\x3Coption value="${this.escapeHTML(tag)}" ${isSelected}>${this.escapeHTML(tag)}${_option}`;                 });                 this.categoryFilter.innerHTML = optionsHtml;                 this.categoryFilter.value = this.activeDealTag || 'all';              }            } else {               if (this.categoryFilterWrapper) {                  this.categoryFilterWrapper.style.display = 'none';               }            }            const displayDeals = this.getFilteredDeals();          // HACK: Hide closing tags from the CMS HTML sanitizer so it doesn't strip them during in-page injection          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h3 = '<' + '/h3>';          const _p = '<' + '/p>';          const _strong = '<' + '/strong>';          const _sup = '<' + '/sup>';          const _button = '<' + '/button>';          if (displayDeals.length === 0) {            if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {              if (this.deals.length > 0) {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No deals match your selected filters.                ${_div}`;              } else if (this.getViewMode() === 'savings_squad' && this.currentQuery.length <= 2) {                 // Do not show "no exact matches" if query is empty for savings_squad                 this.grid.innerHTML = '';              } else {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No exact matches found for "\x3Cstrong>${this.escapeHTML(this.currentQuery)}${_strong}". Try adjusting your search term.                ${_div}`;              }            } else {              this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                Search product or category names to discover the best deals from across the web.              ${_div}`;            }            return;          }          let dealsHtml = displayDeals.slice(0, this.displayLimit).map((deal, index) => {            try {               const currencySym = this.escapeHTML(deal.currency);               const isoCurrencyCode = normalizeCurrency(currencySym);               const escapedPrice = this.escapeHTML(deal.price);               const escapedMsrp = this.escapeHTML(deal.msrp);               const areaCode = this.getAreaCode();                              const revenueId = generateRevenueId(deal.url, deal.title, deal.merchant, null);               const originalLink = deal.url;               const rewrittenLink = rewriteAffiliateLink(deal.url, areaCode, revenueId);                        const productCategoryName = 'deals';            const dataAttr = `              data-action="${deal.isCheckPrice ? 'view-similar-click' : 'deal-click'}"              data-analytics-id="${this.escapeHTML(deal.externalProductId || deal.id || '')}"              data-product-name="${this.escapeHTML(deal.title)}"              data-merchant-name="${this.escapeHTML(deal.merchant)}"              data-price="${deal.rawPrice || ''}"              data-previous-price="${deal.rawMsrp || ''}"              data-original-link="${this.escapeHTML(originalLink)}"              data-revenue-id="${revenueId}"              data-index="${index}"              data-total="${displayDeals.length}"              data-in-stock="${deal.inStock !== false}"              data-currency="${this.escapeHTML(isoCurrencyCode)}"              data-model-id="${this.escapeHTML(deal.modelId || '')}"              data-product-key="${this.escapeHTML(deal.productKey || '')}"              data-merchant-id="${this.escapeHTML(deal.merchantId || '')}"            `;                        let priceGroupHtml = '';            let isSavingsSquadMode = this.getViewMode() === 'savings_squad';            let ctaText = 'View Deal';            let formattedPrice = '';            let msrpHtml = '';                        if (deal.isCheckPrice) {              ctaText = 'View Deal';              if (isSavingsSquadMode) {                priceGroupHtml = ``;              } else {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-price-group">                    \x3Cspan class="tg-df-card-price" style="font-size: 15px; font-weight: 500; font-style: italic;">See price at retailer${_span}                  ${_div}                `;              }            } else {              // Format Price              formattedPrice = escapedPrice.includes(currencySym)                 ? escapedPrice                 : `${currencySym}${escapedPrice}`;                              // Format MSRP              msrpHtml = deal.msrp && deal.rawMsrp > deal.rawPrice                ? `\x3Cspan class="tg-df-card-msrp">${escapedMsrp.includes(currencySym) ? escapedMsrp : currencySym + escapedMsrp}${_span}`                : '';                              priceGroupHtml = isSavingsSquadMode ? `` : `                \x3Cdiv class="tg-df-card-price-group">                  \x3Cspan class="tg-df-card-price">${formattedPrice}${_span}                  ${msrpHtml}                ${_div}              `;            }                        const discountBadgeHtml = deal.savingLabel && !deal.isCheckPrice              ? `\x3Cspan class="tg-df-card-discount-badge">${this.escapeHTML(deal.savingLabel)}${_span}`              : '';                          // HACK for CMS            const _button = '<' + '/button>';            const _svg = '<' + '/svg>';            const _path = '<' + '/path>';            const _rect = '<' + '/rect>';            const _circle = '<' + '/circle>';            const _polyline = '<' + '/polyline>';            const _line = '<' + '/line>';                        let badgesHtml = '';            const primeBadge = deal.isPrime ? `              \x3Cspan class="tg-df-tag tg-df-tag-prime">                \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="currentColor">                  \x3Cpath d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z">${_path}                ${_svg} Prime              ${_span}            ` : '';                        const couponsBadge = deal.merchant && deal.merchant.toLowerCase().includes('amazon') ? '' : `              \x3Cdiv class="tg-df-coupon-wrapper" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:inline-flex; align-items:center;">                \x3Cdiv class="tg-df-coupon-spinner">${_div}                \x3Cbutton type="button" class="tg-df-tag tg-df-tag-coupons" data-action="coupons-click" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:none;">                  \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                    \x3Cpath d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z">${_path}                    \x3Cline x1="7" y1="7" x2="7.01" y2="7">${_line}                  ${_svg} Coupons                ${_button}              ${_div}            `;                        // Note: We always add coupons badge if there's a chance, but to allow 3-line titles we check wrapper display state            badgesHtml = `              \x3Cdiv class="tg-df-card-badges">                ${primeBadge}                ${couponsBadge}              ${_div}            `;            const _linearGradient = '<' + '/linearGradient>';            const _polygon = '<' + '/polygon>';            const _stop = '<' + '/stop>';            const _defs = '<' + '/defs>';                        let starHtml = '';            if (deal.starRating) {              let rating = deal.starRating;                            if (rating > 0) {                const fullStars = Math.floor(rating);                const halfStar = (rating - fullStars) >= 0.5 ? 1 : 0;                const emptyStars = Math.max(0, 5 - fullStars - halfStar);                const blue = '#1f69ff'; // Tom's guide brand color from VIEW DEAL button                const gray = '#cbd5e1';                                const starSvgFull = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="${blue}" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                const gradId = 'half_grad_' + Math.floor(Math.random()*1000000);                const starSvgHalf = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cdefs>\x3ClinearGradient id="${gradId}" x1="0" x2="1" y1="0" y2="0">\x3Cstop offset="50%" stop-color="${blue}">${_stop}\x3Cstop offset="50%" stop-color="transparent">${_stop}${_linearGradient}${_defs}                  \x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26" fill="url(#${gradId})">${_polygon}${_svg}`;                                  const starSvgEmpty = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="${gray}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                let stars = [];                for (let i=0; i<fullStars; i++) stars.push(starSvgFull);                if (halfStar) stars.push(starSvgHalf);                for (let i=0; i<emptyStars; i++) stars.push(starSvgEmpty);                                starHtml = `\x3Cdiv class="tg-df-card-stars" style="display:flex;align-items:center;margin-bottom:8px;font-size:13px;font-weight:600;color:var(--tg-df-text-muted);">                  \x3Cspan style="margin-right:6px;">Tom's Guide:${_span}                  \x3Cdiv style="display:flex;gap:2px;">                    ${stars.join('')}                  ${_div}                ${_div}`;              }            }            let htmlOutput = '';            if (isSavingsSquadMode) {              htmlOutput += `              \x3Cdiv class="hawk-deal-widget-container tg-df-mobile-only" data-collapsible="true">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''} style="margin-bottom: 10px;">` : ''}                \x3Cdiv class="hawk-deal-widget-wrap">                  \x3Cdiv class="hawk-deal-widget-image-container">                    \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" rel="sponsored noopener" target="_blank" class="hawk-affiliate-link-deal-widget" ${dataAttr}>                      \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="hawk-lazy-image-deal-widget" loading="lazy" width="140" height="160" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                    ${_a}                  ${_div}                  \x3Cdiv class="hawk-deal-widget-text-cta-container">                    \x3Cdiv class="hawk-deal-widget-text-body-container">                      \x3Cdiv class="hawk-deal-widget-text-body-main">                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          ${deal.isCheckPrice ? `                            \x3Cspan class="hawk-deal-widget-title-product-title">${this.escapeHTML(deal.title)}${_span}                          ` : `                            \x3Cspan class="hawk-deal-widget-title-product-title">${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_span}                          `}                        ${_a}                        ${!deal.isCheckPrice && deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan class="hawk-deal-widget-title-was-price">was ${currencySym}${escapedMsrp}${_span}                          ${_a}                        ` : ''}                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          \x3Cspan class="hawk-deal-widget-title-retailer-price">                            ${!deal.isCheckPrice ? `                              \x3Cspan class="hawk-deal-widget-title-price">now ${formattedPrice}${_span}                              \x3Cspan class="hawk-deal-widget-title-retailer"> at ${this.escapeHTML(deal.merchant)}${_span}                            ` : `                              \x3Cspan class="hawk-deal-widget-title-price">See price at ${this.escapeHTML(deal.merchant)}${_span}                            `}                          ${_span}                        ${_a}                        ${deal.description ? `\x3Cdiv class="hawk-deal-widget-text-body-description tg-df-card-desc-container" style="margin-bottom: 12px; position: relative;">                          \x3Cp class="tg-df-card-desc-content" style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 0; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;">${this.escapeHTML(deal.description)}${_p}                          \x3Cbutton type="button" class="tg-df-card-desc-btn" style="display: none; appearance: none; border: none; color: #000000; font-size: 11px; font-weight: 700; text-transform: uppercase; cursor: pointer; font-family: inherit; position: absolute; bottom: 2px; right: 0; background: linear-gradient(to right, transparent, #fff 20%, #fff); padding: 0 0 0 16px;" onclick="                            var c = this.parentNode;                            if (this.dataset.expanded === 'true') {                              var pd = (c.tagName === 'P') ? c : this.previousElementSibling;                              if (c.tagName === 'P') { c.parentNode.appendChild(this); pd = c; }                              pd.style.display = '-webkit-box';                              pd.style.webkitLineClamp = '3';                              this.textContent = 'READ MORE';                              this.style.position = 'absolute';                              this.style.background = 'linear-gradient(to right, transparent, #fff 20%, #fff)';                              this.style.paddingLeft = '16px';                              this.dataset.expanded = 'false';                            } else {                              var pd = this.previousElementSibling;                              pd.style.display = 'inline';                              pd.style.webkitLineClamp = 'unset';                              this.textContent = 'READ LESS';                              this.style.position = 'static';                              this.style.background = 'transparent';                              this.style.paddingLeft = '4px';                              this.dataset.expanded = 'true';                              pd.appendChild(this);                            }                          ">READ MORE${_button}                        \x3C/div>` : ''}                      ${_div}                    ${_div}                    ${deal.authorName ? `                      \x3Cdiv class="tg-df-author-line-mobile" style="padding: 0 0 12px 0; background: transparent;">                         \x3Cdiv style="display: flex; align-items: center; gap: 12px;">                            ${deal.authorImage ? `\x3Cimg src="${this.escapeHTML(deal.authorImage)}" alt="${this.escapeHTML(deal.authorName)}" class="tg-df-author-img" width="40" height="40" style="border-radius: 50%; object-fit: cover; flex-shrink: 0; aspect-ratio: 1 / 1; min-width: 40px; min-height: 40px;">` : ''}                            \x3Cdiv style="display: flex; flex-direction: column;">                               \x3Cdiv style="font-size: 10px; color: var(--tg-df-text-muted); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 2px; font-weight: 600;">\x3Cspan style="color: #FF6600;">${this.escapeHTML(deal.merchant)}${_span} deal recommended by:${_div}                               \x3Cdiv style="font-size: 11px; color: var(--tg-df-text); line-height: 1.3;">                                  \x3Cstrong>\x3Ca href="https://www.tomsguide.com/${this.escapeHTML(deal.documentUrl || '').replace(/^\/+/, '')}" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit; border-bottom: 1px dotted var(--tg-df-text-muted);">${this.escapeHTML(deal.authorName)}${_a}${_strong}                                  ${deal.authorRole && !['null', 'nul', 'undefined'].includes(String(deal.authorRole).toLowerCase()) ? ` • ${this.escapeHTML(deal.authorRole)}` : ''}                                  ${deal.modifiedDate ? `\x3Cdiv style="color: var(--tg-df-text-muted); margin-top: 2px;">${getTimeAgo(deal.modifiedDate)}${_div}` : ''}                               ${_div}                            ${_div}                         ${_div}                      ${_div}                    ` : ''}                    \x3Cdiv class="hawk-deal-widget-footer">                      \x3Cdiv class="hawk-deal-widget-button-wrapper">                        \x3Cdiv class="hawk-deal-widget-preferred-partner-wrapper">                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-deal-button" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan>View Deal${_span}                          ${_a}                        ${_div}                      ${_div}                    ${_div}                  ${_div}                ${_div}              ${_div}              `;            }            htmlOutput += `              \x3Cdiv class="tg-df-card ${isSavingsSquadMode ? 'tg-df-desktop-only' : ''}">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''}>` : ''}                \x3Cdiv class="tg-df-card-image-box">                  ${discountBadgeHtml}                  \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" style="display: flex; align-items: center; justify-content: center; width: 100%; height: 100%;">                    \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="tg-df-card-image" loading="lazy" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                  ${_a}                  \x3Cdiv class="tg-df-card-merchant-wrapper" style="position: absolute; bottom: 0; right: 0; background: transparent; padding: 8px 12px; z-index: 10;">                     \x3Cspan class="tg-df-card-merchant-pill" style="text-align: right; margin-bottom: 0;" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                ${_div}                \x3Cdiv class="tg-df-card-body">                  ${starHtml}                  ${badgesHtml}                  \x3Ch3 class="tg-df-card-title tg-df-custom-savings-squad-title" title="${this.escapeHTML(deal.title)}">                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" disable-tracking="true" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit;">                      ${isSavingsSquadMode                         ? (deal.isCheckPrice                             ? (deal.title && deal.title.includes(':')                                 ? `\x3Cstrong>${this.escapeHTML(deal.title.substring(0, deal.title.indexOf(':') + 1))}${_strong}\x3Cspan style="color: #1f69ff; font-weight: normal;">${this.escapeHTML(deal.title.substring(deal.title.indexOf(':') + 1))}${_span}`                                : this.escapeHTML(deal.title)                              )                             : `\x3Cstrong>${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_strong} ${deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `\x3Cspan style="color: #d0021b; text-decoration: line-through; font-weight: normal; margin-right: 4px;">was ${currencySym}${escapedMsrp}${_span} ` : ''}\x3Cspan style="color: #1f69ff; font-weight: normal;">now ${formattedPrice} at ${this.escapeHTML(deal.merchant)}${_span}`                          )                        : this.escapeHTML(deal.title)                      }                    ${_a}                  ${_h3}                  ${deal.description ? `\x3Cdiv class="tg-df-card-desc-container" style="margin-bottom: 12px; position: relative;">                    \x3Cp class="tg-df-card-desc-content" style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 0; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;">${this.escapeHTML(deal.description)}${_p}                    \x3Cbutton type="button" class="tg-df-card-desc-btn" style="display: none; appearance: none; border: none; color: #000000; font-size: 11px; font-weight: 700; text-transform: uppercase; cursor: pointer; font-family: inherit; position: absolute; bottom: 2px; right: 0; background: linear-gradient(to right, transparent, #fff 20%, #fff); padding: 0 0 0 16px;" onclick="                      var c = this.parentNode;                      if (this.dataset.expanded === 'true') {                        var pd = (c.tagName === 'P') ? c : this.previousElementSibling;                        if (c.tagName === 'P') { c.parentNode.appendChild(this); pd = c; }                        pd.style.display = '-webkit-box';                        pd.style.webkitLineClamp = '3';                        this.textContent = 'READ MORE';                        this.style.position = 'absolute';                        this.style.background = 'linear-gradient(to right, transparent, #fff 20%, #fff)';                        this.style.paddingLeft = '16px';                        this.dataset.expanded = 'false';                      } else {                        var pd = this.previousElementSibling;                        pd.style.display = 'inline';                        pd.style.webkitLineClamp = 'unset';                        this.textContent = 'READ LESS';                        this.style.position = 'static';                        this.style.background = 'transparent';                        this.style.paddingLeft = '4px';                        this.dataset.expanded = 'true';                        pd.appendChild(this);                      }                    ">READ MORE${_button}                  \x3C/div>` : ''}                  \x3Cdiv class="tg-df-card-footer">                    ${deal.authorName ? `                    \x3Cdiv class="tg-df-author-line-desktop" style="padding: 0 0 ${isSavingsSquadMode ? 0 : 12}px 0;">                       \x3Cdiv style="display: flex; align-items: center; gap: 10px;">                          ${deal.authorImage ? `\x3Cimg src="${this.escapeHTML(deal.authorImage)}" alt="${this.escapeHTML(deal.authorName)}" class="tg-df-author-img" width="36" height="36" style="border-radius: 50%; object-fit: cover; flex-shrink: 0; aspect-ratio: 1 / 1; min-width: 36px; min-height: 36px;">` : ''}                          \x3Cdiv style="display: flex; flex-direction: column;">                             \x3Cdiv style="font-size: 10px; color: var(--tg-df-text-muted); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 2px; font-weight: 600;">Recommended by:${_div}                             \x3Cdiv style="font-size: 11px; color: var(--tg-df-text); line-height: 1.2;">                                \x3Cstrong>\x3Ca href="https://www.tomsguide.com/${this.escapeHTML(deal.documentUrl || '').replace(/^\/+/, '')}" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit; border-bottom: 1px dotted var(--tg-df-text-muted);">${this.escapeHTML(deal.authorName)}${_a}${_strong}                                ${deal.authorRole && !['null', 'nul', 'undefined'].includes(String(deal.authorRole).toLowerCase()) ? ` • ${this.escapeHTML(deal.authorRole)}` : ''}                                ${deal.modifiedDate ? `\x3Cspan style="color: var(--tg-df-text-muted);"> • ${getTimeAgo(deal.modifiedDate)}${_span}` : ''}                             ${_div}                          ${_div}                       ${_div}                    ${_div}                    ` : ''}                    ${priceGroupHtml}                  ${_div}                ${_div}                \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" class="tg-df-card-cta" style="text-decoration: none; border-radius: 0;">${ctaText}${_a}              ${_div}            `;                        return htmlOutput;            } catch (e) {               console.log("Error rendering deal in map for index", index, typeof deal === 'object' ? JSON.stringify(deal) : deal, "MSG:", e.message);               return '';            }          }).join('');                    if (displayDeals.length > this.displayLimit) {            dealsHtml += `              \x3Cdiv style="width: 100%; display: flex; justify-content: center; margin-top: 16px; grid-column: 1 / -1;">                \x3Cbutton type="button" class="tg-df-tag-outline tg-df-load-more" style="padding: 8px 24px; border-radius: 100px; font-weight: 600; font-size: 14px; cursor: pointer;">Load More${_button}              ${_div}            `;          }                    this.grid.innerHTML = dealsHtml;          // Inject JSON-LD          try {            let targetNode = this.hostContainer || document.head;            let jsonLdScript = targetNode.querySelector('#tg-df-json-ld-' + this.widgetId);            if (!jsonLdScript) {                jsonLdScript = document.createElement('script');                jsonLdScript.type = 'application/ld+json';                jsonLdScript.id = 'tg-df-json-ld-' + this.widgetId;                targetNode.appendChild(jsonLdScript);            }            const jsonLdData = {              "@context": "https://schema.org",              "@type": "ItemList",              "itemListElement": displayDeals.slice(0, this.displayLimit).map((deal, index) => {                 let isoCurrency = "USD";                 if (deal.currency === '£') isoCurrency = "GBP";                 else if (deal.currency === '€') isoCurrency = "EUR";                 else if (deal.currency === 'A$') isoCurrency = "AUD";                 else if (deal.currency === 'CA$') isoCurrency = "CAD";                 const areaCode = typeof this.getAreaCode === 'function' ? this.getAreaCode() : 'US';                 const revenueId = typeof generateRevenueId === 'function' ? generateRevenueId(deal.url, deal.title, deal.merchant, null) : '';                 const rewrittenLink = typeof rewriteAffiliateLink === 'function' ? rewriteAffiliateLink(deal.url, areaCode, revenueId) : deal.url;                 return {                   "@type": "ListItem",                   "position": index + 1,                   "item": {                     "@type": "Product",                     "name": deal.title,                     "image": deal.image || "",                     "description": deal.description || "",                     "brand": {                       "@type": "Brand",                       "name": deal.brand || ""                     },                     "offers": {                       "@type": "Offer",                       "priceCurrency": isoCurrency,                       "price": deal.rawPrice || 0,                       "url": rewrittenLink,                       "seller": {                         "@type": "Organization",                         "name": deal.merchant || ""                       }                     }                   }                 };              }).filter(item => item.item.name)            };            jsonLdScript.textContent = JSON.stringify(jsonLdData);          } catch(e) { console.warn("JSON-LD generation failed", e); }          setTimeout(() => {            const contents = this.root.querySelectorAll('.tg-df-card-desc-content');            contents.forEach(p => {              if (p.scrollHeight > p.clientHeight || p.scrollHeight > 60) {                if (p.nextElementSibling) {                  p.nextElementSibling.style.display = 'block';                }              }            });                        // Allow hawklinks.js to discover and rewrite our widget links             // by appending the .article-body class and manually triggering processArticle.            let container = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (container && !container.classList.contains('article-body')) {               container.classList.add('article-body');            }            if (this.grid && !this.grid.classList.contains('article-body')) this.grid.classList.add('article-body');            document.dispatchEvent(new CustomEvent('processArticle', { detail: { element: this.root } }));          }, 50);          const loadMoreBtn = this.grid.querySelector('.tg-df-load-more');          if (loadMoreBtn) {            loadMoreBtn.addEventListener('click', () => {              if (typeof trackElementInteraction === 'function') {                trackElementInteraction({ id: 'load-more', name: 'Load more', label: 'Load More Results' });              }              this.displayLimit += this.getRowsLimit();              this.render();            });          }                      this.bindCouponButtons();            this.checkAndUpdateCoupons();          } catch(e) {            console.warn("Widget render error", e);          }        }                async checkAndUpdateCoupons() {          const wrappers = Array.from(this.root.querySelectorAll('.tg-df-coupon-wrapper'));          if (wrappers.length === 0) return;                    const merchants = [...new Set(wrappers.map(w => w.getAttribute('data-merchant')).filter(Boolean))];          if (merchants.length === 0) return;          const couponResultsMap = await this.checkMerchantsCouponsBulk(merchants);                    for (const merchant of merchants) {            const hasCoupons = !!couponResultsMap[merchant];            const merchantWrappers = wrappers.filter(w => w.getAttribute('data-merchant') === merchant);            merchantWrappers.forEach(wrapper => {              const spinner = wrapper.querySelector('.tg-df-coupon-spinner');              const btn = wrapper.querySelector('.tg-df-tag-coupons');                            if (spinner) spinner.style.display = 'none';                            if (hasCoupons && btn) {                btn.style.display = 'inline-flex';              } else if (!hasCoupons) {                wrapper.style.display = 'none';              }            });          }        }        updateFloatingCopyBar() {          if (!this.editorBar || !this.editorSelectedCount) return;          if (this.editorMode && this.selectedDeals.size > 0) {            this.editorBar.style.display = 'flex';            this.editorSelectedCount.innerText = this.selectedDeals.size;          } else {            this.editorBar.style.display = 'none';          }        }        async copySelectedDealsToCMS() {           function htmlToSlate(htmlString) {              if (!htmlString) return [{ type: 'paragraph', children: [{ text: '' }] }];              let doc;              if (typeof window !== 'undefined' && window.DOMParser) {                 doc = new DOMParser().parseFromString(htmlString, 'text/html');              } else {                 doc = document.implementation.createHTMLDocument('');                 doc.body.innerHTML = htmlString;              }                            function parseNode(node, marks = {}) {                  if (node.nodeType === 3) {                      const text = node.textContent;                      if (!text) return null;                      return { text: text, ...marks };                  }                  if (node.nodeType === 1) {                      const tagName = node.tagName.toLowerCase();                      if (tagName === 'br') {                          return { type: 'line-break', children: [{ text: '' }] };                      }                      if (tagName === 'p') {                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return { type: 'paragraph', children };                      }                      if (tagName === 'strong' || tagName === 'b') {                          const newMarks = { ...marks, bold: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'em' || tagName === 'i') {                          const newMarks = { ...marks, italic: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'a') {                          const href = node.getAttribute('href') || '';                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return {                              type: 'link',                              url: href,                              isNoFollow: (node.getAttribute('rel') || '').includes('nofollow'),                              isSponsored: (node.getAttribute('rel') || '').includes('sponsored'),                              isOpenNewTab: node.getAttribute('target') === '_blank',                              isPreventDataRewrite: false,                              children: children                          };                      }                      return Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                  }                  return null;              }                            let blocksArray = [];              let currentParagraphChildren = [];              function flushParagraph() {                  if (currentParagraphChildren.length > 0) {                      blocksArray.push({ type: 'paragraph', children: currentParagraphChildren });                      currentParagraphChildren = [];                  }              }              Array.from(doc.body.childNodes).forEach(node => {                  const parsed = parseNode(node, {});                  const parsedItems = Array.isArray(parsed) ? parsed : (parsed ? [parsed] : []);                  parsedItems.forEach(item => {                      if (item.type === 'paragraph') {                          flushParagraph();                          blocksArray.push(item);                      } else {                          currentParagraphChildren.push(item);                      }                  });              });              flushParagraph();              if (blocksArray.length === 0) {                  blocksArray = [{ type: 'paragraph', children: [{ text: '' }] }];              }              return blocksArray;           }           const blocks = [];                      this.editorCopyBtn.innerHTML = '\x3Cspan class="tg-df-coupon-spinner" style="display:inline-block; margin-right:8px; border-top-color:#fff;">' + '<' + '/span> Copying...';           for (const deal of Array.from(this.selectedDeals.values())) {              const url = deal.url;              const merchant = deal.merchant;              const title = deal.title;              const image = deal.image;              const currentPrice = deal.currency + deal.rawPrice;              const wasPrice = deal.hasWasPrice && deal.rawMsrp > deal.rawPrice ? deal.currency + deal.rawMsrp : '';                            let couponsChildren = [];              try {                  const area = this.getAreaCode();                  const apiUrl = new URL('https://search-api.fie.future.net.uk/widget.php');                  apiUrl.searchParams.append('model_name', 'Everything');                  apiUrl.searchParams.append('language', 'en-GB');                  apiUrl.searchParams.append('area', area);                  apiUrl.searchParams.append('combine_product_types', '1');                  apiUrl.searchParams.append('filter_merchant_name', merchant);                  apiUrl.searchParams.append('all_filters', 'false');                  apiUrl.searchParams.append('exclude_unlabelled', 'false');                  apiUrl.searchParams.append('include_specs', 'false');                  apiUrl.searchParams.append('sort', 'voucher');                  apiUrl.searchParams.append('distinct_merchants', 'natural');                  apiUrl.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');                  apiUrl.searchParams.append('rows', '3');                  apiUrl.searchParams.append('origin', 'widgets-clientside');                                    let res; try { res = await fetch(apiUrl.toString()); } catch (e) { return; }                  if (res.ok) {                      const data = await res.json();                      let offers = [];                      if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {                        offers = data.widget.data.offers;                      } else if (data && data.data && Array.isArray(data.data.offers)) {                        offers = data.data.offers;                      }                                            if (offers.length > 0) {                          couponsChildren.push({ text: "Also check out these coupons: ", bold: true });                          offers.slice(0, 3).forEach((offer, idx) => {                              const actualOffer = offer.offer || offer;                              const offerName = actualOffer.name || actualOffer.title || offer.model_name || offer.title || offer.name || 'Coupon';                              const linkUrl = actualOffer.link || actualOffer.url || actualOffer.offer_link || '#';                              couponsChildren.push({ type: "line-break", children: [{ text: "" }] });                              couponsChildren.push({ text: "🎟️ " });                              couponsChildren.push({                                  type: "link",                                  url: linkUrl,                                  isNoFollow: true,                                  isSponsored: false,                                  isOpenNewTab: true,                                  isPreventDataRewrite: false,                                  children: [{ text: offerName, bold: true }]                              });                          });                      }                  }              } catch (err) {                  console.warn('Failed to fetch coupons for', merchant, err);              }              let descriptionValue = [];              if (deal.text) {                 descriptionValue = htmlToSlate(deal.text);              } else {                 const dealDescriptions = [                   `Don't miss out on this fantastic deal for the ${title}. It is currently available at ${merchant} for a highly competitive price.`,                   `We've spotted an excellent price drop on the ${title}. Grab it now at ${merchant} before it's gone.`,                   `The ${title} is currently seeing a generous discount over at ${merchant}. This is a perfect time to buy if you've been holding out.`,                   `If you're in the market for the ${title}, ${merchant} has just the deal for you.`,                   `Score the ${title} for less at ${merchant} right now. This is a rare chance to save big.`,                   `Upgrade your setup with the ${title}, now available at a stellar price via ${merchant}.`                 ];                 const randomDescription = dealDescriptions[Math.floor(Math.random() * dealDescriptions.length)];                 descriptionValue = [                    { type: "paragraph", children: [{ text: randomDescription }] }                 ];              }                            if (couponsChildren.length > 0) {                 let lastBlock = descriptionValue[descriptionValue.length - 1];                 if (lastBlock && lastBlock.type === 'paragraph') {                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ text: "Also check out these coupons: ", bold: true });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children = lastBlock.children.concat(couponsChildren);                 } else {                     descriptionValue.push({                         type: "paragraph",                         children: [                             { type: "line-break", children: [{ text: "" }] },                             { type: "line-break", children: [{ text: "" }] },                             { text: "Also check out these coupons: ", bold: true },                             { type: "line-break", children: [{ text: "" }] },                             ...couponsChildren                         ]                     });                 }              }              function normalizeCurrencyToISO(symbol) {                const map = { '£': 'GBP', '$': 'USD', 'A$': 'AUD', 'CA$': 'CAD', '€': 'EUR' };                return map[symbol] || symbol;              }              const isoCurrency = normalizeCurrencyToISO(deal.currency);              blocks.push({                 id: (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'cms-' + Date.now() + Math.random(),                 blockTypeName: "deal",                 excludeFrom: [],                 collapsible: false,                 props: {                    description: {                       value: descriptionValue,                       touched: false,                       validationMessage: ""                    },                    image: {                       value: {                          credit: [{ type: "paragraph", children: [{ text: merchant }] }],                          dateCreated: Date.now(),                          dateModified: Date.now(),                          distribution: [],                          fileSize: 0,                          height: 1000,                          id: deal.id,                          imageRights: "",                          src: image,                          name: title + ".jpg",                          tags: [],                          width: 1000                       },                       touched: false,                       validationMessage: ""                    },                    showDealButton: { value: true, touched: false, validationMessage: "" },                    isPreferredPartner: { value: false, touched: false, validationMessage: "" },                    linkHref: { value: url, touched: false, validationMessage: "" },                    linkLabel: { value: "", touched: false, validationMessage: "" },                    linkIsNoFollow: { value: true, touched: false, validationMessage: "" },                    linkIsSponsored: { value: false, touched: false, validationMessage: "" },                    linkIsOpenNewWindow: { value: true, touched: false, validationMessage: "" },                    customPromoFlags: { value: [], touched: false, validationMessage: "" },                    showStarDeal: { value: false, touched: false, validationMessage: "" },                    savingType: { value: "none", touched: false, validationMessage: "" },                    starDealPromoFlag: { value: "", touched: false, validationMessage: "" },                    showEditorsChoice: { value: false, touched: false, validationMessage: "" },                    editorsChoiceTitle: { value: "", touched: false, validationMessage: "" },                    hawkPriceCurrency: { value: { value: isoCurrency, label: isoCurrency }, touched: false, validationMessage: "" },                    hawkPrice: { value: deal.hasWasPrice ? String(deal.rawMsrp) : String(deal.rawPrice), touched: false, validationMessage: "" },                    hawkSalePrice: { value: String(deal.rawPrice), touched: false, validationMessage: "" },                    lastCheckedPriceDate: { value: "", touched: false, validationMessage: "" },                    hawkModel: { touched: false, validationMessage: "" },                    productId: { value: "", touched: false, validationMessage: "" },                    voucherId: { value: "", touched: false, validationMessage: "" },                    brand: { value: deal.brand || merchant, touched: false, validationMessage: "" },                    productName: { value: title, touched: false, validationMessage: "" },                    label: { value: "", touched: false, validationMessage: "" },                    retailer: { value: merchant, touched: false, validationMessage: "" },                    priceCheckError: false                 },                 failedFetchError: ""              });           }           const payload = {              type: "articleBuilderPages",              data: blocks           };           const jsonStr = JSON.stringify(payload);                      if (navigator.clipboard && navigator.clipboard.writeText) {              navigator.clipboard.writeText(jsonStr).then(() => {                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              }).catch(err => {                 console.warn('Failed to copy text: ', err);                 alert('Failed to copy deals to clipboard. See console.');              });           } else {              // Fallback              const textArea = document.createElement("textarea");              textArea.value = jsonStr;              document.body.appendChild(textArea);              textArea.focus();              textArea.select();              try {                 document.execCommand('copy');                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              } catch (err) {                 console.warn('Fallback: Oops, unable to copy', err);                 alert('Fallback: Failed to copy deals to clipboard.');              }              document.body.removeChild(textArea);           }        }      }      // Initialize the Widget      if (document.readyState === 'loading') {        document.addEventListener('DOMContentLoaded', () => new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer }));      } else {        new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer });      }    })();  </script></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I tested the Samsung Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra for 2 weeks — here’s the one I’d buy  ]]></title>
                                                                                                <dc:content><![CDATA[ <p>What’s in a name? In the case of the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Galaxy Z Fold 8 Ultra</a>, the “Ultra” part is supposed to signal to buyers that Samsung’s flagship foldable is a higher tier of phone. And in many ways it is, from the super bright display with less of a crease to the silicon-carbon battery (a first for Samsung phones).</p><p>But at $2,099, is the Fold 8 Ultra truly an “Ultra” phone? I’ve been testing it for a couple weeks, and while there’s plenty of great upgrades, there are some ways the Fold 8 Ultra falls short of the $1,299 <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review">Galaxy S26 Ultra</a>. After testing these two phones side by side, including taking lots of photos, here’s the one I'd buy.</p><h3 class="article-body__section" id="section-galaxy-fold-8-ultra-vs-galaxy-s26-ultra-specs-compared"><span>Galaxy Fold 8 Ultra vs Galaxy S26 Ultra: Specs Compared</span></h3><div ><table><tbody><tr><td class="firstcol " ><p><strong></strong></p></td><td  ><p><strong>Galaxy S26 Ultra</strong></p></td><td  ><p><strong>Galaxy Z Fold 8 Ultra</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Starting Price</strong></p></td><td  ><p><strong>$1,299</strong> (256GB)</p></td><td  ><p><strong>$2,099</strong> (256GB)</p></td></tr><tr><td class="firstcol " ><p><strong>Form Factor</strong></p></td><td  ><p>Traditional Slab / Glass-and-Metal Sandwich</p></td><td  ><p>Dual-screen Foldable</p></td></tr><tr><td class="firstcol " ><p><strong>Main Display</strong></p></td><td  ><p><strong>6.9-inch</strong> Dynamic LTPO AMOLED 2X</p><p>• 1440 x 3120 px (QHD+)</p><p>• 120Hz adaptive refresh rate</p><p>• Privacy Display</p></td><td  ><p><strong>8.0-inch</strong> Dynamic LTPO AMOLED 2X (Inner)</p><p>• 2256 x 2504 px</p><p>• 120Hz adaptive refresh rate</p><p>• Anti-reflective coating</p></td></tr><tr><td class="firstcol " ><p><strong>Cover Display</strong></p></td><td  ><p>N/A</p></td><td  ><p><strong>6.5-inch</strong> Dynamic LTPO AMOLED 2X</p><p>• 1080 x 2520 px, 120Hz</p></td></tr><tr><td class="firstcol " ><p><strong>Dimensions</strong></p></td><td  ><p>163.6 x 78.1 x 7.9 mm</p></td><td  ><p><strong>Folded:</strong> 158.4 x 72.8 x 8.9 mm</p><p><strong>Unfolded:</strong> 158.4 x 143.2 x 4.1 mm</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>214 g</p></td><td  ><p>215 g</p></td></tr><tr><td class="firstcol " ><p><strong>RAM Options</strong></p></td><td  ><p>12 GB (256GB/512GB) / 16 GB (1TB)</p></td><td  ><p>12 GB (256GB/512GB) / 16 GB (1TB)</p></td></tr><tr><td class="firstcol " ><p><strong>Storage Options</strong></p></td><td  ><p>256 GB / 512 GB / 1 TB (UFS 4.0)</p></td><td  ><p>256 GB / 512 GB / 1 TB</p></td></tr><tr><td class="firstcol " ><p><strong>Processor</strong></p></td><td  ><p>Qualcomm Snapdragon 8 Elite Gen 5</p></td><td  ><p>Qualcomm Snapdragon 8 Elite Gen 5</p></td></tr><tr><td class="firstcol " ><p><strong>Durability Rating</strong></p></td><td  ><p><strong>IP68</strong> (Dust-tight + 1.5m water)</p></td><td  ><p><strong>IP48</strong> (Particle protection >1mm + 1m water)</p></td></tr><tr><td class="firstcol " ><p><strong>S Pen Support</strong></p></td><td  ><p><strong>Yes</strong> (Built-in slot)</p></td><td  ><p><strong>No</strong> (Not supported)</p></td></tr><tr><td class="firstcol " ><p><strong>Rear Cameras</strong></p></td><td  ><p>• 200 MP Main (OIS)</p><p>• 50 MP Ultrawide</p><p>• 10 MP 3x Telephoto</p><p>• 50 MP 5x Periscope Zoom</p></td><td  ><p>• 200 MP Main (OIS)</p><p>• 50 MP Ultrawide</p><p>• 10 MP 3x Telephoto</p></td></tr><tr><td class="firstcol " ><p><strong>Zoom Range</strong></p></td><td  ><p>Up to 100x Space Zoom</p></td><td  ><p>Up to 30x Space Zoom</p></td></tr><tr><td class="firstcol " ><p><strong>Selfie Cameras</strong></p></td><td  ><p>12 MP (Single)</p></td><td  ><p>10 MP Cover Screen + 10 MP Inner Display</p></td></tr><tr><td class="firstcol " ><p><strong>Battery Capacity</strong></p></td><td  ><p>5,000 mAh</p></td><td  ><p>5,000 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Charging Speeds</strong></p></td><td  ><p>60W Wired / 25W Wireless / 4.5W Reverse</p></td><td  ><p>45W Wired / 20W Wireless / 4.5W Reverse</p></td></tr><tr><td class="firstcol " ><p><strong>Operating System</strong></p></td><td  ><p>Android 16 (One UI 8.5)</p></td><td  ><p>Android 17 (One UI 9.0)</p></td></tr><tr><td class="firstcol " ><p><strong>Color Options</strong></p></td><td  ><p>Titanium Gray, Titanium Black, Titanium Silver, Titanium Violet</p></td><td  ><p>Graphite, Cream, Violet Shadow, Green Shadow (Samsung Online Exclusive)</p></td></tr></tbody></table></div><div class="product"><a data-dimension112="e44b0efe-91d9-11f1-8044-8165f725d951" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" href="https://www.samsung.com/us/smartphones/galaxy-z-fold8-ultra/buy/galaxy-z-fold8-ultra-256gb-unlocked-sku-sm-f976uzvaxaa/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:600px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="XUkFwYXYpdYjL4TYYivxEg" name="Samsung Galaxy Z Fold 8 Ultra deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/XUkFwYXYpdYjL4TYYivxEg-1920-80.jpg" mos="" align="middle" fullscreen="" width="600" height="600" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 Ultra: </strong><a href="https://www.samsung.com/us/smartphones/galaxy-z-fold8-ultra/buy/galaxy-z-fold8-ultra-256gb-unlocked-sku-sm-f976uzvaxaa/" target="_blank" rel="nofollow" data-dimension112="e44b0efe-91d9-11f1-8044-8165f725d951" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" data-dimension25=""><strong>up to $1,200 off w/ trade-in @ Samsung</strong></a><br />The Galaxy Z Fold 8 Ultra features an 8-inch main display, 6.5-inch cover display and triple camera setup that includes a 200MP main, 50MP ultra-wide, and 10MP 3x telephoto lens. In our <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Galaxy Z Fold 8 Ultra review</a>, we said its greatly reduced crease, upgraded silicon carbon battery, faster charging, and upgraded ultrawide camera make it a great upgrade.<a class="view-deal button" href="https://www.samsung.com/us/smartphones/galaxy-z-fold8-ultra/buy/galaxy-z-fold8-ultra-256gb-unlocked-sku-sm-f976uzvaxaa/" target="_blank" rel="nofollow" data-dimension112="e44b0efe-91d9-11f1-8044-8165f725d951" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="62e34dc6-91da-11f1-bb9e-2bbcd957c9c7" data-action="Deal Block" data-label="Galaxy S26 Ultra" data-dimension48="Galaxy S26 Ultra" data-dimension25="$1049" href="https://www.bestbuy.com/product/samsung-galaxy-s26-ultra-256gb-unlocked-cobalt-violet/JJGRF36YJC" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1475px;"><p class="vanilla-image-block" style="padding-top:101.69%;"><img id="pTo28Fx9tATQs3gfbYBFL5" name="Galaxy S26 Ultra deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/pTo28Fx9tATQs3gfbYBFL5-1920-80.jpg" mos="" align="middle" fullscreen="" width="1475" height="1500" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p>The Galaxy S26 Ultra features a 6.9-inch 3120 x 1440 AMOLED display w/ 120Hz refresh, Snapdragon 8 Elite Gen 5 CPU, 12GB of RAM, and 256GB of storage. You also get a 200MP main (f/1.4), 50MP ultra wide (f/1.9), 10MP (f/2.4) telephoto w/3x optical zoom, and a 50MP (f/2.9) telephoto w/5x optical zoom. There's also a 5,000 mAh battery. In our <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review" data-dimension112="62e34dc6-91da-11f1-bb9e-2bbcd957c9c7" data-action="Deal Block" data-label="Galaxy S26 Ultra" data-dimension48="Galaxy S26 Ultra" data-dimension25="$1049">Galaxy S26 Ultra review</a>, we said the Editor's Choice phone is super smart, sleek and fast. <a class="view-deal button" href="https://www.bestbuy.com/product/samsung-galaxy-s26-ultra-256gb-unlocked-cobalt-violet/JJGRF36YJC" target="_blank" rel="nofollow" data-dimension112="62e34dc6-91da-11f1-bb9e-2bbcd957c9c7" data-action="Deal Block" data-label="Galaxy S26 Ultra" data-dimension48="Galaxy S26 Ultra" data-dimension25="$1049">View Deal</a></p></div><h3 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-design-and-durability"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Design and durability</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2801px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="wVVitwh992iiUo4GDVZM7F" name="Galaxy Z Fold 8 Ultra review-22" alt="samsung galaxy z fold 8 ultra review images" src="https://cdn.mos.cms.futurecdn.net/wVVitwh992iiUo4GDVZM7F-1920-80.jpg" mos="" align="middle" fullscreen="" width="2801" height="1576" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">Galaxy Z Fold 8 Ultra </span><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Galaxy Z Fold 8 Ultra is remarkably light and compact for a phone that unfurls to an 8-inch display. It weighs just 7.58 ounces, which is barely heavier than the Galaxy S26 Ultra that limits you to a 6.9-inch screen.</p><p>In addition, the Fold 8 Ultra is only 4.1mm thin when it’s opened, which is even thinner than the Fold 7. Still, when closed the Galaxy S26 Ultra is a millimeter thinner, which is expected for a slab phone.</p><div ><table><caption>Galaxy Z Fold 8 Ultra vs. S26 Ultra: Size and weight</caption><tbody><tr><td class="firstcol " ><p><strong></strong></p></td><td  ><p><strong>State</strong></p></td><td  ><p><strong>Dimensions (H × W × D)</strong></p></td><td  ><p><strong>Weight</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy Z Fold 8 Ultra</strong></p></td><td  ><p><strong>Unfolded (Open)</strong></p></td><td  ><p>6.24 × 5.64 × 0.16 in (158.4 × 143.2 × 4.1 mm)</p></td><td  ><p>7.58 oz (215 g)</p></td></tr><tr><td class="firstcol empty" ></td><td  ><p><strong>Folded (Closed)</strong></p></td><td  ><p>6.24 × 2.87 × 0.35 in (158.4 × 72.8 × 8.9 mm)</p></td><td  ></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy S26 Ultra</strong></p></td><td  ><p><strong>Standard</strong></p></td><td  ><p>6.44 × 3.07 × 0.31 in (163.6 × 78.1 × 7.9 mm)</p></td><td  ><p>7.55 oz (214 g)</p></td></tr></tbody></table></div><p>The Fold 8 Ultra may be thinner, but it’s definitely not ready for a day at the beach. This foldable is once again IP48 rated, which means it can withstand being submerged in water for 30 minutes — but it is not dust resistant.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3733px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="YpCNYCr6ACAQ2JPhGn3KuK" name="Galaxy S26 Ultra review-LIST2" alt="Samsung Galaxy S26 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/YpCNYCr6ACAQ2JPhGn3KuK-1920-80.jpg" mos="" align="middle" fullscreen="" width="3733" height="2100" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>However, the Galaxy S26 Ultra carries an IP68 rating, which means the phone is dust tight. It’s also worth mentioning that other foldables are rated IP68, including the Motorola Razr Fold and Google Pixel 10 Pro Fold.</p><h3 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-displays"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Displays</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3462px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="s4PcUkqvHoinhjuVyNZ6gW" name="Samsung Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra-2" alt="Samsung Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra" src="https://cdn.mos.cms.futurecdn.net/s4PcUkqvHoinhjuVyNZ6gW-1920-80.jpg" mos="" align="middle" fullscreen="" width="3462" height="1947" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The Galaxy Z Fold 8 packs dual screens: a 6.5-inch cover display that’s fine for running apps (if a bit cramped for typing) and a huge 8-inch main display. And the S26 Ultra has a 6.9-inch panel.</p><p>The main reason to get the Fold 8 Ultra is the bigger main display. With 8 inches at your disposal, you get a more immersive video watching experience, as well as the ability to run apps side by side.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="iGEKAZXpueuG4YxyKtptrR" name="Fold 8 Ultra vs S26 Ultra displays" alt="Samsung Galaxy Z Fold 8 Ultra and Galaxy S26 Ultra in hand" src="https://cdn.mos.cms.futurecdn.net/iGEKAZXpueuG4YxyKtptrR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>What you don’t get is the S26 Ultra’s Privacy Display, which narrows the viewing angle for any snoops around you and can even black out just parts of the display.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="sY6mMGM5VbiNoDMrS3Gt4h" name="Galaxy S26 Ultra privacy screen LIST" alt="Samsung Galaxy S26 Ultra showing Privacy Display" src="https://cdn.mos.cms.futurecdn.net/sY6mMGM5VbiNoDMrS3Gt4h-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>I really like that the Fold 8 Ultra features an anti-reflective coating that seriously cuts down on glare when you’re outside. Plus, thanks to Samsung’s Flex Titanium technology, the Galaxy Z Fold 8’s crease is much less visible than previous Samsung foldable phones. It’s still there, but more subtle.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Brightness HDR (nits)</strong></p></td><td  ><p><strong>Color (DCI-P3)</strong></p></td><td  ><p><strong>Accuracy (Delta-E)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold  Ultra</strong></p></td><td  ><p>2,687</p></td><td  ><p>116.6% (Natural)</p></td><td  ><p>0.2</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy S26 Ultra</strong></p></td><td  ><p>1,806</p></td><td  ><p>90.6% (Natural)</p></td><td  ><p>0.22</p></td></tr></tbody></table></div><p>Thanks to a brighter screen, I also found using the Z Fold 8 outside in direct sunlight a lot easier, whether I was browsing the web or just taking or reviewing photos. On previous Samsung Folds, I mostly used the external screen for taking pics.</p><p>In our lab testing the Z Fold 8 Ultra hit 2,687 nits of brightness with HDR content. That’s considerably higher than the S26 Ultra’s 1,806 nits.</p><h3 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-s-pen"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: S Pen</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4345px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="AQBTHresRLkR56MSUmEFMM" name="Galaxy S26 Ultra review-17" alt="Samsung Galaxy S26 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/AQBTHresRLkR56MSUmEFMM-1920-80.jpg" mos="" align="middle" fullscreen="" width="4345" height="2444" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Samsung ditched the S Pen on the <a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-7-review">Galaxy Z Fold 7</a> in order to make a thinner design and it’s still missing on the Fold 8 Ultra. Without a built-in digitizer for the screen, you simply can’t use an S Pen.</p><p>Meanwhile, the S26 Ultra has an S Pen built into the design. So you can use the stylus for taking notes, drawing and making fine edits on the go. </p><p>I spoke to Samsung executives about the missing S Pen on the Fold and they’re <a href="https://www.tomsguide.com/phones/samsung-phones/no-the-fold-8-doesnt-have-an-s-pen-but-samsung-is-exploring-its-return-for-future-folds">“open” to bringing it back</a>.</p><h3 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-cameras"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Cameras</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3441px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="TnA5425ZLKYYYgLYV3DJDG" name="Samsung Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra-3" alt="Samsung Galaxy Z Fold 8 Ultra and Galaxy S26 Ultra rear cameras" src="https://cdn.mos.cms.futurecdn.net/TnA5425ZLKYYYgLYV3DJDG-1920-80.jpg" mos="" align="middle" fullscreen="" width="3441" height="1936" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Galaxy Z Fold 8 Ultra has an <em>Ultra-ish</em> camera setup, starting with a 200MP main camera and 50MP ultraside, same as on the Galaxy S26 Ultra. But the new foldable falls down in the zoom department.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/aepV355MZkiSHL9bNuGfBo-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy Z Fold 8 Ultra<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/ttHc5QQrF7xwUSmwWn8QBo-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy S26 Ultra<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/BKQv5NjgvAqWQGAzbbDNsi-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy Z Fold 8 Ultra<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/Tbcsv6heCjtKjWPzdCbZsi-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy S26 Ultra<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>Let’s start with the good news. In most conditions, the main and ultrawide cameras on the Fold 8 and S26 Ultra turned in nearly identical results, whether it was flower close-up ultra-wide shots of Bryant Park or portraits. Panoramas were similar, too.</p><iframe allow="" height="395" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=b187e00e-91d0-11f1-ba1b-0e6f42328d7d"></iframe><p>It’s when you try to get in close that the Fold 8, well, folds. While the S26 Ultra packs dual telephoto zoom lenses at 3x and 5x with a maximum of 100x digital zoom, the Fold 8 Ultra has only a single 10MP telephoto lens with 3x optical zoom and 30x digital zoom.</p><p>Check out this close-up of an ice cream truck. At 30x, you can make out all of the menu names underneath the pictures of the cones on the S26 Ultra. On the Fold 8 Ultra it’s just a bunch of blobs.</p><iframe allow="" height="395" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=3ddb19aa-91d0-11f1-ba1b-0e6f42328d7d"></iframe><p>Same thing with this shot of a medieval scholar sculpture on the side of a New York City building. At 10x, you can make out more details in his face, hair and garb. And at 30x the Fold 8’s Ultra’s shot looks like an impressionist painting by comparison.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/uKqxNfpVJr8eBRAQFcvTFi-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy Z Fold 8 Ultra - 10x<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/KuTqZjwfj6Cj3esegBBuii-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy S26 Ultra - 10x<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/GdFLdXVo8dWBJ9L5eHYGxh-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy Z Fold 8 Ultra - 30x<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/iuHdLkoLEJZT8xfG94DUFi-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy S26 Ultra - 30x<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>The S26 Ultra has a slight selfie advantage, too, with a 12MP front camera. The Fold 8 Ultra has dual 10MP shooters. But the results are pretty close in my eyes. The advantage the Fold has is that you can flip around the cover display and take super sharp selfies with the rear cameras.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/Qtm4PmZ2UEHeBpzsJ86rgi-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy Z Fold 8 Ultra - Main camera<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/e8xVg6WGnZz9BPZSEvcrni-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy Z Fold 8 Ultra - Front camera<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/2jRFCRn8ANYoQ8b5WJRcoi-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy S26 Ultra<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>I’d say the Fold 8 Ultra and S26 Ultra are fairly evenly matched in low-light settings. In this photo of a record player in near darkness, the S26 Ultra delivered a brighter and crisper shot. The colors look more realistic too, especially in the pink macrame.</p><iframe allow="" height="395" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=d70c81d2-91cf-11f1-ba1b-0e6f42328d7d"></iframe><p>However, while the S26 Ultra gave me a brighter shot of the bottles in this bar, especially the blue Casa Azul, the text looks sharper through the Fold 8 Ultra.</p><iframe allow="" height="395" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=b8df2c0a-91cf-11f1-ba1b-0e6f42328d7d"></iframe><h3 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-performance"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Performance</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3684px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="bFv6s9UZuRZHPMckD5pxaL" name="Galaxy S26 Ultra review-27" alt="Samsung Galaxy S26 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/bFv6s9UZuRZHPMckD5pxaL-1920-80.jpg" mos="" align="middle" fullscreen="" width="3684" height="2072" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">Galaxy S26 Ultra </span><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Packing the same Snapdragon 8 Elite Gen 5 chip for Galaxy, the Galaxy Z Fold 8 Ultra and S26 Ultra are both multitasking powerhouses, and they’re both great for gaming.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="yAdRaBVHZ6CPwD4QtQ3UxE" name="fold 8 ultra gaming" alt="Playing Wuthering Waves on Galaxy Z Fold 8 Ultra" src="https://cdn.mos.cms.futurecdn.net/yAdRaBVHZ6CPwD4QtQ3UxE-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>In our lab tests, the S26 Ultra finished slightly ahead in Geekbench, 3DMark graphics and Geekbench AI, but I wouldn’t say it’s a big difference.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Geekbench 6 (Single/Multicore)</strong></p></td><td  ><p><strong>3DMark Solar Bay Unlimited</strong></p></td><td  ><p><strong>Geekbench AI</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8 Ultra</strong></p></td><td  ><p>3,110/10,578</p></td><td  ><p>49.24/12,950</p></td><td  ><p>71715</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy S26 Ultra</strong></p></td><td  ><p>3,733/11,457</p></td><td  ><p>49.37 / 12,984</p></td><td  ><p>83047 </p></td></tr></tbody></table></div><p>The S26 Ultra could be helped by the fact that it has vapor chamber cooling, while the Fold 8 Ultra does not.</p><p>I played Wuthering Waves on both the Fold 8 Ultra and S26 Ultra, and it was more immersive on the Fold because of its large display. But I found it a touch smoother on the S26 Ultra.</p><h3 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-battery-life-and-charging"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Battery life and charging</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2907px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="w8dEoJdD9j97ChKpUrPWwF" name="Galaxy S26 Ultra review" alt="Samsung Galaxy S26 Ultra with 60W charger" src="https://cdn.mos.cms.futurecdn.net/w8dEoJdD9j97ChKpUrPWwF-1920-80.jpg" mos="" align="middle" fullscreen="" width="2907" height="1635" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Samsung has made the leap to silicon-carbon battery tech with the Fold 8 Ultra, going from 4,400 mAh on the Fold 7 to 5,000 mAh on its latest foldable. That’s the same capacity as the S26 Ultra albeit with lithium ion.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Hours:Mins</strong></p></td><td  ><p><strong>15-min charge</strong></p></td><td  ><p><strong>30-min charge</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8</strong></p></td><td  ><p>14:33</p></td><td  ><p>49%</p></td><td  ><p>76%</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy S26 Ultra</strong></p></td><td  ><p>16:40 </p></td><td  ><p>41%</p></td><td  ><p>77%</p></td></tr></tbody></table></div><p>On the Tom’s Guide battery test, which involves continuous web surfing over 5G, the Galaxy Z Fold 8 Ultra lasted an impressive 14 hours and 33 minutes. That’s a huge upgrade over the 11 hours turned in by the Fold 7.</p><p>The Galaxy S26 Ultra lasted an even longer 16 hours and 40 minutes, but keep in mind that it was powering a smaller 6.9-inch display compared to the 8-inch screen on the Fold 8.</p><p>The Fold 8 offers 45W wired charging and 20W wireless charging, compared to 60W wired and 25W wireless on the S26 Ultra. But the phones turned in similar results in our wired charging test.</p><p>The Fold 8 Ultra got to 76% in 30 minutes versus 77% for the S26 Ultra. Note that neither phone has built-in magnets for Qi 2 charging, so you’ll have to buy a case with that feature.</p><h3 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-software-and-special-features"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Software and special features</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4592px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="dSkYa6nb5vfELq9CZP9HkM" name="Galaxy S26 Ultra review-21" alt="Samsung Galaxy S26 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/dSkYa6nb5vfELq9CZP9HkM-1920-80.jpg" mos="" align="middle" fullscreen="" width="4592" height="2583" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Both the Galaxy Z Fold 8 Ultra and Galaxy S26 Ultra offer a bunch of AI features that come in handy, including automated actions with Gemini (like helping to book dinner reservations or even vacations), Call Screening and Now Brief for summarizing your daily schedule. They also both let you transform your photos with a simple voice prompt.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3617px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="TFyBCFPuPGGHLrmtZ8NaYL" name="Galaxy S26 Ultra review-6" alt="Samsung Galaxy S26 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/TFyBCFPuPGGHLrmtZ8NaYL-1920-80.jpg" mos="" align="middle" fullscreen="" width="3617" height="2035" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>However, the Fold 8 Ultra offers a few unique tricks of its own. This includes Now Nudge in Split View, which can give you quick hints for opening a second app on its own screen to save time. And My FanCam can automatically follow a subject in your video, cropping the clip on the fly.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="FTAPbqnyMxnn72TGFVq4Eg" name="Galaxy Z Fold 8 Ultra-29" alt="Galaxy Z Fold 8 Ultra Flex Mode" src="https://cdn.mos.cms.futurecdn.net/FTAPbqnyMxnn72TGFVq4Eg-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">Galaxy Z Fold 8 Ultra Flex Mode </span><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Plus, unlike the Galaxy S26 Ultra, the Fold 8 Ultra boasts a Flex Mode for using the foldable like a mini laptop. And when shooting photos and videos you can use the Cover Screen preview feature to let the subjects see themselves in real time.</p><h3 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-verdict"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Verdict</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2046px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="nyEE9BKEyuBBNQFxKmYmcP" name="Samsung Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra-4" alt="Samsung Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra-4" src="https://cdn.mos.cms.futurecdn.net/nyEE9BKEyuBBNQFxKmYmcP-1920-80.jpg" mos="" align="middle" fullscreen="" width="2046" height="1151" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>I’m not going to say that calling the Galaxy Z Fold 8 Ultra an Ultra phone is false advertising, but you do have to make a bunch of trade-offs versus the Galaxy S26 Ultra.</p><p>With the foldable you don’t get an S Pen or an IP68 rating for dust resistance, and the S26 Ultra offers both a more powerful telephoto zoom and Privacy Display feature. Plus, the S26 Ultra lasted longer on a charge.</p><p>However, the Galaxy Z Fold 8 Ultra is a very versatile foldable phone that grants you a much bigger display, the ability to run up three apps at once and handy AI tools like Now Nudge with Split View.</p><p>But at $2,099, the Fold 8 Ultra costs $800 more than the S26 Ultra. So you really, really want to own a foldable if you’re going that route. </p><p>Bottom line: If you want the ultimate multi-tasking powerhouse, get the Fold 8 Ultra. But if you want the biggest zoom, best-in-class privacy and an S Pen, snag the S26 Ultra for less.</p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra</link>
                                                                            <description>
                            <![CDATA[ I compared the Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra side by side in terms of design, durability, features and performance to help you pick the right flagship for you. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">pWm7apZ2eAGEG6QZmCkxgn</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/A6iyDHHwEjWBJKYW5FPrpW-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 07 Aug 2026 04:30:00 +0000</pubDate>                                                                                                                                <updated>Thu, 13 Aug 2026 11:25:19 +0000</updated>
                                                                                                                                            <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Mark Spoonauer ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/wtAspSzVfcKLB4JEd39AMo-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Mark Spoonauer is the global editor in chief of Tom&#039;s Guide and has covered technology for over 20 years. He oversees the direction of Tom&#039;s Guide and leads a team of over 25 journalists to bring you our expert buying guides, reviews, news, how-to articles, deals and other coverage.&lt;/p&gt;&lt;p&gt;Mark has a passion for covering all things mobile, having reviewed dozens of smartphones and other gadgets. He enjoys testing the top mobile devices and putting them up against each other in our in-depth face-offs. He also works hand in hand with our editors and testing team to continually improve how we evaluate products. &lt;/p&gt;&lt;p&gt;Having led Tom&#039;s Guide since 2013, Mark has focused on growing the core tech coverage of the site while also expanding into new areas, such as entertainment, fitness and home, recruiting talented writers and editors to help our readers figure out what to buy and how to get the most out of the products and services they use every day. &lt;/p&gt;&lt;p&gt;Mark has spoken at key industry events and appears regularly on TV to discuss the latest trends, including &lt;a href=&quot;https://cheddar.com/media/pixel-watch-gets-a-release-date-at-google-i-o-2022&quot;&gt;Cheddar&lt;/a&gt;, Fox 5, &lt;a href=&quot;https://www.foxbusiness.com/technology/apple-march-event-5g-iphone&quot;&gt;Fox Business&lt;/a&gt; and other outlets. Mark was previously editor in chief of Laptop Mag, and his work has appeared in Wired, Popular Science and Inc. Follow him on Twitter at @mspoonauer.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/A6iyDHHwEjWBJKYW5FPrpW-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Samsung Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra]]></media:description>                                                            <media:text><![CDATA[Samsung Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra]]></media:text>
                                <media:title type="plain"><![CDATA[Samsung Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/A6iyDHHwEjWBJKYW5FPrpW-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>What’s in a name? In the case of the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Galaxy Z Fold 8 Ultra</a>, the “Ultra” part is supposed to signal to buyers that Samsung’s flagship foldable is a higher tier of phone. And in many ways it is, from the super bright display with less of a crease to the silicon-carbon battery (a first for Samsung phones).</p><p>But at $2,099, is the Fold 8 Ultra truly an “Ultra” phone? I’ve been testing it for a couple weeks, and while there’s plenty of great upgrades, there are some ways the Fold 8 Ultra falls short of the $1,299 <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review">Galaxy S26 Ultra</a>. After testing these two phones side by side, including taking lots of photos, here’s the one I'd buy.</p><h3 class="article-body__section" id="section-galaxy-fold-8-ultra-vs-galaxy-s26-ultra-specs-compared"><span>Galaxy Fold 8 Ultra vs Galaxy S26 Ultra: Specs Compared</span></h3><div ><table><tbody><tr><td class="firstcol " ><p><strong></strong></p></td><td  ><p><strong>Galaxy S26 Ultra</strong></p></td><td  ><p><strong>Galaxy Z Fold 8 Ultra</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Starting Price</strong></p></td><td  ><p><strong>$1,299</strong> (256GB)</p></td><td  ><p><strong>$2,099</strong> (256GB)</p></td></tr><tr><td class="firstcol " ><p><strong>Form Factor</strong></p></td><td  ><p>Traditional Slab / Glass-and-Metal Sandwich</p></td><td  ><p>Dual-screen Foldable</p></td></tr><tr><td class="firstcol " ><p><strong>Main Display</strong></p></td><td  ><p><strong>6.9-inch</strong> Dynamic LTPO AMOLED 2X</p><p>• 1440 x 3120 px (QHD+)</p><p>• 120Hz adaptive refresh rate</p><p>• Privacy Display</p></td><td  ><p><strong>8.0-inch</strong> Dynamic LTPO AMOLED 2X (Inner)</p><p>• 2256 x 2504 px</p><p>• 120Hz adaptive refresh rate</p><p>• Anti-reflective coating</p></td></tr><tr><td class="firstcol " ><p><strong>Cover Display</strong></p></td><td  ><p>N/A</p></td><td  ><p><strong>6.5-inch</strong> Dynamic LTPO AMOLED 2X</p><p>• 1080 x 2520 px, 120Hz</p></td></tr><tr><td class="firstcol " ><p><strong>Dimensions</strong></p></td><td  ><p>163.6 x 78.1 x 7.9 mm</p></td><td  ><p><strong>Folded:</strong> 158.4 x 72.8 x 8.9 mm</p><p><strong>Unfolded:</strong> 158.4 x 143.2 x 4.1 mm</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>214 g</p></td><td  ><p>215 g</p></td></tr><tr><td class="firstcol " ><p><strong>RAM Options</strong></p></td><td  ><p>12 GB (256GB/512GB) / 16 GB (1TB)</p></td><td  ><p>12 GB (256GB/512GB) / 16 GB (1TB)</p></td></tr><tr><td class="firstcol " ><p><strong>Storage Options</strong></p></td><td  ><p>256 GB / 512 GB / 1 TB (UFS 4.0)</p></td><td  ><p>256 GB / 512 GB / 1 TB</p></td></tr><tr><td class="firstcol " ><p><strong>Processor</strong></p></td><td  ><p>Qualcomm Snapdragon 8 Elite Gen 5</p></td><td  ><p>Qualcomm Snapdragon 8 Elite Gen 5</p></td></tr><tr><td class="firstcol " ><p><strong>Durability Rating</strong></p></td><td  ><p><strong>IP68</strong> (Dust-tight + 1.5m water)</p></td><td  ><p><strong>IP48</strong> (Particle protection >1mm + 1m water)</p></td></tr><tr><td class="firstcol " ><p><strong>S Pen Support</strong></p></td><td  ><p><strong>Yes</strong> (Built-in slot)</p></td><td  ><p><strong>No</strong> (Not supported)</p></td></tr><tr><td class="firstcol " ><p><strong>Rear Cameras</strong></p></td><td  ><p>• 200 MP Main (OIS)</p><p>• 50 MP Ultrawide</p><p>• 10 MP 3x Telephoto</p><p>• 50 MP 5x Periscope Zoom</p></td><td  ><p>• 200 MP Main (OIS)</p><p>• 50 MP Ultrawide</p><p>• 10 MP 3x Telephoto</p></td></tr><tr><td class="firstcol " ><p><strong>Zoom Range</strong></p></td><td  ><p>Up to 100x Space Zoom</p></td><td  ><p>Up to 30x Space Zoom</p></td></tr><tr><td class="firstcol " ><p><strong>Selfie Cameras</strong></p></td><td  ><p>12 MP (Single)</p></td><td  ><p>10 MP Cover Screen + 10 MP Inner Display</p></td></tr><tr><td class="firstcol " ><p><strong>Battery Capacity</strong></p></td><td  ><p>5,000 mAh</p></td><td  ><p>5,000 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Charging Speeds</strong></p></td><td  ><p>60W Wired / 25W Wireless / 4.5W Reverse</p></td><td  ><p>45W Wired / 20W Wireless / 4.5W Reverse</p></td></tr><tr><td class="firstcol " ><p><strong>Operating System</strong></p></td><td  ><p>Android 16 (One UI 8.5)</p></td><td  ><p>Android 17 (One UI 9.0)</p></td></tr><tr><td class="firstcol " ><p><strong>Color Options</strong></p></td><td  ><p>Titanium Gray, Titanium Black, Titanium Silver, Titanium Violet</p></td><td  ><p>Graphite, Cream, Violet Shadow, Green Shadow (Samsung Online Exclusive)</p></td></tr></tbody></table></div><div class="product"><a data-dimension112="e44b0efe-91d9-11f1-8044-8165f725d951" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" href="https://www.samsung.com/us/smartphones/galaxy-z-fold8-ultra/buy/galaxy-z-fold8-ultra-256gb-unlocked-sku-sm-f976uzvaxaa/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:600px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="XUkFwYXYpdYjL4TYYivxEg" name="Samsung Galaxy Z Fold 8 Ultra deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/XUkFwYXYpdYjL4TYYivxEg-1920-80.jpg" mos="" align="middle" fullscreen="" width="600" height="600" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 Ultra: </strong><a href="https://www.samsung.com/us/smartphones/galaxy-z-fold8-ultra/buy/galaxy-z-fold8-ultra-256gb-unlocked-sku-sm-f976uzvaxaa/" target="_blank" rel="nofollow" data-dimension112="e44b0efe-91d9-11f1-8044-8165f725d951" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" data-dimension25=""><strong>up to $1,200 off w/ trade-in @ Samsung</strong></a><br />The Galaxy Z Fold 8 Ultra features an 8-inch main display, 6.5-inch cover display and triple camera setup that includes a 200MP main, 50MP ultra-wide, and 10MP 3x telephoto lens. In our <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Galaxy Z Fold 8 Ultra review</a>, we said its greatly reduced crease, upgraded silicon carbon battery, faster charging, and upgraded ultrawide camera make it a great upgrade.<a class="view-deal button" href="https://www.samsung.com/us/smartphones/galaxy-z-fold8-ultra/buy/galaxy-z-fold8-ultra-256gb-unlocked-sku-sm-f976uzvaxaa/" target="_blank" rel="nofollow" data-dimension112="e44b0efe-91d9-11f1-8044-8165f725d951" data-action="Deal Block" data-label="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" data-dimension48="Galaxy Z Fold 8 Ultra: up to $1,200 off w/ trade-in @ Samsung" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="62e34dc6-91da-11f1-bb9e-2bbcd957c9c7" data-action="Deal Block" data-label="Galaxy S26 Ultra" data-dimension48="Galaxy S26 Ultra" data-dimension25="$1049" href="https://www.bestbuy.com/product/samsung-galaxy-s26-ultra-256gb-unlocked-cobalt-violet/JJGRF36YJC" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1475px;"><p class="vanilla-image-block" style="padding-top:101.69%;"><img id="pTo28Fx9tATQs3gfbYBFL5" name="Galaxy S26 Ultra deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/pTo28Fx9tATQs3gfbYBFL5-1920-80.jpg" mos="" align="middle" fullscreen="" width="1475" height="1500" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p>The Galaxy S26 Ultra features a 6.9-inch 3120 x 1440 AMOLED display w/ 120Hz refresh, Snapdragon 8 Elite Gen 5 CPU, 12GB of RAM, and 256GB of storage. You also get a 200MP main (f/1.4), 50MP ultra wide (f/1.9), 10MP (f/2.4) telephoto w/3x optical zoom, and a 50MP (f/2.9) telephoto w/5x optical zoom. There's also a 5,000 mAh battery. In our <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review" data-dimension112="62e34dc6-91da-11f1-bb9e-2bbcd957c9c7" data-action="Deal Block" data-label="Galaxy S26 Ultra" data-dimension48="Galaxy S26 Ultra" data-dimension25="$1049">Galaxy S26 Ultra review</a>, we said the Editor's Choice phone is super smart, sleek and fast. <a class="view-deal button" href="https://www.bestbuy.com/product/samsung-galaxy-s26-ultra-256gb-unlocked-cobalt-violet/JJGRF36YJC" target="_blank" rel="nofollow" data-dimension112="62e34dc6-91da-11f1-bb9e-2bbcd957c9c7" data-action="Deal Block" data-label="Galaxy S26 Ultra" data-dimension48="Galaxy S26 Ultra" data-dimension25="$1049">View Deal</a></p></div><h3 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-design-and-durability"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Design and durability</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2801px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="wVVitwh992iiUo4GDVZM7F" name="Galaxy Z Fold 8 Ultra review-22" alt="samsung galaxy z fold 8 ultra review images" src="https://cdn.mos.cms.futurecdn.net/wVVitwh992iiUo4GDVZM7F-1920-80.jpg" mos="" align="middle" fullscreen="" width="2801" height="1576" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">Galaxy Z Fold 8 Ultra </span><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Galaxy Z Fold 8 Ultra is remarkably light and compact for a phone that unfurls to an 8-inch display. It weighs just 7.58 ounces, which is barely heavier than the Galaxy S26 Ultra that limits you to a 6.9-inch screen.</p><p>In addition, the Fold 8 Ultra is only 4.1mm thin when it’s opened, which is even thinner than the Fold 7. Still, when closed the Galaxy S26 Ultra is a millimeter thinner, which is expected for a slab phone.</p><div ><table><caption>Galaxy Z Fold 8 Ultra vs. S26 Ultra: Size and weight</caption><tbody><tr><td class="firstcol " ><p><strong></strong></p></td><td  ><p><strong>State</strong></p></td><td  ><p><strong>Dimensions (H × W × D)</strong></p></td><td  ><p><strong>Weight</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy Z Fold 8 Ultra</strong></p></td><td  ><p><strong>Unfolded (Open)</strong></p></td><td  ><p>6.24 × 5.64 × 0.16 in (158.4 × 143.2 × 4.1 mm)</p></td><td  ><p>7.58 oz (215 g)</p></td></tr><tr><td class="firstcol empty" ></td><td  ><p><strong>Folded (Closed)</strong></p></td><td  ><p>6.24 × 2.87 × 0.35 in (158.4 × 72.8 × 8.9 mm)</p></td><td  ></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy S26 Ultra</strong></p></td><td  ><p><strong>Standard</strong></p></td><td  ><p>6.44 × 3.07 × 0.31 in (163.6 × 78.1 × 7.9 mm)</p></td><td  ><p>7.55 oz (214 g)</p></td></tr></tbody></table></div><p>The Fold 8 Ultra may be thinner, but it’s definitely not ready for a day at the beach. This foldable is once again IP48 rated, which means it can withstand being submerged in water for 30 minutes — but it is not dust resistant.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3733px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="YpCNYCr6ACAQ2JPhGn3KuK" name="Galaxy S26 Ultra review-LIST2" alt="Samsung Galaxy S26 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/YpCNYCr6ACAQ2JPhGn3KuK-1920-80.jpg" mos="" align="middle" fullscreen="" width="3733" height="2100" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>However, the Galaxy S26 Ultra carries an IP68 rating, which means the phone is dust tight. It’s also worth mentioning that other foldables are rated IP68, including the Motorola Razr Fold and Google Pixel 10 Pro Fold.</p><h3 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-displays"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Displays</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3462px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="s4PcUkqvHoinhjuVyNZ6gW" name="Samsung Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra-2" alt="Samsung Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra" src="https://cdn.mos.cms.futurecdn.net/s4PcUkqvHoinhjuVyNZ6gW-1920-80.jpg" mos="" align="middle" fullscreen="" width="3462" height="1947" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The Galaxy Z Fold 8 packs dual screens: a 6.5-inch cover display that’s fine for running apps (if a bit cramped for typing) and a huge 8-inch main display. And the S26 Ultra has a 6.9-inch panel.</p><p>The main reason to get the Fold 8 Ultra is the bigger main display. With 8 inches at your disposal, you get a more immersive video watching experience, as well as the ability to run apps side by side.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="iGEKAZXpueuG4YxyKtptrR" name="Fold 8 Ultra vs S26 Ultra displays" alt="Samsung Galaxy Z Fold 8 Ultra and Galaxy S26 Ultra in hand" src="https://cdn.mos.cms.futurecdn.net/iGEKAZXpueuG4YxyKtptrR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>What you don’t get is the S26 Ultra’s Privacy Display, which narrows the viewing angle for any snoops around you and can even black out just parts of the display.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="sY6mMGM5VbiNoDMrS3Gt4h" name="Galaxy S26 Ultra privacy screen LIST" alt="Samsung Galaxy S26 Ultra showing Privacy Display" src="https://cdn.mos.cms.futurecdn.net/sY6mMGM5VbiNoDMrS3Gt4h-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>I really like that the Fold 8 Ultra features an anti-reflective coating that seriously cuts down on glare when you’re outside. Plus, thanks to Samsung’s Flex Titanium technology, the Galaxy Z Fold 8’s crease is much less visible than previous Samsung foldable phones. It’s still there, but more subtle.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Brightness HDR (nits)</strong></p></td><td  ><p><strong>Color (DCI-P3)</strong></p></td><td  ><p><strong>Accuracy (Delta-E)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold  Ultra</strong></p></td><td  ><p>2,687</p></td><td  ><p>116.6% (Natural)</p></td><td  ><p>0.2</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy S26 Ultra</strong></p></td><td  ><p>1,806</p></td><td  ><p>90.6% (Natural)</p></td><td  ><p>0.22</p></td></tr></tbody></table></div><p>Thanks to a brighter screen, I also found using the Z Fold 8 outside in direct sunlight a lot easier, whether I was browsing the web or just taking or reviewing photos. On previous Samsung Folds, I mostly used the external screen for taking pics.</p><p>In our lab testing the Z Fold 8 Ultra hit 2,687 nits of brightness with HDR content. That’s considerably higher than the S26 Ultra’s 1,806 nits.</p><h3 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-s-pen"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: S Pen</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4345px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="AQBTHresRLkR56MSUmEFMM" name="Galaxy S26 Ultra review-17" alt="Samsung Galaxy S26 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/AQBTHresRLkR56MSUmEFMM-1920-80.jpg" mos="" align="middle" fullscreen="" width="4345" height="2444" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Samsung ditched the S Pen on the <a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-7-review">Galaxy Z Fold 7</a> in order to make a thinner design and it’s still missing on the Fold 8 Ultra. Without a built-in digitizer for the screen, you simply can’t use an S Pen.</p><p>Meanwhile, the S26 Ultra has an S Pen built into the design. So you can use the stylus for taking notes, drawing and making fine edits on the go. </p><p>I spoke to Samsung executives about the missing S Pen on the Fold and they’re <a href="https://www.tomsguide.com/phones/samsung-phones/no-the-fold-8-doesnt-have-an-s-pen-but-samsung-is-exploring-its-return-for-future-folds">“open” to bringing it back</a>.</p><h3 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-cameras"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Cameras</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3441px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="TnA5425ZLKYYYgLYV3DJDG" name="Samsung Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra-3" alt="Samsung Galaxy Z Fold 8 Ultra and Galaxy S26 Ultra rear cameras" src="https://cdn.mos.cms.futurecdn.net/TnA5425ZLKYYYgLYV3DJDG-1920-80.jpg" mos="" align="middle" fullscreen="" width="3441" height="1936" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Galaxy Z Fold 8 Ultra has an <em>Ultra-ish</em> camera setup, starting with a 200MP main camera and 50MP ultraside, same as on the Galaxy S26 Ultra. But the new foldable falls down in the zoom department.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/aepV355MZkiSHL9bNuGfBo-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy Z Fold 8 Ultra<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/ttHc5QQrF7xwUSmwWn8QBo-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy S26 Ultra<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/BKQv5NjgvAqWQGAzbbDNsi-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy Z Fold 8 Ultra<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/Tbcsv6heCjtKjWPzdCbZsi-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy S26 Ultra<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>Let’s start with the good news. In most conditions, the main and ultrawide cameras on the Fold 8 and S26 Ultra turned in nearly identical results, whether it was flower close-up ultra-wide shots of Bryant Park or portraits. Panoramas were similar, too.</p><iframe allow="" height="395" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=b187e00e-91d0-11f1-ba1b-0e6f42328d7d"></iframe><p>It’s when you try to get in close that the Fold 8, well, folds. While the S26 Ultra packs dual telephoto zoom lenses at 3x and 5x with a maximum of 100x digital zoom, the Fold 8 Ultra has only a single 10MP telephoto lens with 3x optical zoom and 30x digital zoom.</p><p>Check out this close-up of an ice cream truck. At 30x, you can make out all of the menu names underneath the pictures of the cones on the S26 Ultra. On the Fold 8 Ultra it’s just a bunch of blobs.</p><iframe allow="" height="395" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=3ddb19aa-91d0-11f1-ba1b-0e6f42328d7d"></iframe><p>Same thing with this shot of a medieval scholar sculpture on the side of a New York City building. At 10x, you can make out more details in his face, hair and garb. And at 30x the Fold 8’s Ultra’s shot looks like an impressionist painting by comparison.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/uKqxNfpVJr8eBRAQFcvTFi-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy Z Fold 8 Ultra - 10x<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/KuTqZjwfj6Cj3esegBBuii-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy S26 Ultra - 10x<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/GdFLdXVo8dWBJ9L5eHYGxh-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy Z Fold 8 Ultra - 30x<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/iuHdLkoLEJZT8xfG94DUFi-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy S26 Ultra - 30x<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>The S26 Ultra has a slight selfie advantage, too, with a 12MP front camera. The Fold 8 Ultra has dual 10MP shooters. But the results are pretty close in my eyes. The advantage the Fold has is that you can flip around the cover display and take super sharp selfies with the rear cameras.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/Qtm4PmZ2UEHeBpzsJ86rgi-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy Z Fold 8 Ultra - Main camera<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/e8xVg6WGnZz9BPZSEvcrni-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy Z Fold 8 Ultra - Front camera<small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/2jRFCRn8ANYoQ8b5WJRcoi-1920-80.jpg" alt="Galaxy Z Fold 8 Ultra vs Galaxy S26 Ultra photo comparisons" /><figcaption>Galaxy S26 Ultra<small role="credit">Tom's Guide</small></figcaption></figure></figure><p>I’d say the Fold 8 Ultra and S26 Ultra are fairly evenly matched in low-light settings. In this photo of a record player in near darkness, the S26 Ultra delivered a brighter and crisper shot. The colors look more realistic too, especially in the pink macrame.</p><iframe allow="" height="395" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=d70c81d2-91cf-11f1-ba1b-0e6f42328d7d"></iframe><p>However, while the S26 Ultra gave me a brighter shot of the bottles in this bar, especially the blue Casa Azul, the text looks sharper through the Fold 8 Ultra.</p><iframe allow="" height="395" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://cdn.knightlab.com/libs/juxtapose/latest/embed/index.html?uid=b8df2c0a-91cf-11f1-ba1b-0e6f42328d7d"></iframe><h3 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-performance"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Performance</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3684px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="bFv6s9UZuRZHPMckD5pxaL" name="Galaxy S26 Ultra review-27" alt="Samsung Galaxy S26 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/bFv6s9UZuRZHPMckD5pxaL-1920-80.jpg" mos="" align="middle" fullscreen="" width="3684" height="2072" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">Galaxy S26 Ultra </span><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Packing the same Snapdragon 8 Elite Gen 5 chip for Galaxy, the Galaxy Z Fold 8 Ultra and S26 Ultra are both multitasking powerhouses, and they’re both great for gaming.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="yAdRaBVHZ6CPwD4QtQ3UxE" name="fold 8 ultra gaming" alt="Playing Wuthering Waves on Galaxy Z Fold 8 Ultra" src="https://cdn.mos.cms.futurecdn.net/yAdRaBVHZ6CPwD4QtQ3UxE-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>In our lab tests, the S26 Ultra finished slightly ahead in Geekbench, 3DMark graphics and Geekbench AI, but I wouldn’t say it’s a big difference.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Geekbench 6 (Single/Multicore)</strong></p></td><td  ><p><strong>3DMark Solar Bay Unlimited</strong></p></td><td  ><p><strong>Geekbench AI</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8 Ultra</strong></p></td><td  ><p>3,110/10,578</p></td><td  ><p>49.24/12,950</p></td><td  ><p>71715</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy S26 Ultra</strong></p></td><td  ><p>3,733/11,457</p></td><td  ><p>49.37 / 12,984</p></td><td  ><p>83047 </p></td></tr></tbody></table></div><p>The S26 Ultra could be helped by the fact that it has vapor chamber cooling, while the Fold 8 Ultra does not.</p><p>I played Wuthering Waves on both the Fold 8 Ultra and S26 Ultra, and it was more immersive on the Fold because of its large display. But I found it a touch smoother on the S26 Ultra.</p><h3 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-battery-life-and-charging"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Battery life and charging</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2907px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="w8dEoJdD9j97ChKpUrPWwF" name="Galaxy S26 Ultra review" alt="Samsung Galaxy S26 Ultra with 60W charger" src="https://cdn.mos.cms.futurecdn.net/w8dEoJdD9j97ChKpUrPWwF-1920-80.jpg" mos="" align="middle" fullscreen="" width="2907" height="1635" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Samsung has made the leap to silicon-carbon battery tech with the Fold 8 Ultra, going from 4,400 mAh on the Fold 7 to 5,000 mAh on its latest foldable. That’s the same capacity as the S26 Ultra albeit with lithium ion.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Hours:Mins</strong></p></td><td  ><p><strong>15-min charge</strong></p></td><td  ><p><strong>30-min charge</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8</strong></p></td><td  ><p>14:33</p></td><td  ><p>49%</p></td><td  ><p>76%</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy S26 Ultra</strong></p></td><td  ><p>16:40 </p></td><td  ><p>41%</p></td><td  ><p>77%</p></td></tr></tbody></table></div><p>On the Tom’s Guide battery test, which involves continuous web surfing over 5G, the Galaxy Z Fold 8 Ultra lasted an impressive 14 hours and 33 minutes. That’s a huge upgrade over the 11 hours turned in by the Fold 7.</p><p>The Galaxy S26 Ultra lasted an even longer 16 hours and 40 minutes, but keep in mind that it was powering a smaller 6.9-inch display compared to the 8-inch screen on the Fold 8.</p><p>The Fold 8 offers 45W wired charging and 20W wireless charging, compared to 60W wired and 25W wireless on the S26 Ultra. But the phones turned in similar results in our wired charging test.</p><p>The Fold 8 Ultra got to 76% in 30 minutes versus 77% for the S26 Ultra. Note that neither phone has built-in magnets for Qi 2 charging, so you’ll have to buy a case with that feature.</p><h3 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-software-and-special-features"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Software and special features</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4592px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="dSkYa6nb5vfELq9CZP9HkM" name="Galaxy S26 Ultra review-21" alt="Samsung Galaxy S26 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/dSkYa6nb5vfELq9CZP9HkM-1920-80.jpg" mos="" align="middle" fullscreen="" width="4592" height="2583" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Both the Galaxy Z Fold 8 Ultra and Galaxy S26 Ultra offer a bunch of AI features that come in handy, including automated actions with Gemini (like helping to book dinner reservations or even vacations), Call Screening and Now Brief for summarizing your daily schedule. They also both let you transform your photos with a simple voice prompt.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3617px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="TFyBCFPuPGGHLrmtZ8NaYL" name="Galaxy S26 Ultra review-6" alt="Samsung Galaxy S26 Ultra shown in hand" src="https://cdn.mos.cms.futurecdn.net/TFyBCFPuPGGHLrmtZ8NaYL-1920-80.jpg" mos="" align="middle" fullscreen="" width="3617" height="2035" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>However, the Fold 8 Ultra offers a few unique tricks of its own. This includes Now Nudge in Split View, which can give you quick hints for opening a second app on its own screen to save time. And My FanCam can automatically follow a subject in your video, cropping the clip on the fly.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="FTAPbqnyMxnn72TGFVq4Eg" name="Galaxy Z Fold 8 Ultra-29" alt="Galaxy Z Fold 8 Ultra Flex Mode" src="https://cdn.mos.cms.futurecdn.net/FTAPbqnyMxnn72TGFVq4Eg-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">Galaxy Z Fold 8 Ultra Flex Mode </span><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Plus, unlike the Galaxy S26 Ultra, the Fold 8 Ultra boasts a Flex Mode for using the foldable like a mini laptop. And when shooting photos and videos you can use the Cover Screen preview feature to let the subjects see themselves in real time.</p><h3 class="article-body__section" id="section-galaxy-z-fold-8-ultra-vs-galaxy-s26-ultra-verdict"><span>Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra: Verdict</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2046px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="nyEE9BKEyuBBNQFxKmYmcP" name="Samsung Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra-4" alt="Samsung Galaxy Z Fold 8 Ultra vs. Galaxy S26 Ultra-4" src="https://cdn.mos.cms.futurecdn.net/nyEE9BKEyuBBNQFxKmYmcP-1920-80.jpg" mos="" align="middle" fullscreen="" width="2046" height="1151" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>I’m not going to say that calling the Galaxy Z Fold 8 Ultra an Ultra phone is false advertising, but you do have to make a bunch of trade-offs versus the Galaxy S26 Ultra.</p><p>With the foldable you don’t get an S Pen or an IP68 rating for dust resistance, and the S26 Ultra offers both a more powerful telephoto zoom and Privacy Display feature. Plus, the S26 Ultra lasted longer on a charge.</p><p>However, the Galaxy Z Fold 8 Ultra is a very versatile foldable phone that grants you a much bigger display, the ability to run up three apps at once and handy AI tools like Now Nudge with Split View.</p><p>But at $2,099, the Fold 8 Ultra costs $800 more than the S26 Ultra. So you really, really want to own a foldable if you’re going that route. </p><p>Bottom line: If you want the ultimate multi-tasking powerhouse, get the Fold 8 Ultra. But if you want the biggest zoom, best-in-class privacy and an S Pen, snag the S26 Ultra for less.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Google Pixel 11 Pro XL vs Samsung Galaxy S26 Ultra — which Android flagship will win? ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-everything-we-know-so-far">Google Pixel 11 Pro XL</a> is set to launch at the August 12 Made by Google event, alongside the rest of the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-everything-we-know-so-far">Pixel 11</a> series. If past releases are anything to go by, this should be the flagship Google phone for the year, with the largest display, best battery life and all the other things that make premium phones worth having. </p><p>But the question still remains, how will it compare to other flagships like the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review">Samsung Galaxy S26 Ultra</a>? Pixel phones typically lag behind their rivals in the hardware department, and while they do make up some of the distance with robust AI and software features, it still feels like something is missing. A new phone is a new opportunity to one-up the competition, but will the Pixel 11 Pro XL actually catch up to the Galaxy S26 Ultra?</p><p>Here's our rundown of Pixel 11 Pro XL vs Samsung Galaxy S26 Ultra, based on all the rumors and leaks we've heard so far.</p><h3 class="article-body__section" id="section-google-pixel-11-pro-xl-vs-samsung-galaxy-s26-ultra-specs"><span>Google Pixel 11 Pro XL vs Samsung Galaxy S26 Ultra: Specs</span></h3><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Google Pixel 11 Pro XL (rumored)</strong></p></td><td  ><p><strong>Samsung Galaxy S26 Ultra</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>From $1,299</p></td><td  ><p>From $1,299</p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>6.8-inch OLED</p></td><td  ><p>6.9-inch AMOLD</p></td></tr><tr><td class="firstcol " ><p><strong>Processor</strong></p></td><td  ><p>Tensor G6</p></td><td  ><p>Snapdragon 8 Elite Gen 5 for Galaxy</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>12GB / 16GB</p></td><td  ><p>12GB / 16GB</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>256GB / 512GB / 1TB</p></td><td  ><p>256GB / 512GB / 1TB</p></td></tr><tr><td class="firstcol " ><p><strong>Front Camera</strong></p></td><td  ><p>42MP</p></td><td  ><p>12MP</p></td></tr><tr><td class="firstcol " ><p><strong>Rear Camera</strong></p></td><td  ><p>50MP main, 48MP ultrawide, 48MP telephoto (5x zoom)</p></td><td  ><p>200MP main, 50MP ultrawide, 50MP telelphoto (5x zoom), 10MP telelphoto (3MP)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>5,115 mAh</p></td><td  ><p>5,000 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Charging</strong></p></td><td  ><p>45W wired, 25W wireless</p></td><td  ><p>45W wired, 25W wireless</p></td></tr><tr><td class="firstcol " ><p><strong>Operating System</strong></p></td><td  ><p>Android 16</p></td><td  ><p>One UI 8.5</p></td></tr><tr><td class="firstcol " ><p><strong>Size</strong></p></td><td  ><p>6.4 x 3.01 x 0.33 inches</p></td><td  ><p>6.44 x 3.07 x 0.31 inches</p></td></tr></tbody></table></div><h3 class="article-body__section" id="section-google-pixel-11-pro-xl-vs-samsung-galaxy-s26-ultra-price-availability"><span>Google Pixel 11 Pro XL vs Samsung Galaxy S26 Ultra: Price &amp; availability</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:656px;"><p class="vanilla-image-block" style="padding-top:56.40%;"><img id="8897kp7dMTMmu9uULdRdmC" name="image (2)" alt="leaked google pixel 11 pro xl images" src="https://cdn.mos.cms.futurecdn.net/8897kp7dMTMmu9uULdRdmC-1920-80.jpg" mos="" align="middle" fullscreen="" width="656" height="370" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Evan Blass)</span></figcaption></figure><p>The Samsung Galaxy S26 Ultra is available right now, with a starting price of $1,299 for a model with 256GB of storage and 12GB of RAM. However, given the phone is a few months old, we have started seeing some significant discounts from various retailers — including Samsung itself.</p><p>The Google Pixel 11 Pro XL is expected to cost $100 more than last year's model, meaning the phone may start at $1,299. The cheapest model will reportedly come with 256GB of storage once again, but it may feature a memory downgrade with just 12GB of RAM — compared to 16GB in the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-pro-xl-review">Pixel 10 Pro XL</a>.</p><p>In other words, it looks like both phones will cost the same amount for similar core specs. </p><p>The Pixel 11 Pro XL release date isn't known right now, but new Google typically opens pre-orders for new Pixel devices at the end of the launch event, with the release day scheduled one to two weeks later. So expect to have your hands on a Pixel 11 Pro XL before the end of the month.</p><h3 class="article-body__section" id="section-google-pixel-11-pro-xl-vs-samsung-galaxy-s26-ultra-design-display"><span>Google Pixel 11 Pro XL vs Samsung Galaxy S26 Ultra: Design &amp; display</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="nmC8mEhVxiXZQUnUDWbEKm" name="Samsung-Galaxy-S26-Ultra-home-screen" alt="Front view of Samsung Galaxy S26 Ultra held up against a brick wall" src="https://cdn.mos.cms.futurecdn.net/nmC8mEhVxiXZQUnUDWbEKm-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The Samsung Galaxy S26 Ultra is the larger of the two phones, rocking a 6.9-inch screen, measuring 6.44 x 3.07 x 0.31 in and weighing 7.55 oz. Meanwhile the Pixel 11 Pro XL is expected to come with a 6.8-inch display, measure 6.4 x 30.1 x 0.33 inches and weigh 7.9 ounces. That means, despite being slightly smaller, it is a heavier device — though part of that will come from the <a href="https://www.tomsguide.com/phones/what-is-qi2-wireless-charging">Qi2 magnets</a> in the back of the 11 Pro XL.</p><p>The 11 Pro XL's screen is tipped to be brighter, with<a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-specs-leak-reveals-what-upgrades-to-expect-and-some-concerning-downgrades"> leaks promising a 3,600 nit display</a>, compared to the 2,600 nit S26 Ultra. This should prove beneficial for the 11 Pro XL in bright situations, though it's unclear if it will have an anti-reflective coating the same way Samsung offers. Likewise, it's unlikely we'll see the <a href="https://www.tomsguide.com/phones/samsung-phones/the-galaxy-s26-ultras-privacy-display-is-more-exciting-to-me-than-any-ai-feature">Privacy Display</a> features from Google anytime soon.</p><p>Both phones should offer rounded corners, though Google has the horizontal triple-lens camera bar while Samsung has stuck with the vertical quad-lens system for another generation. However Samsung's phone lacks the "<a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-just-leaked-via-amazon-heres-the-specs-colors-and-obligatory-price-hike">Pixel Glow</a>" feature that's rumored to be coming to all Pixel 11 phones, and is expected to serve as a notification light on the back of the device.</p><h3 class="article-body__section" id="section-google-pixel-11-pro-xl-vs-samsung-galaxy-s26-ultra-performance"><span>Google Pixel 11 Pro XL vs Samsung Galaxy S26 Ultra: Performance</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:656px;"><p class="vanilla-image-block" style="padding-top:56.40%;"><img id="MMVKYt4EStWuesGovSJ8oC" name="image (3)" alt="leaked google pixel 11 pro xl images" src="https://cdn.mos.cms.futurecdn.net/MMVKYt4EStWuesGovSJ8oC-1920-80.jpg" mos="" align="middle" fullscreen="" width="656" height="370" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Evan Blass)</span></figcaption></figure><p>Performance is not the area Google usually excels at, especially since it moved to Tensor chips. Considering this, and how high the performance benchmarks are for Galaxy S26 Ultra's <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-s26-performance-face-off-snapdragon-8-elite-gen-5-vs-exynos-2600">Snapdragon 8 Elite Gen 5 for Galaxy</a>, we should not expect to see the Pixel 11 Pro XL topping any benchmark leagues following its release.</p><p>That's especially true when you remember some of the rumored changes coming to this year's <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-tensor-g5-and-g6-chips-forecasted-to-lag-behind-apple-and-qualcomm">Tensor G6 chip</a>. The G6 is rumored to drop to seven cores, instead of the usual eight, though it will be built on TSMC's 2nm process — which improves transistor density, and in the process boosts performance and power efficiency. To make matters worse, Google is utilizing a <a href="https://www.tomsguide.com/ai/google-to-remove-samsung-from-its-tensor-g6-modem-heres-why-that-matters">MediaTek M90 modem,</a> which is several years old at this point.</p><p>There's more to performance than benchmarks and the latest hardware, but considering Google's track record with weak performance, you'd have thought it would make more of an effort.</p><p>The 11 Pro XL is also expected to come with a new <a href="https://www.tomsguide.com/phones/google-pixel-phones/tensor-g6-chipset-could-give-the-pixel-11-the-biggest-security-upgrade-since-pixel-6-heres-how">Titan M3 security chip</a>, which will supposedly feature a new "Tensor Processing Unit" and offer forwards-compatible protection against whatever future cyberattacks bad actors might develop — though how that compares to the latest version of Samsung's Knox isn't clear.</p><h3 class="article-body__section" id="section-google-pixel-11-pro-xl-vs-samsung-galaxy-s26-ultra-cameras"><span>Google Pixel 11 Pro XL vs Samsung Galaxy S26 Ultra: Cameras</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2715px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="vbGrCLaZGfUvCojyg8YYUd" name="Galaxy S26 Ultra 24 hours-12" alt="Samsung Galaxy S26 Ultra" src="https://cdn.mos.cms.futurecdn.net/vbGrCLaZGfUvCojyg8YYUd-1920-80.jpg" mos="" align="middle" fullscreen="" width="2715" height="1527" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>On paper the Galaxy S26 Ultra has the advantage in the camera department. The phone is equipped with a 200MP main camera lens, partnered with a 50MP ultrawide lens, 50MP telephoto lens with 5x optical zoom and a 10MP secondary telephoto capable of 3x optical zoom — plus a 12MP selfie camera on the front.</p><p>In contrast, the <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-specs-leak-reveals-what-upgrades-to-expect-and-some-concerning-downgrades">Pixel 11 Pro XL is expected to come with a 50MP main camera</a>, 48MP ultrawide and a 48MP telephoto lens with 5x optical zoom (and up to <a href="https://www.androidheadlines.com/2026/08/new-leaks-confirm-the-pixel-11-pros-120x-zoom-feature.html" target="_blank">120x AI assisted digital zoom</a>). There's no word on what sort of resolution to expect from the selfie camera, but you shouldn't expect anything less than the 42MP lens from the Pixel 10 Pro XL.</p><p>Obviously we won't know how much better or worse the Pixel 11 Pro XL's cameras are compared to S26 Ultra until we actually get our hands on the phone. Camera hardware only tells you so much, especially with how important software has become to the photography process. So we'll have to do some thorough hands-on testing </p><h3 class="article-body__section" id="section-google-pixel-11-pro-xl-vs-samsung-galaxy-s26-ultra-software-ai"><span>Google Pixel 11 Pro XL vs Samsung Galaxy S26 Ultra: Software &amp; AI</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1154px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="XT3UDi3a4UHzdbWs5SN5P3" name="Pixel 11 render" alt="Pixel 11 render" src="https://cdn.mos.cms.futurecdn.net/XT3UDi3a4UHzdbWs5SN5P3-1920-80.jpg" mos="" align="middle" fullscreen="" width="1154" height="649" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: OnLeaks / Android Headlines)</span></figcaption></figure><p>Software is easily the area where Pixel phones excel, especially since the 11 Pro XL will be several months newer than the Galaxy S26 Ultra. The phone will have the usual array of software benefits, including first-in-line access to the latest Android updates, quarterly Pixel drops with new features, and the latest and best AI Google has to offer.</p><p>Samsung usually isn't that far behind, though. While One UI has had some hiccups in rolling out to everyone, Samsung tends to be pretty good at getting new updates to users fairly quickly. Just not as quickly as Google does with Pixel.</p><p>Likewise Samsung has invested a lot in AI, and there's been a lot of crossover between Pixel and Galaxy phones when it comes to the latest features. So we won't know for sure who has the best AI suite until Google actually reveals what the Pixel 11 series has to offer.</p><h3 class="article-body__section" id="section-google-pixel-11-pro-xl-vs-samsung-galaxy-s26-ultra-battery-charging"><span>Google Pixel 11 Pro XL vs Samsung Galaxy S26 Ultra: Battery &amp; charging</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3755px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="iGGyvv7a4hQPrn26YbFnid" name="Galaxy S26 Ultra 24 hours-11" alt="Samsung Galaxy S26 Ultra" src="https://cdn.mos.cms.futurecdn.net/iGGyvv7a4hQPrn26YbFnid-1920-80.jpg" mos="" align="middle" fullscreen="" width="3755" height="2112" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Battery life is another thing Pixels flag on compared to Samsung, but we won't know how much has changed until we actually test the 11 Pro XL's battery life for ourselves. However, the phone has a slightly smaller 5,115 mAh battery compared to the Pixel 10 Pro XL, which doesn't fill us with a lot of confidence.</p><p>The 10 Pro XL lasted 14 hours and 35 minutes in our custom battery test, compared to the 16 hours and 10 minutes recorded by the S26 Ultra. If the Pixel 10 Pro XL can't beat the S26 Ultra's 5,000 mAh battery life, then a smaller Pixel 11 Pro XL isn't likely to have much luck. </p><p>But you can't always predict these things ahead of time, and we will see what results the lab testing reveals following the 11 Pro XL's release.</p><p>The Pixel 11 Pro XL is also expected to offer 45W charging, which is slightly below that of the S26 Ultra's 60W speeds. However the two should be equal on the wireless charging front, with 25W Qi2.2 speeds, even if the Galaxy doesn't have the same built-in magnets as the Pixel. That said, the Galaxy S26 Ultra still offers reverse wireless charging, which Google scrapped last year.</p><h3 class="article-body__section" id="section-google-pixel-11-pro-xl-vs-samsung-galaxy-s26-ultra-outlook"><span>Google Pixel 11 Pro XL vs Samsung Galaxy S26 Ultra: Outlook</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:720px;"><p class="vanilla-image-block" style="padding-top:47.50%;"><img id="NP4Rd3TAo75Gm8MjECHatb" name="ezgif-4049ff33819a97ae" alt="Google Pixel 11 teaser gif with pixel glow effect" src="https://cdn.mos.cms.futurecdn.net/NP4Rd3TAo75Gm8MjECHatb-1920-80.gif" mos="" align="middle" fullscreen="" width="720" height="342" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>We know a lot about the Pixel 11 Pro XL, even if the official reveal isn't scheduled until August 12. Sadly everything we've heard suggests that this is a basic run of the mill hardware upgrade from Google, which means it's going to struggle to compete with the Galaxy S26 Ultra — which is our pick for the best Android phone.</p><p>That said, we can't make an absolute decision until we have both phones in our possession, and compare their performance side by side. A lot of factors don't show up on the specs sheet, and the only way to figure out which phone is better is with hands-on testing. Performance, cameras and battery life are the main three.</p><p>So for now, it looks like Samsung may have the edge in a bunch of areas, even if Google hasn't quite given up yet. Still, for the time being, we're just going to have to be patient to see what Google actually has in store for us.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom’s Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-vs-fold-8-ultra-camera-test-is-the-telephoto-zoom-worth-the-extra-usd200">Galaxy Z Fold 8 vs. Fold 8 Ultra camera zoom test: Don't spend the extra $200 until you see this</a></li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/this-is-the-pixel-11-pro-fold-and-this-is-when-pre-orders-officially-start">This is the Pixel 11 Pro Fold — and this is when pre-orders officially start</a></li><li><a href="https://www.tomsguide.com/phones/i-asked-siri-ai-and-gemini-a-series-of-increasingly-bizarre-questions-to-see-how-they-responded-heres-what-happened">I asked Siri AI and Gemini a series of increasingly bizarre questions to see how they responded —here's what happened</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/google-pixel-11-pro-xl-vs-samsung-galaxy-s26-ultra-which-android-flagship-will-be-the-better-choice</link>
                                                                            <description>
                            <![CDATA[ Google Pixel 11 Pro XL is coming, but how to the leaks and rumors compare to Samsung's flagship Galaxy S26 Ultra? ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">Sqe9zms7f8LMXLwpxzBkmC</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/VfrarXRYBeYovgGwXRgoEX-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 06 Aug 2026 08:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Google Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/VfrarXRYBeYovgGwXRgoEX-1920-80.jpg">
                                                            <media:credit><![CDATA[Evan Blass / Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[google pixel 11 pro vs samsung galaxy s26 ultra]]></media:description>                                                            <media:text><![CDATA[google pixel 11 pro vs samsung galaxy s26 ultra]]></media:text>
                                <media:title type="plain"><![CDATA[google pixel 11 pro vs samsung galaxy s26 ultra]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/VfrarXRYBeYovgGwXRgoEX-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-everything-we-know-so-far">Google Pixel 11 Pro XL</a> is set to launch at the August 12 Made by Google event, alongside the rest of the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-everything-we-know-so-far">Pixel 11</a> series. If past releases are anything to go by, this should be the flagship Google phone for the year, with the largest display, best battery life and all the other things that make premium phones worth having. </p><p>But the question still remains, how will it compare to other flagships like the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review">Samsung Galaxy S26 Ultra</a>? Pixel phones typically lag behind their rivals in the hardware department, and while they do make up some of the distance with robust AI and software features, it still feels like something is missing. A new phone is a new opportunity to one-up the competition, but will the Pixel 11 Pro XL actually catch up to the Galaxy S26 Ultra?</p><p>Here's our rundown of Pixel 11 Pro XL vs Samsung Galaxy S26 Ultra, based on all the rumors and leaks we've heard so far.</p><h3 class="article-body__section" id="section-google-pixel-11-pro-xl-vs-samsung-galaxy-s26-ultra-specs"><span>Google Pixel 11 Pro XL vs Samsung Galaxy S26 Ultra: Specs</span></h3><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Google Pixel 11 Pro XL (rumored)</strong></p></td><td  ><p><strong>Samsung Galaxy S26 Ultra</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>From $1,299</p></td><td  ><p>From $1,299</p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>6.8-inch OLED</p></td><td  ><p>6.9-inch AMOLD</p></td></tr><tr><td class="firstcol " ><p><strong>Processor</strong></p></td><td  ><p>Tensor G6</p></td><td  ><p>Snapdragon 8 Elite Gen 5 for Galaxy</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>12GB / 16GB</p></td><td  ><p>12GB / 16GB</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>256GB / 512GB / 1TB</p></td><td  ><p>256GB / 512GB / 1TB</p></td></tr><tr><td class="firstcol " ><p><strong>Front Camera</strong></p></td><td  ><p>42MP</p></td><td  ><p>12MP</p></td></tr><tr><td class="firstcol " ><p><strong>Rear Camera</strong></p></td><td  ><p>50MP main, 48MP ultrawide, 48MP telephoto (5x zoom)</p></td><td  ><p>200MP main, 50MP ultrawide, 50MP telelphoto (5x zoom), 10MP telelphoto (3MP)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>5,115 mAh</p></td><td  ><p>5,000 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Charging</strong></p></td><td  ><p>45W wired, 25W wireless</p></td><td  ><p>45W wired, 25W wireless</p></td></tr><tr><td class="firstcol " ><p><strong>Operating System</strong></p></td><td  ><p>Android 16</p></td><td  ><p>One UI 8.5</p></td></tr><tr><td class="firstcol " ><p><strong>Size</strong></p></td><td  ><p>6.4 x 3.01 x 0.33 inches</p></td><td  ><p>6.44 x 3.07 x 0.31 inches</p></td></tr></tbody></table></div><h3 class="article-body__section" id="section-google-pixel-11-pro-xl-vs-samsung-galaxy-s26-ultra-price-availability"><span>Google Pixel 11 Pro XL vs Samsung Galaxy S26 Ultra: Price &amp; availability</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:656px;"><p class="vanilla-image-block" style="padding-top:56.40%;"><img id="8897kp7dMTMmu9uULdRdmC" name="image (2)" alt="leaked google pixel 11 pro xl images" src="https://cdn.mos.cms.futurecdn.net/8897kp7dMTMmu9uULdRdmC-1920-80.jpg" mos="" align="middle" fullscreen="" width="656" height="370" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Evan Blass)</span></figcaption></figure><p>The Samsung Galaxy S26 Ultra is available right now, with a starting price of $1,299 for a model with 256GB of storage and 12GB of RAM. However, given the phone is a few months old, we have started seeing some significant discounts from various retailers — including Samsung itself.</p><p>The Google Pixel 11 Pro XL is expected to cost $100 more than last year's model, meaning the phone may start at $1,299. The cheapest model will reportedly come with 256GB of storage once again, but it may feature a memory downgrade with just 12GB of RAM — compared to 16GB in the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-10-pro-xl-review">Pixel 10 Pro XL</a>.</p><p>In other words, it looks like both phones will cost the same amount for similar core specs. </p><p>The Pixel 11 Pro XL release date isn't known right now, but new Google typically opens pre-orders for new Pixel devices at the end of the launch event, with the release day scheduled one to two weeks later. So expect to have your hands on a Pixel 11 Pro XL before the end of the month.</p><h3 class="article-body__section" id="section-google-pixel-11-pro-xl-vs-samsung-galaxy-s26-ultra-design-display"><span>Google Pixel 11 Pro XL vs Samsung Galaxy S26 Ultra: Design &amp; display</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="nmC8mEhVxiXZQUnUDWbEKm" name="Samsung-Galaxy-S26-Ultra-home-screen" alt="Front view of Samsung Galaxy S26 Ultra held up against a brick wall" src="https://cdn.mos.cms.futurecdn.net/nmC8mEhVxiXZQUnUDWbEKm-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The Samsung Galaxy S26 Ultra is the larger of the two phones, rocking a 6.9-inch screen, measuring 6.44 x 3.07 x 0.31 in and weighing 7.55 oz. Meanwhile the Pixel 11 Pro XL is expected to come with a 6.8-inch display, measure 6.4 x 30.1 x 0.33 inches and weigh 7.9 ounces. That means, despite being slightly smaller, it is a heavier device — though part of that will come from the <a href="https://www.tomsguide.com/phones/what-is-qi2-wireless-charging">Qi2 magnets</a> in the back of the 11 Pro XL.</p><p>The 11 Pro XL's screen is tipped to be brighter, with<a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-specs-leak-reveals-what-upgrades-to-expect-and-some-concerning-downgrades"> leaks promising a 3,600 nit display</a>, compared to the 2,600 nit S26 Ultra. This should prove beneficial for the 11 Pro XL in bright situations, though it's unclear if it will have an anti-reflective coating the same way Samsung offers. Likewise, it's unlikely we'll see the <a href="https://www.tomsguide.com/phones/samsung-phones/the-galaxy-s26-ultras-privacy-display-is-more-exciting-to-me-than-any-ai-feature">Privacy Display</a> features from Google anytime soon.</p><p>Both phones should offer rounded corners, though Google has the horizontal triple-lens camera bar while Samsung has stuck with the vertical quad-lens system for another generation. However Samsung's phone lacks the "<a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-just-leaked-via-amazon-heres-the-specs-colors-and-obligatory-price-hike">Pixel Glow</a>" feature that's rumored to be coming to all Pixel 11 phones, and is expected to serve as a notification light on the back of the device.</p><h3 class="article-body__section" id="section-google-pixel-11-pro-xl-vs-samsung-galaxy-s26-ultra-performance"><span>Google Pixel 11 Pro XL vs Samsung Galaxy S26 Ultra: Performance</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:656px;"><p class="vanilla-image-block" style="padding-top:56.40%;"><img id="MMVKYt4EStWuesGovSJ8oC" name="image (3)" alt="leaked google pixel 11 pro xl images" src="https://cdn.mos.cms.futurecdn.net/MMVKYt4EStWuesGovSJ8oC-1920-80.jpg" mos="" align="middle" fullscreen="" width="656" height="370" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Evan Blass)</span></figcaption></figure><p>Performance is not the area Google usually excels at, especially since it moved to Tensor chips. Considering this, and how high the performance benchmarks are for Galaxy S26 Ultra's <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-s26-performance-face-off-snapdragon-8-elite-gen-5-vs-exynos-2600">Snapdragon 8 Elite Gen 5 for Galaxy</a>, we should not expect to see the Pixel 11 Pro XL topping any benchmark leagues following its release.</p><p>That's especially true when you remember some of the rumored changes coming to this year's <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-tensor-g5-and-g6-chips-forecasted-to-lag-behind-apple-and-qualcomm">Tensor G6 chip</a>. The G6 is rumored to drop to seven cores, instead of the usual eight, though it will be built on TSMC's 2nm process — which improves transistor density, and in the process boosts performance and power efficiency. To make matters worse, Google is utilizing a <a href="https://www.tomsguide.com/ai/google-to-remove-samsung-from-its-tensor-g6-modem-heres-why-that-matters">MediaTek M90 modem,</a> which is several years old at this point.</p><p>There's more to performance than benchmarks and the latest hardware, but considering Google's track record with weak performance, you'd have thought it would make more of an effort.</p><p>The 11 Pro XL is also expected to come with a new <a href="https://www.tomsguide.com/phones/google-pixel-phones/tensor-g6-chipset-could-give-the-pixel-11-the-biggest-security-upgrade-since-pixel-6-heres-how">Titan M3 security chip</a>, which will supposedly feature a new "Tensor Processing Unit" and offer forwards-compatible protection against whatever future cyberattacks bad actors might develop — though how that compares to the latest version of Samsung's Knox isn't clear.</p><h3 class="article-body__section" id="section-google-pixel-11-pro-xl-vs-samsung-galaxy-s26-ultra-cameras"><span>Google Pixel 11 Pro XL vs Samsung Galaxy S26 Ultra: Cameras</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2715px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="vbGrCLaZGfUvCojyg8YYUd" name="Galaxy S26 Ultra 24 hours-12" alt="Samsung Galaxy S26 Ultra" src="https://cdn.mos.cms.futurecdn.net/vbGrCLaZGfUvCojyg8YYUd-1920-80.jpg" mos="" align="middle" fullscreen="" width="2715" height="1527" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>On paper the Galaxy S26 Ultra has the advantage in the camera department. The phone is equipped with a 200MP main camera lens, partnered with a 50MP ultrawide lens, 50MP telephoto lens with 5x optical zoom and a 10MP secondary telephoto capable of 3x optical zoom — plus a 12MP selfie camera on the front.</p><p>In contrast, the <a href="https://www.tomsguide.com/phones/google-pixel-phones/pixel-11-specs-leak-reveals-what-upgrades-to-expect-and-some-concerning-downgrades">Pixel 11 Pro XL is expected to come with a 50MP main camera</a>, 48MP ultrawide and a 48MP telephoto lens with 5x optical zoom (and up to <a href="https://www.androidheadlines.com/2026/08/new-leaks-confirm-the-pixel-11-pros-120x-zoom-feature.html" target="_blank">120x AI assisted digital zoom</a>). There's no word on what sort of resolution to expect from the selfie camera, but you shouldn't expect anything less than the 42MP lens from the Pixel 10 Pro XL.</p><p>Obviously we won't know how much better or worse the Pixel 11 Pro XL's cameras are compared to S26 Ultra until we actually get our hands on the phone. Camera hardware only tells you so much, especially with how important software has become to the photography process. So we'll have to do some thorough hands-on testing </p><h3 class="article-body__section" id="section-google-pixel-11-pro-xl-vs-samsung-galaxy-s26-ultra-software-ai"><span>Google Pixel 11 Pro XL vs Samsung Galaxy S26 Ultra: Software &amp; AI</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1154px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="XT3UDi3a4UHzdbWs5SN5P3" name="Pixel 11 render" alt="Pixel 11 render" src="https://cdn.mos.cms.futurecdn.net/XT3UDi3a4UHzdbWs5SN5P3-1920-80.jpg" mos="" align="middle" fullscreen="" width="1154" height="649" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: OnLeaks / Android Headlines)</span></figcaption></figure><p>Software is easily the area where Pixel phones excel, especially since the 11 Pro XL will be several months newer than the Galaxy S26 Ultra. The phone will have the usual array of software benefits, including first-in-line access to the latest Android updates, quarterly Pixel drops with new features, and the latest and best AI Google has to offer.</p><p>Samsung usually isn't that far behind, though. While One UI has had some hiccups in rolling out to everyone, Samsung tends to be pretty good at getting new updates to users fairly quickly. Just not as quickly as Google does with Pixel.</p><p>Likewise Samsung has invested a lot in AI, and there's been a lot of crossover between Pixel and Galaxy phones when it comes to the latest features. So we won't know for sure who has the best AI suite until Google actually reveals what the Pixel 11 series has to offer.</p><h3 class="article-body__section" id="section-google-pixel-11-pro-xl-vs-samsung-galaxy-s26-ultra-battery-charging"><span>Google Pixel 11 Pro XL vs Samsung Galaxy S26 Ultra: Battery &amp; charging</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3755px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="iGGyvv7a4hQPrn26YbFnid" name="Galaxy S26 Ultra 24 hours-11" alt="Samsung Galaxy S26 Ultra" src="https://cdn.mos.cms.futurecdn.net/iGGyvv7a4hQPrn26YbFnid-1920-80.jpg" mos="" align="middle" fullscreen="" width="3755" height="2112" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Battery life is another thing Pixels flag on compared to Samsung, but we won't know how much has changed until we actually test the 11 Pro XL's battery life for ourselves. However, the phone has a slightly smaller 5,115 mAh battery compared to the Pixel 10 Pro XL, which doesn't fill us with a lot of confidence.</p><p>The 10 Pro XL lasted 14 hours and 35 minutes in our custom battery test, compared to the 16 hours and 10 minutes recorded by the S26 Ultra. If the Pixel 10 Pro XL can't beat the S26 Ultra's 5,000 mAh battery life, then a smaller Pixel 11 Pro XL isn't likely to have much luck. </p><p>But you can't always predict these things ahead of time, and we will see what results the lab testing reveals following the 11 Pro XL's release.</p><p>The Pixel 11 Pro XL is also expected to offer 45W charging, which is slightly below that of the S26 Ultra's 60W speeds. However the two should be equal on the wireless charging front, with 25W Qi2.2 speeds, even if the Galaxy doesn't have the same built-in magnets as the Pixel. That said, the Galaxy S26 Ultra still offers reverse wireless charging, which Google scrapped last year.</p><h3 class="article-body__section" id="section-google-pixel-11-pro-xl-vs-samsung-galaxy-s26-ultra-outlook"><span>Google Pixel 11 Pro XL vs Samsung Galaxy S26 Ultra: Outlook</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:720px;"><p class="vanilla-image-block" style="padding-top:47.50%;"><img id="NP4Rd3TAo75Gm8MjECHatb" name="ezgif-4049ff33819a97ae" alt="Google Pixel 11 teaser gif with pixel glow effect" src="https://cdn.mos.cms.futurecdn.net/NP4Rd3TAo75Gm8MjECHatb-1920-80.gif" mos="" align="middle" fullscreen="" width="720" height="342" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>We know a lot about the Pixel 11 Pro XL, even if the official reveal isn't scheduled until August 12. Sadly everything we've heard suggests that this is a basic run of the mill hardware upgrade from Google, which means it's going to struggle to compete with the Galaxy S26 Ultra — which is our pick for the best Android phone.</p><p>That said, we can't make an absolute decision until we have both phones in our possession, and compare their performance side by side. A lot of factors don't show up on the specs sheet, and the only way to figure out which phone is better is with hands-on testing. Performance, cameras and battery life are the main three.</p><p>So for now, it looks like Samsung may have the edge in a bunch of areas, even if Google hasn't quite given up yet. Still, for the time being, we're just going to have to be patient to see what Google actually has in store for us.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom’s Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-vs-fold-8-ultra-camera-test-is-the-telephoto-zoom-worth-the-extra-usd200">Galaxy Z Fold 8 vs. Fold 8 Ultra camera zoom test: Don't spend the extra $200 until you see this</a></li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/this-is-the-pixel-11-pro-fold-and-this-is-when-pre-orders-officially-start">This is the Pixel 11 Pro Fold — and this is when pre-orders officially start</a></li><li><a href="https://www.tomsguide.com/phones/i-asked-siri-ai-and-gemini-a-series-of-increasingly-bizarre-questions-to-see-how-they-responded-heres-what-happened">I asked Siri AI and Gemini a series of increasingly bizarre questions to see how they responded —here's what happened</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I just tried the new Samsung DeX on the Galaxy Z Fold 8 — and it has one huge upgrade ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Samsung’s new foldable phones are almost here, and if you’re planning to get any of them, you should know about their most underrated feature in my opinion: <a href="https://www.tomsguide.com/us/samsung-dex,review-4383.html">Samsung DeX</a>. This year’s lineup consists of three new foldables — the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-8-review">Galaxy Z Flip 8</a>, <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Z Fold 8</a>, and <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Z Fold 8 Ultra</a> — which all come with the latest version of Samsung’s desktop interface.</p><p>Just as before, you can easily access DeX by plugging them directly into a monitor, whether via USB-C, an HDMI port using a USB hub, or even wirelessly on a supported display or TV. I’ve been testing this new Samsung DeX for the past week, and it gains one specific feature that makes it more useful for productivity.</p><p>In fact, this new Samsung DeX is exactly like the one I tested on the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-dex-quietly-gets-a-makeover-with-the-galaxy-s26-and-its-now-much-more-like-a-windows-pc">Galaxy S26 from earlier this year</a> — which inherited it from the now-discontinued <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-trifold-review">Galaxy Z TriFold</a>.</p><h2 class="article-body__section" id="section-samsung-dex-on-fold-8-and-flip-8-what-s-new"><span>Samsung DeX on Fold 8 and Flip 8: What's new</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="myCzeL2Fx2qx6pwtusH3kA" name="Samsung DeX on Galaxy Z Flip 8" alt="Samsung DeX on Galaxy Z Flip 8." src="https://cdn.mos.cms.futurecdn.net/myCzeL2Fx2qx6pwtusH3kA-1920-80.gif" mos="" align="middle" fullscreen="" width="1280" height="720" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>The only new addition to this year’s Samsung DeX is the ability to create up to four workspaces. <strong>Each desktop can support up to five apps, which means I can run 20 different apps simultaneously.</strong></p><p>While I don’t need to actively use that many apps at once, having them organized makes a huge difference. For instance, I’ve set up one workspace strictly for work-related apps I frequently access — like Slack, Gmail, Chrome, Google Docs, and Messages. In another, I have my social networking apps, while a third is dedicated to editing apps I use consistently, such as CapCut, PhotoDirector, and PowerDirector.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/WjFVzPdrf9soNGKJisYh6o-1920-80.jpg" alt="Samsung DeX on Galaxy Z Flip 8." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/vkBfgjGzVoYbz3CtzTFLD-1920-80.jpg" alt="Samsung DeX on Galaxy Z Flip 8." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/RCpxo3oYw85TxcVJiNbLYn-1920-80.jpg" alt="Samsung DeX on Galaxy Z Flip 8." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/72eYELvVWUVfzY6kWhdLHn-1920-80.jpg" alt="Samsung DeX on Galaxy Z Flip 8." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>By clicking the icon with the three vertical lines in the lower-left corner of the interface, I can easily jump to the workspace I need — which functions very similarly to how Windows 11 handles multiple desktops. With access to more workspaces, I can keep my apps organized and stay much more productive.</p><h2 class="article-body__section" id="section-samsung-dex-on-fold-8-and-flip-8-what-s-missing"><span>Samsung DeX on Fold 8 and Flip 8: What’s missing</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="gZddKBggf4kMVgd2r74df9" name="Samsung DeX on Galaxy Z Flip 8" alt="Samsung DeX on Galaxy Z Flip 8." src="https://cdn.mos.cms.futurecdn.net/gZddKBggf4kMVgd2r74df9-1920-80.gif" mos="" align="middle" fullscreen="" width="1280" height="720" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>Apart from that, this version of Samsung DeX is no different from the past few iterations. For example, I like being able to run two apps side-by-side and automatically resize them by adjusting the slider between them. That way, I can make Chrome take up more of the desktop while leaving a smaller window for Slack.</p><p>However, there are still a few improvements that could elevate the experience. First and foremost, I’d love to see DeX copy <a href="https://www.tomsguide.com/computing/windows-operating-systems/5-windows-10-features-that-windows-11-does-way-better">Windows 11’s “Snap” feature</a>, which lets you arrange apps in preset layouts for better organization. While DeX still offers side-by-side multitasking, I want that extended to four apps at once — where each app occupies a quadrant of the display.</p><p>Secondly, I would love for Samsung to bring back support for multiple user profiles. Many of the <a href="https://www.tomsguide.com/us/best-android-phones,review-6051.html">best Android phones</a> offer this feature, but Samsung has left it out for several generations now. It’s a crucial addition because it would allow users to separate work and personal accounts cleanly. For example, I have bookmarks specifically tied to my work account that I can't access in DeX because Chrome is locked to my personal profile.</p><h2 class="article-body__section" id="section-samsung-dex-on-z-flip-8-z-fold-8-and-z-fold-8-ultra-bottom-line"><span>Samsung DeX on Z Flip 8, Z Fold 8, and Z Fold 8 Ultra: Bottom line</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4768px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="qy6NPJHf2JvQ5aboQNieDn" name="Samsung DeX on Galaxy Z Flip 8" alt="Samsung DeX on Galaxy Z Flip 8." src="https://cdn.mos.cms.futurecdn.net/qy6NPJHf2JvQ5aboQNieDn-1920-80.jpg" mos="" align="middle" fullscreen="" width="4768" height="2682" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>I can’t deny that I rely on <a href="https://www.tomsguide.com/phones/samsung-phones/i-ditched-my-laptop-for-2-weeks-for-the-galaxy-z-fold-6-heres-what-happened">Samsung DeX on these new foldables when I’m in a pinch and forget my laptop</a>. In fact, I can accomplish nearly 90% of my daily workload using DeX alone — though that missing 10% could easily be bridged if Samsung adds the features I mentioned.</p><p>DeX is also invaluable to me because I can pair it with my <a href="https://www.tomsguide.com/computing/vr-ar/smart-glasses/xreal-one-pro-ar-glasses-review">Xreal smart glasses</a>, a wireless mouse, and a Bluetooth keyboard. It makes for the ultimate portable desktop experience, projecting the interface directly in front of me with optional semi-transparency so I can stay aware of my surroundings.</p><p>And considering Samsung’s ongoing developments in <a href="https://www.tomsguide.com/computing/smart-glasses/i-just-went-hands-on-with-the-new-samsung-smart-glasses-heres-why-id-pick-them-over-meta">wearable displays and smart glasses</a>, I’m genuinely excited to see where Samsung DeX goes next.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom’s Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/ive-tested-the-galaxy-z-fold-8-and-it-proves-apple-really-needs-to-solve-this-one-thing">I’ve tested the Galaxy Z Fold 8 and it proves Apple really needs to solve this one thing</a></li><li><a href="https://www.tomsguide.com/ai/gemini-notebook-just-sold-me-on-foldables-heres-why-i-finally-get-the-hype">Gemini Notebook just sold me on foldables — here's why I finally get the hype</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-preorder-deals-heres-how-im-saving-up-to-usd1-200-on-samsungs-new-phones">Don't pay full price for your Galaxy Z Fold 8: this preorder deal knocks up to $1,200 off</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/i-just-tried-the-new-samsung-dex-on-the-galaxy-z-fold-8-and-it-has-one-huge-upgrade</link>
                                                                            <description>
                            <![CDATA[ After testing the new Samsung DeX across the Galaxy Z Fold 8, Fold 8 Ultra, and Flip 8, it's one small step forward in replacing my laptop. Here's why. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">qjkCkm3wdLUarSLJAgnaS6</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/AieHmWF2DYNhYEc6WiBT4n-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 06 Aug 2026 05:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ john.velasco@futurenet.com (John Velasco) ]]></author>                    <dc:creator><![CDATA[ John Velasco ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/TSj224oX8d5ERXaDs8pDGd-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/AieHmWF2DYNhYEc6WiBT4n-1920-80.jpg">
                                                            <media:credit><![CDATA[John Velasco / Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Samsung DeX on Galaxy Z Flip 8.]]></media:description>                                                            <media:text><![CDATA[Samsung DeX on Galaxy Z Flip 8.]]></media:text>
                                <media:title type="plain"><![CDATA[Samsung DeX on Galaxy Z Flip 8.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/AieHmWF2DYNhYEc6WiBT4n-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Samsung’s new foldable phones are almost here, and if you’re planning to get any of them, you should know about their most underrated feature in my opinion: <a href="https://www.tomsguide.com/us/samsung-dex,review-4383.html">Samsung DeX</a>. This year’s lineup consists of three new foldables — the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-8-review">Galaxy Z Flip 8</a>, <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Z Fold 8</a>, and <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Z Fold 8 Ultra</a> — which all come with the latest version of Samsung’s desktop interface.</p><p>Just as before, you can easily access DeX by plugging them directly into a monitor, whether via USB-C, an HDMI port using a USB hub, or even wirelessly on a supported display or TV. I’ve been testing this new Samsung DeX for the past week, and it gains one specific feature that makes it more useful for productivity.</p><p>In fact, this new Samsung DeX is exactly like the one I tested on the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-dex-quietly-gets-a-makeover-with-the-galaxy-s26-and-its-now-much-more-like-a-windows-pc">Galaxy S26 from earlier this year</a> — which inherited it from the now-discontinued <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-trifold-review">Galaxy Z TriFold</a>.</p><h2 class="article-body__section" id="section-samsung-dex-on-fold-8-and-flip-8-what-s-new"><span>Samsung DeX on Fold 8 and Flip 8: What's new</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="myCzeL2Fx2qx6pwtusH3kA" name="Samsung DeX on Galaxy Z Flip 8" alt="Samsung DeX on Galaxy Z Flip 8." src="https://cdn.mos.cms.futurecdn.net/myCzeL2Fx2qx6pwtusH3kA-1920-80.gif" mos="" align="middle" fullscreen="" width="1280" height="720" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>The only new addition to this year’s Samsung DeX is the ability to create up to four workspaces. <strong>Each desktop can support up to five apps, which means I can run 20 different apps simultaneously.</strong></p><p>While I don’t need to actively use that many apps at once, having them organized makes a huge difference. For instance, I’ve set up one workspace strictly for work-related apps I frequently access — like Slack, Gmail, Chrome, Google Docs, and Messages. In another, I have my social networking apps, while a third is dedicated to editing apps I use consistently, such as CapCut, PhotoDirector, and PowerDirector.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/WjFVzPdrf9soNGKJisYh6o-1920-80.jpg" alt="Samsung DeX on Galaxy Z Flip 8." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/vkBfgjGzVoYbz3CtzTFLD-1920-80.jpg" alt="Samsung DeX on Galaxy Z Flip 8." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/RCpxo3oYw85TxcVJiNbLYn-1920-80.jpg" alt="Samsung DeX on Galaxy Z Flip 8." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/72eYELvVWUVfzY6kWhdLHn-1920-80.jpg" alt="Samsung DeX on Galaxy Z Flip 8." /><figcaption><small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>By clicking the icon with the three vertical lines in the lower-left corner of the interface, I can easily jump to the workspace I need — which functions very similarly to how Windows 11 handles multiple desktops. With access to more workspaces, I can keep my apps organized and stay much more productive.</p><h2 class="article-body__section" id="section-samsung-dex-on-fold-8-and-flip-8-what-s-missing"><span>Samsung DeX on Fold 8 and Flip 8: What’s missing</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="gZddKBggf4kMVgd2r74df9" name="Samsung DeX on Galaxy Z Flip 8" alt="Samsung DeX on Galaxy Z Flip 8." src="https://cdn.mos.cms.futurecdn.net/gZddKBggf4kMVgd2r74df9-1920-80.gif" mos="" align="middle" fullscreen="" width="1280" height="720" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>Apart from that, this version of Samsung DeX is no different from the past few iterations. For example, I like being able to run two apps side-by-side and automatically resize them by adjusting the slider between them. That way, I can make Chrome take up more of the desktop while leaving a smaller window for Slack.</p><p>However, there are still a few improvements that could elevate the experience. First and foremost, I’d love to see DeX copy <a href="https://www.tomsguide.com/computing/windows-operating-systems/5-windows-10-features-that-windows-11-does-way-better">Windows 11’s “Snap” feature</a>, which lets you arrange apps in preset layouts for better organization. While DeX still offers side-by-side multitasking, I want that extended to four apps at once — where each app occupies a quadrant of the display.</p><p>Secondly, I would love for Samsung to bring back support for multiple user profiles. Many of the <a href="https://www.tomsguide.com/us/best-android-phones,review-6051.html">best Android phones</a> offer this feature, but Samsung has left it out for several generations now. It’s a crucial addition because it would allow users to separate work and personal accounts cleanly. For example, I have bookmarks specifically tied to my work account that I can't access in DeX because Chrome is locked to my personal profile.</p><h2 class="article-body__section" id="section-samsung-dex-on-z-flip-8-z-fold-8-and-z-fold-8-ultra-bottom-line"><span>Samsung DeX on Z Flip 8, Z Fold 8, and Z Fold 8 Ultra: Bottom line</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4768px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="qy6NPJHf2JvQ5aboQNieDn" name="Samsung DeX on Galaxy Z Flip 8" alt="Samsung DeX on Galaxy Z Flip 8." src="https://cdn.mos.cms.futurecdn.net/qy6NPJHf2JvQ5aboQNieDn-1920-80.jpg" mos="" align="middle" fullscreen="" width="4768" height="2682" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>I can’t deny that I rely on <a href="https://www.tomsguide.com/phones/samsung-phones/i-ditched-my-laptop-for-2-weeks-for-the-galaxy-z-fold-6-heres-what-happened">Samsung DeX on these new foldables when I’m in a pinch and forget my laptop</a>. In fact, I can accomplish nearly 90% of my daily workload using DeX alone — though that missing 10% could easily be bridged if Samsung adds the features I mentioned.</p><p>DeX is also invaluable to me because I can pair it with my <a href="https://www.tomsguide.com/computing/vr-ar/smart-glasses/xreal-one-pro-ar-glasses-review">Xreal smart glasses</a>, a wireless mouse, and a Bluetooth keyboard. It makes for the ultimate portable desktop experience, projecting the interface directly in front of me with optional semi-transparency so I can stay aware of my surroundings.</p><p>And considering Samsung’s ongoing developments in <a href="https://www.tomsguide.com/computing/smart-glasses/i-just-went-hands-on-with-the-new-samsung-smart-glasses-heres-why-id-pick-them-over-meta">wearable displays and smart glasses</a>, I’m genuinely excited to see where Samsung DeX goes next.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom’s Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/ive-tested-the-galaxy-z-fold-8-and-it-proves-apple-really-needs-to-solve-this-one-thing">I’ve tested the Galaxy Z Fold 8 and it proves Apple really needs to solve this one thing</a></li><li><a href="https://www.tomsguide.com/ai/gemini-notebook-just-sold-me-on-foldables-heres-why-i-finally-get-the-hype">Gemini Notebook just sold me on foldables — here's why I finally get the hype</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-preorder-deals-heres-how-im-saving-up-to-usd1-200-on-samsungs-new-phones">Don't pay full price for your Galaxy Z Fold 8: this preorder deal knocks up to $1,200 off</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Samsung Galaxy Z8 Series foldable pre-orders up 30% as half snag the wide Fold 8 — great news for iPhone Ultra ]]></title>
                                                                                                <dc:content><![CDATA[ <p>In the last couple of weeks,<a href="https://x.com/UniverseIce/status/2084505308836089926" target="_blank"> Samsung leakers</a> and <a href="https://www.sammobile.com/news/galaxy-z-flip-fold-8-sales-20-percent-higher-z-flip-fold-7-europe/" target="_blank">some news reports</a> have indicated that the Z Fold 8 series is proving super popular and already selling better than its predecessor. This could be great news for the <a href="https://www.tomsguide.com/phones/iphones/iphone-ultra-rumors-everything-you-need-to-know-about-the-foldable-iphone">iPhone Ultra,</a> which is supposed to launch next month.</p><p>Samsung decided to confirm those numbers itself with a new press release asserting that the Z8 series of foldables is breaking records for pre-orders, especially the new wider <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Galaxy Z Fold 8</a>. According to the Korean company, pre-orders increased more than 30% compared to last year's Galaxy Z Fold 7.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OajbyX"></div>                            </div>                            <script src="https://kwizly.com/embed/OajbyX.js" async=""></script><p>For the series, the wider Z Fold 8 makes up "nearly half of all pre-orders" with the Lavender color already sold out, though Graphite is apparently the most popular hue. Samsung claims 3x as many Flip users are switching to the bigger Fold this year as well.</p><p>Per the <a href="https://news.samsung.com/kr/%ec%9d%b4%eb%9f%b0-%ed%8f%b4%eb%8d%94%eb%b8%94%ec%9d%84-%ea%b8%b0%eb%8b%a4%eb%a0%a4-%ec%99%94%ec%96%b4%ec%9a%94%eb%82%a0%ec%94%a8%eb%a7%8c%ed%81%bc-%eb%9c%a8%ea%b1%b0" target="_blank">Korean version of the Samsung website</a>, the company received 1.44 million pre-orders between July 28 and August 3, a record for any Galaxy phone.</p><p>Additionally, the release reveals that the Z Fold 8, Z Fold 8, <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-8-review">Galaxy Z Flip 8</a>, the new <a href="https://www.tomsguide.com/wellness/smartwatches/samsung-turned-the-galaxy-watch-ultra-2-into-a-fully-fledged-dive-computer-but-theres-a-catch">Galaxy Watch Ultra 2</a> and <a href="https://www.tomsguide.com/wellness/smartwatches/5-things-to-know-about-the-new-samsung-galaxy-watch-9">Galaxy Watch 9</a> will all be available on store shelves starting Friday, August 7. </p><div class="product"><a data-dimension112="50b26a80-911a-11f1-8f3f-ab7dc7abc9a7" 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:1327px;"><p class="vanilla-image-block" style="padding-top:64.28%;"><img id="9Rhpe6TtrVFSNo9Vtn27Tm" name="Galaxy Z Fold 8 Ultra deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/9Rhpe6TtrVFSNo9Vtn27Tm-1920-80.jpg" mos="" align="middle" fullscreen="" width="1327" height="853" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><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="50b26a80-911a-11f1-8f3f-ab7dc7abc9a7" 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 main display, 5.5-inch cover display, Snapdragon 8 Elite CPU, 12GB of RAM, and 256GB of storage. In our <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Galaxy Z Fold 8 review</a>, we called it our favorite foldable design to date. <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="50b26a80-911a-11f1-8f3f-ab7dc7abc9a7" 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="50b26b2a-911a-11f1-b240-1d05d7b91779" 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:600px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="XUkFwYXYpdYjL4TYYivxEg" name="Samsung Galaxy Z Fold 8 Ultra deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/XUkFwYXYpdYjL4TYYivxEg-1920-80.jpg" mos="" align="middle" fullscreen="" width="600" height="600" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 Ultra 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="50b26b2a-911a-11f1-b240-1d05d7b91779" 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 />The Galaxy Z Fold 8 Ultra features an 8-inch main display, 6.5-inch cover display and triple camera setup that includes a 200MP main, 50MP ultra-wide, and 10MP 3x telephoto lens. In our <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Galaxy Z Fold 8 Ultra review</a>, we said its greatly reduced crease, upgraded silicon carbon battery, faster charging, and upgraded ultrawide camera make it a 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="50b26b2a-911a-11f1-b240-1d05d7b91779" 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><h2 id="why-this-is-good-news-for-apple">Why this is good news for Apple</h2><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-1920-80.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>One of the more solid rumors surrounding the forthcoming iPhone Ultra is that Apple has opted for more of a <a href="https://www.tomsguide.com/phones/iphones/the-iphone-fold-could-blow-away-the-galaxy-z-fold-8-on-apples-very-first-try-heres-why">passport-style design</a> that is shorter and wider than traditional foldables like the Z Fold 8. A slew of dummy units and leaked renders have shown off the squatter form factor.</p><p>Samsung will likely never confirm this, but allegedly the company <a href="https://www.tomsguide.com/phones/samsung-phones/samsungs-galaxy-z-fold-8-wide-revealed-in-leaked-renders-and-the-iphone-fold-should-be-worried">redesigned the Z Fold 8 i</a>nto the new wider format specifically to rival Apple's purported design. </p><p>Apple's take on the passport-style foldable is supposed to feature an inner <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-leaker-just-spilled-the-beans-on-screen-sizes-and-its-worse-than-we-thought">display measuring 7.8 inches</a> in size or just slightly smaller than the iPad mini, but slightly bigger than the 7.6-inch display on the Z Fold 8. This size is supposed to give Apple's foldable an <a href="https://www.tomsguide.com/phones/iphones/the-foldable-iphone-is-coming-into-focus-heres-the-latest-details">aspect ratio close to 4:3,</a> just like the iPad.</p><p>Apple's device was probably going to prove popular since the tech giant claims around 32% of the <a href="https://gs.statcounter.com/vendor-market-share/mobile" target="_blank">global smartphone market share</a>.</p><p>But despite a starting price of $1,899, Samsung's wider foldable is proving popular. Early estimates tipped the iPhone Ultra to<a href="https://www.tomsguide.com/phones/iphones/iphone-fold-tipped-to-cost-over-usd2-000-heres-why-i-think-apples-making-a-mistake"> cost around $2,000</a>, though more recent ones have hedged <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">higher, around $2,400,</a> thanks to increased component costs.</p><p>If those prices are true, Samsung and Apple could be in for an interesting rivalry as Samsung's lower prices face Apple's popularity.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-ultra-leak-reveals-silicon-carbon-battery-leap-but-also-a-camera-downgrade">Samsung Galaxy S27 Ultra leak reveals silicon carbon battery leap — but also a camera downgrade</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/i-trekked-the-cascade-mountains-with-the-apple-watch-ultra-3-vs-garmin-instinct-3-vs-samsung-galaxy-watch-ultra-2-this-is-the-one-id-take-on-my-next-hike">I trekked the Cascade Mountains with the Apple Watch Ultra 3 vs Garmin Instinct 3 vs Samsung Galaxy Watch Ultra 2 — this is the one I'd take on my next hike</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/3-big-ways-the-iphone-ultra-could-beat-the-galaxy-z-fold-8">iPhone Ultra vs Galaxy Z Fold 8 — here's 3 big ways Apple could win</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z8-series-foldable-pre-orders-up-30-percent-as-half-snag-the-wide-fold-8-great-news-for-iphone-ultra</link>
                                                                            <description>
                            <![CDATA[ Samsung confirms reports that the Z Fold 8 foldable phones are very popular especially the new wider version. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">itRdkhzCo9a5xLEgzcM9JE</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/NPrLtCug9FGAyoEFnMEedN-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 05 Aug 2026 22:03:19 +0000</pubDate>                                                                                                                                <updated>Wed, 05 Aug 2026 22:09:23 +0000</updated>
                                                                                                                                            <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ scott.younker@futurenet.com (Scott Younker) ]]></author>                    <dc:creator><![CDATA[ Scott Younker ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/RZsUpqcJ6Uj2q83oCUwNhQ-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Scott Younker is the West Coast Reporter at Tom’s Guide. He covers all the latest tech news, including phones, computing and more. He’s been involved in tech since 2011 covering everything from cameras and swimming pool equipment to the latest gaming consoles and smart TVs. He is on a seemingly never ending hunt to build the easiest to use home media system. &lt;/p&gt;&lt;p&gt;Before Tom’s Guide, Scott worked for publications like &lt;em&gt;Digital Trends, Outdoor Photographer, Dead Beats Panel&lt;/em&gt;, and in a brief detour, &lt;em&gt;America’s Funniest Home Videos&lt;/em&gt;. Yes, he has seen more pratfalls, silly pets and ridiculous home movie fails than is reasonably healthy. &lt;/p&gt;&lt;p&gt;When not writing about the latest devices or advances in chipsets, be sure to ask about Scott about disc golf and sustainability, or just if you’re being cheeky, ask about his noodle arm. If you truly want to get nerdy, bring up board games and his ongoing losing streak. &lt;/p&gt;&lt;p&gt;Scott joined Tom&#039;s Guide in 2024 as the West Coast Reporter. He graduated from the School of Journalism at the University of Oregon with a degree in magazine journalism and a minor in communications. While there he blogged or wrote for several magazines including the Fluxx, Ethos and the Oregon Commentator. He briefly wrote and managed a moderately successful blog focused on web comics. &lt;br&gt;Send secure tips on Signal: scyo1.55.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/NPrLtCug9FGAyoEFnMEedN-1920-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Samsung Galaxy Z Fold 8 and Galaxy Z Fold 8 Ultra]]></media:description>                                                            <media:text><![CDATA[Samsung Galaxy Z Fold 8 and Galaxy Z Fold 8 Ultra]]></media:text>
                                <media:title type="plain"><![CDATA[Samsung Galaxy Z Fold 8 and Galaxy Z Fold 8 Ultra]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/NPrLtCug9FGAyoEFnMEedN-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>In the last couple of weeks,<a href="https://x.com/UniverseIce/status/2084505308836089926" target="_blank"> Samsung leakers</a> and <a href="https://www.sammobile.com/news/galaxy-z-flip-fold-8-sales-20-percent-higher-z-flip-fold-7-europe/" target="_blank">some news reports</a> have indicated that the Z Fold 8 series is proving super popular and already selling better than its predecessor. This could be great news for the <a href="https://www.tomsguide.com/phones/iphones/iphone-ultra-rumors-everything-you-need-to-know-about-the-foldable-iphone">iPhone Ultra,</a> which is supposed to launch next month.</p><p>Samsung decided to confirm those numbers itself with a new press release asserting that the Z8 series of foldables is breaking records for pre-orders, especially the new wider <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Galaxy Z Fold 8</a>. According to the Korean company, pre-orders increased more than 30% compared to last year's Galaxy Z Fold 7.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OajbyX"></div>                            </div>                            <script src="https://kwizly.com/embed/OajbyX.js" async=""></script><p>For the series, the wider Z Fold 8 makes up "nearly half of all pre-orders" with the Lavender color already sold out, though Graphite is apparently the most popular hue. Samsung claims 3x as many Flip users are switching to the bigger Fold this year as well.</p><p>Per the <a href="https://news.samsung.com/kr/%ec%9d%b4%eb%9f%b0-%ed%8f%b4%eb%8d%94%eb%b8%94%ec%9d%84-%ea%b8%b0%eb%8b%a4%eb%a0%a4-%ec%99%94%ec%96%b4%ec%9a%94%eb%82%a0%ec%94%a8%eb%a7%8c%ed%81%bc-%eb%9c%a8%ea%b1%b0" target="_blank">Korean version of the Samsung website</a>, the company received 1.44 million pre-orders between July 28 and August 3, a record for any Galaxy phone.</p><p>Additionally, the release reveals that the Z Fold 8, Z Fold 8, <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-8-review">Galaxy Z Flip 8</a>, the new <a href="https://www.tomsguide.com/wellness/smartwatches/samsung-turned-the-galaxy-watch-ultra-2-into-a-fully-fledged-dive-computer-but-theres-a-catch">Galaxy Watch Ultra 2</a> and <a href="https://www.tomsguide.com/wellness/smartwatches/5-things-to-know-about-the-new-samsung-galaxy-watch-9">Galaxy Watch 9</a> will all be available on store shelves starting Friday, August 7. </p><div class="product"><a data-dimension112="50b26a80-911a-11f1-8f3f-ab7dc7abc9a7" 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:1327px;"><p class="vanilla-image-block" style="padding-top:64.28%;"><img id="9Rhpe6TtrVFSNo9Vtn27Tm" name="Galaxy Z Fold 8 Ultra deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/9Rhpe6TtrVFSNo9Vtn27Tm-1920-80.jpg" mos="" align="middle" fullscreen="" width="1327" height="853" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><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="50b26a80-911a-11f1-8f3f-ab7dc7abc9a7" 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 main display, 5.5-inch cover display, Snapdragon 8 Elite CPU, 12GB of RAM, and 256GB of storage. In our <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Galaxy Z Fold 8 review</a>, we called it our favorite foldable design to date. <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="50b26a80-911a-11f1-8f3f-ab7dc7abc9a7" 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="50b26b2a-911a-11f1-b240-1d05d7b91779" 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:600px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="XUkFwYXYpdYjL4TYYivxEg" name="Samsung Galaxy Z Fold 8 Ultra deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/XUkFwYXYpdYjL4TYYivxEg-1920-80.jpg" mos="" align="middle" fullscreen="" width="600" height="600" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 Ultra 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="50b26b2a-911a-11f1-b240-1d05d7b91779" 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 />The Galaxy Z Fold 8 Ultra features an 8-inch main display, 6.5-inch cover display and triple camera setup that includes a 200MP main, 50MP ultra-wide, and 10MP 3x telephoto lens. In our <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Galaxy Z Fold 8 Ultra review</a>, we said its greatly reduced crease, upgraded silicon carbon battery, faster charging, and upgraded ultrawide camera make it a 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="50b26b2a-911a-11f1-b240-1d05d7b91779" 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><h2 id="why-this-is-good-news-for-apple">Why this is good news for Apple</h2><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-1920-80.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>One of the more solid rumors surrounding the forthcoming iPhone Ultra is that Apple has opted for more of a <a href="https://www.tomsguide.com/phones/iphones/the-iphone-fold-could-blow-away-the-galaxy-z-fold-8-on-apples-very-first-try-heres-why">passport-style design</a> that is shorter and wider than traditional foldables like the Z Fold 8. A slew of dummy units and leaked renders have shown off the squatter form factor.</p><p>Samsung will likely never confirm this, but allegedly the company <a href="https://www.tomsguide.com/phones/samsung-phones/samsungs-galaxy-z-fold-8-wide-revealed-in-leaked-renders-and-the-iphone-fold-should-be-worried">redesigned the Z Fold 8 i</a>nto the new wider format specifically to rival Apple's purported design. </p><p>Apple's take on the passport-style foldable is supposed to feature an inner <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-leaker-just-spilled-the-beans-on-screen-sizes-and-its-worse-than-we-thought">display measuring 7.8 inches</a> in size or just slightly smaller than the iPad mini, but slightly bigger than the 7.6-inch display on the Z Fold 8. This size is supposed to give Apple's foldable an <a href="https://www.tomsguide.com/phones/iphones/the-foldable-iphone-is-coming-into-focus-heres-the-latest-details">aspect ratio close to 4:3,</a> just like the iPad.</p><p>Apple's device was probably going to prove popular since the tech giant claims around 32% of the <a href="https://gs.statcounter.com/vendor-market-share/mobile" target="_blank">global smartphone market share</a>.</p><p>But despite a starting price of $1,899, Samsung's wider foldable is proving popular. Early estimates tipped the iPhone Ultra to<a href="https://www.tomsguide.com/phones/iphones/iphone-fold-tipped-to-cost-over-usd2-000-heres-why-i-think-apples-making-a-mistake"> cost around $2,000</a>, though more recent ones have hedged <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">higher, around $2,400,</a> thanks to increased component costs.</p><p>If those prices are true, Samsung and Apple could be in for an interesting rivalry as Samsung's lower prices face Apple's popularity.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-ultra-leak-reveals-silicon-carbon-battery-leap-but-also-a-camera-downgrade">Samsung Galaxy S27 Ultra leak reveals silicon carbon battery leap — but also a camera downgrade</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/i-trekked-the-cascade-mountains-with-the-apple-watch-ultra-3-vs-garmin-instinct-3-vs-samsung-galaxy-watch-ultra-2-this-is-the-one-id-take-on-my-next-hike">I trekked the Cascade Mountains with the Apple Watch Ultra 3 vs Garmin Instinct 3 vs Samsung Galaxy Watch Ultra 2 — this is the one I'd take on my next hike</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/3-big-ways-the-iphone-ultra-could-beat-the-galaxy-z-fold-8">iPhone Ultra vs Galaxy Z Fold 8 — here's 3 big ways Apple could win</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I tested the Galaxy Z Fold 8 vs. Fold 8 Ultra to see if the lack of a telephoto zoom is a dealbreaker ]]></title>
                                                                                                <dc:content><![CDATA[ <p>One of the biggest complaints people have about the $1,899 <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Galaxy Z Fold 8</a> (myself included) is that it doesn't have a dedicated telephoto zoom lens. You're stuck with just a wide and ultrawide camera. There's just a digital zoom that goes up to 10x.</p><p>Meanwhile, the $2,099 <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Galaxy Z Fold 8 Ultra</a> packs a 3x telephoto lens with a max digital zoom of 30x. So does having a dedicated optical zoom camera make that big a difference? To find out, I took both of these <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">foldable phones</a> out to shoot a series of photos at various magnifications. And while there's very little difference at 4x, you really start to notice the difference at 10x (in some instances). Here's the results.</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="fold-8-vs-fold-8-ultra-ice-cream-truck-4x">Fold 8 vs Fold 8 Ultra: Ice cream truck (4x)</h2><iframe allow="" height="463" 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=908e80d8-8f78-11f1-ba1b-0e6f42328d7d"></iframe><p>At first glance there doesn't seem to be much of a difference in this shot of an ice cream truck. But upon closer inspection, the Fold 8 Ultra's photo has sharper text, especially around the words "Cups" and "Shakes." Overall, the image from the Fold 8 Ultra looks clearer versus the regular Fold 8, whose shot generally looks hazier.</p><h2 id="fold-8-vs-fold-8-ultra-ice-cream-truck-10x">Fold 8 vs Fold 8 Ultra: Ice Cream Truck (10x)</h2><iframe allow="" height="463" 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=b927fb6e-8f78-11f1-ba1b-0e6f42328d7d"></iframe><p>Ironically, as we zoom in even further at 10x, the Fold 8 Ultra doesn't offer a clearly superior shot. The digital zooms on both phones struggle to make out the text beneath the ice cream options. For that, you'd either need better AI processing or a longer telephoto lens.</p><div class="product"><a data-dimension112="7abfa68a-900c-11f1-b69c-410646b74ad0" 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:1327px;"><p class="vanilla-image-block" style="padding-top:64.28%;"><img id="9Rhpe6TtrVFSNo9Vtn27Tm" name="Galaxy Z Fold 8 Ultra deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/9Rhpe6TtrVFSNo9Vtn27Tm-1920-80.jpg" mos="" align="middle" fullscreen="" width="1327" height="853" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><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="7abfa68a-900c-11f1-b69c-410646b74ad0" 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 main display, 5.5-inch cover display, Snapdragon 8 Elite CPU, 12GB of RAM, and 256GB of storage. In our <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Galaxy Z Fold 8 review</a>, we called it our favorite foldable design to date. <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="7abfa68a-900c-11f1-b69c-410646b74ad0" 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="7abfa702-900c-11f1-9ab6-ffe0ecddbd0f" 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:600px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="XUkFwYXYpdYjL4TYYivxEg" name="Samsung Galaxy Z Fold 8 Ultra deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/XUkFwYXYpdYjL4TYYivxEg-1920-80.jpg" mos="" align="middle" fullscreen="" width="600" height="600" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 Ultra 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="7abfa702-900c-11f1-9ab6-ffe0ecddbd0f" 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 />The Galaxy Z Fold 8 Ultra features an 8-inch main display, 6.5-inch cover display and triple camera setup that includes a 200MP main, 50MP ultra-wide, and 10MP 3x telephoto lens. In our <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Galaxy Z Fold 8 Ultra review</a>, we said its greatly reduced crease, upgraded silicon carbon battery, faster charging, and upgraded ultrawide camera make it a 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="7abfa702-900c-11f1-9ab6-ffe0ecddbd0f" 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><h2 id="fold-8-vs-fold-8-ultra-times-square-3x">Fold 8 vs Fold 8 Ultra: Times Square (3x)</h2><iframe allow="" height="463" 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=d5cb95bf-8f78-11f1-ba1b-0e6f42328d7d"></iframe><p>For this shot I wanted to compare the true 3x optical zoom on the Fold 8 Ultra versus the 3x digital zoom on the Fold 8. And I have to say that the Fold 8 more than holds its own. Even upon close inspection I didn't notice much crisper detail from the Fold 8 Ultra. In fact, I prefer the slightly brighter exposure from the Fold 8, especially in the foreground.</p><h2 id="fold-8-vs-fold-8-ultra-statue-4x">Fold 8 vs Fold 8 Ultra: Statue (4x)</h2><iframe allow="" height="463" 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=ee116f9a-8f78-11f1-ba1b-0e6f42328d7d"></iframe><p>I give the edge to the Galaxy Z Fold 8 in this photo of the José Bonifácio de Andrada e Silva statue in Bryant Park. The statue looks a bit sharper, and the string lights in the background are easier to make out. The Fold 8 Ultra's shot is fine but just not as crisp.</p><h2 id="fold-8-vs-fold-8-ultra-statue-10x">Fold 8 vs Fold 8 Ultra: Statue (10x)</h2><iframe allow="" height="463" 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=058a989a-8f79-11f1-ba1b-0e6f42328d7d"></iframe><p>It's a different story at 10x zoom, as the Fold 8 Ultra pulls ahead. The shirt, tie and jacket on the statue all have more detail through the Ultra. The Fold 8's image is blurrier and loses some of the detail in the shadows.</p><h2 id="fold-8-vs-fold-8-ultra-street-sign-4x">Fold 8 vs Fold 8 Ultra: Street Sign (4x)</h2><iframe allow="" height="463" 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=35e65f7e-8f79-11f1-ba1b-0e6f42328d7d"></iframe><p>I'm a bit torn when it comes to this photo of the Avenue of the Americas sign shot at 4x zoom. The text definitely pops more through the Fold 8 Ultra, both on the sign itself and on the Movie Nights sign to the right. However, the street sign post looks slightly better through the Fold 8.</p><h2 id="fold-8-vs-fold-8-ultra-street-sign-10x">Fold 8 vs Fold 8 Ultra: Street Sign (10x)</h2><iframe allow="" height="463" 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=1da8ad40-8f79-11f1-ba1b-0e6f42328d7d"></iframe><p>Once we start zooming in further you can immediately tell that the 10x zoom on the Fold 8 Ultra produces sharper-looking text in the sign. All of the letters look crisper, though certainly not perfect. The Fold 8 struggles with a blurrier pic. The bronz pole for the lamp post has a lot more detail, too, especially in the ornamental leaves.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XYdZvO"></div>                            </div>                            <script src="https://kwizly.com/embed/XYdZvO.js" async=""></script><h2 id="fold-8-vs-fold-8-ultra-street-sign-10x-vs-30x">Fold 8 vs Fold 8 Ultra: Street Sign (10x vs 30x)</h2><iframe allow="" height="463" 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=4e9dd6a0-8f79-11f1-ba1b-0e6f42328d7d"></iframe><p>Lastly, this shot shows how you can get really close on the street sign with the Fold 8 Ultra, which would require additional cropping on the Fold 8. And the Fold 8 Ultra comes out on top with more detail in the lettering. </p><h2 id="bottom-line-4">Bottom line</h2><p>My overall takeaway is that the Galaxy Z Fold 8 Ultra's telephoto zoom and longer digital zoom are indeed better than what you get from the Fold 8. Having a dedicated telephoto lens certainly helps, but the difference was not as dramatic as I was expecting. And to me this difference alone is certainly not worth paying an extra $200 for. </p><p>The Fold 8 Ultra has other advantages over the Fold 8, including a slightly larger display (8 inches vs 7.6 inches) and even longer battery life. But some may simply prefer the wider, shorter and lighter form factor of the Fold 8.</p><p>So, yes, the telephoto zoom matters. But I don't think it's a dealbreaker. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom’s Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/ive-tested-the-galaxy-z-fold-8-and-it-proves-apple-really-needs-to-solve-this-one-thing">I’ve tested the Galaxy Z Fold 8 and it proves Apple really needs to solve this one thing</a></li><li><a href="https://www.tomsguide.com/ai/gemini-notebook-just-sold-me-on-foldables-heres-why-i-finally-get-the-hype">Gemini Notebook just sold me on foldables — here's why I finally get the hype</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-preorder-deals-heres-how-im-saving-up-to-usd1-200-on-samsungs-new-phones">Don't pay full price for your Galaxy Z Fold 8: this preorder deal knocks up to $1,200 off</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-vs-fold-8-ultra-camera-test-is-the-telephoto-zoom-worth-the-extra-usd200</link>
                                                                            <description>
                            <![CDATA[ The Galaxy Z Fold 8 Ultra's dedicated telephoto lens is one reason you'd pick it up over Galaxy the  Z Fold 8, so I put their camera capabilities to the test. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">vPSVz9swi8e5gss2wZCW5o</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/NPrLtCug9FGAyoEFnMEedN-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 05 Aug 2026 04:00:00 +0000</pubDate>                                                                                                                                <updated>Wed, 05 Aug 2026 16:39:36 +0000</updated>
                                                                                                                                            <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Mark Spoonauer ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/wtAspSzVfcKLB4JEd39AMo-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Mark Spoonauer is the global editor in chief of Tom&#039;s Guide and has covered technology for over 20 years. He oversees the direction of Tom&#039;s Guide and leads a team of over 25 journalists to bring you our expert buying guides, reviews, news, how-to articles, deals and other coverage.&lt;/p&gt;&lt;p&gt;Mark has a passion for covering all things mobile, having reviewed dozens of smartphones and other gadgets. He enjoys testing the top mobile devices and putting them up against each other in our in-depth face-offs. He also works hand in hand with our editors and testing team to continually improve how we evaluate products. &lt;/p&gt;&lt;p&gt;Having led Tom&#039;s Guide since 2013, Mark has focused on growing the core tech coverage of the site while also expanding into new areas, such as entertainment, fitness and home, recruiting talented writers and editors to help our readers figure out what to buy and how to get the most out of the products and services they use every day. &lt;/p&gt;&lt;p&gt;Mark has spoken at key industry events and appears regularly on TV to discuss the latest trends, including &lt;a href=&quot;https://cheddar.com/media/pixel-watch-gets-a-release-date-at-google-i-o-2022&quot;&gt;Cheddar&lt;/a&gt;, Fox 5, &lt;a href=&quot;https://www.foxbusiness.com/technology/apple-march-event-5g-iphone&quot;&gt;Fox Business&lt;/a&gt; and other outlets. Mark was previously editor in chief of Laptop Mag, and his work has appeared in Wired, Popular Science and Inc. Follow him on Twitter at @mspoonauer.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/NPrLtCug9FGAyoEFnMEedN-1920-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Samsung Galaxy Z Fold 8 and Galaxy Z Fold 8 Ultra]]></media:description>                                                            <media:text><![CDATA[Samsung Galaxy Z Fold 8 and Galaxy Z Fold 8 Ultra]]></media:text>
                                <media:title type="plain"><![CDATA[Samsung Galaxy Z Fold 8 and Galaxy Z Fold 8 Ultra]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/NPrLtCug9FGAyoEFnMEedN-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>One of the biggest complaints people have about the $1,899 <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Galaxy Z Fold 8</a> (myself included) is that it doesn't have a dedicated telephoto zoom lens. You're stuck with just a wide and ultrawide camera. There's just a digital zoom that goes up to 10x.</p><p>Meanwhile, the $2,099 <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Galaxy Z Fold 8 Ultra</a> packs a 3x telephoto lens with a max digital zoom of 30x. So does having a dedicated optical zoom camera make that big a difference? To find out, I took both of these <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">foldable phones</a> out to shoot a series of photos at various magnifications. And while there's very little difference at 4x, you really start to notice the difference at 10x (in some instances). Here's the results.</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="fold-8-vs-fold-8-ultra-ice-cream-truck-4x">Fold 8 vs Fold 8 Ultra: Ice cream truck (4x)</h2><iframe allow="" height="463" 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=908e80d8-8f78-11f1-ba1b-0e6f42328d7d"></iframe><p>At first glance there doesn't seem to be much of a difference in this shot of an ice cream truck. But upon closer inspection, the Fold 8 Ultra's photo has sharper text, especially around the words "Cups" and "Shakes." Overall, the image from the Fold 8 Ultra looks clearer versus the regular Fold 8, whose shot generally looks hazier.</p><h2 id="fold-8-vs-fold-8-ultra-ice-cream-truck-10x">Fold 8 vs Fold 8 Ultra: Ice Cream Truck (10x)</h2><iframe allow="" height="463" 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=b927fb6e-8f78-11f1-ba1b-0e6f42328d7d"></iframe><p>Ironically, as we zoom in even further at 10x, the Fold 8 Ultra doesn't offer a clearly superior shot. The digital zooms on both phones struggle to make out the text beneath the ice cream options. For that, you'd either need better AI processing or a longer telephoto lens.</p><div class="product"><a data-dimension112="7abfa68a-900c-11f1-b69c-410646b74ad0" 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:1327px;"><p class="vanilla-image-block" style="padding-top:64.28%;"><img id="9Rhpe6TtrVFSNo9Vtn27Tm" name="Galaxy Z Fold 8 Ultra deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/9Rhpe6TtrVFSNo9Vtn27Tm-1920-80.jpg" mos="" align="middle" fullscreen="" width="1327" height="853" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><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="7abfa68a-900c-11f1-b69c-410646b74ad0" 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 main display, 5.5-inch cover display, Snapdragon 8 Elite CPU, 12GB of RAM, and 256GB of storage. In our <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Galaxy Z Fold 8 review</a>, we called it our favorite foldable design to date. <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="7abfa68a-900c-11f1-b69c-410646b74ad0" 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="7abfa702-900c-11f1-9ab6-ffe0ecddbd0f" 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:600px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="XUkFwYXYpdYjL4TYYivxEg" name="Samsung Galaxy Z Fold 8 Ultra deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/XUkFwYXYpdYjL4TYYivxEg-1920-80.jpg" mos="" align="middle" fullscreen="" width="600" height="600" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 Ultra 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="7abfa702-900c-11f1-9ab6-ffe0ecddbd0f" 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 />The Galaxy Z Fold 8 Ultra features an 8-inch main display, 6.5-inch cover display and triple camera setup that includes a 200MP main, 50MP ultra-wide, and 10MP 3x telephoto lens. In our <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Galaxy Z Fold 8 Ultra review</a>, we said its greatly reduced crease, upgraded silicon carbon battery, faster charging, and upgraded ultrawide camera make it a 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="7abfa702-900c-11f1-9ab6-ffe0ecddbd0f" 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><h2 id="fold-8-vs-fold-8-ultra-times-square-3x">Fold 8 vs Fold 8 Ultra: Times Square (3x)</h2><iframe allow="" height="463" 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=d5cb95bf-8f78-11f1-ba1b-0e6f42328d7d"></iframe><p>For this shot I wanted to compare the true 3x optical zoom on the Fold 8 Ultra versus the 3x digital zoom on the Fold 8. And I have to say that the Fold 8 more than holds its own. Even upon close inspection I didn't notice much crisper detail from the Fold 8 Ultra. In fact, I prefer the slightly brighter exposure from the Fold 8, especially in the foreground.</p><h2 id="fold-8-vs-fold-8-ultra-statue-4x">Fold 8 vs Fold 8 Ultra: Statue (4x)</h2><iframe allow="" height="463" 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=ee116f9a-8f78-11f1-ba1b-0e6f42328d7d"></iframe><p>I give the edge to the Galaxy Z Fold 8 in this photo of the José Bonifácio de Andrada e Silva statue in Bryant Park. The statue looks a bit sharper, and the string lights in the background are easier to make out. The Fold 8 Ultra's shot is fine but just not as crisp.</p><h2 id="fold-8-vs-fold-8-ultra-statue-10x">Fold 8 vs Fold 8 Ultra: Statue (10x)</h2><iframe allow="" height="463" 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=058a989a-8f79-11f1-ba1b-0e6f42328d7d"></iframe><p>It's a different story at 10x zoom, as the Fold 8 Ultra pulls ahead. The shirt, tie and jacket on the statue all have more detail through the Ultra. The Fold 8's image is blurrier and loses some of the detail in the shadows.</p><h2 id="fold-8-vs-fold-8-ultra-street-sign-4x">Fold 8 vs Fold 8 Ultra: Street Sign (4x)</h2><iframe allow="" height="463" 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=35e65f7e-8f79-11f1-ba1b-0e6f42328d7d"></iframe><p>I'm a bit torn when it comes to this photo of the Avenue of the Americas sign shot at 4x zoom. The text definitely pops more through the Fold 8 Ultra, both on the sign itself and on the Movie Nights sign to the right. However, the street sign post looks slightly better through the Fold 8.</p><h2 id="fold-8-vs-fold-8-ultra-street-sign-10x">Fold 8 vs Fold 8 Ultra: Street Sign (10x)</h2><iframe allow="" height="463" 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=1da8ad40-8f79-11f1-ba1b-0e6f42328d7d"></iframe><p>Once we start zooming in further you can immediately tell that the 10x zoom on the Fold 8 Ultra produces sharper-looking text in the sign. All of the letters look crisper, though certainly not perfect. The Fold 8 struggles with a blurrier pic. The bronz pole for the lamp post has a lot more detail, too, especially in the ornamental leaves.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XYdZvO"></div>                            </div>                            <script src="https://kwizly.com/embed/XYdZvO.js" async=""></script><h2 id="fold-8-vs-fold-8-ultra-street-sign-10x-vs-30x">Fold 8 vs Fold 8 Ultra: Street Sign (10x vs 30x)</h2><iframe allow="" height="463" 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=4e9dd6a0-8f79-11f1-ba1b-0e6f42328d7d"></iframe><p>Lastly, this shot shows how you can get really close on the street sign with the Fold 8 Ultra, which would require additional cropping on the Fold 8. And the Fold 8 Ultra comes out on top with more detail in the lettering. </p><h2 id="bottom-line-4">Bottom line</h2><p>My overall takeaway is that the Galaxy Z Fold 8 Ultra's telephoto zoom and longer digital zoom are indeed better than what you get from the Fold 8. Having a dedicated telephoto lens certainly helps, but the difference was not as dramatic as I was expecting. And to me this difference alone is certainly not worth paying an extra $200 for. </p><p>The Fold 8 Ultra has other advantages over the Fold 8, including a slightly larger display (8 inches vs 7.6 inches) and even longer battery life. But some may simply prefer the wider, shorter and lighter form factor of the Fold 8.</p><p>So, yes, the telephoto zoom matters. But I don't think it's a dealbreaker. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom’s Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/ive-tested-the-galaxy-z-fold-8-and-it-proves-apple-really-needs-to-solve-this-one-thing">I’ve tested the Galaxy Z Fold 8 and it proves Apple really needs to solve this one thing</a></li><li><a href="https://www.tomsguide.com/ai/gemini-notebook-just-sold-me-on-foldables-heres-why-i-finally-get-the-hype">Gemini Notebook just sold me on foldables — here's why I finally get the hype</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-preorder-deals-heres-how-im-saving-up-to-usd1-200-on-samsungs-new-phones">Don't pay full price for your Galaxy Z Fold 8: this preorder deal knocks up to $1,200 off</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I used a thermal camera to see how hot the Galaxy Z Fold 8 Ultra gets compared to the Galaxy S26 Ultra — here's what happened ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Samsung has packed a bunch of upgrades into the new <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Galaxy Z Fold 8 Ultra</a>, but the one noticeable absence is the lack of any sort of active cooling system. The <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review">Galaxy S26 Ultra</a> has a built-in vapor chamber to prevent heat build-up, and similar features have existed in non-folding flagships for over a decade.</p><p>The question isn't why hasn't Samsung added a vapor chamber to its foldables yet, it's whether that actually matters. The Galaxy Z Fold 8 Ultra has the same super-powered <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-s26-performance-face-off-snapdragon-8-elite-gen-5-vs-exynos-2600">Snapdragon 8 Elite Gen 5 for Galaxy chip </a>as the S26 Ultra, and I was curious how much heat would actually build up in both phones — and more importantly, where it ends up.</p><p>So I grabbed my trusty thermal camera, the <a href="https://www.tomsguide.com/opinion/i-used-this-thermal-camera-to-identify-heat-loss-in-my-home-heres-what-i-found">Flir One Pro</a>, and set up the Galaxy Z Fold 8 Ultra alongside the Galaxy S26 Ultra, <a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-7-review">Galaxy Z Fold 7</a> and the <a href="https://www.tomsguide.com/phones/iphones/iphone-17-pro-max-review">iPhone 17 Pro Max</a> side by side. Then, by running <a href="https://www.3dmark.com/" target="_blank" rel="nofollow">3DMark's</a> Solar Bay Extreme Stress Test, I recorded just how much heat all four phones produced.</p><h2 id="is-it-getting-hot-in-here">Is it getting hot in here?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:693px;"><p class="vanilla-image-block" style="padding-top:64.07%;"><img id="znB7Xvbzpp2dt6HgMwsjSj" name="ezgif-65d79b61dde731aa" alt="z fold 8 ultra thermal camera" src="https://cdn.mos.cms.futurecdn.net/znB7Xvbzpp2dt6HgMwsjSj-1920-80.gif" mos="" align="middle" fullscreen="" width="693" height="444" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">Left to right: S26 Ultra, iPhone 17 Pro Max, Z Fold 8 Ultra, Z Fold 7 </span><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>If you look at the video of all four phones, you can see that the Galaxy S26 Ultra starts heating up the fastest, hitting around 30C/86F in around a minute. The iPhone 17 Pro Max isn't that far behind, though the Z Fold 8 Ultra and Z Fold 7 both seem to be heating up a lot more slowly in their folded state.</p><p>The S26 Ultra seems to concentrate most of its heat in the top left corner, on the opposite side of the phone to the vertical camera bar. Meanwhile, the iPhone 17 Pro Max has a large section of heat across its top half, where the raised plateau camera bar is — which makes sense considering Apple designed the camera bar to help dissipate heat.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/ZRLvLLAGituNoaESiU4oo9-1920-80.png" alt="z fold 8 ultra thermal camera test" /><figcaption>1 minute into testing<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/bzj92un33KpMxAF44bHwo9-1920-80.png" alt="z fold 8 ultra thermal camera test" /><figcaption>4 minutes into testing<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/oX5iuHNRbkQxxyWEGvANp9-1920-80.png" alt="z fold 8 ultra thermal camera test" /><figcaption>9 minutes into testing<small role="credit">Future</small></figcaption></figure></figure><p>As the videos approach the 4-minute mark, the S26 Ultra starts to approach 40C/104F, while the two foldables only just hit 30C/86F. The iPhone isn't that far behind Samsung, and in the case of all four phones the heat seems to be mainly concentrated in the top half of each device. </p><p>By the time the 10-minute run is almost complete, parts of the S26 Ultra and iPhone have exceeded 40C/104F, while the foldables both seem to be hovering between 35C/95F and 37C/99F. At this stage the heat seems to have covered the entirety of the four phones, though only the iPhone and S26 Ultra have such high concentrations.</p><p>When I picked up the phones after closing 3DMark, I found that the S26 Ultra definitely felt the hottest, especially around the camera bar. Not quite enough to instantly burn yourself, but hot enough that you don't want prolonged exposure to it. The iPhone was similar, though didn't feel quite as hot, while the two foldables didn't feel that much different from normal.</p><h2 id="unfolding-the-heat">Unfolding the heat</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:601px;"><p class="vanilla-image-block" style="padding-top:64.89%;"><img id="4NBA7rCAbyzBwqtNsmwwVW" name="ezgif-6d4db9046320a37d" alt="z fold 8 ultra vs z fold 7 thermal camera test" src="https://cdn.mos.cms.futurecdn.net/4NBA7rCAbyzBwqtNsmwwVW-1920-80.gif" mos="" align="middle" fullscreen="" width="601" height="390" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">Left: Galaxy Z Fold 8 Ultra. Right: Galaxy Z Fold 7 </span><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Of course these readings were taken from the front of the phone, while the two foldables were all closed up. How much of a difference would unfolding them make? As it turns out, quite a lot.</p><p>As soon as the benchmarking test started, heat bloomed out of both phones in the top right — right where the camera bar is. Unsurprisingly given its more powerful hardware, the temperature climbed much higher on the Z Fold 8 Ultra, though the Z Fold 7 wasn't that far behind.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/g9wgFLhXViFwMhiYSLPDxG-1920-80.png" alt="z fold 8 ultra vs z fold 7 thermal test screenshots" /><figcaption>1 minute into testing<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/73eGhkiwfqAfgimrDBqfvG-1920-80.png" alt="z fold 8 ultra vs z fold 7 thermal test screenshots" /><figcaption>5 minutes into testing<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/ookdm6idgGQ2qpSU3Z9etG-1920-80.png" alt="z fold 8 ultra vs z fold 7 thermal test screenshots" /><figcaption>10 minutes into testing<small role="credit">Future</small></figcaption></figure></figure><p>Within 20 seconds the temperature had jumped past 30C/89F, and after a minute the Z Fold 8 Ultra had already climbed past 40C/104F. 20 seconds later the Z Fold 7 joined it, and in both cases the heat was concentrated in the top right corner before slowly spreading out over both halves of the phones.</p><p>The temperature plateaued pretty quickly, landing a few degrees higher than 40C and hovering around that level. The majority of the heat remained concentrated on the right side of the phone too, with minimal transference  over to the left half. </p><p>This explains why the heat build-up seemed so slow in the previous test. The majority of the heat will have also been concentrated at the back of the device where the thermal camera couldn't pick it up as easily.</p><h2 id="verdict-2">Verdict</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="noN4XNdYP8ruPAPbWSqySm" name="PXL_20260723_153411133" alt="samsung galaxy z fold 8 ultra sample photos" src="https://cdn.mos.cms.futurecdn.net/noN4XNdYP8ruPAPbWSqySm-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Galaxy Z Fold 8 Ultra can get pretty hot, but so does the Galaxy S26 Ultra and both phones seem to heat up to similar temperatures. Or, at least they did during identical Solar Bay Extreme Stress Tests — different processes will obviously have different effects.</p><p>The way the heat spread out was completely different, though. The Galaxy S26 Ultra recorded the highest temperatures in the top left side of the phone, on the opposite side of the phone to the cameras. Teardowns have revealed that this is where the vapor chamber cooling pushes the excess heat, so it's natural that this would see the most extreme temperatures. The same goes for the iPhone 17 Pro Max and its own raised camera bar.</p><p>The unfolded stress test showed that the Z Fold 8 Ultra (and Z Fold 7) don't have that advantage. While the heat appears in that top corner by the cameras, it quickly spreads across the entire right side of the phone. Apparently, the heat struggled to bypass the hinge, which is an interesting observation.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OqRVBX"></div>                            </div>                            <script src="https://kwizly.com/embed/OqRVBX.js" async=""></script><p>In the case of the Z Fold 8 Ultra the heat isn't being actively routed away from core internal components — like the battery or chipset. That means it has no choice but to spread out until it reaches the edge of the phone and radiates away. You can actually see that happening in the thermal video as the heat spreads out from the very top of the phone.</p><p>While concentrating the heat in one area seems like a bad thing, if it's a spot with few major components then letting the heat spread across the entire phone is even worse. Because it means the heat isn't actively being siphoned away from the components that are most affected by extreme temperatures. Over extended periods of time, that will lead to degradation and reduced performance and affect the phone's lifespan.</p><p>One thing I did notice when I accidentally closed 3DMark on the Z Fold 8 Ultra at the end of the test, is that the temperature started to drop pretty rapidly once the stress test stopped running. Which should mean that short periods of high-performance activity shouldn't pose a long-term problem. As long as you don't do it too often.</p><p>If you are doing anything performance heavy, make sure to take the appropriate measures to keep your phone as cool as possible. <a href="https://www.tomsguide.com/phones/9-tips-to-keep-your-phone-cool-during-a-heatwave-and-prevent-damage">Our tips for helping your phone survive a heatwave</a> will also apply here, which means avoiding direct sunlight, stop charging and so on. You can speed up the heat removal with things like fans or phone coolers, and you should absolutely avoid forcing your phone to cool down with appliances like the fridge — that's just going to cause even more issues.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/ive-tested-the-galaxy-z-fold-8-and-it-proves-apple-really-needs-to-solve-this-one-thing">I’ve tested the Galaxy Z Fold 8 and it proves Apple really needs to solve this one thing</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/i-tried-the-new-galaxy-ai-video-tracker-on-my-z-fold-8">I tried the new Galaxy AI video tracker on my Z Fold 8 — and it fixes my biggest problem with phone videos</a></li><li><a href="https://www.tomsguide.com/phones/i-asked-siri-ai-and-gemini-a-series-of-increasingly-bizarre-questions-to-see-how-they-responded-heres-what-happened">I asked Siri AI and Gemini a series of increasingly bizarre questions to see how they responded —here's what happened</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/i-used-a-thermal-camera-to-see-how-hot-the-galaxy-z-fold-8-ultra-gets-compared-to-the-galaxy-s26-ultra-heres-what-happened</link>
                                                                            <description>
                            <![CDATA[ Galaxy Z Fold 8 Ultra lacks the same active cooling systems you'd find in the S26 Ultra and iPhone 17 Pro Max — and that could be a problem if you're doing performance-heavy work. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">BoNDJTiYyxadPKFBohbhwk</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/hALYgCgA465TXz5WYQn5RK-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 04 Aug 2026 08:00:00 +0000</pubDate>                                                                                                                                <updated>Tue, 04 Aug 2026 10:48:53 +0000</updated>
                                                                                                                                            <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/hALYgCgA465TXz5WYQn5RK-1920-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Samsung Galaxy Z Fold 8 Ultra next to thermal imaging scan of the phone ]]></media:description>                                                            <media:text><![CDATA[Samsung Galaxy Z Fold 8 Ultra next to thermal imaging scan of the phone ]]></media:text>
                                <media:title type="plain"><![CDATA[Samsung Galaxy Z Fold 8 Ultra next to thermal imaging scan of the phone ]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/hALYgCgA465TXz5WYQn5RK-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Samsung has packed a bunch of upgrades into the new <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Galaxy Z Fold 8 Ultra</a>, but the one noticeable absence is the lack of any sort of active cooling system. The <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review">Galaxy S26 Ultra</a> has a built-in vapor chamber to prevent heat build-up, and similar features have existed in non-folding flagships for over a decade.</p><p>The question isn't why hasn't Samsung added a vapor chamber to its foldables yet, it's whether that actually matters. The Galaxy Z Fold 8 Ultra has the same super-powered <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-s26-performance-face-off-snapdragon-8-elite-gen-5-vs-exynos-2600">Snapdragon 8 Elite Gen 5 for Galaxy chip </a>as the S26 Ultra, and I was curious how much heat would actually build up in both phones — and more importantly, where it ends up.</p><p>So I grabbed my trusty thermal camera, the <a href="https://www.tomsguide.com/opinion/i-used-this-thermal-camera-to-identify-heat-loss-in-my-home-heres-what-i-found">Flir One Pro</a>, and set up the Galaxy Z Fold 8 Ultra alongside the Galaxy S26 Ultra, <a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-7-review">Galaxy Z Fold 7</a> and the <a href="https://www.tomsguide.com/phones/iphones/iphone-17-pro-max-review">iPhone 17 Pro Max</a> side by side. Then, by running <a href="https://www.3dmark.com/" target="_blank" rel="nofollow">3DMark's</a> Solar Bay Extreme Stress Test, I recorded just how much heat all four phones produced.</p><h2 id="is-it-getting-hot-in-here">Is it getting hot in here?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:693px;"><p class="vanilla-image-block" style="padding-top:64.07%;"><img id="znB7Xvbzpp2dt6HgMwsjSj" name="ezgif-65d79b61dde731aa" alt="z fold 8 ultra thermal camera" src="https://cdn.mos.cms.futurecdn.net/znB7Xvbzpp2dt6HgMwsjSj-1920-80.gif" mos="" align="middle" fullscreen="" width="693" height="444" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">Left to right: S26 Ultra, iPhone 17 Pro Max, Z Fold 8 Ultra, Z Fold 7 </span><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>If you look at the video of all four phones, you can see that the Galaxy S26 Ultra starts heating up the fastest, hitting around 30C/86F in around a minute. The iPhone 17 Pro Max isn't that far behind, though the Z Fold 8 Ultra and Z Fold 7 both seem to be heating up a lot more slowly in their folded state.</p><p>The S26 Ultra seems to concentrate most of its heat in the top left corner, on the opposite side of the phone to the vertical camera bar. Meanwhile, the iPhone 17 Pro Max has a large section of heat across its top half, where the raised plateau camera bar is — which makes sense considering Apple designed the camera bar to help dissipate heat.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/ZRLvLLAGituNoaESiU4oo9-1920-80.png" alt="z fold 8 ultra thermal camera test" /><figcaption>1 minute into testing<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/bzj92un33KpMxAF44bHwo9-1920-80.png" alt="z fold 8 ultra thermal camera test" /><figcaption>4 minutes into testing<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/oX5iuHNRbkQxxyWEGvANp9-1920-80.png" alt="z fold 8 ultra thermal camera test" /><figcaption>9 minutes into testing<small role="credit">Future</small></figcaption></figure></figure><p>As the videos approach the 4-minute mark, the S26 Ultra starts to approach 40C/104F, while the two foldables only just hit 30C/86F. The iPhone isn't that far behind Samsung, and in the case of all four phones the heat seems to be mainly concentrated in the top half of each device. </p><p>By the time the 10-minute run is almost complete, parts of the S26 Ultra and iPhone have exceeded 40C/104F, while the foldables both seem to be hovering between 35C/95F and 37C/99F. At this stage the heat seems to have covered the entirety of the four phones, though only the iPhone and S26 Ultra have such high concentrations.</p><p>When I picked up the phones after closing 3DMark, I found that the S26 Ultra definitely felt the hottest, especially around the camera bar. Not quite enough to instantly burn yourself, but hot enough that you don't want prolonged exposure to it. The iPhone was similar, though didn't feel quite as hot, while the two foldables didn't feel that much different from normal.</p><h2 id="unfolding-the-heat">Unfolding the heat</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:601px;"><p class="vanilla-image-block" style="padding-top:64.89%;"><img id="4NBA7rCAbyzBwqtNsmwwVW" name="ezgif-6d4db9046320a37d" alt="z fold 8 ultra vs z fold 7 thermal camera test" src="https://cdn.mos.cms.futurecdn.net/4NBA7rCAbyzBwqtNsmwwVW-1920-80.gif" mos="" align="middle" fullscreen="" width="601" height="390" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">Left: Galaxy Z Fold 8 Ultra. Right: Galaxy Z Fold 7 </span><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Of course these readings were taken from the front of the phone, while the two foldables were all closed up. How much of a difference would unfolding them make? As it turns out, quite a lot.</p><p>As soon as the benchmarking test started, heat bloomed out of both phones in the top right — right where the camera bar is. Unsurprisingly given its more powerful hardware, the temperature climbed much higher on the Z Fold 8 Ultra, though the Z Fold 7 wasn't that far behind.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/g9wgFLhXViFwMhiYSLPDxG-1920-80.png" alt="z fold 8 ultra vs z fold 7 thermal test screenshots" /><figcaption>1 minute into testing<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/73eGhkiwfqAfgimrDBqfvG-1920-80.png" alt="z fold 8 ultra vs z fold 7 thermal test screenshots" /><figcaption>5 minutes into testing<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/ookdm6idgGQ2qpSU3Z9etG-1920-80.png" alt="z fold 8 ultra vs z fold 7 thermal test screenshots" /><figcaption>10 minutes into testing<small role="credit">Future</small></figcaption></figure></figure><p>Within 20 seconds the temperature had jumped past 30C/89F, and after a minute the Z Fold 8 Ultra had already climbed past 40C/104F. 20 seconds later the Z Fold 7 joined it, and in both cases the heat was concentrated in the top right corner before slowly spreading out over both halves of the phones.</p><p>The temperature plateaued pretty quickly, landing a few degrees higher than 40C and hovering around that level. The majority of the heat remained concentrated on the right side of the phone too, with minimal transference  over to the left half. </p><p>This explains why the heat build-up seemed so slow in the previous test. The majority of the heat will have also been concentrated at the back of the device where the thermal camera couldn't pick it up as easily.</p><h2 id="verdict-2">Verdict</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="noN4XNdYP8ruPAPbWSqySm" name="PXL_20260723_153411133" alt="samsung galaxy z fold 8 ultra sample photos" src="https://cdn.mos.cms.futurecdn.net/noN4XNdYP8ruPAPbWSqySm-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Galaxy Z Fold 8 Ultra can get pretty hot, but so does the Galaxy S26 Ultra and both phones seem to heat up to similar temperatures. Or, at least they did during identical Solar Bay Extreme Stress Tests — different processes will obviously have different effects.</p><p>The way the heat spread out was completely different, though. The Galaxy S26 Ultra recorded the highest temperatures in the top left side of the phone, on the opposite side of the phone to the cameras. Teardowns have revealed that this is where the vapor chamber cooling pushes the excess heat, so it's natural that this would see the most extreme temperatures. The same goes for the iPhone 17 Pro Max and its own raised camera bar.</p><p>The unfolded stress test showed that the Z Fold 8 Ultra (and Z Fold 7) don't have that advantage. While the heat appears in that top corner by the cameras, it quickly spreads across the entire right side of the phone. Apparently, the heat struggled to bypass the hinge, which is an interesting observation.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OqRVBX"></div>                            </div>                            <script src="https://kwizly.com/embed/OqRVBX.js" async=""></script><p>In the case of the Z Fold 8 Ultra the heat isn't being actively routed away from core internal components — like the battery or chipset. That means it has no choice but to spread out until it reaches the edge of the phone and radiates away. You can actually see that happening in the thermal video as the heat spreads out from the very top of the phone.</p><p>While concentrating the heat in one area seems like a bad thing, if it's a spot with few major components then letting the heat spread across the entire phone is even worse. Because it means the heat isn't actively being siphoned away from the components that are most affected by extreme temperatures. Over extended periods of time, that will lead to degradation and reduced performance and affect the phone's lifespan.</p><p>One thing I did notice when I accidentally closed 3DMark on the Z Fold 8 Ultra at the end of the test, is that the temperature started to drop pretty rapidly once the stress test stopped running. Which should mean that short periods of high-performance activity shouldn't pose a long-term problem. As long as you don't do it too often.</p><p>If you are doing anything performance heavy, make sure to take the appropriate measures to keep your phone as cool as possible. <a href="https://www.tomsguide.com/phones/9-tips-to-keep-your-phone-cool-during-a-heatwave-and-prevent-damage">Our tips for helping your phone survive a heatwave</a> will also apply here, which means avoiding direct sunlight, stop charging and so on. You can speed up the heat removal with things like fans or phone coolers, and you should absolutely avoid forcing your phone to cool down with appliances like the fridge — that's just going to cause even more issues.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/ive-tested-the-galaxy-z-fold-8-and-it-proves-apple-really-needs-to-solve-this-one-thing">I’ve tested the Galaxy Z Fold 8 and it proves Apple really needs to solve this one thing</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/i-tried-the-new-galaxy-ai-video-tracker-on-my-z-fold-8">I tried the new Galaxy AI video tracker on my Z Fold 8 — and it fixes my biggest problem with phone videos</a></li><li><a href="https://www.tomsguide.com/phones/i-asked-siri-ai-and-gemini-a-series-of-increasingly-bizarre-questions-to-see-how-they-responded-heres-what-happened">I asked Siri AI and Gemini a series of increasingly bizarre questions to see how they responded —here's what happened</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ iPhone Ultra vs Galaxy Z Fold 8 — here's 3 big ways Apple could win ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win"><u>Galaxy Z Fold 8</u></a> is getting pretty positive review, and it looks like this wide format device is the shape of foldable phones to come. That includes the iPhone Ultra, which is expected to launch this fall.</p><p>Based on the <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-heres-what-the-leaks-and-rumors-say-about-apples-alleged-upcoming-foldable-phone?utm_source=google&amp;utm_medium=h5d&amp;utm_campaign=h_tg_00284&amp;gad_source=1&amp;gad_campaignid=22851877377&amp;gbraid=0AAAAAqzfqMbEgt7haejazcQhI_4dGXhNJ&amp;gclid=Cj0KCQjw-MDTBhCgARIsAKAkdlQY7GWAahIQGfnQYM7FwAvIKa1pRNqQmyrDQr8CgrR9CgYXuoH6sFMaAsxXEALw_wcB"><u>iPhone Ultra</u></a> (aka iPhone Fold) rumors thus far, it looks like Apple’s device is going to be slightly heavier and thicker but sport a very similar passport-style design. So how is Apple going to stand out, especially with an asking price that could reach $2,400 or $2,500 — at least $500 more than Samsung’s device? Here’s three ways the iPhone Ultra could beat the Galaxy Z Fold 8.</p><h2 id="no-crease-at-all">No crease at all?!</h2><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-1920-80.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">Galaxy Z Fold 8 </span><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Samsung worked to greatly minimize the appearance of the crease on the Fold 8. And the result is indeed impressive.</p><p>Thanks to <a href="https://www.tomsguide.com/phones/samsung-phones/ive-seen-the-galaxy-z-fold-8s-flex-titanium-screen-and-apple-should-be-nervous"><u>Flex Titanium technology,</u></a> the Fold 8’s display uses a titanium-alloy film to achieve a more stretchable panel. Meanwhile, a titanium plate supports the display module from beneath, allowing for tighter bonding and eliminating air gaps.</p><p>The crease is still there, but it’s less noticeable than on the <a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-7-review"><u>Fold 7</u></a>. However, Apple is apparently working on a truly <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-achieves-a-visually-crease-free-state-according-to-leaker-but-fears-over-the-hinge-could-lead-to-delays"><u>crease-free display for the iPhone Ultra</u></a> and is reportedly partnering with Samsung Display to make it happen.</p><p>Apple is apparently pulling this off by employing <a href="https://www.tomsguide.com/phones/foldable-iphone-just-tipped-for-revolutionary-liquid-metal-hinge"><u>liquid metal</u></a> alloy components inside the hinge mechanism. At the same time, Apple is reportedly working on a laser-drilled display metal plate to redistribute stress evenly across a wider bending zone.</p><h2 id="fully-optimized-apps">Fully optimized apps</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3137px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="r7n3onFcjSMt3bPTKf6mV6" name="Galaxy Z Fold 8-2" alt="Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/r7n3onFcjSMt3bPTKf6mV6-1920-80.jpg" mos="" align="middle" fullscreen="" width="3137" height="1765" attribution="" endorsement="" class="inline" /></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 likely going to be the biggest difference between the iPhone Ultra and Galaxy Z Fold 8. There are plenty of apps that are optimized for the Fold 8’s 7.6-inch display with a dual-pane layout, such as Gmail, Calendar, YouTube and TikTok.</p><p>I especially like how you can watch vertical videos on one side while looking at comments on the other on TikTok, but on YouTube Shorts you have to close comments to keep scrolling, which is dumb.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3373px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="bk23tNRKPm59GMBqiiEdR6" name="Galaxy Z Fold 8" alt="Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/bk23tNRKPm59GMBqiiEdR6-1920-80.jpg" mos="" align="middle" fullscreen="" width="3373" height="1897" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>However, there are also several high-profile apps on the Fold 8 that look like stretched-out phone apps. This includes X, with a lot of wasted space on either side of the content area. With Slack, you don’t get a dual-pane layout, which you do get on the iPad mini. And on Instagram, the comments cover the content (for now).</p><p>The iPhone Ultra likely won’t have this problem, as it will <a href="https://www.tomsguide.com/phones/iphones/forget-running-a-single-app-foldable-iphone-leak-reveals-an-absolute-multitasking-overhaul"><u>reportedly offer the same app scaling benefits as iPads</u></a>, even if it’s still running iOS. Samsung says that Instagram’s layout will get an update sometime between July and August, which is nice, but there will still be lots and lots of apps that will “just work” on the iPhone Ultra on day one.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OdRwme"></div>                            </div>                            <script src="https://kwizly.com/embed/OdRwme.js" async=""></script><h2 id="more-efficient-chip">More efficient chip</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2693px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="xsfHUrdQAp5k99yND4fgSY" name="Galaxy Z Fold 8 review-26" alt="Galaxy Z Fold 8 shown held in-hand" src="https://cdn.mos.cms.futurecdn.net/xsfHUrdQAp5k99yND4fgSY-1920-80.jpg" mos="" align="middle" fullscreen="" width="2693" height="1515" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">Galaxy Z Fold 8 </span><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>If you believe the rumors, the iPhone Ultra and Galaxy Z Fold 8 are going to have similar size batteries. 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>Fold 8 has a 4,800 mAh battery with silicon carbon tech</u></a>, while the iPhone Ultra is tipped to pack a 4,883 mAh split dual-cell battery that may also use silicon carbon.</p><p>So at least on paper the iPhone Ultra and Fold 8 have similar battery capacity. But Apple’s <a href="https://www.tomsguide.com/phones/iphones/iphone-18-countdown-starts-now-5-rumored-upgrades-apple-could-be-giving-its-pro-models"><u>A20 Pro chip</u></a> could make a big difference. The chip will likely use a 2nm process, making it more efficient than the 3nm Snapdragon 8 Elite Gen 5 processor.</p><p>That efficiency should turn into more endurance, and the <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-vs-fold-8-ultra-vs-flip-8-battery-tests-silicon-carbon-pays-off"><u>Fold 8 already turned in a very good runtime of 14.5 hours in our battery test</u></a>. We’ll see how much of a boost the A20 Pro provides.</p><h2 id="what-about-the-iphone-ultra-price">What about the iPhone Ultra 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: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-1920-80.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>Assuming Apple has these three major advantages over the Galaxy Z Fold 8, there’s still the price to contend with. The latest rumors have the iPhone Fold costing over $2,000 with some estimates putting in the <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"><u>$2,400 to $2,500 range</u></a>.</p><p>That would be as much as $600 more than the $1,900 Galaxy Z Fold 8. But Apple has another secret weapon up its sleeve in the recently announced <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"><u>Apple Upgrade program</u></a>. It will be able to entice buyers with lower monthly payments to help spread the cost out over time, even though it’s just a glorified leasing program.</p><h2 id="iphone-ultra-vs-galaxy-z-fold-8-outlook">iPhone Ultra vs. Galaxy Z Fold 8: Outlook</h2><p>The Samsung Galaxy Z Fold 8 has raised the bar for wide-screen foldables with its super light and thin design, as well as smart AI upgrades like Now Nudge and My FanCam. It’s a very good foldable.</p><p>However, the iPhone Ultra could surpass the Fold 8 with an even less noticeable crease, a much better app experience and even longer battery life. </p><p>Which foldable would you buy? Let me know in the comments.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><strong></strong><a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win"><strong>Samsung Galaxy Z Fold 8 review: Pros and cons</strong></a><strong></strong></li><li><strong></strong><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"><strong>Battery life tested: How the Galaxy Z Fold 8 stacks up</strong></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"><strong>iPhone Ultra delay leak right after Samsung's triumphant Galaxy Fold 8 launch has me sick of waiting for Apple's foldable</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/3-big-ways-the-iphone-ultra-could-beat-the-galaxy-z-fold-8</link>
                                                                            <description>
                            <![CDATA[ The iPhone Ultra could surpass the Galaxy Z Fold 8 when it launches this fall, and it has more to do with software than hardware. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">7m6dp8ciXTkXvvpxmVz8b9</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/TqghRh7x9BK6X2sbvwSBEY-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 04 Aug 2026 05:00:00 +0000</pubDate>                                                                                                                                <updated>Tue, 04 Aug 2026 13:20:34 +0000</updated>
                                                                                                                                            <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Mark Spoonauer ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/wtAspSzVfcKLB4JEd39AMo-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Mark Spoonauer is the global editor in chief of Tom&#039;s Guide and has covered technology for over 20 years. He oversees the direction of Tom&#039;s Guide and leads a team of over 25 journalists to bring you our expert buying guides, reviews, news, how-to articles, deals and other coverage.&lt;/p&gt;&lt;p&gt;Mark has a passion for covering all things mobile, having reviewed dozens of smartphones and other gadgets. He enjoys testing the top mobile devices and putting them up against each other in our in-depth face-offs. He also works hand in hand with our editors and testing team to continually improve how we evaluate products. &lt;/p&gt;&lt;p&gt;Having led Tom&#039;s Guide since 2013, Mark has focused on growing the core tech coverage of the site while also expanding into new areas, such as entertainment, fitness and home, recruiting talented writers and editors to help our readers figure out what to buy and how to get the most out of the products and services they use every day. &lt;/p&gt;&lt;p&gt;Mark has spoken at key industry events and appears regularly on TV to discuss the latest trends, including &lt;a href=&quot;https://cheddar.com/media/pixel-watch-gets-a-release-date-at-google-i-o-2022&quot;&gt;Cheddar&lt;/a&gt;, Fox 5, &lt;a href=&quot;https://www.foxbusiness.com/technology/apple-march-event-5g-iphone&quot;&gt;Fox Business&lt;/a&gt; and other outlets. Mark was previously editor in chief of Laptop Mag, and his work has appeared in Wired, Popular Science and Inc. Follow him on Twitter at @mspoonauer.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/TqghRh7x9BK6X2sbvwSBEY-1920-80.jpg">
                                                            <media:credit><![CDATA[Majin Bu/X/Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Concept art for a foldable iPhone and the Galaxy Z Fold 8 shown in hand]]></media:description>                                                            <media:text><![CDATA[Concept art for a foldable iPhone and the Galaxy Z Fold 8 shown in hand]]></media:text>
                                <media:title type="plain"><![CDATA[Concept art for a foldable iPhone and the Galaxy Z Fold 8 shown in hand]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/TqghRh7x9BK6X2sbvwSBEY-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win"><u>Galaxy Z Fold 8</u></a> is getting pretty positive review, and it looks like this wide format device is the shape of foldable phones to come. That includes the iPhone Ultra, which is expected to launch this fall.</p><p>Based on the <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-heres-what-the-leaks-and-rumors-say-about-apples-alleged-upcoming-foldable-phone?utm_source=google&amp;utm_medium=h5d&amp;utm_campaign=h_tg_00284&amp;gad_source=1&amp;gad_campaignid=22851877377&amp;gbraid=0AAAAAqzfqMbEgt7haejazcQhI_4dGXhNJ&amp;gclid=Cj0KCQjw-MDTBhCgARIsAKAkdlQY7GWAahIQGfnQYM7FwAvIKa1pRNqQmyrDQr8CgrR9CgYXuoH6sFMaAsxXEALw_wcB"><u>iPhone Ultra</u></a> (aka iPhone Fold) rumors thus far, it looks like Apple’s device is going to be slightly heavier and thicker but sport a very similar passport-style design. So how is Apple going to stand out, especially with an asking price that could reach $2,400 or $2,500 — at least $500 more than Samsung’s device? Here’s three ways the iPhone Ultra could beat the Galaxy Z Fold 8.</p><h2 id="no-crease-at-all">No crease at all?!</h2><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-1920-80.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">Galaxy Z Fold 8 </span><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Samsung worked to greatly minimize the appearance of the crease on the Fold 8. And the result is indeed impressive.</p><p>Thanks to <a href="https://www.tomsguide.com/phones/samsung-phones/ive-seen-the-galaxy-z-fold-8s-flex-titanium-screen-and-apple-should-be-nervous"><u>Flex Titanium technology,</u></a> the Fold 8’s display uses a titanium-alloy film to achieve a more stretchable panel. Meanwhile, a titanium plate supports the display module from beneath, allowing for tighter bonding and eliminating air gaps.</p><p>The crease is still there, but it’s less noticeable than on the <a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-7-review"><u>Fold 7</u></a>. However, Apple is apparently working on a truly <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-achieves-a-visually-crease-free-state-according-to-leaker-but-fears-over-the-hinge-could-lead-to-delays"><u>crease-free display for the iPhone Ultra</u></a> and is reportedly partnering with Samsung Display to make it happen.</p><p>Apple is apparently pulling this off by employing <a href="https://www.tomsguide.com/phones/foldable-iphone-just-tipped-for-revolutionary-liquid-metal-hinge"><u>liquid metal</u></a> alloy components inside the hinge mechanism. At the same time, Apple is reportedly working on a laser-drilled display metal plate to redistribute stress evenly across a wider bending zone.</p><h2 id="fully-optimized-apps">Fully optimized apps</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3137px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="r7n3onFcjSMt3bPTKf6mV6" name="Galaxy Z Fold 8-2" alt="Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/r7n3onFcjSMt3bPTKf6mV6-1920-80.jpg" mos="" align="middle" fullscreen="" width="3137" height="1765" attribution="" endorsement="" class="inline" /></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 likely going to be the biggest difference between the iPhone Ultra and Galaxy Z Fold 8. There are plenty of apps that are optimized for the Fold 8’s 7.6-inch display with a dual-pane layout, such as Gmail, Calendar, YouTube and TikTok.</p><p>I especially like how you can watch vertical videos on one side while looking at comments on the other on TikTok, but on YouTube Shorts you have to close comments to keep scrolling, which is dumb.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3373px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="bk23tNRKPm59GMBqiiEdR6" name="Galaxy Z Fold 8" alt="Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/bk23tNRKPm59GMBqiiEdR6-1920-80.jpg" mos="" align="middle" fullscreen="" width="3373" height="1897" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>However, there are also several high-profile apps on the Fold 8 that look like stretched-out phone apps. This includes X, with a lot of wasted space on either side of the content area. With Slack, you don’t get a dual-pane layout, which you do get on the iPad mini. And on Instagram, the comments cover the content (for now).</p><p>The iPhone Ultra likely won’t have this problem, as it will <a href="https://www.tomsguide.com/phones/iphones/forget-running-a-single-app-foldable-iphone-leak-reveals-an-absolute-multitasking-overhaul"><u>reportedly offer the same app scaling benefits as iPads</u></a>, even if it’s still running iOS. Samsung says that Instagram’s layout will get an update sometime between July and August, which is nice, but there will still be lots and lots of apps that will “just work” on the iPhone Ultra on day one.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OdRwme"></div>                            </div>                            <script src="https://kwizly.com/embed/OdRwme.js" async=""></script><h2 id="more-efficient-chip">More efficient chip</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2693px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="xsfHUrdQAp5k99yND4fgSY" name="Galaxy Z Fold 8 review-26" alt="Galaxy Z Fold 8 shown held in-hand" src="https://cdn.mos.cms.futurecdn.net/xsfHUrdQAp5k99yND4fgSY-1920-80.jpg" mos="" align="middle" fullscreen="" width="2693" height="1515" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">Galaxy Z Fold 8 </span><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>If you believe the rumors, the iPhone Ultra and Galaxy Z Fold 8 are going to have similar size batteries. 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>Fold 8 has a 4,800 mAh battery with silicon carbon tech</u></a>, while the iPhone Ultra is tipped to pack a 4,883 mAh split dual-cell battery that may also use silicon carbon.</p><p>So at least on paper the iPhone Ultra and Fold 8 have similar battery capacity. But Apple’s <a href="https://www.tomsguide.com/phones/iphones/iphone-18-countdown-starts-now-5-rumored-upgrades-apple-could-be-giving-its-pro-models"><u>A20 Pro chip</u></a> could make a big difference. The chip will likely use a 2nm process, making it more efficient than the 3nm Snapdragon 8 Elite Gen 5 processor.</p><p>That efficiency should turn into more endurance, and the <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-vs-fold-8-ultra-vs-flip-8-battery-tests-silicon-carbon-pays-off"><u>Fold 8 already turned in a very good runtime of 14.5 hours in our battery test</u></a>. We’ll see how much of a boost the A20 Pro provides.</p><h2 id="what-about-the-iphone-ultra-price">What about the iPhone Ultra 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: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-1920-80.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>Assuming Apple has these three major advantages over the Galaxy Z Fold 8, there’s still the price to contend with. The latest rumors have the iPhone Fold costing over $2,000 with some estimates putting in the <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"><u>$2,400 to $2,500 range</u></a>.</p><p>That would be as much as $600 more than the $1,900 Galaxy Z Fold 8. But Apple has another secret weapon up its sleeve in the recently announced <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"><u>Apple Upgrade program</u></a>. It will be able to entice buyers with lower monthly payments to help spread the cost out over time, even though it’s just a glorified leasing program.</p><h2 id="iphone-ultra-vs-galaxy-z-fold-8-outlook">iPhone Ultra vs. Galaxy Z Fold 8: Outlook</h2><p>The Samsung Galaxy Z Fold 8 has raised the bar for wide-screen foldables with its super light and thin design, as well as smart AI upgrades like Now Nudge and My FanCam. It’s a very good foldable.</p><p>However, the iPhone Ultra could surpass the Fold 8 with an even less noticeable crease, a much better app experience and even longer battery life. </p><p>Which foldable would you buy? Let me know in the comments.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><strong></strong><a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win"><strong>Samsung Galaxy Z Fold 8 review: Pros and cons</strong></a><strong></strong></li><li><strong></strong><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"><strong>Battery life tested: How the Galaxy Z Fold 8 stacks up</strong></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"><strong>iPhone Ultra delay leak right after Samsung's triumphant Galaxy Fold 8 launch has me sick of waiting for Apple's foldable</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Samsung Galaxy S27 Ultra leak reveals silicon carbon battery leap — but also a camera downgrade ]]></title>
                                                                                                <dc:content><![CDATA[ <p>When Samsung launches the Galaxy S27 Ultra early next year, the flagship phone could be much different phone compared to the Galaxy S26 Ultra. A slew of rumors and confirmed news in the last few days revealed one massive upgrade and at least two potential downgrades.</p><p>First, the upgrade with the rumored debut of a<a href="https://www.tomsguide.com/phones/i-interviewed-honor-and-oneplus-about-their-silicon-carbon-battery-tech-apple-and-google-are-quickly-falling-behind"> silicon-carbon battery</a> in the S27 series. This news isn't totally surprising as Samsung <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">finally put this newer battery</a> technology in the recently launched <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/i-just-spent-24-hours-with-the-galaxy-z-fold-8-ultra-heres-what-i-liked-and-what-i-didnt">Z Fold 8 Ultra</a>.</p><p>The rumor comes from two different sources: <a href="https://x.com/TheGalox_/status/2083323737441509409" target="_blank">The Galox</a> on X and YouTuber <a href="https://www.youtube.com/shorts/_-pu1xDAKHc" target="_blank">TechDroider</a>. Both claimed that the S27 Ultra will get a 5700 mAh silicon-carbon battery.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-exVvlO"></div>                            </div>                            <script src="https://kwizly.com/embed/exVvlO.js" async=""></script><p>If the battery rumor is true this would be the first capacity upgrade to the Ultra model since the <a href="https://www.tomsguide.com/reviews/galaxy-s20-ultra">Galaxy S20 Ultra</a>. That's seven generations of phones with essentially the exact same battery. </p><p>While Chinese phone makers have been pushing silicon carbon battery equipped devices since 2024, Samsung has taken a more conservative approach. </p><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," Samsung's Jay Kim — the executive VP of the Galaxy Z Fold 8 series — <a href="https://www.tomsguide.com/phones/samsung-phones/how-samsung-plans-to-fight-the-first-foldable-iphone-jay-kim-interview">told Tom's Guide Mark Spoonauer</a>.</p><p>Still, the new battery bumped the Z Fold 8 Ultra up to 5,000 mAh, a big boost from the 4,400 mAh lithium ion in the Fold 7. </p><p>It doesn't necessarily mean Samsung was always going to put a silicon-carbon battery in its main phone line but signs are looking good.</p><h2 id="worse-cameras">Worse 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:3780px;"><p class="vanilla-image-block" style="padding-top:101.38%;"><img id="D6paXuMoJpDcDAamp5DbtW" name="HOlz5UdWMAAsNIA" alt="Samsung Galaxy S27 Ultra rumored camera array" src="https://cdn.mos.cms.futurecdn.net/D6paXuMoJpDcDAamp5DbtW-1920-80.jpg" mos="" align="middle" fullscreen="" width="3780" height="3832" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: The Galox)</span></figcaption></figure><p>One of The Galox's rumored specs is a 50MP 5x telephoto lens and a second telephoto camera in the S27 Ultra. However, regular Samsung <a href="https://x.com/UniverseIce/status/2083437964491919516" target="_blank">leaker Ice Universe</a> threw some water on the rumor claiming that there will be no second telephoto camera. </p><p>If true that would be a downgrade from the current setup which features a 200MP main, 10MP telephoto, 50MP periscope telephoto and a 50MP ultrawide. Per Ice Universe, the S27 Ultra would drop the 10MP telephoto lens. </p><p>At the same time, <a href="https://x.com/UniverseIce/status/2084224549751865612" target="_blank">Ice put up another post</a> asserting that Samsung is using inkjet printing technology to make the camera module thinner. This could make the camera array smaller overall. </p><p>One of the flaws of the S26 Ultra is its massive camera bump, which makes it impossible to set the phone down flat anywhere. As an S26 Ultra owner, it's one of the more annoying aspects of the phone.</p><p>If I'm being honest, I'd rather have the smaller camera bump than an extra telephoto lens.</p><p>Beyond that, both The Galox and TechDroid suggested that the camera array could spread across the entire width of the phone mimicking what Apple did with the <a href="https://www.tomsguide.com/phones/iphones/iphone-17-pro-max-review">iPhone 17 Pro</a> models. If the S27 Ultra is missing the fourth camera, it seems the iPhone and Galaxy phones will be nearly indistinguishable.</p><h2 id="higher-prices">Higher prices</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="CG3BK779yQswJXv5M7Rfyg" name="Galaxy Unpacked July 2026_ Official Livestream 2-14-17 screenshot" alt="Snapdragon 8 Elite for Galaxy" src="https://cdn.mos.cms.futurecdn.net/CG3BK779yQswJXv5M7Rfyg-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Samsung)</span></figcaption></figure><p>Unfortunately, next year's Galaxy S27 Ultra is likely to be more expensive.  Samsung managed to keep the starting price of the S26 Ultra at $1,299 the same as the S25 Ultra. </p><p>However, late last week, Qualcomm CEO Cristiano Amon <a href="https://www.cnbc.com/2026/07/29/qualcomm-qcom-earnings-report-q3-2026-.html" target="_blank">confirmed to CNBC</a> that it will increase prices for its Snapdragon silicon. This means the costs will be put on smartphone makers like Samsung, which can't even get its own memory division to lower prices for the mobile division.</p><p>“Cost went up, prices are going to go up,” Amon told CNBC. Amon specifically blamed the supply constraints on memory for the increase. He did say the price increase was "temporary," but with the AI-driven RAM crisis not expected to abate until 2028 at the earliest, it's not clear how long this "temporary" hike will last.</p><p>Still, it means the next Samsung phone will likely be more expensive. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/samsung-phones/the-tech-world-hyped-up-the-galaxy-z-fold-8s-crease-free-display-heres-a-reality-check-after-7-days">The tech world hyped up the Galaxy Z Fold 8's 'crease-free' display — here's a reality check after 7 days</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/i-tried-the-new-galaxy-ai-video-tracker-on-my-z-fold-8">I tried the new Galaxy AI video tracker on my Z Fold 8 — and it fixes my biggest problem with phone videos</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-8-review">Samsung Galaxy Z Flip 8 review: More expensive, barely different</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s27-ultra-leak-reveals-silicon-carbon-battery-leap-but-also-a-camera-downgrade</link>
                                                                            <description>
                            <![CDATA[ Samsung's flagship Galaxy S27 Ultra is rumored to make a massive leap, but the cameras could be downgraded, so which is more important: a bigger battery or a better camera? ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">tJJQghLXuhhaHVGZyW7vvK</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/CW5iTknLhN6oiVMPk7Z7xL-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 03 Aug 2026 17:25:18 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                <author><![CDATA[ scott.younker@futurenet.com (Scott Younker) ]]></author>                    <dc:creator><![CDATA[ Scott Younker ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/RZsUpqcJ6Uj2q83oCUwNhQ-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Scott Younker is the West Coast Reporter at Tom’s Guide. He covers all the latest tech news, including phones, computing and more. He’s been involved in tech since 2011 covering everything from cameras and swimming pool equipment to the latest gaming consoles and smart TVs. He is on a seemingly never ending hunt to build the easiest to use home media system. &lt;/p&gt;&lt;p&gt;Before Tom’s Guide, Scott worked for publications like &lt;em&gt;Digital Trends, Outdoor Photographer, Dead Beats Panel&lt;/em&gt;, and in a brief detour, &lt;em&gt;America’s Funniest Home Videos&lt;/em&gt;. Yes, he has seen more pratfalls, silly pets and ridiculous home movie fails than is reasonably healthy. &lt;/p&gt;&lt;p&gt;When not writing about the latest devices or advances in chipsets, be sure to ask about Scott about disc golf and sustainability, or just if you’re being cheeky, ask about his noodle arm. If you truly want to get nerdy, bring up board games and his ongoing losing streak. &lt;/p&gt;&lt;p&gt;Scott joined Tom&#039;s Guide in 2024 as the West Coast Reporter. He graduated from the School of Journalism at the University of Oregon with a degree in magazine journalism and a minor in communications. While there he blogged or wrote for several magazines including the Fluxx, Ethos and the Oregon Commentator. He briefly wrote and managed a moderately successful blog focused on web comics. &lt;/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/CW5iTknLhN6oiVMPk7Z7xL-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Samsung Galaxy S26 Ultra shown in hand]]></media:description>                                                            <media:text><![CDATA[Samsung Galaxy S26 Ultra shown in hand]]></media:text>
                                <media:title type="plain"><![CDATA[Samsung Galaxy S26 Ultra shown in hand]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/CW5iTknLhN6oiVMPk7Z7xL-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>When Samsung launches the Galaxy S27 Ultra early next year, the flagship phone could be much different phone compared to the Galaxy S26 Ultra. A slew of rumors and confirmed news in the last few days revealed one massive upgrade and at least two potential downgrades.</p><p>First, the upgrade with the rumored debut of a<a href="https://www.tomsguide.com/phones/i-interviewed-honor-and-oneplus-about-their-silicon-carbon-battery-tech-apple-and-google-are-quickly-falling-behind"> silicon-carbon battery</a> in the S27 series. This news isn't totally surprising as Samsung <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">finally put this newer battery</a> technology in the recently launched <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/i-just-spent-24-hours-with-the-galaxy-z-fold-8-ultra-heres-what-i-liked-and-what-i-didnt">Z Fold 8 Ultra</a>.</p><p>The rumor comes from two different sources: <a href="https://x.com/TheGalox_/status/2083323737441509409" target="_blank">The Galox</a> on X and YouTuber <a href="https://www.youtube.com/shorts/_-pu1xDAKHc" target="_blank">TechDroider</a>. Both claimed that the S27 Ultra will get a 5700 mAh silicon-carbon battery.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-exVvlO"></div>                            </div>                            <script src="https://kwizly.com/embed/exVvlO.js" async=""></script><p>If the battery rumor is true this would be the first capacity upgrade to the Ultra model since the <a href="https://www.tomsguide.com/reviews/galaxy-s20-ultra">Galaxy S20 Ultra</a>. That's seven generations of phones with essentially the exact same battery. </p><p>While Chinese phone makers have been pushing silicon carbon battery equipped devices since 2024, Samsung has taken a more conservative approach. </p><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," Samsung's Jay Kim — the executive VP of the Galaxy Z Fold 8 series — <a href="https://www.tomsguide.com/phones/samsung-phones/how-samsung-plans-to-fight-the-first-foldable-iphone-jay-kim-interview">told Tom's Guide Mark Spoonauer</a>.</p><p>Still, the new battery bumped the Z Fold 8 Ultra up to 5,000 mAh, a big boost from the 4,400 mAh lithium ion in the Fold 7. </p><p>It doesn't necessarily mean Samsung was always going to put a silicon-carbon battery in its main phone line but signs are looking good.</p><h2 id="worse-cameras">Worse 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:3780px;"><p class="vanilla-image-block" style="padding-top:101.38%;"><img id="D6paXuMoJpDcDAamp5DbtW" name="HOlz5UdWMAAsNIA" alt="Samsung Galaxy S27 Ultra rumored camera array" src="https://cdn.mos.cms.futurecdn.net/D6paXuMoJpDcDAamp5DbtW-1920-80.jpg" mos="" align="middle" fullscreen="" width="3780" height="3832" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: The Galox)</span></figcaption></figure><p>One of The Galox's rumored specs is a 50MP 5x telephoto lens and a second telephoto camera in the S27 Ultra. However, regular Samsung <a href="https://x.com/UniverseIce/status/2083437964491919516" target="_blank">leaker Ice Universe</a> threw some water on the rumor claiming that there will be no second telephoto camera. </p><p>If true that would be a downgrade from the current setup which features a 200MP main, 10MP telephoto, 50MP periscope telephoto and a 50MP ultrawide. Per Ice Universe, the S27 Ultra would drop the 10MP telephoto lens. </p><p>At the same time, <a href="https://x.com/UniverseIce/status/2084224549751865612" target="_blank">Ice put up another post</a> asserting that Samsung is using inkjet printing technology to make the camera module thinner. This could make the camera array smaller overall. </p><p>One of the flaws of the S26 Ultra is its massive camera bump, which makes it impossible to set the phone down flat anywhere. As an S26 Ultra owner, it's one of the more annoying aspects of the phone.</p><p>If I'm being honest, I'd rather have the smaller camera bump than an extra telephoto lens.</p><p>Beyond that, both The Galox and TechDroid suggested that the camera array could spread across the entire width of the phone mimicking what Apple did with the <a href="https://www.tomsguide.com/phones/iphones/iphone-17-pro-max-review">iPhone 17 Pro</a> models. If the S27 Ultra is missing the fourth camera, it seems the iPhone and Galaxy phones will be nearly indistinguishable.</p><h2 id="higher-prices">Higher prices</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="CG3BK779yQswJXv5M7Rfyg" name="Galaxy Unpacked July 2026_ Official Livestream 2-14-17 screenshot" alt="Snapdragon 8 Elite for Galaxy" src="https://cdn.mos.cms.futurecdn.net/CG3BK779yQswJXv5M7Rfyg-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Samsung)</span></figcaption></figure><p>Unfortunately, next year's Galaxy S27 Ultra is likely to be more expensive.  Samsung managed to keep the starting price of the S26 Ultra at $1,299 the same as the S25 Ultra. </p><p>However, late last week, Qualcomm CEO Cristiano Amon <a href="https://www.cnbc.com/2026/07/29/qualcomm-qcom-earnings-report-q3-2026-.html" target="_blank">confirmed to CNBC</a> that it will increase prices for its Snapdragon silicon. This means the costs will be put on smartphone makers like Samsung, which can't even get its own memory division to lower prices for the mobile division.</p><p>“Cost went up, prices are going to go up,” Amon told CNBC. Amon specifically blamed the supply constraints on memory for the increase. He did say the price increase was "temporary," but with the AI-driven RAM crisis not expected to abate until 2028 at the earliest, it's not clear how long this "temporary" hike will last.</p><p>Still, it means the next Samsung phone will likely be more expensive. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/samsung-phones/the-tech-world-hyped-up-the-galaxy-z-fold-8s-crease-free-display-heres-a-reality-check-after-7-days">The tech world hyped up the Galaxy Z Fold 8's 'crease-free' display — here's a reality check after 7 days</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/i-tried-the-new-galaxy-ai-video-tracker-on-my-z-fold-8">I tried the new Galaxy AI video tracker on my Z Fold 8 — and it fixes my biggest problem with phone videos</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-8-review">Samsung Galaxy Z Flip 8 review: More expensive, barely different</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>
                                                                                                <dc:content><![CDATA[ <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><div data-widget-type="multimodelreview" data-model-name="Samsung Galaxy Z Fold 8,Samsung Galaxy Z Fold 8 Ultra,Samsung Galaxy Z Flip 8"></div><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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>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="low" 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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>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> ]]></dc:content>
                                                                                                                                            <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-1920-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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/coe7VBExjVnSAfiDxs353c-1920-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-1920-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><div data-widget-type="multimodelreview" data-model-name="Samsung Galaxy Z Fold 8,Samsung Galaxy Z Fold 8 Ultra,Samsung Galaxy Z Flip 8"></div><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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>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="low" 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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>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[ Samsung Galaxy Z Flip 8 review: More expensive, barely different ]]></title>
                                                                                                <dc:content><![CDATA[ <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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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> ]]></dc:content>
                                                                                                                                            <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/5SPZSQE33UbkAxXpUmwkR6-1920-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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/5SPZSQE33UbkAxXpUmwkR6-1920-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/5SPZSQE33UbkAxXpUmwkR6-1920-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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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>
                                                                                                <dc:content><![CDATA[ <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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="1327" height="853" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 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&amp;rows=6&amp;view_mode=savings_squad&amp;widget_title=Top+Deals+Handpicked+by+Our+Editors&amp;widget_subtitle=Discover+the+best+discounts+currently+available%2C+curated+daily+by+the+Tom%27s+Guide+Savings+Squad.&amp;bg_color=transparent" data-vizualizer-embed="true"></div>    <script>    /**     * Tom's Guide Deals Finder - Vanilla JS Encapsulated Engine     */    (function() {      // --- Freyr Analytics Adapter ---      function initAnalytics() {        window.dataLayer = window.dataLayer || [];        window.googletag = window.googletag || {};        window.googletag.cmd = window.googletag.cmd || [];        window.hawk = window.hawk || { analytics: { freyr: [] } };        window.hawk.analytics = window.hawk.analytics || { freyr: [] };        window.hawk.analytics.freyr = window.hawk.analytics.freyr || [];        window.freyr = window.freyr || { cmd: [] };        const scriptSrc = 'https://freyr.futurecdn.net/freyr.js';        const hostname = typeof window !== 'undefined' ? window.location.hostname : '';        const isTestEnv = typeof window.navigator !== 'undefined' && (window.navigator.webdriver || window.navigator.userAgent.includes('Headless'));        const shouldSendRealAnalytics = !isTestEnv && hostname && hostname !== 'localhost' && hostname !== '127.0.0.1' && !hostname.includes('run.app');        if (shouldSendRealAnalytics && !document.querySelector(`script[src="${scriptSrc}"]`)) {          const script = document.createElement('script');          script.src = scriptSrc;          script.async = true;          document.head.appendChild(script);        }      }      function storeEventForDebug(name, data) {        if (!window.hawk || !window.hawk.analytics || !window.hawk.analytics.freyr) return;        window.hawk.analytics.freyr.push({ name, data });        try {          if (typeof window !== 'undefined' && window.localStorage) {            window.localStorage.setItem("hawk", JSON.stringify(window.hawk));          }        } catch (e) {          // Ignore storage issues        }        try {          window.dispatchEvent(new CustomEvent("hawk-analytics-update"));        } catch (e) {}      }      function sendToFreyr(eventName, data) {        if (typeof window === 'undefined') return;        window.freyr = window.freyr || { cmd: [] };        window.freyr.cmd.push(() => {          if (window.freyr && window.freyr.pushAndUpdate) {            window.freyr.pushAndUpdate(eventName, data);          }        });      }      function sendEvent(event, skip = false) {        try {          storeEventForDebug(event.name, event.data);          if (!skip) {            sendToFreyr(event.name, event.data);          }        } catch (e) {          // Ensure tracking errors don't surface to the user        }      }      function getCookie(name) {        try {          const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));          return match ? match[2] : null;        } catch (e) {          return null;        }      }      function getTimeAgo(dateString) {        if (!dateString) return '';        const date = new Date(dateString);        const now = new Date();        const diffInSeconds = Math.floor((now.getTime() - date.getTime()) / 1000);        if (diffInSeconds < 60) return 'Just now';        const diffInMinutes = Math.floor(diffInSeconds / 60);        if (diffInMinutes < 60) return `${diffInMinutes} min${diffInMinutes > 1 ? 's' : ''} ago`;        const diffInHours = Math.floor(diffInMinutes / 60);        if (diffInHours < 24) return `${diffInHours} hr${diffInHours > 1 ? 's' : ''} ago`;        const diffInDays = Math.floor(diffInHours / 24);        if (diffInDays < 30) return `${diffInDays} day${diffInDays > 1 ? 's' : ''} ago`;        const diffInMonths = Math.floor(diffInDays / 30);        if (diffInMonths < 12) return `${diffInMonths} mo${diffInMonths > 1 ? 's' : ''} ago`;        const diffInYears = Math.floor(diffInDays / 365);        return `${diffInYears} yr${diffInYears > 1 ? 's' : ''} ago`;      }      function normalizeCurrency(symbol) {        const map = {          '£': 'GBP',          '$': 'USD',          'A$': 'AUD',          'CA$': 'CAD',          '€': 'EUR'        };        return map[symbol] || symbol;      }      function trackElementInteraction(props) {        sendEvent({          name: 'elementInteraction',          data: {            element: {              action: props.action || "click",              id: props.id || undefined,              class: props.class || undefined,              name: props.name || undefined,              text: props.text || undefined,              label: props.label || undefined,              container: props.container || undefined,              url: props.url || undefined,              articleId: props.articleId || undefined            }          }        });      }      function generateRevenueId(url, productName, merchantName, modelId) {        const str = `${window.location.href}|${productName}|${merchantName}|${modelId || ''}|${new Date().toDateString()}|tomsguide`;        let hash = 0;        for (let i = 0; i < str.length; i++) {          const char = str.charCodeAt(i);          hash = ((hash << 5) - hash) + char;          hash = hash & hash;        }        let numericStr = Math.abs(hash).toString();        while (numericStr.length < 19) {          numericStr += Math.floor(Math.random() * 10).toString();        }        return numericStr.substring(0, 19);      }      function rewriteAffiliateLink(url, territory, revenueId) {        if (!url) return url;        const t = (territory || 'gb').toLowerCase();        return url.replace(/hawk-custom-tracking/g, `tomsguide-${t}-${revenueId}`);      }      function trackHawkEvent(params) {        const { clickType, widgetId, productCategoryName, product, productsArray, zeroBasedProductIndexOrNull, totalDealsOrProducts, areaClicked, merchant, revenueId, isoCurrencyCode, queryName, widgetTypeName } = params;        const data = {          event: "hawkEvent",          category: "Affiliates",          affiliate: {            action: {              type: clickType,              id: widgetId,              event: clickType === "appeared" ? "viewed" : "Click from",              timestamp: Date.now()            },            component: {              flag: "Editor",              product: productCategoryName || "deals",              category: `Signal Deal Finder ${widgetTypeName || "Carousel"} widget`,              type: clickType === "appeared" ? "review" : "signal product",              label: queryName || (product ? (product.name || "") : ""),              index: zeroBasedProductIndexOrNull === null || zeroBasedProductIndexOrNull === undefined ? -1 : zeroBasedProductIndexOrNull,              linkCount: totalDealsOrProducts || 0,              blockLayout: "",              areaClicked: areaClicked || ""            }          },          products: productsArray || (product && merchant ? [            {              product: {                primary: {                  id: product.id || product.matchId || null,                  name: product.name,                  type: "deal",                  price: product.price,                  previousPrice: product.previousPrice || null,                  currency: isoCurrencyCode || "USD",                  preorder: false,                  labels: [],                  link: product.link,                  originalLink: product.originalLink || null,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: null,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: product.globalId || null,                  inStock: product.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: isoCurrencyCode || "USD"                }              },              merchant: {                id: merchant.id || null,                name: merchant.name,                url: merchant.url || null,                network: merchant.network || null              },              model: {                id: product.modelId || null,                brand: product.brand || null,                name: product.name,                parent: product.parent || null              }            }          ] : []),          reviews: [],          _clear: true,          "gtm.uniqueEventId": Date.now() % 10000        };        sendEvent({ name: 'hawkEvent', data });      }      function trackDealClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card" });      }      function trackViewSimilarClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card View Similar" });      }      function trackPriceComparisonClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Price Comparison" });      }      function trackReviewClick(params) {        trackHawkEvent({ ...params, clickType: "review", areaClicked: "Signal Product Card Review Link" });      }      function trackShare(params) {        trackHawkEvent({ ...params, clickType: "share", areaClicked: "Signal Product Card Share" });      }      function trackDealsAppeared(widgetId, deals, revenueId, currency, queryName, widgetTypeName) {         if (!deals || deals.length === 0) return;                  const productsArray = deals.slice(0, 50).map((deal) => {            let voucherPct = null;            let rawPrice = parseFloat(deal.rawPrice) || parseFloat(deal.price) || null;            let rawMsrp = parseFloat(deal.rawMsrp) || parseFloat(deal.msrp) || null;            if (rawMsrp > rawPrice && rawPrice > 0) {              voucherPct = Math.round((1 - (rawPrice / rawMsrp)) * 100);            }            let numId = null;            if (deal.externalProductId && !isNaN(parseInt(deal.externalProductId))) {              numId = parseInt(deal.externalProductId);            } else if (deal.id && !isNaN(parseInt(deal.id))) {              numId = parseInt(deal.id);            } else {              numId = deal.matchId || null;            }            return {              product: {                primary: {                  id: numId,                  name: deal.productName || deal.title || "",                  type: "deal",                  price: rawPrice,                  previousPrice: rawMsrp,                  currency: currency || 'USD',                  preorder: false,                  labels: deal.modelBrand || deal.brand ? [                     { type: "brand", value: deal.modelBrand || deal.brand }                  ] : [],                  link: deal.url,                  originalLink: deal.url,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: voucherPct,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: deal.productKey || null,                  inStock: deal.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: currency || 'USD'                }              },              merchant: {                id: deal.merchantId ? parseInt(deal.merchantId) : null,                name: deal.merchant || "Retailer",                url: deal.merchantUrl || null,                network: deal.merchantNetwork || null              },              model: {                id: deal.modelId ? parseInt(deal.modelId) : null,                brand: deal.modelBrand || deal.brand || null,                name: deal.productName || deal.title || "",                parent: deal.modelParent || null              }            };         });                  trackHawkEvent({             clickType: "appeared",             widgetId: widgetId,             productCategoryName: "deals",             zeroBasedProductIndexOrNull: null,             totalDealsOrProducts: deals.length,             productsArray: productsArray,             queryName: queryName,             widgetTypeName: widgetTypeName         });      }      // 1. Setup Shadow DOM Sandbox      const currentScript = document.currentScript;      let hostContainer = null;      let template = null;            if (currentScript) {        let prev = currentScript.previousElementSibling;        while (prev) {          if (prev.tagName === 'TEMPLATE' && prev.classList.contains('tg-df-widget-template')) {            template = prev;          } else if (prev.tagName === 'DIV' && prev.classList.contains('tg-df-widget-host') && !prev.hasAttribute('data-initialized')) {            hostContainer = prev;            break;          }          prev = prev.previousElementSibling;        }      }            // Fallbacks in case script is deferred      if (!hostContainer) {        const hosts = document.querySelectorAll('.tg-df-widget-host:not([data-initialized])');        if (hosts.length > 0) hostContainer = hosts[0];      }            // Safely embedded template for CMS environments      const rawTemplate = `  \x3Cstyle>    /* --- Shadow DOM Base Reset --- */    *, *::before, *::after {      box-sizing: border-box;    }    img, picture, svg, video {      max-width: 100%;      height: auto;      display: block;    }    /*       1. Scoped CSS for Tom's Guide Deals Widget       All classes are prefixed with \`tg-df-\` to prevent CMS style leakage.    */    .tg-df-container {      container-type: inline-size;      container-name: tg-df;      --tg-df-blue: #1F69FF;      --tg-df-blue-hover: #004d8c;      --tg-df-text: #222222;      --tg-df-text-muted: #555555;      --tg-df-bg: #ffffff;      --tg-df-bg-secondary: #f4f4f4;      --tg-df-border: #e2e8f0;      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;      color: var(--tg-df-text);      background-color: transparent;       width: 100%;      max-width: 1200px;      margin: 0 auto;      padding-bottom: 24px;    }    .tg-df-container *, .tg-df-container *::before, .tg-df-container *::after {      margin: 0;      padding: 0;      box-sizing: border-box;    }    .tg-df-container img {      border: none;      margin: 0;      padding: 0;    }    .tg-df-container a {      text-decoration: none;      color: inherit;    }    /*       2. Search & Filter Bar    */    .tg-df-controls {      display: flex;      flex-direction: column;      align-items: center;      gap: 20px;      margin-bottom: 32px;      width: 100%;      position: relative;      z-index: 20;    }    .tg-df-top-bar {      display: flex;      width: 100%;      max-width: 760px;      gap: 12px;      margin: 0 auto;      align-items: center;    }    .tg-df-search-wrapper {      position: relative;      flex: 1;      width: 100%;      box-shadow: 0 8px 24px rgba(0,0,0,0.06);      border-radius: 40px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      z-index: 100;    }    .tg-df-autocomplete-dropdown {      position: absolute;      top: calc(100% + 4px);      left: 0;      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      max-height: 300px;      overflow-y: auto;      z-index: 200;      display: none;    }    .tg-df-autocomplete-dropdown.active {      display: block;    }    .tg-df-autocomplete-item {      padding: 12px 24px;      cursor: pointer;      font-size: 14px;      color: var(--tg-df-text);      transition: background 0.1s ease;    }    .tg-df-autocomplete-item:hover {      background: var(--tg-df-bg-secondary);    }    .tg-df-search-input {      width: 100%;      padding: 16px 64px 16px 24px;      font-size: 16px;      border: 2px solid transparent;      border-radius: 40px;      outline: none;      transition: border-color 0.2s ease, box-shadow 0.2s ease;      color: var(--tg-df-text);      background: transparent;    }    .tg-df-search-input:focus {      border-color: transparent;      box-shadow: 0 0 0 3px rgba(0, 108, 196, 0.15);    }    .tg-df-search-input::placeholder {      color: #999999;    }        .tg-df-search-btn {      position: absolute;      right: 8px;      top: 50%;      transform: translateY(-50%);      width: 40px;      height: 40px;      border-radius: 50%;      background: #222;      border: none;      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: background 0.2s ease;    }        .tg-df-search-btn:hover {      background: #000;    }    .tg-df-search-icon {      width: 16px;      height: 16px;      fill: #fff;    }    .tg-df-settings-wrapper {      position: relative;    }        .tg-df-settings-btn {      width: 48px;      height: 48px;      border-radius: 50%;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      box-shadow: 0 4px 12px rgba(0,0,0,0.04);      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: all 0.2s ease;      color: var(--tg-df-text-muted);      flex-shrink: 0;    }    .tg-df-settings-btn:hover {      background: var(--tg-df-bg-secondary);      border-color: #0000ff;      color: var(--tg-df-text);    }    .tg-df-settings-btn svg {      width: 24px;      height: 24px;      fill: currentColor;    }    .tg-df-settings-dropdown {      position: absolute;      top: calc(100% + 8px);      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      width: 280px;      padding: 20px;      display: none;      z-index: 100;      flex-direction: column;      gap: 20px;    }    .tg-df-settings-dropdown.active {      display: flex;    }        .tg-df-settings-dropdown-backdrop {      display: none;      position: fixed;      inset: 0;      z-index: 99;    }        .tg-df-settings-dropdown-backdrop.active {      display: block;    }    .tg-df-setting-item {      display: flex;      flex-direction: column;      gap: 10px;    }    .tg-df-setting-label {      font-size: 11px;      font-weight: 700;      color: var(--tg-df-text-muted);      text-transform: uppercase;      letter-spacing: 0.5px;    }        .tg-df-region-select {        padding: 10px 12px;        border-radius: 8px;        border: 1px solid var(--tg-df-border);        font-size: 15px;        outline: none;        background: var(--tg-df-bg-secondary);        color: var(--tg-df-text);        cursor: pointer;        width: 100%;    }    .tg-df-toggle {        position: relative;        display: inline-block;        width: 44px;        height: 24px;        flex-shrink: 0;    }    .tg-df-toggle input {        opacity: 0;        width: 0;        height: 0;    }    .tg-df-slider {        position: absolute;        cursor: pointer;        top: 0; left: 0; right: 0; bottom: 0;        background-color: #ccc;        transition: .2s;        border-radius: 24px;    }    .tg-df-slider:before {        position: absolute;        content: "";        height: 18px;        width: 18px;        left: 3px;        bottom: 3px;        background-color: white;        transition: .2s;        border-radius: 50%;    }    .tg-df-toggle input:checked + .tg-df-slider {        background-color: #1F69FF;    }    .tg-df-toggle input:checked + .tg-df-slider:before {        transform: translateX(20px);    }    .tg-df-dl-row {        flex-direction: row;        align-items: center;        justify-content: space-between;    }    .tg-df-dl-row-text {        font-size: 14px;        font-weight: 600;        color: var(--tg-df-text);    }    .tg-df-dl-row-subtext {        font-size: 12px;        font-weight: 400;        line-height: 1.3;        color: var(--tg-df-text-muted);        margin-top: 4px;        display: block;    }    .tg-df-filters-container {      position: relative;      width: 100%;      max-width: 800px;    }    .tg-df-scroll-btn {      display: none;      position: absolute;      top: 50%;      transform: translateY(-50%);      width: 32px;      height: 32px;      background: white;      border: 1px solid var(--tg-df-border);      border-radius: 50%;      align-items: center;      justify-content: center;      cursor: pointer;      z-index: 10;      box-shadow: 0 2px 8px rgba(0,0,0,0.1);      color: var(--tg-df-text-primary);      padding: 0;    }    .tg-df-scroll-btn svg {      width: 16px;      height: 16px;    }    .tg-df-scroll-btn:hover {      background: #f4f4f4;    }    .tg-df-scroll-btn.left {      left: 0px;    }    .tg-df-scroll-btn.right {      right: 0px;    }    @container tg-df (max-width: 768px) {      .tg-df-scroll-btn {        display: flex;        top: 22px; /* vertically center within the 44px high filter buttons */      }    }    .tg-df-filters {      display: grid;      width: 100%;      grid-template-columns: repeat(4, 1fr);      gap: 12px;      margin: 0 auto;      max-width: 800px;    }                 .tg-df-sort-wrapper {      position: relative;      display: flex;      align-items: center;      width: 100%;    }        .tg-df-sort-icon {      position: absolute;      left: 14px;      width: 14px;      height: 14px;      fill: var(--tg-df-text-muted);      pointer-events: none;    }    .tg-df-sort-select, .tg-df-filter-select {      width: 100%;      padding: 10px 36px 10px 38px;      font-size: 14px;      border: 1px solid var(--tg-df-border);      border-radius: 100px;      outline: none;      appearance: none;      background-color: var(--tg-df-bg-secondary);      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 12 12'%3E%3Cpath fill='%23555555' d='M6 8L1 3h10z'/%3E%3C/svg%3E");      background-repeat: no-repeat;      background-position: right 14px center;      color: var(--tg-df-text);      cursor: pointer;      font-weight: 500;      transition: all 0.2s ease;    }        .tg-df-price-input::-webkit-outer-spin-button,    .tg-df-price-input::-webkit-inner-spin-button {      -webkit-appearance: none;      margin: 0;    }    .tg-df-price-input {      -moz-appearance: textfield;    }    .tg-df-sort-select:hover, .tg-df-filter-select:hover {      background-color: #e2e8f0;    }    .tg-df-multiselect-container {      position: relative;    }    @container tg-df (max-width: 768px) {      .tg-df-filters-container {      position: relative;      width: 100%;      max-width: 800px;    }    .tg-df-scroll-btn {      display: none;      position: absolute;      top: 50%;      transform: translateY(-50%);      width: 32px;      height: 32px;      background: white;      border: 1px solid var(--tg-df-border);      border-radius: 50%;      align-items: center;      justify-content: center;      cursor: pointer;      z-index: 10;      box-shadow: 0 2px 8px rgba(0,0,0,0.1);      color: var(--tg-df-text-primary);      padding: 0;    }    .tg-df-scroll-btn svg {      width: 16px;      height: 16px;    }    .tg-df-scroll-btn:hover {      background: #f4f4f4;    }    .tg-df-scroll-btn.left {      left: 0px;    }    .tg-df-scroll-btn.right {      right: 0px;    }    @container tg-df (max-width: 768px) {      .tg-df-scroll-btn {        display: flex;        top: 22px; /* vertically center within the 44px high filter buttons */      }    }    .tg-df-filters {        width: 100%;        margin: 0;        margin-bottom: -320px;        padding: 0 16px 320px 16px;        display: flex;        flex-wrap: nowrap;        gap: 8px;        overflow-x: auto;        overflow-y: hidden;        pointer-events: none;        scrollbar-width: none;        -webkit-overflow-scrolling: touch;      }      .tg-df-filters::-webkit-scrollbar {        display: none;      }      .tg-df-sort-wrapper {        pointer-events: auto;        flex: 0 0 auto;        width: 175px;        min-width: 175px;      }    }        .tg-df-multiselect-trigger {      display: block;      background: #fff;      user-select: none;      width: 100%;      overflow: hidden;      white-space: nowrap;      text-overflow: ellipsis;    }        .tg-df-multiselect-dropdown {      display: none;      position: absolute;      top: calc(100% + 4px);      left: 0;      width: 100%;      min-width: 220px;      max-height: 300px;      overflow-y: auto;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);      z-index: 100;      padding: 8px 0;    }    .tg-df-multiselect-dropdown.active {      display: block;    }    .tg-df-ms-option {      padding: 8px 16px;      display: flex;      align-items: center;      gap: 8px;      cursor: pointer;      font-size: 14px;    }    .tg-df-ms-option:hover {      background-color: var(--tg-df-bg-secondary);    }        .tg-df-ms-option input {      cursor: pointer;      accent-color: #1f69ff;    }    .tg-df-sort-select:focus, .tg-df-filter-select:focus {      border-color: #0000ff;      box-shadow: 0 0 0 3px rgba(0, 0, 255, 0.2);      background-color: var(--tg-df-bg);    }    /*       3. Deal Grid Layout    */    .tg-df-grid.tg-df-grid-auto {      padding-top: 24px;    }    .tg-df-grid, .tg-df-grid.layout-grid {      display: grid;      grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));      gap: 10px;    }    .tg-df-grid.layout-row {      grid-template-columns: 1fr;      gap: 16px;    }        .tg-df-grid.layout-row .tg-df-card {      flex-direction: row;      align-items: stretch;      height: auto;      box-shadow: none;      border-bottom: 1px solid var(--tg-df-border);    }    .tg-df-grid.layout-row .tg-df-card:hover {      box-shadow: none;    }    .tg-df-grid.layout-row .tg-df-card-image-box {      width: 140px;      min-width: 140px;      aspect-ratio: 3/4;      border-right: none;      padding: 16px 16px 16px 32px;    }    .tg-df-grid.layout-row .tg-df-card-body {      padding: 16px;      justify-content: space-between;    }    .tg-df-grid.layout-row .tg-df-card-title {      font-size: 15px;      margin-bottom: 16px;    }    .tg-df-grid.layout-row .tg-df-card-stars { margin-bottom: 8px; }    .tg-df-grid.layout-row .tg-df-card-footer {      flex-direction: column;      align-items: flex-start;      gap: 0;    }    .tg-df-grid.layout-row .tg-df-card-merchant-pill {      margin-bottom: 4px;    }    .tg-df-grid.layout-row .tg-df-card-price-group {      margin-bottom: 8px;    }    .tg-df-grid.layout-row .tg-df-price-group {      width: auto;    }    .tg-df-grid.layout-row .tg-df-card-cta {      width: 100%;      max-width: 200px;      padding: 10px 24px;      font-size: 13px;      flex-shrink: 0;      text-align: center;      justify-content: center;    }    /*       4. Deal Card Design    */    .tg-df-card {      position: relative;      display: flex;      flex-direction: column;      background-color: #ffffff;      border-radius: 0;      overflow: hidden;      transition: transform 0.2s ease, box-shadow 0.2s ease;      text-decoration: none;      color: inherit;      height: 100%;      box-shadow: 0 0 16px rgba(0, 0, 0, 0.08);      border: 1px solid var(--tg-df-border);    }    .tg-df-card:hover {      box-shadow: 0 0 24px rgba(0, 0, 0, 0.12);    }    .tg-df-card-image-box {      width: 100%;      aspect-ratio: 3/4;      background-color: #f8f8f8;      display: flex;      align-items: center;      justify-content: center;      position: relative;      overflow: hidden;      padding: 32px;      flex: 0 0 auto;    }    .tg-df-card-image {      max-width: 100%;      max-height: 100%;      width: auto;      height: auto;      object-fit: contain;      mix-blend-mode: multiply; /* Helps white background images blend into secondary bg */      transition: transform 0.3s ease;    }    .tg-df-card:hover .tg-df-card-image {      transform: scale(1.05); /* Zoom in on hover */    }    .tg-df-card-discount-badge {      position: absolute;      top: 12px;      left: 12px;      background: #dc2626; /* Red */      color: #ffffff;      padding: 6px 8px;      font-size: 11px;      font-weight: 500;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      z-index: 10;    }        .tg-df-card-merchant-pill {      display: block;      padding: 0;      font-size: 11px;      font-weight: 600;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      color: var(--tg-df-text-muted);      margin-bottom: 8px;      white-space: nowrap;      overflow: hidden;      text-overflow: ellipsis;    }    .tg-df-card-body {      padding: 16px;      display: flex;      flex-direction: column;      flex-grow: 1;      min-width: 0;    }    .tg-df-card-badges {      display: flex;      flex-wrap: wrap;      gap: 6px;      margin-bottom: 8px;    }    .tg-df-tag {      display: inline-flex;      align-items: center;      padding: 4px 6px;      font-size: 11px;      font-weight: 700;      text-transform: uppercase;      border-radius: 4px;      gap: 4px;    }    .tg-df-tag-prime {      background-color: #00A8E1;      color: #fff;    }    .tg-df-tag-coupons {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-coupons:hover {      background-color: #e2e8f0;    }        .tg-df-tag-outline {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-outline:hover {      background-color: #e2e8f0;    }        @keyframes tg-df-spin {      0% { transform: rotate(0deg); }      100% { transform: rotate(360deg); }    }    .tg-df-coupon-spinner {      border: 2px solid #e2e8f0;      border-top: 2px solid #3b82f6;      border-radius: 50%;      width: 14px;      height: 14px;      animation: tg-df-spin 1s linear infinite;      margin: 4px 8px;      display: inline-block;    }        /* Vouchers Modal */    .tg-df-modal-backdrop {      position: fixed;      top: 0; left: 0; right: 0; bottom: 0;      background: rgba(0,0,0,0.5);      z-index: 10000;      display: flex;      align-items: center;      justify-content: center;      opacity: 0;      pointer-events: none;      transition: opacity 0.3s;    }    .tg-df-modal-backdrop.active {      opacity: 1;      pointer-events: auto;    }    .tg-df-modal {      background: #fff;      border-radius: 12px;      width: 90%;      max-width: 400px;      max-height: 80vh;      display: flex;      flex-direction: column;      box-shadow: 0 10px 40px rgba(0,0,0,0.2);      transform: translateY(20px);      transition: transform 0.3s;    }    .tg-df-modal-backdrop.active .tg-df-modal {      transform: translateY(0);    }    .tg-df-modal-header {      padding: 16px;      border-bottom: 1px solid #e2e8f0;      display: flex;      align-items: center;      justify-content: space-between;    }    .tg-df-modal-title {      font-size: 16px;      font-weight: 600;      margin: 0;    }    .tg-df-modal-close {      background: none;      border: none;      cursor: pointer;      padding: 4px;      color: #64748b;    }    .tg-df-modal-body {      padding: 16px;      overflow-y: auto;    }    .tg-df-voucher-item {      padding: 12px;      border: 1px dashed #cbd5e1;      border-radius: 8px;      margin-bottom: 10px;      background: #f8fafc;      display: flex;      align-items: center;      gap: 12px;      text-decoration: none;      color: inherit;      transition: background-color 0.2s, border-color 0.2s;    }    .tg-df-voucher-item:hover {      background: #f1f5f9;      border-color: #94a3b8;    }    .tg-df-voucher-item:last-child {      margin-bottom: 0;    }    .tg-df-voucher-logo {      width: 48px;      height: 48px;      object-fit: contain;      border-radius: 4px;      background: #fff;      border: 1px solid #e2e8f0;      flex-shrink: 0;    }    .tg-df-voucher-content {      flex: 1;      min-width: 0;    }    .tg-df-voucher-title {      font-size: 14px;      font-weight: 600;      margin: 0 0 4px 0;      line-height: 1.3;      color: #0f172a;    }    .tg-df-voucher-expiry {      font-size: 12px;      color: #64748b;      display: flex;      align-items: center;      gap: 4px;      margin-top: 6px;    }    .tg-df-voucher-code {      display: inline-flex;      align-items: center;      background: #f1f5f9;      border: 1px dashed #cbd5e1;      padding: 6px 10px;      font-family: monospace;      font-weight: 700;      font-size: 14px;      color: #0f172a;      border-radius: 4px;      margin-top: 8px;      cursor: pointer;      transition: all 0.2s ease;    }    .tg-df-voucher-code:hover {      background: #e2e8f0;      border-color: #94a3b8;    }    .tg-df-voucher-code.copied {      background: #ecfdf5;      border-color: #10b981;      color: #10b981;    }    .tg-df-voucher-cta {      display: inline-block;      margin-top: 8px;      font-size: 13px;      font-weight: 600;      color: #2563eb;      text-decoration: none;    }    .tg-df-card-title {      font-size: 15px;      font-weight: 400;      line-height: 1.4;      margin: 0 0 12px 0;      color: var(--tg-df-text);    }    .tg-df-card-footer {      margin-top: auto;      display: flex;      flex-direction: column;      width: 100%;    }    .tg-df-card-price-group {      display: flex;      flex-direction: row;      align-items: center;      gap: 8px;      margin-bottom: 12px;    }    .tg-df-card-price {      font-size: 16px;      font-weight: 700;      color: #dc2626; /* Red price */      line-height: 1;    }        .tg-df-card-msrp {      font-size: 13px;      color: var(--tg-df-text-muted);      text-decoration: line-through;    }    .tg-df-container .tg-df-card-cta {      display: flex;      align-items: center;      justify-content: center;      width: 100%;      box-sizing: border-box;      background-color: #1f69ff;      color: #ffffff;      font-size: 12px;      font-weight: 700;      text-transform: uppercase;      letter-spacing: 0.5px;      padding: 12px 16px;      border-radius: 0;      border: none;      cursor: pointer;      transition: background-color 0.2s ease;    }    .tg-df-card:hover .tg-df-card-cta,    .tg-df-card-cta:hover {      background-color: #1555cc;    }    /*       5. State & Skeleton Styles    */    .tg-df-message {      grid-column: 1 / -1;      text-align: center;      padding: 48px 24px;      color: var(--tg-df-text-muted);      font-size: 16px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;    }    @keyframes tg-df-shimmer {      0% { background-position: -200% 0; }      100% { background-position: 200% 0; }    }    .tg-df-skeleton {      background: linear-gradient(90deg, var(--tg-df-bg-secondary) 25%, #e2e8f0 50%, var(--tg-df-bg-secondary) 75%);      background-size: 200% 100%;      animation: tg-df-shimmer 1.5s infinite;      border-radius: 4px;    }    .tg-df-skeleton-img {      width: 100%;      height: 100%;      position: absolute;      top: 0; left: 0;    }        .tg-df-skeleton-text {      height: 16px;      margin-bottom: 8px;      width: 100%;    }    .tg-df-skeleton-text.short { width: 40%; }    .tg-df-skeleton-text.title { height: 20px; margin-bottom: 16px; }    /* Editor Floating Bar & Elements */    .tg-df-editor-bar {      position: sticky;      top: 120px;      z-index: 1000;      background: #111827;      color: #fff;      padding: 12px 16px;      border-radius: 8px;      margin-bottom: 16px;      display: flex;      align-items: center;      justify-content: space-between;      box-shadow: 0 4px 12px rgba(0,0,0,0.15);    }    .tg-df-editor-bar-text {      font-weight: 600;      font-size: 14px;    }    .tg-df-editor-copy-btn {      background: #10b981;      color: #fff;      padding: 6px 16px;      border: none;      border-radius: 4px;      font-weight: 600;      cursor: pointer;      display: flex;      align-items: center;      font-size: 13px;    }    .tg-df-editor-copy-btn:hover { background: #059669; }        .tg-df-deal-checkbox {      position: absolute;      top: 12px;      right: 12px;      z-index: 10;      width: 20px;      height: 20px;      cursor: pointer;      pointer-events: auto;    }    /*       6. Mobile List View (Stacks into a cleaner horizontal row/list)    */    @container tg-df (max-width: 599px) {      .tg-df-controls {        padding: 16px 16px 8px;      }            .tg-df-top-bar {        width: 100%;      }            .tg-df-settings-dropdown {        position: fixed;        top: auto;        bottom: 0;        left: 0;        right: 0;        width: 100%;        border-radius: 20px 20px 0 0;        padding: 24px;        box-shadow: 0 -8px 32px rgba(0,0,0,0.15);        z-index: 1000;        border: none;        border-top: 1px solid var(--tg-df-border);      }            .tg-df-settings-dropdown-backdrop.active {        background: rgba(0,0,0,0.4);      }            .tg-df-search-wrapper {        box-shadow: 0 0 16px rgba(0,0,0,0.08);      }                  .tg-df-sort-wrapper.tg-df-price-range-wrapper {        flex: 0 0 auto;        min-width: max-content;        width: auto;      }            .tg-df-sort-select, .tg-df-filter-select {        width: 100%;        text-align: left;        padding: 10px 24px 10px 32px;        background-position: right 8px center;        text-overflow: ellipsis;        white-space: nowrap;        overflow: hidden;      }      .tg-df-sort-icon {        left: 10px;      }      .tg-df-grid:not(.layout-grid):not(.layout-row),      .tg-df-grid.layout-row {        grid-template-columns: 1fr;        gap: 16px;      }            .tg-df-grid.tg-df-grid-auto {        padding-top: 24px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card,      .tg-df-grid.layout-row .tg-df-card {        flex-direction: row;        align-items: stretch;        height: auto;        box-shadow: none; /* simple line on mobile if preferred, or keep */        border-bottom: 1px solid var(--tg-df-border);      }      .tg-df-grid.tg-df-grid-auto .tg-df-card:hover,      .tg-df-grid.layout-row .tg-df-card:hover {        box-shadow: none;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-image-box,      .tg-df-grid.layout-row .tg-df-card-image-box {        width: 120px;        min-width: 120px;        aspect-ratio: 3/4;        border-right: none;        padding: 12px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-body,      .tg-df-grid.layout-row .tg-df-card-body {        padding: 12px;        justify-content: space-between;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-title,      .tg-df-grid.layout-row .tg-df-card-title {        font-size: 14px;        margin-bottom: 12px;      }      /* Single column mobile grid override */      .tg-df-grid.layout-grid {        grid-template-columns: 1fr;        gap: 16px;      }      .tg-df-grid.layout-grid .tg-df-card-image-box {        padding: 12px;      }      .tg-df-grid.layout-grid .tg-df-card-body {        padding: 10px;      }      .tg-df-grid.layout-grid .tg-df-card-title {        font-size: 13px;        margin-bottom: 8px;      }      .tg-df-grid.layout-grid .tg-df-card-price {        font-size: 14px;      }            .tg-df-card-footer {        flex-direction: column;        align-items: stretch;        gap: 0;        width: 100%;        min-width: 0;      }      .tg-df-card-merchant-pill {        margin-bottom: 4px;      }      .tg-df-card-price-group {        flex: 1 1 auto;        margin-bottom: 8px;      }      .tg-df-card-price {        font-size: 16px;      }      .tg-df-card-msrp {        display: block;       }      .tg-df-grid.layout-row .tg-df-card-cta,      .tg-df-container .tg-df-card-cta {        width: 100%;        max-width: none;        min-width: 0;        box-sizing: border-box;        padding: 8px 16px;        font-size: 12px;        flex: 0 0 auto;        text-align: center;        white-space: normal;        line-height: 1.2;      }    }    .tg-df-container.is-carousel {      min-height: 760px;      background-color: #E7F0FF;      padding: 0 0 24px 0;      border-radius: 24px;      width: 100vw;      max-width: 1200px;      position: relative;      left: 50%;      transform: translateX(-50%);    }    .tg-df-container.is-carousel.hide-header-details {      min-height: 480px;    }    /*       7. Carousel View Mode    */    .tg-df-container .tg-df-carousel-host {      /* Layout is now handled by container wrapper */    }    .tg-df-container .tg-df-carousel-eyebrow {      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      padding: 24px 16px 0 16px;      display: none;    }    .tg-df-container .tg-df-carousel-query-title {      color: #011535;      font-size: 28px;      font-weight: 600;      padding: 0 16px 24px 16px;      line-height: 1.2;      display: none;    }    .tg-df-container .tg-df-carousel-blue-box {      background-color: transparent;      border-radius: 0;      padding: 24px 24px 0 24px;      margin: 0;      color: #1F69FF;          position: relative;      overflow: hidden;    }    .tg-df-container .tg-df-carousel-bg-circle-1 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-2 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-3 {      display: none;    }    .tg-df-container .tg-df-carousel-box-content {      position: relative;      z-index: 10;    }    .tg-df-container .tg-df-carousel-box-eyebrow {      background-color: transparent;      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      display: inline-block;      padding: 0;      border-radius: 0;    }    .tg-df-container .tg-df-carousel-box-title {      font-size: 28px;      font-weight: 600;      line-height: 1.2;      margin-top: 8px;      color: #1e293b;    }    .tg-df-container .tg-df-countdown-wrapper {      position: absolute;      top: 0;      right: 0;      display: flex;      flex-direction: column;      align-items: flex-end;      gap: 12px;      transform: scale(0.67);      transform-origin: top right;    }    .tg-df-container .tg-df-countdown-title {      font-size: 14px;      font-weight: 600;      color: #011535;      margin: 0;    }    .tg-df-container .tg-df-countdown-blocks {      display: flex;      gap: 16px;    }    .tg-df-container .tg-df-countdown-item {      display: flex;      flex-direction: column;      align-items: center;      gap: 4px;    }    .tg-df-container .tg-df-countdown-box {      width: 59px;      height: 59px;      background: #03FE9E;      border-radius: 15px;      display: flex;      align-items: center;      justify-content: center;    }    .tg-df-container .tg-df-countdown-num {      font-family: 'Inter', sans-serif;      font-weight: 700;      font-size: 20px;      line-height: normal;      color: #011535;    }    .tg-df-container .tg-df-countdown-label {      font-family: 'Inter', sans-serif;      font-weight: 500;      font-size: 16px;      line-height: normal;      color: #1e293b;      text-transform: uppercase;    }    .tg-df-container .tg-df-carousel-box-subtitle {      font-size: 16px;      margin-top: 8px;      font-weight: 300;      color: #1e293b;      line-height: 24px;    }    .tg-df-container .tg-df-carousel-roundels-wrapper {      position: relative;      margin-top: 24px;      margin-left: -24px;      margin-right: -24px;    }    .tg-df-container .tg-df-carousel-roundels {      display: flex;      gap: 16px;      overflow-x: auto;            scrollbar-width: none;      padding-top: 12px;      padding-bottom: 24px;      padding-left: 24px;      padding-right: 24px;      margin-left: 0;      margin-right: 0;    }        .tg-df-container .tg-df-carousel-scroll-left,    .tg-df-container .tg-df-carousel-scroll-right {      position: absolute;      top: 50%;      transform: translateY(-50%);      height: 36px;      width: 36px;      display: flex;      align-items: center;      justify-content: center;      border-radius: 50%;      background-color: #ffffff;      border: 1px solid #e2e8f0;      box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);      color: #1F69FF;      cursor: pointer;      transition: all 0.2s;      margin-top: -4px;      z-index: 20;    }    .tg-df-container .tg-df-carousel-scroll-left { left: 8px; }    .tg-df-container .tg-df-carousel-scroll-right { right: 8px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left { left: 0px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right { right: 0px; }    .tg-df-carousel-filters-outer { margin-left: -24px; margin-right: -24px; padding-left: 24px; padding-right: 24px; }    .tg-df-grid-wrapper { position: relative; }    @container tg-df (max-width: 599px) { .tg-df-carousel-filters-outer { margin-left: -16px; margin-right: -16px; padding-left: 16px; padding-right: 16px; } }        .tg-df-container .tg-df-carousel-scroll-left:hover,    .tg-df-container .tg-df-carousel-scroll-right:hover {      background-color: rgba(255, 255, 255, 0.6);    }    .tg-df-container .tg-df-carousel-roundels::-webkit-scrollbar {      display: none;    }    .tg-df-container .tg-df-roundel {      display: flex;      flex-direction: column;      align-items: center;      gap: 8px;      cursor: pointer;      min-width: 120px;      flex-shrink: 0;    }    .tg-df-container .tg-df-roundel-img-box {      width: 120px;      height: 120px;      border-radius: 50%;      background: white;      display: flex;      align-items: center;      justify-content: center;      overflow: hidden;      box-shadow: 0px 3px 14px 0px rgba(30, 41, 59, 0.08);      transition: box-shadow 0.2s;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box img {      transform: scale(1.08);    }    .tg-df-container .tg-df-roundel-img-box img {      width: 100%;      height: 100%;      object-fit: contain;      padding: 10px;      box-sizing: border-box;      transition: transform 0.3s ease;    }    .tg-df-container .tg-df-roundel-label {      font-size: 13px;      font-weight: 400;      color: #1e293b;      text-align: center;    }    .tg-df-container .tg-df-carousel-filters-label {      font-size: 16px;      font-weight: 400;      color: #1e293b;      white-space: nowrap;      margin-right: 4px;    }    .tg-df-container .tg-df-carousel-filters-wrap {      display: flex;      align-items: center;      flex-wrap: nowrap;      gap: 8px;      margin-top: 8px;      overflow-x: auto;      scrollbar-width: none;      -webkit-overflow-scrolling: touch;      padding-bottom: 8px;      margin-left: -24px;      margin-right: -24px;      padding-left: 24px;      padding-right: 24px;    }    .tg-df-container .tg-df-carousel-filters-wrap::-webkit-scrollbar {      display: none;    }        .tg-df-container .tg-df-carousel-filter-btn img,    .tg-df-container .tg-df-carousel-filter-btn picture {      height: 20px;      width: 20px;      object-fit: contain;      object-position: center;      display: inline-flex;      align-items: center;      justify-content: center;      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn picture img {      margin-right: 0;      height: 100%;      width: 100%;    }    .tg-df-container .tg-df-carousel-filter-btn img.active-img,    .tg-df-container .tg-df-carousel-filter-btn picture:has(.active-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.inactive-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.inactive-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.active-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.active-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.active-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.active-img) {      display: inline-flex;    }    .tg-df-container .tg-df-carousel-filter-btn {      background: #ffffff;      border: 2px solid #1e293b;      color: #1e293b;      border-radius: 24px;      padding: 6px 16px;      font-size: 14px;      font-weight: 600;      cursor: pointer;      transition: all 0.2s;      flex-shrink: 0;      white-space: nowrap;    }    .tg-df-container .tg-df-carousel-filter-btn svg {      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn {      display: inline-flex;      align-items: center;    }    .tg-df-container .tg-df-carousel-filter-btn:hover {      background: #1e293b;      color: white;      border-color: #1e293b;    }    .tg-df-container .tg-df-carousel-filter-btn.active {      background: #1e293b;      color: white;      border-color: #1e293b;    }        .tg-df-grid.carousel-compact {      display: flex;      flex-wrap: nowrap;      overflow-x: auto;      gap: 16px;      padding: 16px 24px;      align-items: stretch;      scrollbar-width: none;    }    .tg-df-grid.carousel-compact::-webkit-scrollbar {      display: none;    }    .tg-df-grid.carousel-compact .tg-df-card {      flex: 0 0 auto;      width: 200px;      min-height: auto;      height: auto;      display: flex;      flex-direction: column;      border-radius: 15px;      border: none;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      overflow: visible;    }    .tg-df-grid.carousel-compact .tg-df-card-image-box {      padding: 12px;      background-color: transparent;      border-radius: 15px 15px 0 0;      height: 130px;    }    .tg-df-grid.carousel-compact .tg-df-card-image {      mix-blend-mode: normal;    }    .tg-df-grid.carousel-compact .tg-df-card-discount-badge {      border-radius: 0;      top: 0px;      left: 0px;      padding: 4px 8px;      font-size: 11px;    }    .tg-df-grid.carousel-compact .tg-df-card-body {      padding: 8px 12px 12px 12px;    }    .tg-df-grid.carousel-compact .tg-df-card-title {      font-size: 14px;      font-weight: 400;      margin-bottom: 8px;      color: #011535;    }    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):not(:has(.tg-df-tag-prime)):not(:has(.tg-df-coupon-wrapper:not([style*="none"]))) > .tg-df-card-title,    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):has(> .tg-df-card-title:first-child) > .tg-df-card-title {    }    .tg-df-grid.carousel-compact .tg-df-card-cta {      border-radius: 5px;      padding: 8px 10px;      margin-top: 4px;      background-color: #1F69FF;    }    .tg-df-grid.carousel-compact .tg-df-card-price-group {      margin-bottom: 2px;    }    .tg-df-grid.carousel-compact .tg-df-card-merchant-pill {      margin-bottom: 2px;    }    @container tg-df (max-width: 599px) {      .tg-df-container .tg-df-carousel-blue-box-title {        font-size: 24px;      }      .tg-df-container .tg-df-countdown-title {        display: none;      }      .tg-df-container .tg-df-countdown-wrapper {        position: absolute;        top: 0;        right: 0;        align-items: flex-end;        transform: scale(0.40);        transform-origin: top right;      }      .tg-df-container .tg-df-roundel {        min-width: 88px;      }      .tg-df-container .tg-df-roundel-img-box {        width: 88px;        height: 88px;      }    }    /* REPLICA BLOCK STYLES */    .tg-df-grid.layout-replica-2 { grid-template-columns: repeat(2, 1fr) !important; gap: 20px; }    .tg-df-grid.layout-replica-1 { grid-template-columns: 1fr !important; gap: 20px; }        .tg-df-container .hawk-deal-widget-container { border-bottom: 1px solid #e5e7eb; display: flex; flex-direction: column; margin: 0; padding: 20px 0; box-sizing: border-box; font-family: inherit; }    .tg-df-container .hawk-deal-widget-wrap { display: flex; flex-direction: row; align-items: flex-start; width: 100%; gap: 24px; }    .tg-df-container .hawk-deal-widget-image-container { display: flex; flex-shrink: 0; justify-content: center; width: 160px; height: 160px; align-items: center; background: white; margin-bottom: 0px; }    .tg-df-container .hawk-deal-widget-title-product-title { color: #111827; font-size: 18px; font-weight: 700; line-height: 1.4; display: inline; }    .tg-df-container .hawk-deal-widget-title-price { font-size: 18px; font-weight: 700; line-height: 1.4; white-space: nowrap; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-price-now { font-weight: 700; }    .tg-df-container .hawk-deal-widget-title-retailer-price:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-title-retailer { font-size: 18px; font-weight: 700; line-height: 1.4; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-was-price { color: #dc2626; font-size: 16px; font-weight: 500; line-height: 1.4; text-decoration: line-through; white-space: nowrap; margin-left: 8px; margin-right: 8px; }    .tg-df-container .hawk-deal-widget-text-body-container { position: relative; width: 100%; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-text-body-main { font-size: 16px; width: 100%; margin-bottom: 12px; }    .tg-df-container .hawk-deal-widget-text-body-description { display: block; font-size: 15px; margin-top: 12px; color: #4b5563; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-body-description p { margin: 0; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-cta-container { display: flex; flex-direction: column; gap: 12px; width: 100%; flex: 1; min-width: 0; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-footer { display: flex; justify-content: flex-end; width: 100%; margin-top: auto; }    .tg-df-container .hawk-deal-widget-button-wrapper { display: flex; flex-direction: column; align-items: flex-end; justify-content: flex-end; width: 100%; }    .tg-df-container .hawk-deal-widget-preferred-partner-wrapper { display: flex; flex-direction: row; }        @container tg-df (min-width: 600px) {      .tg-df-mobile-only { display: none !important; }    }    @container tg-df (max-width: 599px) {      .tg-df-desktop-only { display: none !important; }      .tg-df-grid.layout-replica-2 { grid-template-columns: 1fr !important; }      .tg-df-grid.savings-squad-cards { grid-template-columns: 1fr !important; display: flex; flex-direction: column; }    }    .tg-df-grid.savings-squad-cards .tg-df-card-title {      -webkit-line-clamp: unset !important;      display: block !important;      overflow: visible !important;    }    @container tg-df (max-width: 500px) {      .tg-df-container .hawk-deal-widget-wrap { display: block; }      .tg-df-container .hawk-deal-widget-image-container { display: block; float: left; margin: 0 16px 8px 0; width: 120px; max-width: 120px; height: auto; align-items: normal; justify-content: normal; }      .tg-df-container .hawk-deal-widget-text-cta-container { display: block; text-align: left; }      .tg-df-container .hawk-deal-widget-footer { display: block; margin-top: 16px; clear: both; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper .hawk-deal-widget-preferred-partner-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-affiliate-link-deal-button { box-sizing: border-box !important; display: flex !important; max-width: none !important; width: 100% !important; margin: 0 !important; }    }        .tg-df-container .hawk-affiliate-link-deal-button {       align-items: center; background-color: #1f69ff; box-sizing: border-box; color: #ffffff !important; display: flex; font-size: 14px; font-weight: 700; justify-content: center; letter-spacing: 0.5px; line-height: 1; min-width: 160px; padding: 14px 24px; text-align: center; text-decoration: none; text-transform: uppercase; width: 100%; word-break: normal; border-radius: 4px; border: 0; transition: background-color 0.2s;     }    .tg-df-container .hawk-affiliate-link-deal-button:hover { background-color: #0056e0; text-decoration: none; }    .tg-df-container .hawk-lazy-image-deal-widget { display: block; height: auto; margin: auto; max-height: 160px; max-width: 100%; mix-blend-mode: multiply; object-fit: contain; }    .tg-df-container .hawk-deal-widget-text-cta-container a { color: #2563eb; text-decoration: none; display: inline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:has(.hawk-deal-widget-title-product-title) { color: #111827; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-product-title,    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-retailer-price { text-decoration: underline; }    .tg-df-savings-squad-header { margin-bottom: 24px; text-align: center; display: none; }    .tg-df-banner-img-desktop { display: block; width: 100%; height: auto; margin-bottom: 32px; }    .tg-df-banner-img-mobile { display: none; width: 100%; height: auto; margin-bottom: 32px; }    @container tg-df (max-width: 600px) {      .tg-df-banner-img-desktop { display: none; }      .tg-df-banner-img-mobile { display: block; }    }    .tg-df-header-title { font-size: 28px; font-weight: 700; color: var(--tg-df-text); margin: 32px 0 12px 0; line-height: 1.3; }    .tg-df-header-subtitle { font-size: 16px; color: var(--tg-df-text-muted); margin: 0 0 32px 0; line-height: 1.5; }  \x3C/style>  \x3C!-- Widget Container --\x3E  \x3Cdiv class="tg-df-container" id="signal-deals-finder-root">    \x3Cdiv class="tg-df-savings-squad-header" id="tg-df-savings-squad-header">      \x3Cpicture>        \x3Cimg src="https://cdn.mos.cms.futurecdn.net/flexiimages/xkh2og7m3d1778189998.png" alt="Deals Banner" class="tg-df-banner-img-desktop" />        \x3Cimg src="https://cdn.mos.cms.futurecdn.net/flexiimages/gmak6rtdf41778245089.png" alt="Deals Banner Mobile" class="tg-df-banner-img-mobile" />      \x3C/picture>      \x3Cdiv class="tg-df-header-text">        \x3Ch2 class="tg-df-header-title" id="tg-df-header-title">Editor's Choice Deals\x3C/h2>        \x3Cp class="tg-df-header-subtitle" id="tg-df-header-subtitle">Discover the best discounts currently available, curated daily by the Tom's Guide Savings Squad.\x3C/p>      \x3C/div>    \x3C/div>    \x3C!-- Editor Floating Bar --\x3E    \x3Cdiv class="tg-df-editor-bar" id="tg-df-editor-bar" style="display:none;">      \x3Cdiv class="tg-df-editor-bar-text" style="display: flex; align-items: center;">        \x3Cspan id="tg-df-selected-count">0\x3C/span>\x26nbsp;Deals Selected        \x3Cbutton class="tg-df-editor-clear-btn" id="tg-df-editor-clear" type="button" style="margin-left: 12px; font-size: 13px; color: #9ca3af; background: none; border: none; cursor: pointer; text-decoration: underline;">Clear All\x3C/button>      \x3C/div>      \x3Cbutton class="tg-df-editor-copy-btn" id="tg-df-editor-copy" type="button">        \x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">\x3C/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">\x3C/path>\x3C/svg>        Copy to CMS      \x3C/button>    \x3C/div>    \x3Cdiv class="tg-df-carousel-host" id="tg-df-carousel-host" style="display: none;">      \x3Cdiv class="tg-df-carousel-eyebrow">DEAL FINDER\x3C/div>      \x3Cdiv class="tg-df-carousel-query-title" id="tg-df-carousel-title-label">Best Deals\x3C/div>            \x3Cdiv class="tg-df-carousel-blue-box">        \x3Cdiv class="tg-df-carousel-bg-circle-1" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-2" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-3" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-box-content">          \x3Cdiv class="tg-df-countdown-wrapper" id="tg-df-countdown-wrapper" style="display:none;">            \x3Cdiv class="tg-df-countdown-title" id="tg-df-countdown-title">Prime Day starts in\x3C/div>            \x3Cdiv class="tg-df-countdown-blocks">              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-days">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">DAYS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-hrs">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">HRS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-min">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">MIN\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-sec">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">SEC\x3C/div>\x3C/div>            \x3C/div>          \x3C/div>          \x3Cdiv class="tg-df-carousel-box-eyebrow">DEAL FINDER\x3C/div>          \x3Cdiv class="tg-df-carousel-box-title">Find Deals Fast\x3C/div>          \x3Cdiv class="tg-df-carousel-box-subtitle">The latest deals from the biggest retailers, all in one place\x3C/div>                    \x3Cdiv class="tg-df-carousel-roundels-wrapper">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-roundels">                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Televisions" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/wcMxTsHgqu3roMbAx7RLnT-132-100.png" alt="TVs" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">TVs\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Phones" data-pr="over50">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/G3KGaRGzj24F6PUsw4bWpT-132-100.png" alt="Phones" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Phones\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Computing" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/znNvsLzx8NEgNkD9HSFSnT-132-100.png" alt="Computing" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Computing\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Gaming" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/Pgew8yaRQeZFHqHjTzvBnT-132-100.png" alt="Gaming" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Gaming\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Mattresses" data-pr="over500">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/cW7xsaLyesxkHFVSiC4kmT-132-100.png" alt="Mattresses" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Mattresses\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Audio" data-pr="over30">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/pCvBVHuhaQVjKt3VgCjbqT-132-100.png" alt="Audio" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Audio\x3C/span>            \x3C/div>                  \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>        \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-carousel-filters-outer" style="position: relative;">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-filters-wrap">                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="0">All\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_lightning">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_prime">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-d="10">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 10% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="15">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 15% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="25">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 25% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-pr="under50">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>            Under $50\x3C/button>        \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3C/div>    \x3C/div>    \x3C/div>      \x3C!-- Search & Filter Controls --\x3E      \x3Cdiv class="tg-df-top-bar" id="tg-df-top-bar" style="position: relative; z-index: 100; margin: 0 auto 20px;">        \x3Cdiv class="tg-df-search-wrapper">          \x3Cinput type="text" class="tg-df-search-input" placeholder="Search for deals, products, or brands...">          \x3Cbutton type="button" class="tg-df-search-btn" aria-label="Search">              \x3Csvg class="tg-df-search-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">                \x3Cpath d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/>              \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-autocomplete-dropdown" id="tg-df-autocomplete">\x3C/div>        \x3C/div>      \x3C/div>    \x3Cdiv class="tg-df-controls" id="tg-df-controls" style="display:flex;">              \x3Cdiv class="tg-df-filters-container" style="position: relative; width: 100%; max-width: 800px; margin: 0 auto;">          \x3Cbutton class="tg-df-scroll-btn left" style="display: none;" onclick="this.parentElement.querySelector('.tg-df-filters').scrollBy({left: -200, behavior: 'smooth'})">            \x3Csvg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">\x3Cpath d="M15 18l-6-6 6-6"/>\x3C/svg>          \x3C/button>          \x3Cbutton class="tg-df-scroll-btn right" style="display: none;" onclick="this.parentElement.querySelector('.tg-df-filters').scrollBy({left: 200, behavior: 'smooth'})">            \x3Csvg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">\x3Cpath d="M9 18l6-6-6-6"/>\x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-filters">          \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-category-filter-wrapper" style="display: none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-category-filter" aria-label="Category">            \x3Coption value="all">All Categories\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-multiselect-container" id="tg-df-brand-filter-wrapper" style="display:none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M4.25 5.61C6.27 8.2 10 13 10 13v6c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-6s3.72-4.8 5.74-7.39A.998.998 0 0 0 18.95 4H5.04c-.83 0-1.3.95-.79 1.61z"/>          \x3C/svg>          \x3Cdiv class="tg-df-filter-select tg-df-multiselect-trigger" id="tg-df-brand-trigger" tabindex="0">            Any Brand          \x3C/div>          \x3Cdiv class="tg-df-multiselect-dropdown" id="tg-df-brand-dropdown">            \x3C!-- Populated via script --\x3E          \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-price-range-wrapper" id="tg-df-custom-price-wrapper" style="display: flex; align-items:center; justify-content:center; padding: 10px 20px; gap: 8px; border: 1px solid var(--tg-df-border); border-radius: 100px; background-color: var(--tg-df-bg);">          \x3Cspan style="font-size:14px; font-weight:500; color:var(--tg-df-text-primary);">Price\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-min" placeholder="Min" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">          \x3Cspan style="color:var(--tg-df-text-muted)">-\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-max" placeholder="Max" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-legacy-price-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-price-filter" aria-label="Filter Prices">            \x3Coption value="all">All Prices\x3C/option>            \x3Coption value="under50">Under $50\x3C/option>            \x3Coption value="50_100">$50 - $100\x3C/option>            \x3Coption value="100_200">$100 - $200\x3C/option>            \x3Coption value="200_500">$200 - $500\x3C/option>            \x3Coption value="over500">Over $500\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-discount-filter-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-discount-filter" aria-label="Discount Amount">            \x3Coption value="all">Any discount\x3C/option>            \x3Coption value="5">Min 5%\x3C/option>            \x3Coption value="10">Min 10%\x3C/option>            \x3Coption value="15">Min 15%\x3C/option>            \x3Coption value="20">Min 20%\x3C/option>            \x3Coption value="25">Min 25%\x3C/option>            \x3Coption value="30">Min 30%\x3C/option>            \x3Coption value="40">Min 40%\x3C/option>            \x3Coption value="50">Min 50%\x3C/option>            \x3Coption value="60">Min 60%\x3C/option>            \x3Coption value="70">Min 70%\x3C/option>          \x3C/select>          \x3C/div>        \x3C/div>        \x3C/div>      \x3C/div>    \x3C!-- Deals Grid Wrapper --\x3E    \x3Cdiv class="tg-df-grid-wrapper tg-df-carousel-cards-wrapper" id="tg-df-grid-wrapper">      \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3Cdiv class="tg-df-grid" id="tg-df-grid">        \x3C!-- Content populated by JavaScript --\x3E      \x3C/div>      \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>    \x3C/div>        \x3C!-- Vouchers Modal --\x3E    \x3Cdiv class="tg-df-modal-backdrop" id="tg-df-vouchers-modal">      \x3Cdiv class="tg-df-modal">        \x3Cdiv class="tg-df-modal-header">          \x3Ch3 class="tg-df-modal-title" id="tg-df-vouchers-title">Available Coupons & Deals\x3C/h3>          \x3Cbutton class="tg-df-modal-close" id="tg-df-vouchers-close">            \x3Csvg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">              \x3Cline x1="18" y1="6" x2="6" y2="18">\x3C/line>              \x3Cline x1="6" y1="6" x2="18" y2="18">\x3C/line>            \x3C/svg>          \x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-modal-body" id="tg-df-vouchers-content">          \x3C!-- Vouchers injected here --\x3E        \x3C/div>      \x3C/div>    \x3C/div>  \x3C/div>`;      if (!template) {        template = document.createElement('template');        template.innerHTML = rawTemplate;      }      let shadowRoot = null;      if (hostContainer && template) {        hostContainer.setAttribute('data-initialized', 'true');        shadowRoot = hostContainer.attachShadow({ mode: 'open' });        shadowRoot.appendChild(template.content.cloneNode(true));      }      class DealsFinderWidget {        constructor(config) {          this.rootNode = config.rootNode || document;          this.hostContainer = config.hostContainer || null;          this.rootId = config.rootId || 'signal-deals-finder-root';          this.root = this.rootNode.querySelector('#' + this.rootId);          if (!this.root) return;          this.widgetId = (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'widget-' + Date.now() + '-' + Math.random().toString(36).slice(2);          this.grid = this.root.querySelector('#tg-df-grid');          this.tagsContainer = this.root.querySelector('#tg-df-tags-container');          this.categoryFilter = this.root.querySelector('#tg-df-category-filter');          this.categoryFilterWrapper = this.root.querySelector('#tg-df-category-filter-wrapper');          this.searchInput = this.root.querySelector('.tg-df-search-input');          this.autocompleteDropdown = this.root.querySelector('#tg-df-autocomplete');          this.sortSelect = this.root.querySelector('.tg-df-sort-select');          this.searchBtn = this.root.querySelector('.tg-df-search-btn');                    this.settingsToggle = this.root.querySelector('#tg-df-settings-toggle');          this.settingsPanel = this.root.querySelector('#tg-df-settings-panel');          this.settingsBackdrop = this.root.querySelector('#tg-df-settings-backdrop');          this.regionSelect = this.root.querySelector('#tg-df-region-select');          this.retailerSelect = this.root.querySelector('#tg-df-retailer-select');          this.offerTypeSelect = this.root.querySelector('#tg-df-offer-type-select');          this.viewModeSelect = this.root.querySelector('#tg-df-view-mode-select');          this.rowsSelect = this.root.querySelector('#tg-df-rows-select');          this.dealModeToggle = this.root.querySelector('#tg-df-deal-mode');          this.editorModeToggle = this.root.querySelector('#tg-df-editor-mode');          this.priceFilter = this.root.querySelector('#tg-df-price-filter');          this.discountFilter = this.root.querySelector('#tg-df-discount-filter');                    this.editorBar = this.root.querySelector('#tg-df-editor-bar');          this.editorSelectedCount = this.root.querySelector('#tg-df-selected-count');          this.editorCopyBtn = this.root.querySelector('#tg-df-editor-copy');          this.editorClearBtn = this.root.querySelector('#tg-df-editor-clear');                    this.apiUrl = 'https://search-api.fie.future.net.uk/widget.php';          this.deals = [];          this.displayLimit = 12;          this.airedaleArticles = null;          this.airedaleTags = [];          this.airedaleTagCounts = {};          this.activeDealTag = null;          this.selectedBrands = [];          this.currentQuery = '';          this.editorMode = this.hostContainer ? this.hostContainer.hasAttribute('data-editor-mode') : false;          this.viewModeOverride = this.hostContainer ? this.hostContainer.getAttribute('data-view-mode') : null;          this.selectedDeals = new Map();                    this.brandFilterWrapper = this.root.querySelector('#tg-df-brand-filter-wrapper');          this.brandTrigger = this.root.querySelector('#tg-df-brand-trigger');          this.brandDropdown = this.root.querySelector('#tg-df-brand-dropdown');                    this.customPriceWrapper = this.root.querySelector('#tg-df-custom-price-wrapper');          this.customPriceMin = this.root.querySelector('#tg-df-custom-price-min');          this.customPriceMax = this.root.querySelector('#tg-df-custom-price-max');          this.legacyPriceWrapper = this.root.querySelector('#tg-df-legacy-price-wrapper');          this.discountFilterWrapper = this.root.querySelector('#tg-df-discount-filter-wrapper');          this.initResizeObserver();          this.init();        }        getViewMode() {          console.log("DEBUG getViewMode -> override:", this.viewModeOverride, "editorMode:", this.editorMode);          if (this.viewModeOverride && (!this.editorMode || !this.viewModeSelect)) {            return this.viewModeOverride;          }          return (this.viewModeSelect && this.viewModeSelect.value) ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');        }        applyLayoutMode() {          if (!this.grid) return;          const mode = this.getViewMode();          console.log("[DEBUG] applyLayoutMode CALLED! mode=", mode);          this.grid.classList.remove('layout-row', 'layout-grid', 'tg-df-grid-auto', 'carousel-compact', 'layout-replica-1', 'layout-replica-2');                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          const showHeaderDetails = params.get('show_header_details') !== 'false';          const carouselHost = this.root.querySelector('#tg-df-carousel-host');          const controlsDiv = this.root.querySelector('#tg-df-controls');          const topBarDiv = this.root.querySelector('#tg-df-top-bar');          const headerElement = this.root.querySelector('#tg-df-savings-squad-header');          if (headerElement) {             headerElement.style.display = (mode === 'savings_squad' && showHeaderDetails) ? 'block' : 'none';          }          if (mode === 'carousel') {             this.grid.classList.add('carousel-compact');             if (carouselHost) carouselHost.style.display = 'block';             if (controlsDiv) controlsDiv.style.display = 'none';             if (topBarDiv) topBarDiv.style.display = 'none';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.add('is-carousel');             }          } else {             if (carouselHost) carouselHost.style.display = 'none';             if (controlsDiv) controlsDiv.style.display = 'flex';             if (topBarDiv) topBarDiv.style.display = 'block';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          }          if (mode === 'grid') {            this.grid.classList.add('layout-grid');          } else if (mode === 'row') {            this.grid.classList.add('layout-row');          } else if (mode === 'savings_squad') {            this.grid.classList.add('tg-df-grid-auto', 'savings-squad-cards');          } else if (mode !== 'carousel') {            this.grid.classList.add('tg-df-grid-auto');          }                    const settingsWrapper = this.root.querySelector('.tg-df-settings-wrapper');          if (settingsWrapper) {            settingsWrapper.style.display = mode === 'auto' ? 'none' : 'block';          }          if (this.customPriceWrapper) {             this.customPriceWrapper.style.display = mode === 'auto' ? 'flex' : 'none';          }          if (this.legacyPriceWrapper) {             this.legacyPriceWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }          if (this.discountFilterWrapper) {             this.discountFilterWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }        }        initResizeObserver() {          try {            if (window.parent === window) return;          } catch (e) {            // cross origin frame check threw          }          const emitHeight = () => {            try {              const height = document.documentElement.scrollHeight || document.body.scrollHeight;              const msg = { type: 'embed-size', height: height };              if (window.parent && window.parent !== window) {                window.parent.postMessage(msg, '*');                window.parent.postMessage(JSON.stringify({ ...msg, sentinel: 'amp' }), '*');              }            } catch (e) {}          };                    if (window.ResizeObserver) {            try {              const ro = new ResizeObserver(() => emitHeight());              ro.observe(document.body);              if (this.root) ro.observe(this.root);            } catch(e){ console.warn(e); }          }          window.addEventListener('resize', emitHeight);          setTimeout(emitHeight, 300);        }        initCountdown() {          this.cdWrapper = this.root.querySelector('#tg-df-countdown-wrapper');                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          this.showCountdown = params.get('show_countdown') === 'true';          const showHeaderDetails = params.get('show_header_details') !== 'false';          const eyebrow = this.root.querySelector('.tg-df-carousel-box-eyebrow');          const title = this.root.querySelector('.tg-df-carousel-box-title');          const subtitle = this.root.querySelector('.tg-df-carousel-box-subtitle');          if (!showHeaderDetails) {            let containerElement = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (containerElement) containerElement.classList.add('hide-header-details');            if (eyebrow) eyebrow.style.display = 'none';            if (title) title.style.display = 'none';            if (subtitle) subtitle.style.display = 'none';          }          if (!this.cdWrapper) return;          this.cdTitle = this.root.querySelector('#tg-df-countdown-title');          this.cdDays = this.root.querySelector('#tg-df-cd-days');          this.cdHrs = this.root.querySelector('#tg-df-cd-hrs');          this.cdMin = this.root.querySelector('#tg-df-cd-min');          this.cdSec = this.root.querySelector('#tg-df-cd-sec');          this.updateCountdown();          this.cdInterval = setInterval(() => this.updateCountdown(), 1000);        }        updateCountdown() {          if (!this.cdWrapper) return;          if (!this.showCountdown) {            this.cdWrapper.style.display = 'none';            return;          }          const area = this.getAreaCode();          let offset = '-04:00';          if (['DE', 'FR', 'IT', 'ES', 'NL'].includes(area)) {             offset = '+02:00';          } else if (['GB', 'IE', 'UK'].includes(area)) {             offset = '+01:00';          }          const startTime = new Date('2026-06-23T00:00:00' + offset).getTime();          const endTime = new Date('2026-06-26T00:00:00' + offset).getTime();          const now = Date.now();          let targetTime = 0;          if (now < startTime) {             targetTime = startTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day starts in';             this.cdWrapper.style.display = 'flex';          } else if (now < endTime) {             targetTime = endTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day ends in';             this.cdWrapper.style.display = 'flex';          } else {             this.cdWrapper.style.display = 'none';             if (this.cdInterval) clearInterval(this.cdInterval);             return;          }          const diff = Math.max(0, targetTime - now);          const d = Math.floor(diff / (1000 * 60 * 60 * 24));          const h = Math.floor((diff / (1000 * 60 * 60)) % 24);          const m = Math.floor((diff / 1000 / 60) % 60);          const s = Math.floor((diff / 1000) % 60);          if (this.cdDays) this.cdDays.textContent = d;          if (this.cdHrs) this.cdHrs.textContent = h;          if (this.cdMin) this.cdMin.textContent = m;          if (this.cdSec) this.cdSec.textContent = s;        }        init() {          this.initCountdown();          try {            initAnalytics();          } catch (e) {            console.warn('Deals Widget Analytics Error:', e);          }                    this.bindEvents();                    let initialQuery = '';                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          let initialViewMode = params.get('view_mode');          if (!this.viewModeOverride && initialViewMode) {            this.viewModeOverride = initialViewMode;          }          if (!params.has('search') && !params.has('q') && !params.has('query') && initialViewMode !== 'savings_squad') {             initialQuery = 'Gaming laptops';          }          const website = params.get('website') || 'tomsguide';          this.website = website;          if (website === 'techradar') {            const squadHeader = this.root.querySelector('.tg-df-savings-squad-header');            if (squadHeader) {               const pic = squadHeader.querySelector('picture');               if (pic) pic.style.display = 'none';            }            const style = document.createElement('style');            style.innerHTML = `              .tg-df-container .hawk-affiliate-link-deal-button, .tg-df-container .tg-df-card-cta { background-color: #5DAF08 !important; }              .tg-df-container .hawk-affiliate-link-deal-button:hover, .tg-df-container .tg-df-card-cta:hover { background-color: #4a8c06 !important; }            `;            this.root.appendChild(style);          }                    if (this.regionSelect) {            this.regionSelect.value = params.get('region') || 'auto';            this.updatePriceDropdownCurrency();          }                    if (this.retailerSelect && params.has('retailer')) {            this.retailerSelect.value = params.get('retailer');          }                    if (params.has('brands')) {            const b = params.get('brands');            if (b) {              this.selectedBrands = b.split(',');            }          }                    if (this.offerTypeSelect && params.has('offer_type')) {            this.offerTypeSelect.value = params.get('offer_type');          }          if (this.viewModeSelect && params.has('view_mode')) {            this.viewModeSelect.value = params.get('view_mode');          }          if (this.rowsSelect && params.has('rows')) {            this.rowsSelect.value = params.get('rows');          }          if (params.has('price')) {            const priceVal = params.get('price');            if (this.priceFilter) {               // Try assigning it directly to select. If it's not present implicitly ignores               this.priceFilter.value = priceVal;            }            if (priceVal.includes('_')) {               const parts = priceVal.split('_');               if (this.customPriceMin && parts[0]) this.customPriceMin.value = parts[0];               if (this.customPriceMax && parts[1]) this.customPriceMax.value = parts[1];            }          }          if (this.discountFilter && params.has('min_discount_ratio')) {            // Need to convert back from ratio (e.g. 0.8) to select value (e.g. "20")            const ratioStr = params.get('min_discount_ratio');            const ratioFloat = parseFloat(ratioStr);            if (!isNaN(ratioFloat)) {               const percentage = Math.round((1 - ratioFloat) * 100);               this.discountFilter.value = percentage.toString();            }          }          if (this.sortSelect) {            this.sortSelect.value = params.get('sort') || 'date_desc';          }          if (this.dealModeToggle && params.has('deal_mode')) {            this.dealModeToggle.checked = params.get('deal_mode') === 'true' || params.get('deal_mode') === '1';          }          const headerTitleEl = this.root.querySelector('#tg-df-header-title');          const headerSubtitleEl = this.root.querySelector('#tg-df-header-subtitle');          if (params.has('widget_title') && headerTitleEl) {             headerTitleEl.textContent = params.get('widget_title');          }          if (params.has('widget_subtitle') && headerSubtitleEl) {             headerSubtitleEl.textContent = params.get('widget_subtitle');          }                    // Re-apply layout after params have updated control values          this.applyLayoutMode();                    if (params.get('search')) {            initialQuery = params.get('search');          } else if (params.get('q')) {            initialQuery = params.get('q');          } else if (params.get('query')) {            initialQuery = params.get('query');          }                    this.currentQuery = initialQuery;          if (this.searchInput) {            if (this.getViewMode() === 'savings_squad') {              this.searchInput.value = '';            } else {              this.searchInput.value = this.currentQuery;            }          }                    if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {            this.fetchDeals(this.currentQuery);          } else {            this.render();          }        }        updatePriceDropdownCurrency() {          if (!this.priceFilter || !this.regionSelect) return;          const currencySymbols = {            'US': '$',            'GB': '£',            'CA': '$CA',            'AU': '$AU',            'DE': '€',            'FR': '€',            'IT': '€',          };          const area = this.getAreaCode();          const cur = currencySymbols[area || 'US'] || '$';                    const options = this.priceFilter.options;          for (let i = 0; i < options.length; i++) {            const opt = options[i];            if (opt.value === 'all') {              opt.innerText = 'All Prices';            } else if (opt.value === 'under50') {              opt.innerText = `Under ${cur}50`;            } else if (opt.value === '50_100') {              opt.innerText = `${cur}50 - ${cur}100`;            } else if (opt.value === '100_200') {              opt.innerText = `${cur}100 - ${cur}200`;            } else if (opt.value === '200_500') {              opt.innerText = `${cur}200 - ${cur}500`;            } else if (opt.value === 'over500') {              opt.innerText = `Over ${cur}500`;            }          }        }        populateBrandDropdown(values) {          if (!this.brandDropdown || !this.brandFilterWrapper) return;          this.brandFilterWrapper.style.display = 'flex'; // show the wrapper                    let html = '';          const allChecked = this.selectedBrands.length === 0 ? 'checked' : '';          const _div = '<' + '/div>';          const _span = '<' + '/span>';          html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="" ${allChecked} class="tg-df-brand-chk"> Any Brand${_div}`;                    values.forEach(v => {             if (!v.formatted_value || v.formatted_value === 'Any Brand') return;             const isChecked = this.selectedBrands.includes(v.formatted_value) ? 'checked' : '';             html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="${this.escapeHTML(v.formatted_value)}" ${isChecked} class="tg-df-brand-chk"> ${this.escapeHTML(v.formatted_value)} \x3Cspan style="color:var(--tg-df-text-muted);font-size:12px">(${v.count || 0})${_span}${_div}`;          });                    this.brandDropdown.innerHTML = html;                    // Re-bind listeners          const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');          chks.forEach(chk => {            chk.addEventListener('change', (e) => {              const val = e.target.value;              if (val === '') {                this.selectedBrands = [];              } else {                if (e.target.checked) {                   if (!this.selectedBrands.includes(val)) this.selectedBrands.push(val);                } else {                   this.selectedBrands = this.selectedBrands.filter(b => b !== val);                }              }                            if (this.selectedBrands.length === 0) {                 this.brandTrigger.innerText = 'Any Brand';              } else if (this.selectedBrands.length === 1) {                 this.brandTrigger.innerText = this.selectedBrands[0];              } else {                 this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;              }                            // Only call API if changed from UI interactions              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.updateURLParams();                 this.fetchDeals(this.currentQuery);              }            });          });                    // Update button text on load          if (this.selectedBrands.length === 0) {             this.brandTrigger.innerText = 'Any Brand';          } else if (this.selectedBrands.length === 1) {             this.brandTrigger.innerText = this.selectedBrands[0];          } else {             this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;          }        }        updateURLParams() {          const url = new URL(window.location);          if (this.currentQuery && this.currentQuery !== 'Gaming laptops') {            url.searchParams.set('q', this.currentQuery);          } else {            url.searchParams.delete('q');            url.searchParams.delete('search');            url.searchParams.delete('query');          }                    if (this.regionSelect && this.regionSelect.value !== 'auto') {            url.searchParams.set('region', this.regionSelect.value);          } else {            url.searchParams.delete('region');          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.set('retailer', this.retailerSelect.value);          } else {            url.searchParams.delete('retailer');          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.set('brands', this.selectedBrands.join(','));          } else {            url.searchParams.delete('brands');          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.set('offer_type', this.offerTypeSelect.value);          } else {            url.searchParams.delete('offer_type');          }                    if (this.viewModeSelect && this.viewModeSelect.value !== 'auto') {            url.searchParams.set('view_mode', this.viewModeSelect.value);          } else {            url.searchParams.delete('view_mode');          }                    if (this.rowsSelect && this.rowsSelect.value !== '12') {            url.searchParams.set('rows', this.rowsSelect.value);          } else {            url.searchParams.delete('rows');          }                    const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             url.searchParams.set('price', `${min}_${max}`);          } else if (this.priceFilter && this.priceFilter.value !== 'all') {            url.searchParams.set('price', this.priceFilter.value);          } else {            url.searchParams.delete('price');          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {               const ratio = (100 - v) / 100;               url.searchParams.set('min_discount_ratio', ratio.toString());            }          } else {            url.searchParams.delete('min_discount_ratio');          }                    if (this.sortSelect && this.sortSelect.value !== 'date_desc') {            url.searchParams.set('sort', this.sortSelect.value);          } else {            url.searchParams.delete('sort');          }                    if (this.dealModeToggle && this.dealModeToggle.checked) {            url.searchParams.set('deal_mode', 'true');          } else {            url.searchParams.delete('deal_mode');          }                    window.history.replaceState({}, '', url);        }        bindEvents() {          const handleFiltersScroll = () => {            const filters = this.root.querySelector('.tg-df-filters');            const leftBtn = this.root.querySelector('.tg-df-scroll-btn.left');            const rightBtn = this.root.querySelector('.tg-df-scroll-btn.right');            if (filters && leftBtn && rightBtn) {              const { scrollLeft, scrollWidth, clientWidth } = filters;              leftBtn.style.display = scrollLeft > 0 ? 'flex' : 'none';              rightBtn.style.display = Math.ceil(scrollLeft + clientWidth) < scrollWidth - 5 ? 'flex' : 'none';            }          };          const filters = this.root.querySelector('.tg-df-filters');          if (filters) {            filters.addEventListener('scroll', handleFiltersScroll);            window.addEventListener('resize', handleFiltersScroll);            setTimeout(handleFiltersScroll, 100);                        // Also call after rendering dropdowns            const origRenderCategories = this.renderCategories;            if (origRenderCategories) {               this.renderCategories = (...args) => {                 origRenderCategories.apply(this, args);                 setTimeout(handleFiltersScroll, 50);               };            }          }                const roundels = this.root.querySelectorAll('.tg-df-carousel-cat');          roundels.forEach(r => {             r.addEventListener('click', () => {                const q = r.getAttribute('data-query');                const pr = r.getAttribute('data-pr');                if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: q,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = q;                const label = this.root.querySelector('#tg-df-carousel-title-label');                if (label) label.textContent = 'Best ' + q;                if (this.priceFilter) this.priceFilter.value = pr || 'all';                if (this.discountFilter) this.discountFilter.value = '5';                if (this.searchInput) this.searchInput.value = q;                                roundels.forEach(ro => ro.classList.remove('active'));                r.classList.add('active');                this.fetchDeals(this.currentQuery);             });          });          const discBtns = this.root.querySelectorAll('.tg-df-carousel-filter-btn');          discBtns.forEach(b => {             b.addEventListener('click', () => {                const d = b.getAttribute('data-d');                const pr = b.getAttribute('data-pr');                const ot = b.getAttribute('data-ot');                let label = b.innerText ? b.innerText.trim() : '';                let filterType = 'unknown';                let filterVal = 'unknown';                if (d !== null) { filterType = 'discount'; filterVal = d; }                else if (pr !== null) { filterType = 'price'; filterVal = pr; }                else if (ot !== null) { filterType = 'offertype'; filterVal = ot; }                if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-${filterType}-${filterVal}`, name: 'Filter Button', label: label });                                if (d !== null) {                   if (this.discountFilter) this.discountFilter.value = this.discountFilter.value === d ? '0' : d;                } else if (pr !== null) {                   if (this.priceFilter) this.priceFilter.value = this.priceFilter.value === pr ? 'all' : pr;                } else if (ot !== null) {                   if (this.offerTypeSelect) this.offerTypeSelect.value = this.offerTypeSelect.value === ot ? 'all' : ot;                } else {                   if (this.discountFilter) this.discountFilter.value = '0';                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.offerTypeSelect) this.offerTypeSelect.value = 'all';                }                if (d === null && pr === null && ot === null && b.getAttribute("data-type") !== "custom") {                   discBtns.forEach(ro => ro.classList.remove('active'));                   b.classList.add('active');                } else if (b.getAttribute("data-type") !== "custom") {                   // Only operate on hardcoded buttons (those without data-type)                   discBtns.forEach(ro => {                      if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active');                   });                                      let makeActive = true;                   if (d !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-d') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (pr !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-pr') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (ot !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-ot') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   }                                      if (makeActive) b.classList.add('active');                                      // Check if anything is active, if not activate "All"                   let anyActive = false;                   discBtns.forEach(ro => { if (ro.classList.contains('active') && ro.getAttribute('data-type') !== 'custom') anyActive = true; });                   if (!anyActive) {                       discBtns.forEach(ro => { if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.add('active'); });                   }                }                                this.fetchDeals(this.currentQuery);             });          });          if (this.brandTrigger && this.brandDropdown) {            this.brandTrigger.addEventListener('click', () => {              this.brandDropdown.classList.toggle('active');            });            document.addEventListener('click', (e) => {              if (this.brandFilterWrapper && !e.composedPath().includes(this.brandFilterWrapper)) {                this.brandDropdown.classList.remove('active');              }            });          }          const showAutocomplete = () => {             if (this.getViewMode() !== 'savings_squad' || !this.autocompleteDropdown || !this.airedaleTags) return;                          let terms = this.airedaleTags;             if (this.airedaleBrands) {                terms = terms.concat(this.airedaleBrands.map(b => b.formatted_value));             }             terms = [...new Set(terms)];                          const query = this.searchInput.value.trim();             let matches = [];             if (query.length > 0) {                 matches = terms.filter(t => t.toLowerCase().includes(query.toLowerCase()) && t.toLowerCase() !== query.toLowerCase());             } else {                 matches = terms;             }                          if (matches.length > 0) {                 this.autocompleteDropdown.innerHTML = matches.map(m => `\x3Cdiv class="tg-df-autocomplete-item" data-tag="${this.escapeHTML(m)}">${this.escapeHTML(m)}<` + `/div>`).join('');                 this.autocompleteDropdown.classList.add('active');             } else {                 this.autocompleteDropdown.classList.remove('active');             }          };          let debounceTimer;          if(this.searchInput) {            this.searchInput.addEventListener('focus', showAutocomplete);            this.searchInput.addEventListener('input', (e) => {              clearTimeout(debounceTimer);              const query = e.target.value.trim();              this.currentQuery = query;              showAutocomplete();              debounceTimer = setTimeout(() => {                this.updateURLParams();                if (query.length > 2) {                  this.fetchDeals(query);                } else if (query.length === 0) {                  if (this.getViewMode() === 'savings_squad') {                    this.activeDealTag = null;                    this.currentQuery = '';                    if (this.categoryFilter) this.categoryFilter.value = 'all';                    this.fetchDeals('');                  } else {                    this.deals = [];                    this.render();                  }                }              }, 400);            });            this.searchInput.addEventListener('keypress', (e) => {              if (e.key === 'Enter') {                if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');                clearTimeout(debounceTimer);                const query = e.target.value.trim();                this.currentQuery = query;                                let isTag = false;                if (this.airedaleTags && this.airedaleTags.includes(query)) isTag = true;                if (this.airedaleBrands && this.airedaleBrands.some(b => b.formatted_value === query)) isTag = true;                this.activeDealTag = isTag ? query : null;                                trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                this.updateURLParams();                if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                   if (query.length === 0 && this.getViewMode() === 'savings_squad') {                       if (this.categoryFilter) this.categoryFilter.value = 'all';                   }                   this.fetchDeals(query);                }              }            });          }          if (this.autocompleteDropdown) {             this.autocompleteDropdown.addEventListener('click', (e) => {                const item = e.target.closest('.tg-df-autocomplete-item');                if (item) {                   const tag = item.getAttribute('data-tag');                   this.currentQuery = tag;                   if (this.searchInput) this.searchInput.value = tag;                   this.activeDealTag = tag;                   if (this.categoryFilter && this.airedaleTags.includes(tag)) {                       this.categoryFilter.value = tag;                   }                   this.autocompleteDropdown.classList.remove('active');                   this.updateURLParams();                   this.fetchDeals(tag);                }             });             document.addEventListener('click', (e) => {               if (this.autocompleteDropdown && this.searchInput && !e.composedPath().includes(this.searchInput) && !e.composedPath().includes(this.autocompleteDropdown)) {                 this.autocompleteDropdown.classList.remove('active');               }             });          }          if (this.searchBtn) {            this.searchBtn.addEventListener('click', () => {              if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');              clearTimeout(debounceTimer);              const query = this.searchInput.value.trim();              trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                            let isTag = false;              if (this.airedaleTags && this.airedaleTags.includes(query)) isTag = true;              if (this.airedaleBrands && this.airedaleBrands.some(b => b.formatted_value === query)) isTag = true;              this.activeDealTag = isTag ? query : null;                            this.currentQuery = query;              this.updateURLParams();              if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                 if (query.length === 0 && this.getViewMode() === 'savings_squad') {                     if (this.categoryFilter) this.categoryFilter.value = 'all';                 }                 this.fetchDeals(query);              }            });          }          if(this.sortSelect && this.sortSelect.querySelector('option[value="date_desc"]') === null) {              const option = document.createElement('option');              option.value = "date_desc";              option.text = "Newest First";              this.sortSelect.insertBefore(option, this.sortSelect.firstChild);          }          if(this.sortSelect) this.sortSelect.addEventListener('change', () => {            trackElementInteraction({ id: `sort-option-${this.sortSelect.value}`, name: 'Sort', label: `Sort: ${this.sortSelect.options[this.sortSelect.selectedIndex].text}` });            this.updateURLParams();            if (this.deals.length > 0) {              this.sortData();              this.render();            }          });                    const priceFilter = this.root.querySelector('#tg-df-price-filter');          if (priceFilter) {            this.priceFilter = priceFilter;            this.priceFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-price-${this.priceFilter.value}`, name: 'Price', label: this.priceFilter.options[this.priceFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          const updateCustomPrice = () => {             this.updateURLParams();             if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);             } else {                this.render();             }          };          if (this.customPriceMin) {             this.customPriceMin.addEventListener('change', updateCustomPrice);             this.customPriceMin.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          if (this.customPriceMax) {             this.customPriceMax.addEventListener('change', updateCustomPrice);             this.customPriceMax.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          const discountFilter = this.root.querySelector('#tg-df-discount-filter');          if (discountFilter) {            this.discountFilter = discountFilter;            this.discountFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-discount-${this.discountFilter.value}`, name: 'Discount', label: this.discountFilter.options[this.discountFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          if (this.categoryFilter) {            this.categoryFilter.addEventListener('change', (e) => {               const val = e.target.value === 'all' ? null : e.target.value;               this.activeDealTag = val;               if (val) {                 this.currentQuery = val;               } else {                 if (this.searchInput && this.currentQuery === document.querySelector('#tg-df-brand-trigger')?.getAttribute('data-active-brand')) {                     // don't clear current query if a brand is selected                 } else if (this.searchInput) {                     this.currentQuery = '';                     this.searchInput.value = '';                 }               }               this.fetchSavingsSquad();            });          }                    if (this.settingsToggle) {            this.settingsToggle.addEventListener('click', () => {              const o = this.settingsPanel.classList.toggle('active');              this.settingsBackdrop.classList.toggle('active');              if (o) trackElementInteraction({ id: 'filter-open', name: 'Filters', label: 'Open filters' });            });          }                    if (this.settingsBackdrop) {            this.settingsBackdrop.addEventListener('click', () => {              this.settingsPanel.classList.remove('active');              this.settingsBackdrop.classList.remove('active');            });          }                    if (this.regionSelect) {            this.regionSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-region-${this.regionSelect.value}`, name: 'Region', label: this.regionSelect.options[this.regionSelect.selectedIndex].text });              this.updateURLParams();              this.updatePriceDropdownCurrency();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.retailerSelect) {            this.retailerSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-merchant-${this.retailerSelect.value}`, name: 'Retailer', label: this.retailerSelect.options[this.retailerSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.offerTypeSelect) {            this.offerTypeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-offertype-${this.offerTypeSelect.value}`, name: 'Offer Type', label: this.offerTypeSelect.options[this.offerTypeSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.viewModeSelect) {            this._prevViewMode = this.viewModeSelect.value;            this.viewModeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-viewmode-${this.viewModeSelect.value}`, name: 'View Mode', label: this.viewModeSelect.options[this.viewModeSelect.selectedIndex].text });                            // Reset all active toggles and filters to prevent config carry-over              this.selectedBrands = [];              if (this.brandTrigger) this.brandTrigger.innerText = 'Select Brands';              if (this.brandDropdown) {                const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                chks.forEach(chk => { chk.checked = false; });              }              if (this.priceFilter) this.priceFilter.value = 'all';              if (this.customPriceMin) this.customPriceMin.value = '';              if (this.customPriceMax) this.customPriceMax.value = '';              if (this.sortSelect) this.sortSelect.value = 'date_desc';              if (this.discountFilter) this.discountFilter.value = '0';              if (this.retailerSelect) this.retailerSelect.value = '';              if (this.offerTypeSelect) this.offerTypeSelect.value = '';              if (this.rowsSelect) this.rowsSelect.value = '12';              if (this.categoryFilter) this.categoryFilter.value = 'all';              this.activeDealTag = null;              this.updateURLParams();              this.applyLayoutMode();                            if (this.getViewMode() === 'savings_squad' || this._prevViewMode === 'savings_squad') {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }              this._prevViewMode = this.viewModeSelect.value;            });          }                    if (this.rowsSelect) {            this.rowsSelect.addEventListener('change', () => {              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.dealModeToggle) {            this.dealModeToggle.addEventListener('change', () => {              this.updateURLParams();              this.render();            });          }          if (this.editorModeToggle) {             this.editorModeToggle.addEventListener('change', (e) => {                this.editorMode = e.target.checked;                this.render();                this.updateFloatingCopyBar();             });          }          if (this.editorCopyBtn) {             this.editorCopyBtn.addEventListener('click', () => {                this.copySelectedDealsToCMS();             });          }          if (this.editorClearBtn) {             this.editorClearBtn.addEventListener('click', () => {                this.selectedDeals.clear();                this.render();                this.updateFloatingCopyBar();             });          }          if (this.grid) {            this.grid.addEventListener('change', (e) => {               if (e.target.classList.contains('tg-df-deal-checkbox')) {                  const dealId = e.target.getAttribute('data-id');                  if (e.target.checked) {                     const dealObj = this.deals.find(d => d.id === dealId);                     if (dealObj) this.selectedDeals.set(dealId, dealObj);                  } else {                     this.selectedDeals.delete(dealId);                  }                  this.updateFloatingCopyBar();               }            });            this.grid.addEventListener('click', (e) => {              const dealCard = e.target.closest('[data-action="deal-click"]');              const similarCard = e.target.closest('[data-action="view-similar-click"]');              const cardLink = dealCard || similarCard;              if (cardLink) {                const productName = cardLink.getAttribute('data-product-name');                const merchantName = cardLink.getAttribute('data-merchant-name');                const productId = cardLink.getAttribute('data-analytics-id');                const price = parseFloat(cardLink.getAttribute('data-price')) || null;                const prevPriceStr = cardLink.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = cardLink.getAttribute('data-original-link');                const rewrittenLink = cardLink.getAttribute('href');                const revenueId = cardLink.getAttribute('data-revenue-id');                const index = parseInt(cardLink.getAttribute('data-index'), 10) || 0;                const inStock = cardLink.getAttribute('data-in-stock') === 'true';                const totalText = cardLink.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: cardLink.getAttribute('data-model-id') || null,                    matchId: cardLink.getAttribute('data-match-id') || null,                    brand: cardLink.getAttribute('data-model-brand') || null,                    parent: cardLink.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: cardLink.getAttribute('data-merchant-id') || null,                    network: cardLink.getAttribute('data-merchant-network') || null,                    url: cardLink.getAttribute('data-merchant-url') || null,                    name: merchantName                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: normalizeCurrency(this.escapeHTML(cardLink.getAttribute('data-currency') || '$'))                };                if (dealCard) {                  trackDealClick(trackingParams);                } else {                  trackViewSimilarClick(trackingParams);                }              }              const couponsBtn = e.target.closest('[data-action="coupons-click"]');              if (couponsBtn) {                trackElementInteraction({                  id: 'product-card-show-coupons',                  name: 'Coupons',                  label: `Product card coupons: ${couponsBtn.getAttribute('data-merchant')}`                });              }            });          }          this.setupScrollListeners();        }        setupScrollListeners() {          const containers = [             this.root.querySelector('.tg-df-carousel-roundels'),             this.root.querySelector('.tg-df-carousel-filters-wrap'),             this.root.querySelector('#tg-df-grid')          ];                    containers.forEach(container => {             if (!container) return;                          const checkScroll = () => {                if (!container.parentElement) return;                const leftBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-left');                const rightBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-right');                                if (leftBtn) {                   if (container.scrollLeft <= 5) leftBtn.style.display = 'none';                   else leftBtn.style.display = 'flex';                }                                if (rightBtn) {                   if (container.scrollWidth <= container.clientWidth) {                       rightBtn.style.display = 'none';                   } else if (container.scrollLeft >= container.scrollWidth - container.clientWidth - 5) {                       rightBtn.style.display = 'none';                   } else {                       rightBtn.style.display = 'flex';                   }                }             };                          container.addEventListener('scroll', checkScroll);             checkScroll();                          window.addEventListener('resize', checkScroll);                          const observer = new MutationObserver(checkScroll);             observer.observe(container, { childList: true, subtree: true, characterData: false });          });        }        get widgetTypeName() {          const mode = this.viewModeSelect ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');          switch(mode) {              case 'carousel': return 'Carousel';              case 'savings_squad': return 'Savings Squad';              case 'grid': return 'Grid';              case 'row': return 'Row';              default: return 'Auto Collection';          }        }        getRowsLimit() {          if (this.rowsSelect && this.rowsSelect.value) return parseInt(this.rowsSelect.value, 10);          let configSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {             configSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {             configSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(configSource);          if (params.has('rows')) return parseInt(params.get('rows'), 10) || 12;          return 12;        }        getAreaCode() {          if (this.regionSelect && this.regionSelect.value) {            if (this.regionSelect.value === 'auto') return null;            return this.regionSelect.value;          }          let area = null;          try {            const locale = window.navigator.language || window.navigator.userLanguage;            if (locale && locale.includes('-')) {              area = locale.split('-')[1].toUpperCase();            } else if (locale && locale.length === 2) {              if (locale.toUpperCase() === 'EN') { area = 'US'; }              else { area = locale.toUpperCase(); }            }          } catch (e) { /* Ignore */ }                    // Map to known valid options or fallback to US          const valid = ['US', 'GB', 'CA', 'AU', 'DE', 'FR', 'IT'];          if (area === 'UK') area = 'GB';          if (valid.includes(area)) {             return area;          }          return 'US';        }        async fetchDeals(query) {          this.showLoading();          this.deals = [];          this.displayLimit = this.getRowsLimit();                    try {            console.log("getViewMode returns:", this.getViewMode());            if (this.getViewMode() === 'savings_squad') {               await this.fetchSavingsSquad();            } else {               if (this.isBroadQuery(query)) {                 await this.fetchAdviserDeals(query);               } else {                 await this.fetchHawkDeals(query);                 if (this.deals.length === 0) {                   await this.fetchAdviserDeals(query);                 }               }            }          } catch (error) {            console.warn("[Tom's Guide Widget] Fetch error:", error);            this.showError();          }        }        async fetchSavingsSquad() {          let topArticles = this.airedaleArticles;          if (!topArticles) {            const siteParam = this.website || 'tomsguide';            const airedaleUrl = `https://airedale.futurecdn.net/feeds/feed_1781000519267.json?site=${siteParam}&articleType=deals&limit=50`;            let res;            try {               res = await fetch(airedaleUrl);            } catch(e) {               try { res = await fetch(`https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=${siteParam}&articleType=deals&limit=50`); } catch (err) { console.warn("Fallback fetch failed", err); return; }            }            if (!res.ok) throw new Error('Airedale API Error');            const articles = await res.json();            topArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);            this.airedaleArticles = topArticles;                        let tagCounts = {};            topArticles.forEach((a) => {              let articleTags = new Set();              if (a.articlecategory && Array.isArray(a.articlecategory)) {                 a.articlecategory.forEach((t) => articleTags.add(t));              }              articleTags.forEach(t => {                 tagCounts[t] = (tagCounts[t] || 0) + 1;              });            });                        this.airedaleTags = Object.keys(tagCounts).sort((a, b) => tagCounts[b] - tagCounts[a]);            this.airedaleTagCounts = tagCounts;          }                    let targetArticles = topArticles;          if (!this.activeDealTag && this.currentQuery) {             const tagMatch = this.airedaleTags.find(t => t.toLowerCase() === this.currentQuery.toLowerCase());             if (tagMatch) {                this.activeDealTag = tagMatch;             }          }          if (this.activeDealTag) {             const cleanTag = this.activeDealTag.toLowerCase().replace(/&/g, '').replace(/[^a-z0-9]+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');             const encodedTag = encodeURIComponent(cleanTag);             const siteParam = this.website || 'tomsguide';             const url = `https://airedale.futurecdn.net/feeds/feed_1781000519267.json?site=${siteParam}&articleType=deals&limit=50&articleCategoryHandle=${encodedTag}`;             try {                const res = await fetch(url);                if (res.ok) {                   const articles = await res.json();                   targetArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);                }             } catch(e) {                console.warn("Failed to fetch by activeDealTag", e);             }          }          let extractedDeals = [];          let seenUrls = new Set();                    let overallBrandsCounts = {};                    // First pass: extract ALL brands from topArticles so the dropdown has all options          topArticles.forEach((article) => {             if (!article.articlepage) return;             let pageData = [];             try { pageData = JSON.parse(article.articlepage[0]); } catch(e){ console.warn(e); }             const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');             savingsSquad.forEach((block) => {                const data = block.data || {};                if (data.brand) {                   const cleanBrand = data.brand.replace(/^\d+\.\s*/, '').trim();                   overallBrandsCounts[cleanBrand] = (overallBrandsCounts[cleanBrand] || 0) + 1;                }             });          });          targetArticles.forEach((article) => {             if (!article.articlepage) return;                          let pageData = [];             try {                pageData = JSON.parse(article.articlepage[0]);             } catch(e){ console.warn(e); }                          const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');                          savingsSquad.forEach((block, idx) => {                const data = block.data || {};                const isFeatured = block.type === 'featured-product';                                const link = data.link || {};                const priceObj = data.price || {};                const image = data.image || {};                                if (data.brand) {                   data.brand = data.brand.replace(/^\d+\.\s*/, '').trim();                }                const externalUrl = isFeatured ? data.url : (link.href || null);                let summaryTitle = isFeatured ? (data.name || data.brand) : (data.productName || link.label || article.articlename);                let description = isFeatured ? (data.strapline || '') : (data.text || '');                                if (!isFeatured && !data.productName && data.text) {                   const brSplit = data.text.split(new RegExp('\x3Cbr\\s*\\/?\\x3E', 'i'));                   if (brSplit.length > 1) {                     summaryTitle = brSplit[0].replace(/<[^>]+>/g, '').trim();                     description = brSplit.slice(1).join(' ').replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').trim();                   } else {                     const match = data.text.match(/\x3Cstrong>(.*?)<\/strong>/);                     if (match) {                       summaryTitle = match[1].replace(/<[^>]+>/g, '').trim();                       if (summaryTitle.endsWith(':')) summaryTitle = summaryTitle.slice(0, -1);                     }                   }                }                                let imageUrl = isFeatured ? image.mos : (image.src || null);                if (imageUrl && imageUrl.startsWith('//')) imageUrl = 'https:' + imageUrl;                                description = description.replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').replace(/View Deal$/i, '').trim();                                let merchantName = data.retailer || '';                if (!merchantName && externalUrl) {                   try {                     merchantName = new URL(externalUrl).hostname.replace('www.', '').split('.')[0];                     merchantName = merchantName.charAt(0).toUpperCase() + merchantName.slice(1);                   }catch(e){ console.warn(e); }                }                if (!merchantName) merchantName = 'Retailer';                const q = (this.currentQuery || '').toLowerCase();                const activeTagLogic = (this.activeDealTag || '').toLowerCase();                if (q.length > 2 && q !== activeTagLogic) {                   const searchTarget = `${summaryTitle || ''} ${description || ''}`.toLowerCase();                   if (!searchTarget.includes(q)) return;                }                let rawPrice = 0;                let rawMsrp = 0;                let currencyStr = '$';                if (isFeatured) {                   rawPrice = typeof data.salePrice === 'number' && data.salePrice > 0 ? data.salePrice : (typeof data.price === 'number' ? data.price : 0);                   rawMsrp = typeof data.salePrice === 'number' && typeof data.price === 'number' && data.price > data.salePrice ? data.price : 0;                   currencyStr = data.currency === 'GBP' ? '£' : '$';                } else {                   rawPrice = priceObj.amount ? parseFloat(priceObj.amount) : 0;                   rawMsrp = priceObj.amountWas ? parseFloat(priceObj.amountWas) : 0;                   currencyStr = priceObj.currency === 'GBP' ? '£' : '$';                }                                let savingAmt = 0;                let savingLabel = '';                if (rawPrice > 0 && rawMsrp > rawPrice) {                   savingAmt = parseFloat((rawMsrp - rawPrice).toFixed(2));                   savingLabel = `Save ${currencyStr}${savingAmt}`;                }                                // Apply Brand filter                if (this.selectedBrands && this.selectedBrands.length > 0) {                   const itemBrand = (data.brand || '').toLowerCase();                   const hasMatch = this.selectedBrands.some(sb => sb.toLowerCase() === itemBrand);                   if (!hasMatch) return;                }                // Apply Price filter                let priceFilterVal = null;                const min = this.customPriceMin ? this.customPriceMin.value : '';                const max = this.customPriceMax ? this.customPriceMax.value : '';                if (min || max) {                   priceFilterVal = `${min}_${max}`;                } else if (this.priceFilter && this.priceFilter.value !== 'all') {                   priceFilterVal = this.priceFilter.value;                }                if (priceFilterVal && rawPrice > 0) {                   if (priceFilterVal === 'under50' && rawPrice >= 50) return;                   if (priceFilterVal === 'over50' && rawPrice <= 50) return;                   if (priceFilterVal === 'over30' && rawPrice <= 30) return;                   if (priceFilterVal === 'over500' && rawPrice <= 500) return;                   if (priceFilterVal.includes('_')) {                      const parts = priceFilterVal.split('_');                      const min = parseFloat(parts[0]);                      const max = parseFloat(parts[1]);                      if (!isNaN(min) && rawPrice < min) return;                      if (!isNaN(max) && rawPrice > max) return;                   }                }                // Apply Discount filter                if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {                   const requiredDiscount = parseInt(this.discountFilter.value);                   if (!isNaN(requiredDiscount) && requiredDiscount > 0) {                      if (!rawMsrp || rawMsrp <= rawPrice) return;                      const ratio = Math.round((1 - (rawPrice / rawMsrp)) * 100);                      if (ratio < requiredDiscount) return;                   }                }                                if (externalUrl) {                   if (seenUrls.has(externalUrl)) return;                  seenUrls.add(externalUrl);                }                                extractedDeals.push({                   id: `airedale-${article.id || Math.random()}-${idx}`,                   url: externalUrl,                   image: imageUrl,                   fallbackImage: imageUrl,                   title: summaryTitle,                   brand: data.brand || '',                   productName: data.productName || '',                   merchant: merchantName,                   rawPrice: rawPrice,                   rawMsrp: rawMsrp,                   price: rawPrice > 0 ? rawPrice.toString() : '',                   msrp: rawMsrp > 0 ? rawMsrp.toString() : '',                   currency: currencyStr,                   isCheckPrice: !rawPrice,                   savingLabel: savingLabel,                   savingType: rawMsrp > rawPrice ? 'amount' : 'none',                   isPrime: false,                   starRating: null,                   description: description,                   text: data.text || '',                   authorName: article.articleauthortext ? article.articleauthortext[0] : (article.articleauthor ? article.articleauthor[0] : ''),                   authorRole: article.articleauthorrole ? article.articleauthorrole[0] : '',                   authorImage: article.articleauthormedia ? article.articleauthormedia[0] : '',                   documentUrl: article.documenturl ? article.documenturl[0] : '',                   modifiedDate: article.contentmodifieddate || article.modifieddate || ''                });             });          });                    const airedaleBrandsList = Object.keys(overallBrandsCounts).map(b => ({              formatted_value: b,              count: overallBrandsCounts[b]          })).sort((a,b) => b.count - a.count);                    if (this.getViewMode() === 'savings_squad') {             this.populateBrandDropdown(airedaleBrandsList.slice(0, 15));             if (this.brandFilterWrapper) {                if (airedaleBrandsList.length === 0) {                    this.brandFilterWrapper.style.display = 'none';                } else {                    this.brandFilterWrapper.style.display = 'flex';                }             }          }                    this.deals = extractedDeals;          this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        isBroadQuery(query) {          const q = query.toLowerCase();          const intentModifiers = ['deals', 'best', 'sale', 'under', 'cheap', 'offers', 'discount'];          return intentModifiers.some(term => q.includes(term));        }        async fetchHawkDeals(query) {          const url = new URL(this.apiUrl);          url.searchParams.append('model_name', query);          const areaCode = this.getAreaCode();          if (areaCode) {            url.searchParams.append('area', areaCode);          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.append('filter_merchant_name', this.retailerSelect.value);          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.append('filter_label[text_brand]', this.selectedBrands.join(','));          }                    let priceVal = null;          const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             priceVal = `${min}_${max}`;          } else if (this.priceFilter && this.priceFilter.value !== 'all') {             priceVal = this.priceFilter.value;          }          if (priceVal) {            if (priceVal === 'under50') {              url.searchParams.append('filter_max_price', '50');            } else if (priceVal === 'over50') {              url.searchParams.append('filter_min_price', '50');            } else if (priceVal === 'over30') {              url.searchParams.append('filter_min_price', '30');            } else if (priceVal === 'over500') {              url.searchParams.append('filter_min_price', '500');            } else if (priceVal.includes('_')) {              const parts = priceVal.split('_');              if (parts[0]) url.searchParams.append('filter_min_price', parts[0]);              if (parts[1]) url.searchParams.append('filter_max_price', parts[1]);            }          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {              const ratio = (100 - v) / 100;              url.searchParams.append('min_discount_ratio', ratio.toString());            }          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.append('offer', this.offerTypeSelect.value);          }                    url.searchParams.append('filter_product_types', 'deals');                    url.searchParams.append('rows', this.getRowsLimit().toString());          let response;          try {             response = await fetch(url.toString());          } catch(e) {             if (window.location.protocol === 'file:') {                console.warn("[Tom's Guide Widget] fetch from file:// blocked by local CORS policy, falling back to Adviser mock.");                await this.fetchAdviserDeals(query);                return;             }             console.warn("Hawk fetch failed", e);             this.deals = [];             this.render();             return;          }          if (!response.ok) {            throw new Error('Hawk API Response Error');          }          const rawData = await response.json();          // Safely locate data array from potentially wrapped response          let offers = [];          let modelInfoArray = [];                    let brandFilterData = null;          if (rawData && rawData.widget && rawData.widget.data && Array.isArray(rawData.widget.data.filters)) {             brandFilterData = rawData.widget.data.filters.find(f => f.type === 'label_text_brand');          } else if (rawData && rawData.data && Array.isArray(rawData.data.filters)) {             brandFilterData = rawData.data.filters.find(f => f.type === 'label_text_brand');          }          if (brandFilterData && Array.isArray(brandFilterData.values) && brandFilterData.values.length > 0) {             this.populateBrandDropdown(brandFilterData.values);          } else {             if (this.brandFilterWrapper && this.selectedBrands.length === 0) {                this.brandFilterWrapper.style.display = 'none';             }          }                    if (rawData && rawData.widget && rawData.widget.data) {            if (Array.isArray(rawData.widget.data.offers)) offers = rawData.widget.data.offers;            if (rawData.widget.data.model_info && typeof rawData.widget.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.widget.data.model_info) ? rawData.widget.data.model_info : Object.values(rawData.widget.data.model_info);            }          } else if (rawData && rawData.data) {            if (Array.isArray(rawData.data.offers)) offers = rawData.data.offers;            if (rawData.data.model_info && typeof rawData.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.data.model_info) ? rawData.data.model_info : Object.values(rawData.data.model_info);            }          } else {            if (Array.isArray(rawData)) offers = rawData;            else if (rawData && Array.isArray(rawData.offers)) offers = rawData.offers;            else if (rawData && rawData.offers && Array.isArray(rawData.offers.offer)) offers = rawData.offers.offer;            else if (rawData && rawData.offers) offers = [].concat(rawData.offers);                        if (rawData && rawData.model_info && typeof rawData.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.model_info) ? rawData.model_info : Object.values(rawData.model_info);            }          }          let modelDetails = {};          modelInfoArray.forEach(m => {            const mId = m.model_id || m.id;            if (mId) {              modelDetails[mId] = {                score: m.score != null ? parseFloat(m.score) : null,                brand: m.brand || null,                parent: (m.parents && Array.isArray(m.parents) && m.parents.length > 0) ? m.parents[0].name : null              };            }          });          offers.forEach(item => {            let data = { ...item };            const mId = data.model_id;            if (mId && modelDetails[mId]) {              data.review_score = modelDetails[mId].score;              data.model_brand = modelDetails[mId].brand;              data.model_parent = modelDetails[mId].parent;            } else {              data.review_score = null;            }                        let itemOffers = [];            if (Array.isArray(item.offers)) itemOffers = item.offers;            else if (Array.isArray(item.offer)) itemOffers = item.offer;            else if (item.offers && typeof item.offers === 'object') itemOffers = [item.offers];            else if (item.offer && typeof item.offer === 'object') itemOffers = [item.offer];            if (itemOffers.length > 0) {              itemOffers.forEach(subItem => {                let subData = { ...item, ...subItem };                const subId = subData.model_id;                if (subId && modelDetails[subId]) {                  subData.review_score = modelDetails[subId].score;                  subData.model_brand = modelDetails[subId].brand;                  subData.model_parent = modelDetails[subId].parent;                } else if (data.review_score != null) {                  subData.review_score = data.review_score;                }                if (subData.merchant && typeof subData.merchant === 'object') {                  subData.merchant_name = subData.merchant.name;                }                this.deals.push(this.extractDealData(subData));              });              return;            }                        if (item.merchant && typeof item.merchant === 'object') {              data.merchant_name = item.merchant.name;            }                        this.deals.push(this.extractDealData(data));          });                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        async fetchAdviserDeals(query) {          // ======================================================================          // TODO: ADVISER API REPLACEMENT          // The code below simulates the Adviser API response using mock data.          // Once the real endpoint is ready, remove getAdviserMockData() and           // perform an actual fetch() request similar to fetchHawkDeals().          // Example:          // const area = this.getAreaCode();          // let apiUrl = `https://your-adviser-api.com/search?q=${query}&area=${area}`;          // if (this.priceFilter && this.priceFilter.value !== 'all') {          //   const val = this.priceFilter.value;          //   if (val === 'under50') apiUrl += '&filter_max_price=50';          //   else if (val === '50_100') apiUrl += '&filter_max_price=100';          //   else if (val === '100_200') apiUrl += '&filter_max_price=200';          //   else if (val === '200_500') apiUrl += '&filter_max_price=500';          // }          // const res = await fetch(apiUrl);          // const rawData = await res.json();          // ======================================================================          // Simulating network latency          await new Promise(resolve => setTimeout(resolve, 400));                    const rawData = this.getAdviserMockData();          let offers = [];                    if (rawData && rawData.data && rawData.data.Get && Array.isArray(rawData.data.Get.Deal)) {            offers = rawData.data.Get.Deal;          }                    // Basic client-side filtering for the mock if we want it to react to the query          const q = query.toLowerCase();          const selectedRetailer = (this.retailerSelect && this.retailerSelect.value) ? this.retailerSelect.value.toLowerCase() : null;                    offers.forEach(item => {            const dataObj = item;                        // Apply retailer filter            const itemRetailer = (dataObj.dataRetailer || '').toLowerCase();            if (selectedRetailer && itemRetailer !== selectedRetailer && !itemRetailer.includes(selectedRetailer)) {              return;            }                        // Apply mock price filter            let price = dataObj.dataDiscountedPrice || 0;            if (typeof price === 'string') {              price = parseFloat(price.replace(/[^0-9.]/g, ''));            }            let priceVal = null;            const min = this.customPriceMin ? this.customPriceMin.value : '';            const max = this.customPriceMax ? this.customPriceMax.value : '';            if (min || max) {               priceVal = `${min}_${max}`;            } else if (this.priceFilter && this.priceFilter.value !== 'all') {               priceVal = this.priceFilter.value;            }            if (priceVal) {              if (priceVal === 'under50' && price >= 50) return;              if (priceVal === 'over50' && price <= 50) return;              if (priceVal === 'over30' && price <= 30) return;              if (priceVal === 'over500' && price <= 500) return;              if (priceVal.includes('_')) {                 const parts = priceVal.split('_');                 if (parts[0] && price < parseFloat(parts[0])) return;                 if (parts[1] && price > parseFloat(parts[1])) return;              }            }                        // Map Adviser schema to our widget's expected schema            const mappedData = {              url: dataObj.linkHREF || dataObj.dataLink || '#',              image: dataObj.imageURL || (dataObj.image && dataObj.image.src) || '',              title: dataObj.dataProduct || (dataObj.product && dataObj.product.name) || 'Product Deal',              merchant: dataObj.dataRetailer || 'Retailer',              price: dataObj.dataDiscountedPrice || 0,              currency: dataObj.dataCurrency === 'USD' ? '$' : (dataObj.dataCurrency || '$'),              msrp: dataObj.dataOriginalPrice || null            };                        const titleLow = mappedData.title.toLowerCase();            const merchLow = mappedData.merchant.toLowerCase();                        // Smarter mock filtering            let isMatch = false;            if (q === '' || this.isBroadQuery(q)) {              isMatch = true;            } else if (titleLow.includes(q) || merchLow.includes(q)) {              isMatch = true;            } else if ((q.includes('laptop') || q.includes('mac') || q.includes('pc')) && (titleLow.includes('macbook') || titleLow.includes('laptop'))) {              isMatch = true;            } else if ((q.includes('tv') || q.includes('television')) && (titleLow.includes('tv') || titleLow.includes('oled') || titleLow.includes('qled'))) {              isMatch = true;            } else if ((q.includes('phone') || q.includes('smartphone')) && (titleLow.includes('galaxy') || titleLow.includes('phone'))) {              isMatch = true;            } else if ((q.match(/watch|fitness|run|shoe/)) && (titleLow.includes('forerunner') || titleLow.includes('saucony') || titleLow.includes('watch'))) {              isMatch = true;            }                        if (isMatch) {               this.deals.push(this.extractDealData(mappedData));            }          });                    let rowLimit = this.getRowsLimit();          // Intentionally omitting the slice here to allow "Load More" to work if the API returns more                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        getAdviserMockData() {          return {            "data": {              "Get": {                "Deal": [                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 300,                    "dataOriginalPrice": 399,                    "dataProduct": "Samsung Galaxy A36",                    "dataRetailer": "Samsung",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/MqDYsukV3JBG54te6dEs7j.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 14,                    "dataOriginalPrice": 24,                    "dataProduct": "Blink Mini",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/3JurmAjHsDa5tPdaHAwEV8.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 59,                    "dataOriginalPrice": 99,                    "dataProduct": "Ring Video Doorbell",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/rAh4uR7AsAsALCCLTXnLNJ.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 10,                    "dataOriginalPrice": 599,                    "dataProduct": "MacBook Neo",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/Lg4Dvg68j9SbB5CPNrTEpH.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 749,                    "dataOriginalPrice": 849,                    "dataProduct": "65\\\" Fire TV Omni 4K QLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/SG34ZWodUkLTxJvMTbjPYR.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 71,                    "dataOriginalPrice": 160,                    "dataProduct": "Saucony Hurricane 24",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/vxf7UD5T2Am7guVzFoFcZ4.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 649,                    "dataOriginalPrice": 749,                    "dataProduct": "Garmin Forerunner 970",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/3GKnEu7CdhtxPMfnPCMCiA.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1049,                    "dataOriginalPrice": 1499,                    "dataProduct": "LG 48\\\" C4 4K OLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/imvwZV9zoMD6fn9Afuge35.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1499,                    "dataOriginalPrice": 2199,                    "dataProduct": "Samsung 49\\\" Odyssey Neo G9 4K Gaming Monitor",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/XWDEJ5dUAE2nhK8k3Jk7k7.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 299,                    "dataOriginalPrice": 699,                    "dataProduct": "EGOHOME Black Memory Foam Mattress (queen)",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/hMUemtAejNETLVYxNrktzm.jpg"                  }                ]              }            }          };        }        decodeHTML(html) {          if (!html) return '';          const txt = document.createElement("textarea");          txt.innerHTML = String(html);          return txt.value;        }        extractDealData(item) {          const priceRawStr = String(item.price || item.current_price || '0');          const msrpRawStr = String(item.was_price || item.msrp || item.original_price || '0');          const rawPrice = parseFloat(priceRawStr.replace(/[^\d.]/g, '')) || 0;          const rawMsrp = parseFloat(msrpRawStr.replace(/[^\d.]/g, '')) || 0;          const isCheckPrice = rawPrice === 0 || priceRawStr === '0.00' || priceRawStr === '0';                    let originalImageUrl = item.image || item.image_url || item.product_image || '';          let imageUrl = originalImageUrl;          if ((!imageUrl || isCheckPrice) && item.model_image_url) {             imageUrl = item.model_image_url;             originalImageUrl = imageUrl;          } else if ((!imageUrl || isCheckPrice) && item.model_image) {             imageUrl = item.model_image;             originalImageUrl = imageUrl;          }                    if (imageUrl) {            imageUrl = imageUrl.replace(/-(\d+)-(\d+)(\.[a-z.]+)$/i, '$3');          }                    let fallbackImage = '';          if (originalImageUrl && originalImageUrl !== imageUrl) {             fallbackImage = originalImageUrl;          } else if (item.model_image && item.model_image !== imageUrl) {             fallbackImage = item.model_image;          } else if (item.model_image_url && item.model_image_url !== imageUrl) {             fallbackImage = item.model_image_url;          }                    const rawCurrency = item.currency || item.currency_symbol || '$';                    let savingLabel = item.percentage_saving_label || '';          if (!savingLabel && rawMsrp > rawPrice && rawPrice > 0) {            const pct = Math.round(((rawMsrp - rawPrice) / rawMsrp) * 100);            if (pct > 0) {              savingLabel = `${pct}% OFF`;            }          }                    const isPrime = item.shipping && item.shipping.prime === true;                    let scoreRaw = (item.review_score !== undefined && item.review_score !== null && item.review_score > 0) ? parseFloat(item.review_score) : null;          let starRating = 0;          if (scoreRaw !== null) {            starRating = Math.round((scoreRaw > 10 ? scoreRaw / 20 : scoreRaw / 2) * 2) / 2;          }                    return {            id: item.offer_id || item.link || item.url || item.offer_link || Math.random().toString(),            url: item.link || item.url || item.offer_link || '#',            image: imageUrl,            fallbackImage: fallbackImage,            title: item.name || item.title || item.model_name || item.product_name || 'Unknown Product',            brand: item.brand || '',            productName: item.model_name || item.product_name || item.name || '',            merchant: item.merchant_name || item.merchant || item.retailer || 'Retailer',            price: item.price !== undefined ? String(item.price) : '0.00',            currency: this.decodeHTML(rawCurrency),            msrp: item.was_price || item.msrp || item.original_price || null,            rawPrice: rawPrice,            rawMsrp: rawMsrp,            hasWasPrice: (item.was_price !== undefined && item.was_price !== null),            isCheckPrice: isCheckPrice,            savingLabel: savingLabel,            isPrime: isPrime,            starRating: starRating > 0 ? starRating : null,            modelId: item.model_id || '',            productKey: item.product_key || '',            merchantId: (item.merchant && typeof item.merchant === 'object') ? item.merchant.id || '' : '',            matchId: item.match_id || '',            merchantNetwork: (item.merchant && typeof item.merchant === 'object') ? item.merchant.an || '' : '',            merchantUrl: (item.merchant && typeof item.merchant === 'object') ? item.merchant.url || '' : '',            modelBrand: item.model_brand || item.brand || '',            modelParent: item.model_parent || ''          };        }        sortData() {          const sortVal = this.sortSelect ? this.sortSelect.value : 'date_desc';          if (sortVal === 'price_asc') {            this.deals.sort((a, b) => a.rawPrice - b.rawPrice);          } else if (sortVal === 'price_desc') {            this.deals.sort((a, b) => b.rawPrice - a.rawPrice);          } else if (sortVal === 'discount_desc') {            this.deals.sort((a, b) => {              const aDiscount = a.rawMsrp > a.rawPrice ? (a.rawMsrp - a.rawPrice) : 0;              const bDiscount = b.rawMsrp > b.rawPrice ? (b.rawMsrp - b.rawPrice) : 0;              return bDiscount - aDiscount;            });          } else if (sortVal === 'date_desc') {             this.deals.sort((a, b) => {                let dateA = 0;                let dateB = 0;                if (a && a.modifiedDate) {                   const valA = Array.isArray(a.modifiedDate) ? a.modifiedDate[0] : a.modifiedDate;                   dateA = new Date(valA).getTime();                   if (isNaN(dateA)) dateA = 0;                }                if (b && b.modifiedDate) {                   const valB = Array.isArray(b.modifiedDate) ? b.modifiedDate[0] : b.modifiedDate;                   dateB = new Date(valB).getTime();                   if (isNaN(dateB)) dateB = 0;                }                return dateB - dateA;             });          }        }        getFilteredDeals() {          let filteredDeals = [...this.deals];                    if (this.dealModeToggle && this.dealModeToggle.checked) {            filteredDeals = filteredDeals.filter(d => d.hasWasPrice || (d.msrp && d.rawMsrp > d.rawPrice));          }                    return filteredDeals;        }        showLoading() {          const _div = '<' + '/div>';          const skeletonCardHtml = `            \x3Cdiv class="tg-df-card">              \x3Cdiv class="tg-df-card-image-box">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-img">${_div}              ${_div}              \x3Cdiv class="tg-df-card-body">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-card-footer mt-auto">                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="height:24px;">${_div}                ${_div}              ${_div}              \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text" style="height:44px; margin:0; border-radius:0;">${_div}            ${_div}`;          this.grid.innerHTML = Array(4).fill(skeletonCardHtml).join('');        }        showError() {          const _div = '<' + '/div>';          this.grid.innerHTML = `\x3Cdiv class="tg-df-message">            An error occurred while finding deals. Please check your connection and try again.          ${_div}`;        }        escapeHTML(str) {          if (!str) return '';          return String(str).replace(/[&<>'"]/g, tag => ({              '&': '&', '<': '<', '>': '>', "'": ''', '"': '"'          }[tag] || tag));        }                bindCouponButtons() {          const btns = this.root.querySelectorAll('.tg-df-tag-coupons');          btns.forEach(btn => {            btn.addEventListener('click', (e) => {              e.preventDefault();              e.stopPropagation();              const merchant = btn.getAttribute('data-merchant');              this.openVouchersModal(merchant);            });          });                    const closeBtn = this.root.querySelector('#tg-df-vouchers-close');          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (closeBtn) {            closeBtn.onclick = () => this.closeVouchersModal();          }          if (backdrop) {            backdrop.onclick = (e) => {              if (e.target === backdrop) this.closeVouchersModal();            };          }        }                closeVouchersModal() {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (backdrop) backdrop.classList.remove('active');        }                async checkMerchantsCouponsBulk(merchants) {          if (!merchants || merchants.length === 0) return {};          const controller = new AbortController();          const timeoutId = setTimeout(() => controller.abort(), 4000);          try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchants.join(','));            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '120');            url.searchParams.append('origin', 'widgets-clientside');                        let res; try { res = await fetch(url.toString(), { signal: controller.signal }); } catch (e) { return {}; }            clearTimeout(timeoutId);            if (!res.ok) return {};            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        const foundMerchants = new Set();            offers.forEach(o => {              let mName = o.merchant_name || o.merchant || o.retailer;              if (mName && typeof mName === 'object') mName = mName.name;              if (mName) foundMerchants.add(String(mName).toLowerCase());            });            const resultMap = {};            merchants.forEach(m => {              if (m) resultMap[m] = foundMerchants.has(String(m).toLowerCase());            });            return resultMap;          } catch (e) {            return {};          }        }                async openVouchersModal(merchantName) {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          const title = this.root.querySelector('#tg-df-vouchers-title');          const content = this.root.querySelector('#tg-df-vouchers-content');                    if (!backdrop || !content) return;                    // HACK: Hide closing tags          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h4 = '<' + '/h4>';          const _svg = '<' + '/svg>';          const _circle = '<' + '/circle>';          const _polyline = '<' + '/polyline>';          const _rect = '<' + '/rect>';          const _path = '<' + '/path>';                    title.innerText = `${merchantName} Coupons & Deals`;          content.innerHTML = `\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}                               \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}`;          backdrop.classList.add('active');                    try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchantName);            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '50');            url.searchParams.append('origin', 'widgets-clientside');                        const res = await fetch(url.toString());            if (!res.ok) throw new Error('API Error');            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        if (offers.length === 0) {              content.innerHTML = `\x3Cdiv class="tg-df-message">No vouchers currently available for ${this.escapeHTML(merchantName)}.${_div}`;              return;            }                        content.innerHTML = offers.map((v, idx) => {              let offerObj = v;              if (v.offers && v.offers.offer) {                offerObj = Array.isArray(v.offers.offer) ? v.offers.offer[0] : v.offers.offer;              } else if (v.offer) {                offerObj = Array.isArray(v.offer) ? v.offer[0] : v.offer;              }              let logoUrl = v.logo_url || offerObj.logo_url || '';              if (!logoUrl && v.merchant) {                if (Array.isArray(v.merchant) && v.merchant.length > 0) logoUrl = v.merchant[0].logo_url || '';                else logoUrl = v.merchant.logo_url || '';              }                            const offerName = offerObj.name || offerObj.title || v.name || v.title || 'Special Offer';              const endTime = offerObj.end_time || v.end_time || '';              const linkUrl = offerObj.link || offerObj.url || v.link || v.url || '#';                            let foundVoucherCode = '';              const findVoucherCode = (obj) => {                if (!obj || typeof obj !== 'object') return;                if (obj.type === 'voucher_code' && obj.display_value) {                  foundVoucherCode = obj.display_value;                  return;                }                if (Array.isArray(obj)) {                  for (const item of obj) {                    findVoucherCode(item);                    if (foundVoucherCode) return;                  }                } else {                  for (const k in obj) {                    if (Object.prototype.hasOwnProperty.call(obj, k)) {                      findVoucherCode(obj[k]);                      if (foundVoucherCode) return;                    }                  }                }              };              findVoucherCode(offerObj);              if (!foundVoucherCode) findVoucherCode(v);                            const voucherCode = foundVoucherCode || offerObj.voucher_code || v.voucher_code || '';              const codeHtml = voucherCode ? `\x3Cspan class="tg-df-voucher-code" data-action="copy-code" data-code="${this.escapeHTML(voucherCode)}" title="Copy to clipboard">                \x3Cspan class="tg-df-voucher-code-text">${this.escapeHTML(voucherCode)}${_span}                \x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-left:6px;flex-shrink:0;" class="tg-df-voucher-copy-icon">                  \x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">${_rect}                  \x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">${_path}                ${_svg}              ${_span}` : '';                            const logoHtml = logoUrl                 ? `\x3Cimg src="${this.escapeHTML(logoUrl)}" alt="${this.escapeHTML(offerName)}" class="tg-df-voucher-logo" />`                 : `\x3Cdiv class="tg-df-voucher-logo" style="background:#e2e8f0;">${_div}`;                            let expiryHtml = '';              if (endTime) {                let dStr = endTime;                if (!isNaN(dStr) && String(dStr).length === 10) dStr = Number(dStr) * 1000;                const d = new Date(dStr);                if (!isNaN(d.getTime())) {                  const options = { year: 'numeric', month: 'short', day: 'numeric' };                  expiryHtml = `                    \x3Cdiv class="tg-df-voucher-expiry">                      \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                        \x3Ccircle cx="12" cy="12" r="10">${_circle}                        \x3Cpolyline points="12 6 12 12 16 14">${_polyline}                      ${_svg}                      Expires ${d.toLocaleDateString(undefined, options)}                    ${_div}`;                }              }              const revenueIdVal = generateRevenueId(linkUrl, offerName, merchantName, null);              const rewrittenLinkUrl = rewriteAffiliateLink(linkUrl, area, revenueIdVal);              return `                \x3Ca href="${this.escapeHTML(rewrittenLinkUrl)}" target="_blank" rel="noopener nofollow" class="tg-df-voucher-item"                  data-action="voucher-click"                  data-product-name="${this.escapeHTML(offerName)}"                  data-merchant-name="${this.escapeHTML(merchantName)}"                  data-analytics-id="${this.escapeHTML(offerObj.offer_id || offerObj.id || v.id || '')}"                  data-price=""                  data-previous-price=""                  data-original-link="${this.escapeHTML(linkUrl)}"                  data-revenue-id="${revenueIdVal}"                  data-index="${idx}"                  data-total="${offers.length}"                  data-in-stock="true"                  data-currency="USD"                  data-model-id="${this.escapeHTML(offerObj.model_id || v.model_id || offerObj.id || v.id || '')}"                  data-merchant-id="${this.escapeHTML(offerObj.merchant_id || offerObj.merchant?.id || '')}"                >                  ${logoHtml}                  \x3Cdiv class="tg-df-voucher-content">                    \x3Ch4 class="tg-df-voucher-title">${this.escapeHTML(offerName)}${_h4}                    ${codeHtml}                    ${expiryHtml}                  ${_div}                ${_a}              `;            }).join('');                        // Attach copy functionality            const copyBtns = content.querySelectorAll('[data-action="copy-code"]');            copyBtns.forEach(btn => {              btn.addEventListener('click', async (e) => {                e.preventDefault();                e.stopPropagation();                                const code = btn.getAttribute('data-code');                if (!code) return;                                try {                  const copyToClipboard = async (text) => {                     if (window.navigator.clipboard && window.isSecureContext) {                        try { await window.navigator.clipboard.writeText(text); return; } catch (e) {}                     }                     const textArea = document.createElement("textarea");                     textArea.value = text;                     textArea.style.position = "fixed";                     document.body.appendChild(textArea);                     textArea.focus();                     textArea.select();                     document.execCommand('copy');                     textArea.remove();                  };                  await copyToClipboard(code);                                    // Visual feedback                  btn.classList.add('copied');                  const textSpan = btn.querySelector('.tg-df-voucher-code-text');                  const iconSvg = btn.querySelector('.tg-df-voucher-copy-icon');                                    const origText = textSpan.innerText;                  const origIcon = iconSvg.innerHTML;                                    textSpan.innerText = 'Copied!';                  iconSvg.innerHTML = `\x3Cpolyline points="20 6 9 17 4 12">${_polyline}`;                                    setTimeout(() => {                    if (btn) {                      btn.classList.remove('copied');                      if (textSpan) textSpan.innerText = origText;                      if (iconSvg) iconSvg.innerHTML = origIcon;                    }                  }, 2000);                                    trackElementInteraction({                    id: 'voucher-code-copy',                    name: 'Copy Voucher Code',                    label: `Copied ${code} for ${merchantName}`                  });                } catch (err) {                  console.warn('Failed to copy text: ', err);                }              });            });            // Attach voucher click tracking            const voucherBtns = content.querySelectorAll('[data-action="voucher-click"]');            voucherBtns.forEach(btn => {              btn.addEventListener('click', (e) => {                if (e.target.closest('[data-action="copy-code"]')) return;                                const productName = btn.getAttribute('data-product-name');                const merchantNameAttr = btn.getAttribute('data-merchant-name');                const productId = btn.getAttribute('data-analytics-id');                const price = parseFloat(btn.getAttribute('data-price')) || null;                const prevPriceStr = btn.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = btn.getAttribute('data-original-link');                const rewrittenLink = btn.getAttribute('href');                const revenueId = btn.getAttribute('data-revenue-id');                const index = parseInt(btn.getAttribute('data-index'), 10) || 0;                const inStock = btn.getAttribute('data-in-stock') === 'true';                const totalText = btn.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: btn.getAttribute('data-model-id') || null,                    matchId: btn.getAttribute('data-match-id') || null,                    brand: btn.getAttribute('data-model-brand') || null,                    parent: btn.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: btn.getAttribute('data-merchant-id') || null,                    network: btn.getAttribute('data-merchant-network') || null,                    url: btn.getAttribute('data-merchant-url') || null,                    name: merchantNameAttr                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: btn.getAttribute('data-currency') || 'USD'                };                if (typeof trackDealClick === 'function') {                  trackDealClick(trackingParams);                }              });            });                                  } catch (e) {            console.warn(e);            content.innerHTML = `\x3Cdiv class="tg-df-message">Failed to load vouchers.${_div}`;          }        }        render() {          try {            if (this.getViewMode() === 'savings_squad' && this.airedaleTags.length > 0) {              if (this.categoryFilterWrapper) {                 this.categoryFilterWrapper.style.display = 'flex';              }              if (this.categoryFilter) {                 const _option = '<' + '/option>';                 let optionsHtml = `\x3Coption value="all">All Categories${_option}`;                 this.airedaleTags.forEach(tag => {                    const isSelected = this.activeDealTag === tag ? 'selected' : '';                    optionsHtml += `\x3Coption value="${this.escapeHTML(tag)}" ${isSelected}>${this.escapeHTML(tag)}${_option}`;                 });                 this.categoryFilter.innerHTML = optionsHtml;                 this.categoryFilter.value = this.activeDealTag || 'all';              }            } else {               if (this.categoryFilterWrapper) {                  this.categoryFilterWrapper.style.display = 'none';               }            }            const displayDeals = this.getFilteredDeals();          // HACK: Hide closing tags from the CMS HTML sanitizer so it doesn't strip them during in-page injection          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h3 = '<' + '/h3>';          const _p = '<' + '/p>';          const _strong = '<' + '/strong>';          const _sup = '<' + '/sup>';          const _button = '<' + '/button>';          if (displayDeals.length === 0) {            if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {              if (this.deals.length > 0) {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No deals match your selected filters.                ${_div}`;              } else if (this.getViewMode() === 'savings_squad' && this.currentQuery.length <= 2) {                 // Do not show "no exact matches" if query is empty for savings_squad                 this.grid.innerHTML = '';              } else {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No exact matches found for "\x3Cstrong>${this.escapeHTML(this.currentQuery)}${_strong}". Try adjusting your search term.                ${_div}`;              }            } else {              this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                Search product or category names to discover the best deals from across the web.              ${_div}`;            }            return;          }          let dealsHtml = displayDeals.slice(0, this.displayLimit).map((deal, index) => {            try {               const currencySym = this.escapeHTML(deal.currency);               const isoCurrencyCode = normalizeCurrency(currencySym);               const escapedPrice = this.escapeHTML(deal.price);               const escapedMsrp = this.escapeHTML(deal.msrp);               const areaCode = this.getAreaCode();                              const revenueId = generateRevenueId(deal.url, deal.title, deal.merchant, null);               const originalLink = deal.url;               const rewrittenLink = rewriteAffiliateLink(deal.url, areaCode, revenueId);                        const productCategoryName = 'deals';            const dataAttr = `              data-action="${deal.isCheckPrice ? 'view-similar-click' : 'deal-click'}"              data-analytics-id="${this.escapeHTML(deal.externalProductId || deal.id || '')}"              data-product-name="${this.escapeHTML(deal.title)}"              data-merchant-name="${this.escapeHTML(deal.merchant)}"              data-price="${deal.rawPrice || ''}"              data-previous-price="${deal.rawMsrp || ''}"              data-original-link="${this.escapeHTML(originalLink)}"              data-revenue-id="${revenueId}"              data-index="${index}"              data-total="${displayDeals.length}"              data-in-stock="${deal.inStock !== false}"              data-currency="${this.escapeHTML(isoCurrencyCode)}"              data-model-id="${this.escapeHTML(deal.modelId || '')}"              data-product-key="${this.escapeHTML(deal.productKey || '')}"              data-merchant-id="${this.escapeHTML(deal.merchantId || '')}"            `;                        let priceGroupHtml = '';            let isSavingsSquadMode = this.getViewMode() === 'savings_squad';            let ctaText = 'View Deal';            let formattedPrice = '';            let msrpHtml = '';                        if (deal.isCheckPrice) {              ctaText = 'View Deal';              if (isSavingsSquadMode) {                priceGroupHtml = ``;              } else {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-price-group">                    \x3Cspan class="tg-df-card-price" style="font-size: 15px; font-weight: 500; font-style: italic;">See price at retailer${_span}                  ${_div}                `;              }            } else {              // Format Price              formattedPrice = escapedPrice.includes(currencySym)                 ? escapedPrice                 : `${currencySym}${escapedPrice}`;                              // Format MSRP              msrpHtml = deal.msrp && deal.rawMsrp > deal.rawPrice                ? `\x3Cspan class="tg-df-card-msrp">${escapedMsrp.includes(currencySym) ? escapedMsrp : currencySym + escapedMsrp}${_span}`                : '';                              priceGroupHtml = isSavingsSquadMode ? `` : `                \x3Cdiv class="tg-df-card-price-group">                  \x3Cspan class="tg-df-card-price">${formattedPrice}${_span}                  ${msrpHtml}                ${_div}              `;            }                        const discountBadgeHtml = deal.savingLabel && !deal.isCheckPrice              ? `\x3Cspan class="tg-df-card-discount-badge">${this.escapeHTML(deal.savingLabel)}${_span}`              : '';                          // HACK for CMS            const _button = '<' + '/button>';            const _svg = '<' + '/svg>';            const _path = '<' + '/path>';            const _rect = '<' + '/rect>';            const _circle = '<' + '/circle>';            const _polyline = '<' + '/polyline>';            const _line = '<' + '/line>';                        let badgesHtml = '';            const primeBadge = deal.isPrime ? `              \x3Cspan class="tg-df-tag tg-df-tag-prime">                \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="currentColor">                  \x3Cpath d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z">${_path}                ${_svg} Prime              ${_span}            ` : '';                        const couponsBadge = deal.merchant && deal.merchant.toLowerCase().includes('amazon') ? '' : `              \x3Cdiv class="tg-df-coupon-wrapper" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:inline-flex; align-items:center;">                \x3Cdiv class="tg-df-coupon-spinner">${_div}                \x3Cbutton type="button" class="tg-df-tag tg-df-tag-coupons" data-action="coupons-click" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:none;">                  \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                    \x3Cpath d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z">${_path}                    \x3Cline x1="7" y1="7" x2="7.01" y2="7">${_line}                  ${_svg} Coupons                ${_button}              ${_div}            `;                        // Note: We always add coupons badge if there's a chance, but to allow 3-line titles we check wrapper display state            badgesHtml = `              \x3Cdiv class="tg-df-card-badges">                ${primeBadge}                ${couponsBadge}              ${_div}            `;            const _linearGradient = '<' + '/linearGradient>';            const _polygon = '<' + '/polygon>';            const _stop = '<' + '/stop>';            const _defs = '<' + '/defs>';                        let starHtml = '';            if (deal.starRating) {              let rating = deal.starRating;                            if (rating > 0) {                const fullStars = Math.floor(rating);                const halfStar = (rating - fullStars) >= 0.5 ? 1 : 0;                const emptyStars = Math.max(0, 5 - fullStars - halfStar);                const blue = '#1f69ff'; // Tom's guide brand color from VIEW DEAL button                const gray = '#cbd5e1';                                const starSvgFull = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="${blue}" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                const gradId = 'half_grad_' + Math.floor(Math.random()*1000000);                const starSvgHalf = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cdefs>\x3ClinearGradient id="${gradId}" x1="0" x2="1" y1="0" y2="0">\x3Cstop offset="50%" stop-color="${blue}">${_stop}\x3Cstop offset="50%" stop-color="transparent">${_stop}${_linearGradient}${_defs}                  \x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26" fill="url(#${gradId})">${_polygon}${_svg}`;                                  const starSvgEmpty = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="${gray}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                let stars = [];                for (let i=0; i<fullStars; i++) stars.push(starSvgFull);                if (halfStar) stars.push(starSvgHalf);                for (let i=0; i<emptyStars; i++) stars.push(starSvgEmpty);                                starHtml = `\x3Cdiv class="tg-df-card-stars" style="display:flex;align-items:center;margin-bottom:8px;font-size:13px;font-weight:600;color:var(--tg-df-text-muted);">                  \x3Cspan style="margin-right:6px;">Tom's Guide:${_span}                  \x3Cdiv style="display:flex;gap:2px;">                    ${stars.join('')}                  ${_div}                ${_div}`;              }            }            let htmlOutput = '';            if (isSavingsSquadMode) {              htmlOutput += `              \x3Cdiv class="hawk-deal-widget-container tg-df-mobile-only" data-collapsible="true">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''} style="margin-bottom: 10px;">` : ''}                \x3Cdiv class="hawk-deal-widget-wrap">                  \x3Cdiv class="hawk-deal-widget-image-container">                    \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" rel="sponsored noopener" target="_blank" class="hawk-affiliate-link-deal-widget" ${dataAttr}>                      \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="hawk-lazy-image-deal-widget" loading="lazy" width="140" height="160" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                    ${_a}                  ${_div}                  \x3Cdiv class="hawk-deal-widget-text-cta-container">                    \x3Cdiv class="hawk-deal-widget-text-body-container">                      \x3Cdiv class="hawk-deal-widget-text-body-main">                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          ${deal.isCheckPrice ? `                            \x3Cspan class="hawk-deal-widget-title-product-title">${this.escapeHTML(deal.title)}${_span}                          ` : `                            \x3Cspan class="hawk-deal-widget-title-product-title">${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_span}                          `}                        ${_a}                        ${!deal.isCheckPrice && deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan class="hawk-deal-widget-title-was-price">was ${currencySym}${escapedMsrp}${_span}                          ${_a}                        ` : ''}                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          \x3Cspan class="hawk-deal-widget-title-retailer-price">                            ${!deal.isCheckPrice ? `                              \x3Cspan class="hawk-deal-widget-title-price">now ${formattedPrice}${_span}                              \x3Cspan class="hawk-deal-widget-title-retailer"> at ${this.escapeHTML(deal.merchant)}${_span}                            ` : `                              \x3Cspan class="hawk-deal-widget-title-price">See price at ${this.escapeHTML(deal.merchant)}${_span}                            `}                          ${_span}                        ${_a}                        ${deal.description ? `\x3Cdiv class="hawk-deal-widget-text-body-description tg-df-card-desc-container" style="margin-bottom: 12px; position: relative;">                          \x3Cp class="tg-df-card-desc-content" style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 0; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;">${this.escapeHTML(deal.description)}${_p}                          \x3Cbutton type="button" class="tg-df-card-desc-btn" style="display: none; appearance: none; border: none; color: #000000; font-size: 11px; font-weight: 700; text-transform: uppercase; cursor: pointer; font-family: inherit; position: absolute; bottom: 2px; right: 0; background: linear-gradient(to right, transparent, #fff 20%, #fff); padding: 0 0 0 16px;" onclick="                            var c = this.parentNode;                            if (this.dataset.expanded === 'true') {                              var pd = (c.tagName === 'P') ? c : this.previousElementSibling;                              if (c.tagName === 'P') { c.parentNode.appendChild(this); pd = c; }                              pd.style.display = '-webkit-box';                              pd.style.webkitLineClamp = '3';                              this.textContent = 'READ MORE';                              this.style.position = 'absolute';                              this.style.background = 'linear-gradient(to right, transparent, #fff 20%, #fff)';                              this.style.paddingLeft = '16px';                              this.dataset.expanded = 'false';                            } else {                              var pd = this.previousElementSibling;                              pd.style.display = 'inline';                              pd.style.webkitLineClamp = 'unset';                              this.textContent = 'READ LESS';                              this.style.position = 'static';                              this.style.background = 'transparent';                              this.style.paddingLeft = '4px';                              this.dataset.expanded = 'true';                              pd.appendChild(this);                            }                          ">READ MORE${_button}                        \x3C/div>` : ''}                      ${_div}                    ${_div}                    ${deal.authorName ? `                      \x3Cdiv class="tg-df-author-line-mobile" style="padding: 0 0 12px 0; background: transparent;">                         \x3Cdiv style="display: flex; align-items: center; gap: 12px;">                            ${deal.authorImage ? `\x3Cimg src="${this.escapeHTML(deal.authorImage)}" alt="${this.escapeHTML(deal.authorName)}" class="tg-df-author-img" width="40" height="40" style="border-radius: 50%; object-fit: cover; flex-shrink: 0; aspect-ratio: 1 / 1; min-width: 40px; min-height: 40px;">` : ''}                            \x3Cdiv style="display: flex; flex-direction: column;">                               \x3Cdiv style="font-size: 10px; color: var(--tg-df-text-muted); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 2px; font-weight: 600;">\x3Cspan style="color: #FF6600;">${this.escapeHTML(deal.merchant)}${_span} deal recommended by:${_div}                               \x3Cdiv style="font-size: 11px; color: var(--tg-df-text); line-height: 1.3;">                                  \x3Cstrong>\x3Ca href="https://www.tomsguide.com/${this.escapeHTML(deal.documentUrl || '').replace(/^\/+/, '')}" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit; border-bottom: 1px dotted var(--tg-df-text-muted);">${this.escapeHTML(deal.authorName)}${_a}${_strong}                                  ${deal.authorRole && !['null', 'nul', 'undefined'].includes(String(deal.authorRole).toLowerCase()) ? ` • ${this.escapeHTML(deal.authorRole)}` : ''}                                  ${deal.modifiedDate ? `\x3Cdiv style="color: var(--tg-df-text-muted); margin-top: 2px;">${getTimeAgo(deal.modifiedDate)}${_div}` : ''}                               ${_div}                            ${_div}                         ${_div}                      ${_div}                    ` : ''}                    \x3Cdiv class="hawk-deal-widget-footer">                      \x3Cdiv class="hawk-deal-widget-button-wrapper">                        \x3Cdiv class="hawk-deal-widget-preferred-partner-wrapper">                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-deal-button" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan>View Deal${_span}                          ${_a}                        ${_div}                      ${_div}                    ${_div}                  ${_div}                ${_div}              ${_div}              `;            }            htmlOutput += `              \x3Cdiv class="tg-df-card ${isSavingsSquadMode ? 'tg-df-desktop-only' : ''}">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''}>` : ''}                \x3Cdiv class="tg-df-card-image-box">                  ${discountBadgeHtml}                  \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" style="display: flex; align-items: center; justify-content: center; width: 100%; height: 100%;">                    \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="tg-df-card-image" loading="lazy" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                  ${_a}                  \x3Cdiv class="tg-df-card-merchant-wrapper" style="position: absolute; bottom: 0; right: 0; background: transparent; padding: 8px 12px; z-index: 10;">                     \x3Cspan class="tg-df-card-merchant-pill" style="text-align: right; margin-bottom: 0;" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                ${_div}                \x3Cdiv class="tg-df-card-body">                  ${starHtml}                  ${badgesHtml}                  \x3Ch3 class="tg-df-card-title tg-df-custom-savings-squad-title" title="${this.escapeHTML(deal.title)}">                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" disable-tracking="true" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit;">                      ${isSavingsSquadMode                         ? (deal.isCheckPrice                             ? (deal.title && deal.title.includes(':')                                 ? `\x3Cstrong>${this.escapeHTML(deal.title.substring(0, deal.title.indexOf(':') + 1))}${_strong}\x3Cspan style="color: #1f69ff; font-weight: normal;">${this.escapeHTML(deal.title.substring(deal.title.indexOf(':') + 1))}${_span}`                                : this.escapeHTML(deal.title)                              )                             : `\x3Cstrong>${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_strong} ${deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `\x3Cspan style="color: #d0021b; text-decoration: line-through; font-weight: normal; margin-right: 4px;">was ${currencySym}${escapedMsrp}${_span} ` : ''}\x3Cspan style="color: #1f69ff; font-weight: normal;">now ${formattedPrice} at ${this.escapeHTML(deal.merchant)}${_span}`                          )                        : this.escapeHTML(deal.title)                      }                    ${_a}                  ${_h3}                  ${deal.description ? `\x3Cdiv class="tg-df-card-desc-container" style="margin-bottom: 12px; position: relative;">                    \x3Cp class="tg-df-card-desc-content" style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 0; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;">${this.escapeHTML(deal.description)}${_p}                    \x3Cbutton type="button" class="tg-df-card-desc-btn" style="display: none; appearance: none; border: none; color: #000000; font-size: 11px; font-weight: 700; text-transform: uppercase; cursor: pointer; font-family: inherit; position: absolute; bottom: 2px; right: 0; background: linear-gradient(to right, transparent, #fff 20%, #fff); padding: 0 0 0 16px;" onclick="                      var c = this.parentNode;                      if (this.dataset.expanded === 'true') {                        var pd = (c.tagName === 'P') ? c : this.previousElementSibling;                        if (c.tagName === 'P') { c.parentNode.appendChild(this); pd = c; }                        pd.style.display = '-webkit-box';                        pd.style.webkitLineClamp = '3';                        this.textContent = 'READ MORE';                        this.style.position = 'absolute';                        this.style.background = 'linear-gradient(to right, transparent, #fff 20%, #fff)';                        this.style.paddingLeft = '16px';                        this.dataset.expanded = 'false';                      } else {                        var pd = this.previousElementSibling;                        pd.style.display = 'inline';                        pd.style.webkitLineClamp = 'unset';                        this.textContent = 'READ LESS';                        this.style.position = 'static';                        this.style.background = 'transparent';                        this.style.paddingLeft = '4px';                        this.dataset.expanded = 'true';                        pd.appendChild(this);                      }                    ">READ MORE${_button}                  \x3C/div>` : ''}                  \x3Cdiv class="tg-df-card-footer">                    ${deal.authorName ? `                    \x3Cdiv class="tg-df-author-line-desktop" style="padding: 0 0 ${isSavingsSquadMode ? 0 : 12}px 0;">                       \x3Cdiv style="display: flex; align-items: center; gap: 10px;">                          ${deal.authorImage ? `\x3Cimg src="${this.escapeHTML(deal.authorImage)}" alt="${this.escapeHTML(deal.authorName)}" class="tg-df-author-img" width="36" height="36" style="border-radius: 50%; object-fit: cover; flex-shrink: 0; aspect-ratio: 1 / 1; min-width: 36px; min-height: 36px;">` : ''}                          \x3Cdiv style="display: flex; flex-direction: column;">                             \x3Cdiv style="font-size: 10px; color: var(--tg-df-text-muted); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 2px; font-weight: 600;">Recommended by:${_div}                             \x3Cdiv style="font-size: 11px; color: var(--tg-df-text); line-height: 1.2;">                                \x3Cstrong>\x3Ca href="https://www.tomsguide.com/${this.escapeHTML(deal.documentUrl || '').replace(/^\/+/, '')}" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit; border-bottom: 1px dotted var(--tg-df-text-muted);">${this.escapeHTML(deal.authorName)}${_a}${_strong}                                ${deal.authorRole && !['null', 'nul', 'undefined'].includes(String(deal.authorRole).toLowerCase()) ? ` • ${this.escapeHTML(deal.authorRole)}` : ''}                                ${deal.modifiedDate ? `\x3Cspan style="color: var(--tg-df-text-muted);"> • ${getTimeAgo(deal.modifiedDate)}${_span}` : ''}                             ${_div}                          ${_div}                       ${_div}                    ${_div}                    ` : ''}                    ${priceGroupHtml}                  ${_div}                ${_div}                \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" class="tg-df-card-cta" style="text-decoration: none; border-radius: 0;">${ctaText}${_a}              ${_div}            `;                        return htmlOutput;            } catch (e) {               console.log("Error rendering deal in map for index", index, typeof deal === 'object' ? JSON.stringify(deal) : deal, "MSG:", e.message);               return '';            }          }).join('');                    if (displayDeals.length > this.displayLimit) {            dealsHtml += `              \x3Cdiv style="width: 100%; display: flex; justify-content: center; margin-top: 16px; grid-column: 1 / -1;">                \x3Cbutton type="button" class="tg-df-tag-outline tg-df-load-more" style="padding: 8px 24px; border-radius: 100px; font-weight: 600; font-size: 14px; cursor: pointer;">Load More${_button}              ${_div}            `;          }                    this.grid.innerHTML = dealsHtml;          // Inject JSON-LD          try {            let targetNode = this.hostContainer || document.head;            let jsonLdScript = targetNode.querySelector('#tg-df-json-ld-' + this.widgetId);            if (!jsonLdScript) {                jsonLdScript = document.createElement('script');                jsonLdScript.type = 'application/ld+json';                jsonLdScript.id = 'tg-df-json-ld-' + this.widgetId;                targetNode.appendChild(jsonLdScript);            }            const jsonLdData = {              "@context": "https://schema.org",              "@type": "ItemList",              "itemListElement": displayDeals.slice(0, this.displayLimit).map((deal, index) => {                 let isoCurrency = "USD";                 if (deal.currency === '£') isoCurrency = "GBP";                 else if (deal.currency === '€') isoCurrency = "EUR";                 else if (deal.currency === 'A$') isoCurrency = "AUD";                 else if (deal.currency === 'CA$') isoCurrency = "CAD";                 const areaCode = typeof this.getAreaCode === 'function' ? this.getAreaCode() : 'US';                 const revenueId = typeof generateRevenueId === 'function' ? generateRevenueId(deal.url, deal.title, deal.merchant, null) : '';                 const rewrittenLink = typeof rewriteAffiliateLink === 'function' ? rewriteAffiliateLink(deal.url, areaCode, revenueId) : deal.url;                 return {                   "@type": "ListItem",                   "position": index + 1,                   "item": {                     "@type": "Product",                     "name": deal.title,                     "image": deal.image || "",                     "description": deal.description || "",                     "brand": {                       "@type": "Brand",                       "name": deal.brand || ""                     },                     "offers": {                       "@type": "Offer",                       "priceCurrency": isoCurrency,                       "price": deal.rawPrice || 0,                       "url": rewrittenLink,                       "seller": {                         "@type": "Organization",                         "name": deal.merchant || ""                       }                     }                   }                 };              }).filter(item => item.item.name)            };            jsonLdScript.textContent = JSON.stringify(jsonLdData);          } catch(e) { console.warn("JSON-LD generation failed", e); }          setTimeout(() => {            const contents = this.root.querySelectorAll('.tg-df-card-desc-content');            contents.forEach(p => {              if (p.scrollHeight > p.clientHeight || p.scrollHeight > 60) {                if (p.nextElementSibling) {                  p.nextElementSibling.style.display = 'block';                }              }            });                        // Allow hawklinks.js to discover and rewrite our widget links             // by appending the .article-body class and manually triggering processArticle.            let container = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (container && !container.classList.contains('article-body')) {               container.classList.add('article-body');            }            if (this.grid && !this.grid.classList.contains('article-body')) this.grid.classList.add('article-body');            document.dispatchEvent(new CustomEvent('processArticle', { detail: { element: this.root } }));          }, 50);          const loadMoreBtn = this.grid.querySelector('.tg-df-load-more');          if (loadMoreBtn) {            loadMoreBtn.addEventListener('click', () => {              if (typeof trackElementInteraction === 'function') {                trackElementInteraction({ id: 'load-more', name: 'Load more', label: 'Load More Results' });              }              this.displayLimit += this.getRowsLimit();              this.render();            });          }                      this.bindCouponButtons();            this.checkAndUpdateCoupons();          } catch(e) {            console.warn("Widget render error", e);          }        }                async checkAndUpdateCoupons() {          const wrappers = Array.from(this.root.querySelectorAll('.tg-df-coupon-wrapper'));          if (wrappers.length === 0) return;                    const merchants = [...new Set(wrappers.map(w => w.getAttribute('data-merchant')).filter(Boolean))];          if (merchants.length === 0) return;          const couponResultsMap = await this.checkMerchantsCouponsBulk(merchants);                    for (const merchant of merchants) {            const hasCoupons = !!couponResultsMap[merchant];            const merchantWrappers = wrappers.filter(w => w.getAttribute('data-merchant') === merchant);            merchantWrappers.forEach(wrapper => {              const spinner = wrapper.querySelector('.tg-df-coupon-spinner');              const btn = wrapper.querySelector('.tg-df-tag-coupons');                            if (spinner) spinner.style.display = 'none';                            if (hasCoupons && btn) {                btn.style.display = 'inline-flex';              } else if (!hasCoupons) {                wrapper.style.display = 'none';              }            });          }        }        updateFloatingCopyBar() {          if (!this.editorBar || !this.editorSelectedCount) return;          if (this.editorMode && this.selectedDeals.size > 0) {            this.editorBar.style.display = 'flex';            this.editorSelectedCount.innerText = this.selectedDeals.size;          } else {            this.editorBar.style.display = 'none';          }        }        async copySelectedDealsToCMS() {           function htmlToSlate(htmlString) {              if (!htmlString) return [{ type: 'paragraph', children: [{ text: '' }] }];              let doc;              if (typeof window !== 'undefined' && window.DOMParser) {                 doc = new DOMParser().parseFromString(htmlString, 'text/html');              } else {                 doc = document.implementation.createHTMLDocument('');                 doc.body.innerHTML = htmlString;              }                            function parseNode(node, marks = {}) {                  if (node.nodeType === 3) {                      const text = node.textContent;                      if (!text) return null;                      return { text: text, ...marks };                  }                  if (node.nodeType === 1) {                      const tagName = node.tagName.toLowerCase();                      if (tagName === 'br') {                          return { type: 'line-break', children: [{ text: '' }] };                      }                      if (tagName === 'p') {                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return { type: 'paragraph', children };                      }                      if (tagName === 'strong' || tagName === 'b') {                          const newMarks = { ...marks, bold: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'em' || tagName === 'i') {                          const newMarks = { ...marks, italic: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'a') {                          const href = node.getAttribute('href') || '';                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return {                              type: 'link',                              url: href,                              isNoFollow: (node.getAttribute('rel') || '').includes('nofollow'),                              isSponsored: (node.getAttribute('rel') || '').includes('sponsored'),                              isOpenNewTab: node.getAttribute('target') === '_blank',                              isPreventDataRewrite: false,                              children: children                          };                      }                      return Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                  }                  return null;              }                            let blocksArray = [];              let currentParagraphChildren = [];              function flushParagraph() {                  if (currentParagraphChildren.length > 0) {                      blocksArray.push({ type: 'paragraph', children: currentParagraphChildren });                      currentParagraphChildren = [];                  }              }              Array.from(doc.body.childNodes).forEach(node => {                  const parsed = parseNode(node, {});                  const parsedItems = Array.isArray(parsed) ? parsed : (parsed ? [parsed] : []);                  parsedItems.forEach(item => {                      if (item.type === 'paragraph') {                          flushParagraph();                          blocksArray.push(item);                      } else {                          currentParagraphChildren.push(item);                      }                  });              });              flushParagraph();              if (blocksArray.length === 0) {                  blocksArray = [{ type: 'paragraph', children: [{ text: '' }] }];              }              return blocksArray;           }           const blocks = [];                      this.editorCopyBtn.innerHTML = '\x3Cspan class="tg-df-coupon-spinner" style="display:inline-block; margin-right:8px; border-top-color:#fff;">' + '<' + '/span> Copying...';           for (const deal of Array.from(this.selectedDeals.values())) {              const url = deal.url;              const merchant = deal.merchant;              const title = deal.title;              const image = deal.image;              const currentPrice = deal.currency + deal.rawPrice;              const wasPrice = deal.hasWasPrice && deal.rawMsrp > deal.rawPrice ? deal.currency + deal.rawMsrp : '';                            let couponsChildren = [];              try {                  const area = this.getAreaCode();                  const apiUrl = new URL('https://search-api.fie.future.net.uk/widget.php');                  apiUrl.searchParams.append('model_name', 'Everything');                  apiUrl.searchParams.append('language', 'en-GB');                  apiUrl.searchParams.append('area', area);                  apiUrl.searchParams.append('combine_product_types', '1');                  apiUrl.searchParams.append('filter_merchant_name', merchant);                  apiUrl.searchParams.append('all_filters', 'false');                  apiUrl.searchParams.append('exclude_unlabelled', 'false');                  apiUrl.searchParams.append('include_specs', 'false');                  apiUrl.searchParams.append('sort', 'voucher');                  apiUrl.searchParams.append('distinct_merchants', 'natural');                  apiUrl.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');                  apiUrl.searchParams.append('rows', '3');                  apiUrl.searchParams.append('origin', 'widgets-clientside');                                    let res; try { res = await fetch(apiUrl.toString()); } catch (e) { return; }                  if (res.ok) {                      const data = await res.json();                      let offers = [];                      if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {                        offers = data.widget.data.offers;                      } else if (data && data.data && Array.isArray(data.data.offers)) {                        offers = data.data.offers;                      }                                            if (offers.length > 0) {                          couponsChildren.push({ text: "Also check out these coupons: ", bold: true });                          offers.slice(0, 3).forEach((offer, idx) => {                              const actualOffer = offer.offer || offer;                              const offerName = actualOffer.name || actualOffer.title || offer.model_name || offer.title || offer.name || 'Coupon';                              const linkUrl = actualOffer.link || actualOffer.url || actualOffer.offer_link || '#';                              couponsChildren.push({ type: "line-break", children: [{ text: "" }] });                              couponsChildren.push({ text: "🎟️ " });                              couponsChildren.push({                                  type: "link",                                  url: linkUrl,                                  isNoFollow: true,                                  isSponsored: false,                                  isOpenNewTab: true,                                  isPreventDataRewrite: false,                                  children: [{ text: offerName, bold: true }]                              });                          });                      }                  }              } catch (err) {                  console.warn('Failed to fetch coupons for', merchant, err);              }              let descriptionValue = [];              if (deal.text) {                 descriptionValue = htmlToSlate(deal.text);              } else {                 const dealDescriptions = [                   `Don't miss out on this fantastic deal for the ${title}. It is currently available at ${merchant} for a highly competitive price.`,                   `We've spotted an excellent price drop on the ${title}. Grab it now at ${merchant} before it's gone.`,                   `The ${title} is currently seeing a generous discount over at ${merchant}. This is a perfect time to buy if you've been holding out.`,                   `If you're in the market for the ${title}, ${merchant} has just the deal for you.`,                   `Score the ${title} for less at ${merchant} right now. This is a rare chance to save big.`,                   `Upgrade your setup with the ${title}, now available at a stellar price via ${merchant}.`                 ];                 const randomDescription = dealDescriptions[Math.floor(Math.random() * dealDescriptions.length)];                 descriptionValue = [                    { type: "paragraph", children: [{ text: randomDescription }] }                 ];              }                            if (couponsChildren.length > 0) {                 let lastBlock = descriptionValue[descriptionValue.length - 1];                 if (lastBlock && lastBlock.type === 'paragraph') {                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ text: "Also check out these coupons: ", bold: true });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children = lastBlock.children.concat(couponsChildren);                 } else {                     descriptionValue.push({                         type: "paragraph",                         children: [                             { type: "line-break", children: [{ text: "" }] },                             { type: "line-break", children: [{ text: "" }] },                             { text: "Also check out these coupons: ", bold: true },                             { type: "line-break", children: [{ text: "" }] },                             ...couponsChildren                         ]                     });                 }              }              function normalizeCurrencyToISO(symbol) {                const map = { '£': 'GBP', '$': 'USD', 'A$': 'AUD', 'CA$': 'CAD', '€': 'EUR' };                return map[symbol] || symbol;              }              const isoCurrency = normalizeCurrencyToISO(deal.currency);              blocks.push({                 id: (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'cms-' + Date.now() + Math.random(),                 blockTypeName: "deal",                 excludeFrom: [],                 collapsible: false,                 props: {                    description: {                       value: descriptionValue,                       touched: false,                       validationMessage: ""                    },                    image: {                       value: {                          credit: [{ type: "paragraph", children: [{ text: merchant }] }],                          dateCreated: Date.now(),                          dateModified: Date.now(),                          distribution: [],                          fileSize: 0,                          height: 1000,                          id: deal.id,                          imageRights: "",                          src: image,                          name: title + ".jpg",                          tags: [],                          width: 1000                       },                       touched: false,                       validationMessage: ""                    },                    showDealButton: { value: true, touched: false, validationMessage: "" },                    isPreferredPartner: { value: false, touched: false, validationMessage: "" },                    linkHref: { value: url, touched: false, validationMessage: "" },                    linkLabel: { value: "", touched: false, validationMessage: "" },                    linkIsNoFollow: { value: true, touched: false, validationMessage: "" },                    linkIsSponsored: { value: false, touched: false, validationMessage: "" },                    linkIsOpenNewWindow: { value: true, touched: false, validationMessage: "" },                    customPromoFlags: { value: [], touched: false, validationMessage: "" },                    showStarDeal: { value: false, touched: false, validationMessage: "" },                    savingType: { value: "none", touched: false, validationMessage: "" },                    starDealPromoFlag: { value: "", touched: false, validationMessage: "" },                    showEditorsChoice: { value: false, touched: false, validationMessage: "" },                    editorsChoiceTitle: { value: "", touched: false, validationMessage: "" },                    hawkPriceCurrency: { value: { value: isoCurrency, label: isoCurrency }, touched: false, validationMessage: "" },                    hawkPrice: { value: deal.hasWasPrice ? String(deal.rawMsrp) : String(deal.rawPrice), touched: false, validationMessage: "" },                    hawkSalePrice: { value: String(deal.rawPrice), touched: false, validationMessage: "" },                    lastCheckedPriceDate: { value: "", touched: false, validationMessage: "" },                    hawkModel: { touched: false, validationMessage: "" },                    productId: { value: "", touched: false, validationMessage: "" },                    voucherId: { value: "", touched: false, validationMessage: "" },                    brand: { value: deal.brand || merchant, touched: false, validationMessage: "" },                    productName: { value: title, touched: false, validationMessage: "" },                    label: { value: "", touched: false, validationMessage: "" },                    retailer: { value: merchant, touched: false, validationMessage: "" },                    priceCheckError: false                 },                 failedFetchError: ""              });           }           const payload = {              type: "articleBuilderPages",              data: blocks           };           const jsonStr = JSON.stringify(payload);                      if (navigator.clipboard && navigator.clipboard.writeText) {              navigator.clipboard.writeText(jsonStr).then(() => {                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              }).catch(err => {                 console.warn('Failed to copy text: ', err);                 alert('Failed to copy deals to clipboard. See console.');              });           } else {              // Fallback              const textArea = document.createElement("textarea");              textArea.value = jsonStr;              document.body.appendChild(textArea);              textArea.focus();              textArea.select();              try {                 document.execCommand('copy');                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              } catch (err) {                 console.warn('Fallback: Oops, unable to copy', err);                 alert('Fallback: Failed to copy deals to clipboard.');              }              document.body.removeChild(textArea);           }        }      }      // Initialize the Widget      if (document.readyState === 'loading') {        document.addEventListener('DOMContentLoaded', () => new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer }));      } else {        new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer });      }    })();  </script></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/samsung-phones/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-1920-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-320-70.jpeg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;As deals editor-in-chief at Tom’s Guide, Louis refuses to pay full price for anything. He has over 10 years of experience finding the best deals and coupons to bring readers. Louis price checks against multiple retailers and searches high and low for sales on 4K TVs, Apple devices, streaming services, mattresses, kitchen appliances, and more. He&#039;s also always looking for the the best coupon codes to turn good deals into stellar buys.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;He has covered major retail events like Amazon Prime Day, Black Friday, and Cyber Monday for more than a decade and knows how to spot an epic deal from a fake discount. He&#039;s also great at helping people negotiate better prices on everything from gym memberships to their home internet service. Louis&#039; work has also helped readers find PS5 restock, baby formula, Clorox wipes, and everything in between. For his next major purchase, Louis is hoping to find a killer deal on an M3-based Mac. &lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;A born-and-bred New Yorker, Louis is always in search of the perfect cup of coffee. On his free time, he enjoys swimming, running, and any workout that pushes his Apple Watch to the max. He&#039;s also a big fan of international films, horror movies, and K-dramas. His work has appeared on Gizmodo, CNET, Digital Trends, Dealnews, and Time Out New York.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/GtEqu8qMu5TFusi2Q5xh2K-1920-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-1920-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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="1327" height="853" attribution="" endorsement="" credit="" class="" /></p></div></div></figure></a><p><strong>Galaxy Z Fold 8 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&amp;rows=6&amp;view_mode=savings_squad&amp;widget_title=Top+Deals+Handpicked+by+Our+Editors&amp;widget_subtitle=Discover+the+best+discounts+currently+available%2C+curated+daily+by+the+Tom%27s+Guide+Savings+Squad.&amp;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[ ‘We don’t want to overwhelm the consumer with AI’: why Samsung is taking a different approach with Galaxy Z Fold 8 launch ]]></title>
                                                                                                <dc:content><![CDATA[ <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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The 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> ]]></dc:content>
                                                                                                                                            <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-1920-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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Mark Spoonauer is the global editor in chief of Tom&#039;s Guide and has covered technology for over 20 years. He oversees the direction of Tom&#039;s Guide and leads a team of over 25 journalists to bring you our expert buying guides, reviews, news, how-to articles, deals and other coverage.&lt;/p&gt;&lt;p&gt;Mark has a passion for covering all things mobile, having reviewed dozens of smartphones and other gadgets. He enjoys testing the top mobile devices and putting them up against each other in our in-depth face-offs. He also works hand in hand with our editors and testing team to continually improve how we evaluate products. &lt;/p&gt;&lt;p&gt;Having led Tom&#039;s Guide since 2013, Mark has focused on growing the core tech coverage of the site while also expanding into new areas, such as entertainment, fitness and home, recruiting talented writers and editors to help our readers figure out what to buy and how to get the most out of the products and services they use every day. &lt;/p&gt;&lt;p&gt;Mark has spoken at key industry events and appears regularly on TV to discuss the latest trends, including &lt;a href=&quot;https://cheddar.com/media/pixel-watch-gets-a-release-date-at-google-i-o-2022&quot;&gt;Cheddar&lt;/a&gt;, Fox 5, &lt;a href=&quot;https://www.foxbusiness.com/technology/apple-march-event-5g-iphone&quot;&gt;Fox Business&lt;/a&gt; and other outlets. Mark was previously editor in chief of Laptop Mag, and his work has appeared in Wired, Popular Science and Inc. Follow him on Twitter at @mspoonauer.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/CdhsuAu4DLMo5biUye6HoG-1920-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-1920-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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The 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[ Samsung Galaxy Z Fold 8 Ultra review: A major leap forward ]]></title>
                                                                                                <dc:content><![CDATA[ <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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2801" height="1576" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="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-1920-80.jpg" mos="" align="middle" fullscreen="" width="3143" height="1768" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="3384" height="1904" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>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-1920-80.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-1920-80.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-1920-80.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> ]]></dc:content>
                                                                                                                                            <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/b6wWCGt8Q3GaG3XvVfqE8F-1920-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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/b6wWCGt8Q3GaG3XvVfqE8F-1920-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/b6wWCGt8Q3GaG3XvVfqE8F-1920-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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2801" height="1576" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="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-1920-80.jpg" mos="" align="middle" fullscreen="" width="3143" height="1768" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="3384" height="1904" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>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-1920-80.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-1920-80.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-1920-80.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>
                                                                                                <dc:content><![CDATA[ <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"><figure><blockquote class="twitter-tweet hawk-ignore" data-lang="en" cite="https://twitter.com/cantworkitout/status/2082186881920385130"><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></figure><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-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Now, 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> ]]></dc:content>
                                                                                                                                            <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-1920-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-320-70.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-1920-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-1920-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"><figure><blockquote class="twitter-tweet hawk-ignore" data-lang="en" cite="https://twitter.com/cantworkitout/status/2082186881920385130"><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></figure><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-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Now, 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[ Samsung Galaxy Z Fold 8 review: The best Android foldable for most people ]]></title>
                                                                                                <dc:content><![CDATA[ <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><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/SMwClG9-nR0" allowfullscreen=""></iframe></div></div><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 for a few months, this feels like the future of foldables — and not just because Apple is making a similar design with the <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-hands-on-apple-nailed-it-and-just-put-everyone-else-on-notice">iPhone Duo</a>.</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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">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 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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2693" height="1515" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The 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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">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-1920-80.jpg" mos="" align="middle" fullscreen="" width="3508" height="1973" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The 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-39-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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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><p>For more, check out my <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-vs-fold-8-ultra-camera-test-is-the-telephoto-zoom-worth-the-extra-usd200">Galaxy Z Fold 8 vs Fold 8 Ultra camera face-off</a>. </p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/skfjecoYsDxcAXKKEePmH-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="3330" height="1873" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">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-vs-iphone-duo"><span>Galaxy Z Fold 8 vs iPhone Duo </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="NE3m4C3QUpw7U8uQfUAmea" name="iPhone-Duo-vs-Galaxy-Z-Fold-8-LEDE3" alt="IPhone duo vs galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/NE3m4C3QUpw7U8uQfUAmea-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Galaxy Z Fold 8 has serious competition in the <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-hands-on-apple-nailed-it-and-just-put-everyone-else-on-notice">iPhone Duo</a>, which launches October 23. But Samsung has some advantages over Apple's first foldable. The Fold 8 is significantly lighter and thinner than the iPhone Duo, making it easier to carry around. In addition, the Fold 8 lets you run up to three apps at once on screen, compared to just two for the Duo. Plus, you can put up to five floating windows on top, so it's a multitasking dynamo. </p><p>Other unique Samsung perks a physical SIM slot, DeX mode for using the Fold 8 as a mini PC with keyboard and mouse and a 16GB RAM option for those who opt for 1TB of storage. Plus, the Fold 8 is $100 cheaper than the Duo.</p><p>However, the iPhone Duo offers some advantages of its own. It's more durable, thanks to its IP68 rating. The software actually adapts based on the angle of the display, while Samsung ditched its Flex mode for the regular Fold 8. And you get MagSafe support and Apple Pencil support built in. Samsung doesn't offer an S Pen for its passport-style foldable.</p><p>Apple's biggest advantage is likely going to be app that are optimized for the platform, witch Netflix, Slack and Zoom on board — with more to come. But we'll revisit this comparison once we've tested the Duo. </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-1920-80.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> ]]></dc:content>
                                                                                                                                            <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/cSYCjf2mLyLiTqkn52oxZh-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 29 Jul 2026 11:46:15 +0000</pubDate>                                                                                                                                <updated>Wed, 30 Sep 2026 21:05:42 +0000</updated>
                                                                                                                                            <category><![CDATA[Samsung Phones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Android Phones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Mark Spoonauer ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/wtAspSzVfcKLB4JEd39AMo-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Mark Spoonauer is the global editor in chief of Tom&#039;s Guide and has covered technology for over 20 years. He oversees the direction of Tom&#039;s Guide and leads a team of over 25 journalists to bring you our expert buying guides, reviews, news, how-to articles, deals and other coverage.&lt;/p&gt;&lt;p&gt;Mark has a passion for covering all things mobile, having reviewed dozens of smartphones and other gadgets. He enjoys testing the top mobile devices and putting them up against each other in our in-depth face-offs. He also works hand in hand with our editors and testing team to continually improve how we evaluate products. &lt;/p&gt;&lt;p&gt;Having led Tom&#039;s Guide since 2013, Mark has focused on growing the core tech coverage of the site while also expanding into new areas, such as entertainment, fitness and home, recruiting talented writers and editors to help our readers figure out what to buy and how to get the most out of the products and services they use every day. &lt;/p&gt;&lt;p&gt;Mark has spoken at key industry events and appears regularly on TV to discuss the latest trends, including &lt;a href=&quot;https://cheddar.com/media/pixel-watch-gets-a-release-date-at-google-i-o-2022&quot;&gt;Cheddar&lt;/a&gt;, Fox 5, &lt;a href=&quot;https://www.foxbusiness.com/technology/apple-march-event-5g-iphone&quot;&gt;Fox Business&lt;/a&gt; and other outlets. Mark was previously editor in chief of Laptop Mag, and his work has appeared in Wired, Popular Science and Inc. Follow him on Twitter at @mspoonauer.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/cSYCjf2mLyLiTqkn52oxZh-1920-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/cSYCjf2mLyLiTqkn52oxZh-1920-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><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/SMwClG9-nR0" allowfullscreen=""></iframe></div></div><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 for a few months, this feels like the future of foldables — and not just because Apple is making a similar design with the <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-hands-on-apple-nailed-it-and-just-put-everyone-else-on-notice">iPhone Duo</a>.</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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">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 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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2693" height="1515" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The 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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">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-1920-80.jpg" mos="" align="middle" fullscreen="" width="3508" height="1973" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The 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-39-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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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><p>For more, check out my <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-z-fold-8-vs-fold-8-ultra-camera-test-is-the-telephoto-zoom-worth-the-extra-usd200">Galaxy Z Fold 8 vs Fold 8 Ultra camera face-off</a>. </p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/skfjecoYsDxcAXKKEePmH-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">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-1920-80.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-1920-80.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-1920-80.jpg" mos="" align="middle" fullscreen="" width="3330" height="1873" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="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-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">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-vs-iphone-duo"><span>Galaxy Z Fold 8 vs iPhone Duo </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check="" ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="NE3m4C3QUpw7U8uQfUAmea" name="iPhone-Duo-vs-Galaxy-Z-Fold-8-LEDE3" alt="IPhone duo vs galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/NE3m4C3QUpw7U8uQfUAmea-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline" /></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Galaxy Z Fold 8 has serious competition in the <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-hands-on-apple-nailed-it-and-just-put-everyone-else-on-notice">iPhone Duo</a>, which launches October 23. But Samsung has some advantages over Apple's first foldable. The Fold 8 is significantly lighter and thinner than the iPhone Duo, making it easier to carry around. In addition, the Fold 8 lets you run up to three apps at once on screen, compared to just two for the Duo. Plus, you can put up to five floating windows on top, so it's a multitasking dynamo. </p><p>Other unique Samsung perks a physical SIM slot, DeX mode for using the Fold 8 as a mini PC with keyboard and mouse and a 16GB RAM option for those who opt for 1TB of storage. Plus, the Fold 8 is $100 cheaper than the Duo.</p><p>However, the iPhone Duo offers some advantages of its own. It's more durable, thanks to its IP68 rating. The software actually adapts based on the angle of the display, while Samsung ditched its Flex mode for the regular Fold 8. And you get MagSafe support and Apple Pencil support built in. Samsung doesn't offer an S Pen for its passport-style foldable.</p><p>Apple's biggest advantage is likely going to be app that are optimized for the platform, witch Netflix, Slack and Zoom on board — with more to come. But we'll revisit this comparison once we've tested the Duo. </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-1920-80.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>
            </channel>
</rss>