<?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/apple" rel="self" type="application/rss+xml" />
                            <title><![CDATA[ Latest from Tom's Guide in Apple ]]></title>
                <link>https://www.tomsguide.com/tag/apple</link>
        <description><![CDATA[ All the latest apple content from the Tom's Guide team ]]></description>
                                    <lastBuildDate>Mon, 26 Oct 2026 20:41:09 +0000</lastBuildDate>
                            <language>en</language>
                                <item>
                                                            <title><![CDATA[ Apple responds to iPhone Duo cracked inner screens — what to do if your phone is affected ]]></title>
                                                                                                <dc:content><![CDATA[ <p>We’re not even a week out from launch, and Apple is already doing damage control with the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-review">iPhone Duo</a>. Just days after hitting store shelves, early buyers reported <a href="https://www.tomsguide.com/phones/iphones/the-iphone-duo-just-came-out-and-owners-are-already-seeing-screens-crack-at-the-hinge">hairline fractures and sudden cracks</a> forming along the inner display’s crease — an unexpected setback given the meticulous engineering touted behind its near-invisible fold.</p><p>Now, Apple’s official response confirms the company is actively tracking the issue, stressing that it is “aware of an issue impacting the inner display on a small number of iPhone Duo units.” More importantly for early adopters, Apple has provided clear instructions on what affected owners should do next.</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/Nv_bpcmm6Ss" allowfullscreen></iframe></div></div><p>While Apple is well known for maintaining rigorous quality assurance standards for its marquee devices, it shouldn’t come as a surprise whenever issues do crop up — especially around complex first-generation gadgets. The company was silent regarding cracked screen issues with the Duo initially, but it finally sent out an official statement.</p><p>"The response to iPhone Duo from early users has been incredibly positive, and we are seeing exciting things from developers who are rapidly updating their apps to take advantage of its unique form factor,” explained Apple’s spokesperson. “We are aware of an issue impacting the inner display on a small number of iPhone Duo units. If users experience issues with their iPhone Duo display, they should contact AppleCare for a replacement."</p><p>While social media feeds are buzzing with photos and videos of cracked creases, durability struggles are nothing new for foldable phones. Given their complex hinge mechanisms and fragile inner layers compared to traditional glass slabs, early mechanical failures are always a risk. Complicating matters for Apple, however, is a wave of <a href="https://www.reddit.com/r/iPhoneDuo/comments/1xel0j5/removed_by_moderator/#lightbox" target="_blank">AI-generated fakes circulating online</a> and pretending to be legitimate customer complaints.</p><p>Still, genuine display failures remain a reality across the board, and affected owners should contact AppleCare immediately. Apple's standard limited warranty typically covers display fractures that stem from manufacturing defects — provided the device doesn't show signs of accidental drops or intentional damage.</p><p>Did you buy an iPhone Duo? How is your screen holding up? Let us 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><a href="https://www.tomsguide.com/phones/iphones/i-spent-30-minutes-with-the-iphone-duo-3-things-you-just-dont-get-from-the-pictures">I spent 30 minutes with the iPhone Duo — 3 things you just don't get from photos alone</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</a></li><li><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">I tested the iPhone Duo vs Galaxy Z Fold 8 displays side-by-side</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/apple-responds-to-iphone-duo-cracked-inner-screens-what-to-do-if-your-phone-is-affected</link>
                                                                            <description>
                            <![CDATA[ Days after the first reports about iPhone Duo cracked inner screens, Apple has finally sent out an official response regarding the issue. Here's what we know. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">quAzuLehdjregfi9dmBg5Y</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/mvrfSVVZTktfFQmrkz2Cm4-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 26 Oct 2026 20:41:09 +0000</pubDate>                                                                                                                                <updated>Mon, 26 Oct 2026 20:42:27 +0000</updated>
                                                                                                                                            <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ john.velasco@futurenet.com (John Velasco) ]]></author>                    <dc:creator><![CDATA[ John Velasco ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/TSj224oX8d5ERXaDs8pDGd-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/mvrfSVVZTktfFQmrkz2Cm4-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPhone Duo]]></media:description>                                                            <media:text><![CDATA[iPhone Duo]]></media:text>
                                <media:title type="plain"><![CDATA[iPhone Duo]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/mvrfSVVZTktfFQmrkz2Cm4-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>We’re not even a week out from launch, and Apple is already doing damage control with the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-review">iPhone Duo</a>. Just days after hitting store shelves, early buyers reported <a href="https://www.tomsguide.com/phones/iphones/the-iphone-duo-just-came-out-and-owners-are-already-seeing-screens-crack-at-the-hinge">hairline fractures and sudden cracks</a> forming along the inner display’s crease — an unexpected setback given the meticulous engineering touted behind its near-invisible fold.</p><p>Now, Apple’s official response confirms the company is actively tracking the issue, stressing that it is “aware of an issue impacting the inner display on a small number of iPhone Duo units.” More importantly for early adopters, Apple has provided clear instructions on what affected owners should do next.</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/Nv_bpcmm6Ss" allowfullscreen></iframe></div></div><p>While Apple is well known for maintaining rigorous quality assurance standards for its marquee devices, it shouldn’t come as a surprise whenever issues do crop up — especially around complex first-generation gadgets. The company was silent regarding cracked screen issues with the Duo initially, but it finally sent out an official statement.</p><p>"The response to iPhone Duo from early users has been incredibly positive, and we are seeing exciting things from developers who are rapidly updating their apps to take advantage of its unique form factor,” explained Apple’s spokesperson. “We are aware of an issue impacting the inner display on a small number of iPhone Duo units. If users experience issues with their iPhone Duo display, they should contact AppleCare for a replacement."</p><p>While social media feeds are buzzing with photos and videos of cracked creases, durability struggles are nothing new for foldable phones. Given their complex hinge mechanisms and fragile inner layers compared to traditional glass slabs, early mechanical failures are always a risk. Complicating matters for Apple, however, is a wave of <a href="https://www.reddit.com/r/iPhoneDuo/comments/1xel0j5/removed_by_moderator/#lightbox" target="_blank">AI-generated fakes circulating online</a> and pretending to be legitimate customer complaints.</p><p>Still, genuine display failures remain a reality across the board, and affected owners should contact AppleCare immediately. Apple's standard limited warranty typically covers display fractures that stem from manufacturing defects — provided the device doesn't show signs of accidental drops or intentional damage.</p><p>Did you buy an iPhone Duo? How is your screen holding up? Let us 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><a href="https://www.tomsguide.com/phones/iphones/i-spent-30-minutes-with-the-iphone-duo-3-things-you-just-dont-get-from-the-pictures">I spent 30 minutes with the iPhone Duo — 3 things you just don't get from photos alone</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</a></li><li><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">I tested the iPhone Duo vs Galaxy Z Fold 8 displays side-by-side</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple increased trade-in values for iPads and several Macs, hinting at higher prices across the board ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Apple just announced the upgraded <a href="https://www.tomsguide.com/computing/ipads/apple-just-announced-a-new-ipad-mini-with-an-oled-panel-and-a20-pro-chip">iPad mini 8</a>, the first small Apple tablet with an OLED display, as part of the company's "<a href="https://www.tomsguide.com/computing/macbooks/what-to-expect-from-apples-pro-and-tell-event-all-the-confirmed-and-rumored-products-coming-this-week">Pro and Tell</a>" event. New MacBooks should be announced later this week.</p><p>The update is huge but also comes with a $100 price increase, meaning the new iPad mini starts at $699, or $58.25 per month for 12 months. Fortunately, Apple also increased the trade-in value for older iPads. </p><p>It's not a massive increase — $20 more than previous rates at most — but it might help take some of the sting away from the new price tag.</p><div ><table><caption>iPad trade-in value</caption><thead><tr><th class="firstcol " ><p>Model</p></th><th  ><p>Estimated value</p></th></tr></thead><tbody><tr><td class="firstcol " ><p>iPad Pro</p></td><td  ><p>up to $915</p></td></tr><tr><td class="firstcol " ><p>iPad Air</p></td><td  ><p>up to $525</p></td></tr><tr><td class="firstcol " ><p>iPad</p></td><td  ><p>up to $300</p></td></tr><tr><td class="firstcol " ><p>iPad mini</p></td><td  ><p>up to $340</p></td></tr></tbody></table></div><p>As a reminder, this depends on the model. A newer iPad mini 7 will get you more money, and the tablet's condition matters, too. The numbers we're showing here are potentially what you can get if everything is in good shape.</p><h2 id="macbook-trade-in-values">MacBook trade-in values</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2735px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="wu5ytH8AAeBB4EP6xgad9C" name="MacBook Pro 14-inch M3 2023-19.jpg" alt="MacBook Pro 14-inch M3 on table" src="https://cdn.mos.cms.futurecdn.net/wu5ytH8AAeBB4EP6xgad9C-1920-80.jpg" mos="" align="middle" fullscreen="" width="2735" height="1538" attribution="" endorsement="" class="inline"></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 week we're expecting Apple to introduce a new version of the MacBook Pro, likely featuring the M6 chip that we just tested in the <a href="https://www.tomsguide.com/computing/apple-desktops/mac-mini-m6-reasons-to-buy-and-skip">updated Mac mini</a>. Additionally, like the iPad mini 8, we should also see a new <a href="https://www.tomsguide.com/computing/macbooks/macbook-pro-oled-all-the-expected-features">MacBook Pro with a touchscreen OLED</a> display, a first for Apple.</p><p>Like the iPad trade-in program, the Mac and MacBook version will also get a bit more money. Unfortunately, that suggests that the new MacBook Pro and MacBook Ultra will be far more expensive than last year's models. </p><p>We're looking at a potential $3,000 price tag for the OLED MacBook. </p><p>With that in mind, here's what you could get for trading in your MacBook or Mac.</p><div ><table><thead><tr><th class="firstcol " ><p>Model</p></th><th  ><p>Trade-in value</p></th></tr></thead><tbody><tr><td class="firstcol " ><p>MacBook Pro</p></td><td  ><p>up to $1,435</p></td></tr><tr><td class="firstcol " ><p>MacBook Air</p></td><td  ><p>up to $795</p></td></tr><tr><td class="firstcol " ><p>iMac</p></td><td  ><p>up to $440</p></td></tr><tr><td class="firstcol " ><p>iMac Pro</p></td><td  ><p>up to $340</p></td></tr><tr><td class="firstcol " ><p>Mac mini</p></td><td  ><p>up to $645</p></td></tr><tr><td class="firstcol " ><p>Mac Studio</p></td><td  ><p>up to $1,700</p></td></tr><tr><td class="firstcol " ><p>Mac Pro</p></td><td  ><p>up to $2,560</p></td></tr></tbody></table></div><p>Right now, we know that pre-orders for the iPad mini 8 will open up on Wednesday, October 28, with shipping beginning on November 6. Presumably, the new MacBooks will have a similar pre-order and shipping window. </p><h2 id="how-to-trade-in-your-ipad-or-mac">How to trade in your iPad or Mac</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1506px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="fV5YexNpm5YFDSEAnZrMgV" name="Apple event.jpg" alt="Apple Peek Performance" src="https://cdn.mos.cms.futurecdn.net/fV5YexNpm5YFDSEAnZrMgV-1920-80.jpg" mos="" align="middle" fullscreen="" width="1506" height="847" 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>If you haven't traded in with Apple before, you can swap out your device online or at an Apple Store. </p><p>In-store is pretty straightforward. You'll want to unpair any accessories, back up the device and sign out of services like iCloud, iTunes and the App Store. For an iPad, you don't need to erase anything as an Apple specialist will help you with that.</p><p>On a Mac, however, Apple requests you erase your hard drive and reinstall macOS. Once those are done, take it into an Apple Store where a specialist will inspect the device and give you a value; if it has no value, Apple will recycle the device.</p><p>If you go the online route, you'll need your device's serial number. Plus, you'll do it as part of purchasing a new Apple device. Adding the device is part of the checkout process. Apple will send you a trade-in confirmation email with instructions for backing up your data and prepping the device. </p><p>Finally, you can mail the device in or drop it off at an Apple Store. The company will include step-by-step instructions for this part in the confirmation email.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/the-iphone-duo-just-came-out-and-owners-are-already-seeing-screens-crack-at-the-hinge"><strong>The iPhone Duo just came out, and owners are already seeing screens crack at the hinge</strong></a></li><li><a href="https://www.tomsguide.com/phones/iphones/after-spending-three-months-testing-ios-27-these-5-features-are-my-absolute-favorite"><strong>After spending three months testing iOS 27, these 5 features are my absolute favorite</strong></a></li><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></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/ipads/apple-increased-trade-in-values-for-ipads-and-several-macs-hinting-at-higher-prices-across-the-board</link>
                                                                            <description>
                            <![CDATA[ Apple raised the trade-in value for iPads and Macs. Here's how much you'll get for trading in older devices now. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">9RoBzGQVUE7xfSSsbaye3c</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/stMPBEZhf3JAroTfiq5nTS-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 26 Oct 2026 19:18:23 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[MacBooks]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Tablets]]></category>
                                                    <category><![CDATA[Laptops]]></category>
                                                                                                <author><![CDATA[ scott.younker@futurenet.com (Scott Younker) ]]></author>                    <dc:creator><![CDATA[ Scott Younker ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/RZsUpqcJ6Uj2q83oCUwNhQ-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/stMPBEZhf3JAroTfiq5nTS-1920-80.jpg">
                                                            <media:credit><![CDATA[Apple]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPad mini 8]]></media:description>                                                            <media:text><![CDATA[iPad mini 8]]></media:text>
                                <media:title type="plain"><![CDATA[iPad mini 8]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/stMPBEZhf3JAroTfiq5nTS-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Apple just announced the upgraded <a href="https://www.tomsguide.com/computing/ipads/apple-just-announced-a-new-ipad-mini-with-an-oled-panel-and-a20-pro-chip">iPad mini 8</a>, the first small Apple tablet with an OLED display, as part of the company's "<a href="https://www.tomsguide.com/computing/macbooks/what-to-expect-from-apples-pro-and-tell-event-all-the-confirmed-and-rumored-products-coming-this-week">Pro and Tell</a>" event. New MacBooks should be announced later this week.</p><p>The update is huge but also comes with a $100 price increase, meaning the new iPad mini starts at $699, or $58.25 per month for 12 months. Fortunately, Apple also increased the trade-in value for older iPads. </p><p>It's not a massive increase — $20 more than previous rates at most — but it might help take some of the sting away from the new price tag.</p><div ><table><caption>iPad trade-in value</caption><thead><tr><th class="firstcol " ><p>Model</p></th><th  ><p>Estimated value</p></th></tr></thead><tbody><tr><td class="firstcol " ><p>iPad Pro</p></td><td  ><p>up to $915</p></td></tr><tr><td class="firstcol " ><p>iPad Air</p></td><td  ><p>up to $525</p></td></tr><tr><td class="firstcol " ><p>iPad</p></td><td  ><p>up to $300</p></td></tr><tr><td class="firstcol " ><p>iPad mini</p></td><td  ><p>up to $340</p></td></tr></tbody></table></div><p>As a reminder, this depends on the model. A newer iPad mini 7 will get you more money, and the tablet's condition matters, too. The numbers we're showing here are potentially what you can get if everything is in good shape.</p><h2 id="macbook-trade-in-values">MacBook trade-in values</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2735px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="wu5ytH8AAeBB4EP6xgad9C" name="MacBook Pro 14-inch M3 2023-19.jpg" alt="MacBook Pro 14-inch M3 on table" src="https://cdn.mos.cms.futurecdn.net/wu5ytH8AAeBB4EP6xgad9C-1920-80.jpg" mos="" align="middle" fullscreen="" width="2735" height="1538" attribution="" endorsement="" class="inline"></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 week we're expecting Apple to introduce a new version of the MacBook Pro, likely featuring the M6 chip that we just tested in the <a href="https://www.tomsguide.com/computing/apple-desktops/mac-mini-m6-reasons-to-buy-and-skip">updated Mac mini</a>. Additionally, like the iPad mini 8, we should also see a new <a href="https://www.tomsguide.com/computing/macbooks/macbook-pro-oled-all-the-expected-features">MacBook Pro with a touchscreen OLED</a> display, a first for Apple.</p><p>Like the iPad trade-in program, the Mac and MacBook version will also get a bit more money. Unfortunately, that suggests that the new MacBook Pro and MacBook Ultra will be far more expensive than last year's models. </p><p>We're looking at a potential $3,000 price tag for the OLED MacBook. </p><p>With that in mind, here's what you could get for trading in your MacBook or Mac.</p><div ><table><thead><tr><th class="firstcol " ><p>Model</p></th><th  ><p>Trade-in value</p></th></tr></thead><tbody><tr><td class="firstcol " ><p>MacBook Pro</p></td><td  ><p>up to $1,435</p></td></tr><tr><td class="firstcol " ><p>MacBook Air</p></td><td  ><p>up to $795</p></td></tr><tr><td class="firstcol " ><p>iMac</p></td><td  ><p>up to $440</p></td></tr><tr><td class="firstcol " ><p>iMac Pro</p></td><td  ><p>up to $340</p></td></tr><tr><td class="firstcol " ><p>Mac mini</p></td><td  ><p>up to $645</p></td></tr><tr><td class="firstcol " ><p>Mac Studio</p></td><td  ><p>up to $1,700</p></td></tr><tr><td class="firstcol " ><p>Mac Pro</p></td><td  ><p>up to $2,560</p></td></tr></tbody></table></div><p>Right now, we know that pre-orders for the iPad mini 8 will open up on Wednesday, October 28, with shipping beginning on November 6. Presumably, the new MacBooks will have a similar pre-order and shipping window. </p><h2 id="how-to-trade-in-your-ipad-or-mac">How to trade in your iPad or Mac</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1506px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="fV5YexNpm5YFDSEAnZrMgV" name="Apple event.jpg" alt="Apple Peek Performance" src="https://cdn.mos.cms.futurecdn.net/fV5YexNpm5YFDSEAnZrMgV-1920-80.jpg" mos="" align="middle" fullscreen="" width="1506" height="847" 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>If you haven't traded in with Apple before, you can swap out your device online or at an Apple Store. </p><p>In-store is pretty straightforward. You'll want to unpair any accessories, back up the device and sign out of services like iCloud, iTunes and the App Store. For an iPad, you don't need to erase anything as an Apple specialist will help you with that.</p><p>On a Mac, however, Apple requests you erase your hard drive and reinstall macOS. Once those are done, take it into an Apple Store where a specialist will inspect the device and give you a value; if it has no value, Apple will recycle the device.</p><p>If you go the online route, you'll need your device's serial number. Plus, you'll do it as part of purchasing a new Apple device. Adding the device is part of the checkout process. Apple will send you a trade-in confirmation email with instructions for backing up your data and prepping the device. </p><p>Finally, you can mail the device in or drop it off at an Apple Store. The company will include step-by-step instructions for this part in the confirmation email.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/the-iphone-duo-just-came-out-and-owners-are-already-seeing-screens-crack-at-the-hinge"><strong>The iPhone Duo just came out, and owners are already seeing screens crack at the hinge</strong></a></li><li><a href="https://www.tomsguide.com/phones/iphones/after-spending-three-months-testing-ios-27-these-5-features-are-my-absolute-favorite"><strong>After spending three months testing iOS 27, these 5 features are my absolute favorite</strong></a></li><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></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ What to expect from Apple's 'Pro and tell' event — all the confirmed and rumored products coming this week ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Apple's second hardware event of October is taking place this week and I'm expecting it to be even bigger than the 'Welcome home' showcase a couple of weeks ago that unveiled the Apple HomeView.</p><p>This time around, Apple is widely expected to unveil OLED MacBooks in both 14-inch and 16-inch variants. And, at long, <em>long</em> last, Apple will make the jump to a full touchscreen for the first time ever. Slight sidebar here; my colleague Jason got tired of waiting and has already <a href="https://www.tomsguide.com/computing/macos/i-strapped-a-touchscreen-to-my-macbook-pro-to-see-if-macos-is-ready-for-next-week-3-things-that-need-fixing-quickly">strapped a touchscreen to his MacBook Pro</a>. </p><p>Mark Gurman, the Apple Whisperer himself, <a href="https://www.tomsguide.com/computing/macbooks/we-predicted-the-oled-macbook-pros-usd500-price-hike-heres-what-the-leaks-say-and-why-macbook-air-buyers-may-miss-out">confirmed in a report over the weekend</a> these machines are coming but added there'll be a twist to the tail. Although the MacBook Pro OLEDs will come with touch enabled, they'll be saddled with an M5 Pro and M5 Max chipset, while an also-announced non-touch MacBook Pro 14-inch will debut with the brand new M6 chip. Strange stuff indeed.</p><p>But there's going to be more on offer this week than just the MacBook OLED. Apple has today <a href="https://www.tomsguide.com/computing/ipads/apple-just-announced-a-new-ipad-mini-with-an-oled-panel-and-a20-pro-chip">announced a refreshed iPad mini 8</a> — so let's dig into exactly what you can expect to see at Apple's "Pro and tell" event this week.</p><h3 class="article-body__section" id="section-apple-pro-and-tell-when-is-it"><span>Apple 'Pro and tell': When is it?</span></h3><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="72j28wLxJ6amGHHJbFFpdj" name="john ternus" alt="john ternus" src="https://cdn.mos.cms.futurecdn.net/72j28wLxJ6amGHHJbFFpdj-1920-80.png" 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: Apple)</span></figcaption></figure><p>Apple's "Pro and tell" event is taking place on <strong>Wednesday, October 28</strong> and, just like the "Welcome home" showcase a couple of weeks ago, it was teased by Apple's senior vice president of marketing, Greg Joswiak.</p><div class="see-more see-more--clipped"><figure><blockquote class="twitter-tweet hawk-ignore" data-lang="en" cite="https://twitter.com/cantworkitout/status/2112212372182249831"><p lang="en" dir="ltr">Can’t wait to pro and tell next week. https://t.co/3wUkxwq35i<a href="https://twitter.com/cantworkitout/status/2112212372182249831">October 19, 2026</a></p></blockquote></figure><div class="see-more__filter"></div></div><p>There has been very little information beyond the name of the event, but some journalists (Tom's Guide included) have been invited to Los Angeles for an in-person presentation at<strong> 10am PT / 1pm ET / 5pm GMT on Wednesday, October 28.</strong></p><p>We haven't seen any details on a livestream and following today's surprise iPad mini 8 announcement, it seems like Apple's plan is to drip-feed the announcements between now and Wednesday. We may see a few announcement videos and corresponding press releases posted to Apple's newsroom over the next few days.</p><p>Finally, once the products are out in the open, Apple will host its showcase on Wednesday giving media the chance to go hands-on with them. Of course, we'll be giving you up-to-the-minute reports as it happens, so stay tuned to Tom's Guide.</p><h3 class="article-body__section" id="section-apple-pro-and-tell-confirmed-and-rumored-products"><span>Apple 'Pro and tell': Confirmed and rumored products</span></h3><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="Hsjk8j7e455GM6LaXcQai7" name="apple pro and tell" alt="apple pro and tell" src="https://cdn.mos.cms.futurecdn.net/Hsjk8j7e455GM6LaXcQai7-1920-80.png" 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>If the rumors are to be believed, we could see up to <strong>four different devices unveiled by Wednesday.</strong></p><p>Let's take a look at each one of them in turn.</p><h2 id="confirmed-ipad-mini-8">Confirmed: iPad mini 8</h2><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="zewp7tDMEMLJbbp2kGYYH8" name="ipad mini 8" alt="ipad mini 8" src="https://cdn.mos.cms.futurecdn.net/zewp7tDMEMLJbbp2kGYYH8-1920-80.png" 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: Apple)</span></figcaption></figure><p>The new iPad mini 8 is official and swaps the 8.3-inch LCD on the iPad mini 7 for a larger 8.5-inch Super Retina XDR OLED panel. As a result, the tablet is thinner and lighter. </p><p>Another design upgrade is IP67 water and dust resistance. The iPad mini 8 is also powered by the A20 Pro chip, which should make it the fastest iPad mini yet.</p><p>You can read everything <a href="https://www.tomsguide.com/computing/ipads/apple-just-announced-a-new-ipad-mini-with-an-oled-panel-and-a20-pro-chip">about the iPad mini 8 right here</a>.</p><h2 id="rumored-macbook-pro-oled">Rumored: MacBook Pro OLED</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="SdeLwCg7jxNHkEX2q8tqia" name="MacBook Pro M5--02" alt="MacBook Pro M5" src="https://cdn.mos.cms.futurecdn.net/SdeLwCg7jxNHkEX2q8tqia-1920-80.jpg" mos="" align="middle" fullscreen="" width="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 most exciting new product likely to launch is the touchscreen-enabled MacBook Pro I mentioned up top. This could be the biggest upgrade to the MacBook product line in years but will require some heavy tweaks to macOS 27 to make it more touch-friendly. Considering Apple has been refining iPadOS for years, this isn't a chasm that'll be difficult to cross.</p><p>Elsewhere, the benefits of and OLED display will be hard to beat. You can expect a much better contrast with deeper blacks that the already-impressive Liquid Retina XDR display on the existing MacBook Pro.</p><p>As mentioned above, Mark Gurman seems to believe the MacBook Pro OLED (MacBook PrOLED?) will arrive with M5 Pro and M5 Max chips instead of an M6 chip. It will reportedly come in 14- and 16-inch variants and will be slimmer and lighter than the current MacBook Pro. Expect a sky-high price tag, though. Possibly as high as $2,399 for the 14-inch model and $3,599 for the 16-inch variant.</p><h2 id="rumored-m6-macbook-pro-14-inch">Rumored: M6 MacBook Pro (14-inch)</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="7sihnbDHhcPr4yJ8oHbPeA" name="macbook-pro-2023-image.jpg" alt="A 2023 MacBook Pro 14-inch" src="https://cdn.mos.cms.futurecdn.net/7sihnbDHhcPr4yJ8oHbPeA-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Alongside the MacBook Pro OLED, it's likely we'll also see an upgrade to the base level MacBook Pro, bumping it from the M5 chip to the M6 that was first unveiled inside the Mac Mini earlier this year.</p><p>Some rumors suggest we'll get a hole-punch front-facing camera in place of the current notch. Otherwise, it's likely to be the exact same outer shell as the current 14-inch MacBook Pros.</p><h2 id="rumored-m6-imac">Rumored: M6 iMac</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3072px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Ks6KtG9fx9soz6ddidT9iY" name="TG_iMac_2021_LIST-2.jpg" alt="Apple iMac 24-inch" src="https://cdn.mos.cms.futurecdn.net/Ks6KtG9fx9soz6ddidT9iY-1920-80.jpg" mos="" align="middle" fullscreen="" width="3072" height="1728" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Following in the footsteps of the upgraded M6 MacBook Pro it's been heavily rumored we'll also see a new version of the iMac with the M6 chip on board. As with the M6 MacBook Pro, the M6 iMac will be an iterative upgrade that likely consists of a chip upgrade and little change to the design or the screen.</p><p>The current iMac features a 24-inch 4.5k Retina display with a 4,480 x 2,520 resolution and a max brightness of 500 nits and I'd expect to see the 2026 model remain unchanged.</p><p>There may be a lot of potential iMac customers out there hoping Apple will give its all-in-one the touchscreen treatment. Sadly, that doesn't look like it's on the cards for this week either.</p><h3 class="article-body__section" id="section-apple-pro-and-tell-prices-and-should-i-buy"><span>Apple 'Pro and tell': Prices and should I buy?</span></h3><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="TuBDexrUnuYdbrbkhM4ofX" name="iMac-2023_M3-1.jpg" alt="Apple iMac M3 review unit on desk" src="https://cdn.mos.cms.futurecdn.net/TuBDexrUnuYdbrbkhM4ofX-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>I'm sorry to be the bearer of bad news, but judging by the way prices have skyrocketed this year, it's unlikely these new Apple products are going to be easy on the wallet. </p><p>For example, the new <a href="https://apple.sjv.io/c/221109/435031/7613?subId1=tomsguide-gb-9860433177490509230&sharedId=tomsguide-gb&u=https%3A%2F%2Fwww.apple.com%2Fshop%2Fbuy-ipad%2Fipad-mini" target="_blank" rel="sponsored">iPad mini starts at $699,</a> or $58.25 per month for 12 months, for the Wi-Fi model, and $849, or $70.75 per month for 12 months, for the Wi-Fi + Cellular model. That's a big jump from the $499 starting price of the iPad mini 7 a couple of years ago and I expect the other devices announced this week to follow suit.</p><p>However, in some cases if you've been holding out on an upgrade for awhile, this could be the time to make your move. Pre-orders will almost certainly be available from Wednesday, October 28 (that's the case for the iPad mini 8) with shipping likely to occur in November.</p><p>Of course, we’ll keep an eye on the prices of outgoing models the day they’re discounted, so you’ll know exactly when the discount is real. And let's not forget that with Black Friday on the horizon we could see some stellar discounts on slightly older models that might make more sense for some people. Either way, the next few weeks are going to be prime time for buying a new Mac.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Xj2LYX"></div>                            </div>                            <script src="https://kwizly.com/embed/Xj2LYX.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/iphone-duo-wait-times-latest-updates-and-how-to-beat-apples-january-delay">iPhone Duo wait times — latest updates and how to beat Apple's January delay</a></li><li><a href="https://www.tomsguide.com/computing/cpus/ive-been-living-with-nvidias-rtx-spark-for-a-week-on-surface-laptop-ultra-its-not-a-macbook-pro-killer-but-something-much-weirder-and-wildly-powerful">I’ve been living with Nvidia’s RTX Spark for a week — it’s not a MacBook Pro killer but something much weirder and wildly powerful</a></li><li><a href="https://www.tomsguide.com/home/smart-home/apples-rumored-usd1-000-homeview-max-is-either-a-smart-home-revolution-or-a-terrifying-black-mirror-prop">At $1,000, Apple's rumored HomeView Max better do the dishes, too</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/macbooks/what-to-expect-from-apples-pro-and-tell-event-all-the-confirmed-and-rumored-products-coming-this-week</link>
                                                                            <description>
                            <![CDATA[ Apple is lining up its second hardware event of October this week and here's everything you can expect to see from the 'Pro and tell' event. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">6WzWhkTJrwdtgw5Fu8rbxj</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/AWm9bdpgxxSBL6VZbUNjQi-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 26 Oct 2026 14:58:01 +0000</pubDate>                                                                                                                                <updated>Mon, 26 Oct 2026 17:43:20 +0000</updated>
                                                                                                                                            <category><![CDATA[MacBooks]]></category>
                                                    <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Laptops]]></category>
                                                    <category><![CDATA[Tablets]]></category>
                                                                                                <author><![CDATA[ jeff.parsons@futurenet.com (Jeff Parsons) ]]></author>                    <dc:creator><![CDATA[ Jeff Parsons ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/7z3UTGGrmSokMKxTWHmhjX-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Jeff is U.K. Editor-in-Chief for Tom’s Guide looking after the day-to-day output of the site’s British contingent. &lt;/p&gt;&lt;p&gt;Rising early and heading straight for the coffee machine, Jeff loves nothing more than dialling into the zeitgeist of the day’s tech news. A journalist for over a decade, he&#039;s travelled around the world testing and reviewing any gadget he can get his hands on.&lt;/p&gt;&lt;p&gt;Before joining the team at Tom’s Guide, Jeff covered technology and science for two of the U.K.’s biggest national news sites: Metro.co.uk and the Daily Mirror. Memorable moments include getting lost in Vienna in an electric Audi, touring Lockheed Martin’s mile-long jet factory in Fort Worth and filming a Netflix documentary about Elon Musk in West London.&lt;/p&gt;&lt;p&gt;When not plugged into the current news agenda, editing or commissioning a series of articles or debating the merits of Apple vs Android, Jeff can usually be found out for a run trying to shave precious seconds off his PB. Or lifting weights in a vain attempt to offset the ageing process.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/AWm9bdpgxxSBL6VZbUNjQi-1920-80.jpg">
                                                            <media:credit><![CDATA[Apple]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Apple Pro and Tell event]]></media:description>                                                            <media:text><![CDATA[Apple Pro and Tell event]]></media:text>
                                <media:title type="plain"><![CDATA[Apple Pro and Tell event]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/AWm9bdpgxxSBL6VZbUNjQi-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Apple's second hardware event of October is taking place this week and I'm expecting it to be even bigger than the 'Welcome home' showcase a couple of weeks ago that unveiled the Apple HomeView.</p><p>This time around, Apple is widely expected to unveil OLED MacBooks in both 14-inch and 16-inch variants. And, at long, <em>long</em> last, Apple will make the jump to a full touchscreen for the first time ever. Slight sidebar here; my colleague Jason got tired of waiting and has already <a href="https://www.tomsguide.com/computing/macos/i-strapped-a-touchscreen-to-my-macbook-pro-to-see-if-macos-is-ready-for-next-week-3-things-that-need-fixing-quickly">strapped a touchscreen to his MacBook Pro</a>. </p><p>Mark Gurman, the Apple Whisperer himself, <a href="https://www.tomsguide.com/computing/macbooks/we-predicted-the-oled-macbook-pros-usd500-price-hike-heres-what-the-leaks-say-and-why-macbook-air-buyers-may-miss-out">confirmed in a report over the weekend</a> these machines are coming but added there'll be a twist to the tail. Although the MacBook Pro OLEDs will come with touch enabled, they'll be saddled with an M5 Pro and M5 Max chipset, while an also-announced non-touch MacBook Pro 14-inch will debut with the brand new M6 chip. Strange stuff indeed.</p><p>But there's going to be more on offer this week than just the MacBook OLED. Apple has today <a href="https://www.tomsguide.com/computing/ipads/apple-just-announced-a-new-ipad-mini-with-an-oled-panel-and-a20-pro-chip">announced a refreshed iPad mini 8</a> — so let's dig into exactly what you can expect to see at Apple's "Pro and tell" event this week.</p><h3 class="article-body__section" id="section-apple-pro-and-tell-when-is-it"><span>Apple 'Pro and tell': When is it?</span></h3><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="72j28wLxJ6amGHHJbFFpdj" name="john ternus" alt="john ternus" src="https://cdn.mos.cms.futurecdn.net/72j28wLxJ6amGHHJbFFpdj-1920-80.png" 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: Apple)</span></figcaption></figure><p>Apple's "Pro and tell" event is taking place on <strong>Wednesday, October 28</strong> and, just like the "Welcome home" showcase a couple of weeks ago, it was teased by Apple's senior vice president of marketing, Greg Joswiak.</p><div class="see-more see-more--clipped"><figure><blockquote class="twitter-tweet hawk-ignore" data-lang="en" cite="https://twitter.com/cantworkitout/status/2112212372182249831"><p lang="en" dir="ltr">Can’t wait to pro and tell next week. https://t.co/3wUkxwq35i<a href="https://twitter.com/cantworkitout/status/2112212372182249831">October 19, 2026</a></p></blockquote></figure><div class="see-more__filter"></div></div><p>There has been very little information beyond the name of the event, but some journalists (Tom's Guide included) have been invited to Los Angeles for an in-person presentation at<strong> 10am PT / 1pm ET / 5pm GMT on Wednesday, October 28.</strong></p><p>We haven't seen any details on a livestream and following today's surprise iPad mini 8 announcement, it seems like Apple's plan is to drip-feed the announcements between now and Wednesday. We may see a few announcement videos and corresponding press releases posted to Apple's newsroom over the next few days.</p><p>Finally, once the products are out in the open, Apple will host its showcase on Wednesday giving media the chance to go hands-on with them. Of course, we'll be giving you up-to-the-minute reports as it happens, so stay tuned to Tom's Guide.</p><h3 class="article-body__section" id="section-apple-pro-and-tell-confirmed-and-rumored-products"><span>Apple 'Pro and tell': Confirmed and rumored products</span></h3><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="Hsjk8j7e455GM6LaXcQai7" name="apple pro and tell" alt="apple pro and tell" src="https://cdn.mos.cms.futurecdn.net/Hsjk8j7e455GM6LaXcQai7-1920-80.png" 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>If the rumors are to be believed, we could see up to <strong>four different devices unveiled by Wednesday.</strong></p><p>Let's take a look at each one of them in turn.</p><h2 id="confirmed-ipad-mini-8">Confirmed: iPad mini 8</h2><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="zewp7tDMEMLJbbp2kGYYH8" name="ipad mini 8" alt="ipad mini 8" src="https://cdn.mos.cms.futurecdn.net/zewp7tDMEMLJbbp2kGYYH8-1920-80.png" 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: Apple)</span></figcaption></figure><p>The new iPad mini 8 is official and swaps the 8.3-inch LCD on the iPad mini 7 for a larger 8.5-inch Super Retina XDR OLED panel. As a result, the tablet is thinner and lighter. </p><p>Another design upgrade is IP67 water and dust resistance. The iPad mini 8 is also powered by the A20 Pro chip, which should make it the fastest iPad mini yet.</p><p>You can read everything <a href="https://www.tomsguide.com/computing/ipads/apple-just-announced-a-new-ipad-mini-with-an-oled-panel-and-a20-pro-chip">about the iPad mini 8 right here</a>.</p><h2 id="rumored-macbook-pro-oled">Rumored: MacBook Pro OLED</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="SdeLwCg7jxNHkEX2q8tqia" name="MacBook Pro M5--02" alt="MacBook Pro M5" src="https://cdn.mos.cms.futurecdn.net/SdeLwCg7jxNHkEX2q8tqia-1920-80.jpg" mos="" align="middle" fullscreen="" width="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 most exciting new product likely to launch is the touchscreen-enabled MacBook Pro I mentioned up top. This could be the biggest upgrade to the MacBook product line in years but will require some heavy tweaks to macOS 27 to make it more touch-friendly. Considering Apple has been refining iPadOS for years, this isn't a chasm that'll be difficult to cross.</p><p>Elsewhere, the benefits of and OLED display will be hard to beat. You can expect a much better contrast with deeper blacks that the already-impressive Liquid Retina XDR display on the existing MacBook Pro.</p><p>As mentioned above, Mark Gurman seems to believe the MacBook Pro OLED (MacBook PrOLED?) will arrive with M5 Pro and M5 Max chips instead of an M6 chip. It will reportedly come in 14- and 16-inch variants and will be slimmer and lighter than the current MacBook Pro. Expect a sky-high price tag, though. Possibly as high as $2,399 for the 14-inch model and $3,599 for the 16-inch variant.</p><h2 id="rumored-m6-macbook-pro-14-inch">Rumored: M6 MacBook Pro (14-inch)</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="7sihnbDHhcPr4yJ8oHbPeA" name="macbook-pro-2023-image.jpg" alt="A 2023 MacBook Pro 14-inch" src="https://cdn.mos.cms.futurecdn.net/7sihnbDHhcPr4yJ8oHbPeA-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Alongside the MacBook Pro OLED, it's likely we'll also see an upgrade to the base level MacBook Pro, bumping it from the M5 chip to the M6 that was first unveiled inside the Mac Mini earlier this year.</p><p>Some rumors suggest we'll get a hole-punch front-facing camera in place of the current notch. Otherwise, it's likely to be the exact same outer shell as the current 14-inch MacBook Pros.</p><h2 id="rumored-m6-imac">Rumored: M6 iMac</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3072px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Ks6KtG9fx9soz6ddidT9iY" name="TG_iMac_2021_LIST-2.jpg" alt="Apple iMac 24-inch" src="https://cdn.mos.cms.futurecdn.net/Ks6KtG9fx9soz6ddidT9iY-1920-80.jpg" mos="" align="middle" fullscreen="" width="3072" height="1728" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Following in the footsteps of the upgraded M6 MacBook Pro it's been heavily rumored we'll also see a new version of the iMac with the M6 chip on board. As with the M6 MacBook Pro, the M6 iMac will be an iterative upgrade that likely consists of a chip upgrade and little change to the design or the screen.</p><p>The current iMac features a 24-inch 4.5k Retina display with a 4,480 x 2,520 resolution and a max brightness of 500 nits and I'd expect to see the 2026 model remain unchanged.</p><p>There may be a lot of potential iMac customers out there hoping Apple will give its all-in-one the touchscreen treatment. Sadly, that doesn't look like it's on the cards for this week either.</p><h3 class="article-body__section" id="section-apple-pro-and-tell-prices-and-should-i-buy"><span>Apple 'Pro and tell': Prices and should I buy?</span></h3><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="TuBDexrUnuYdbrbkhM4ofX" name="iMac-2023_M3-1.jpg" alt="Apple iMac M3 review unit on desk" src="https://cdn.mos.cms.futurecdn.net/TuBDexrUnuYdbrbkhM4ofX-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>I'm sorry to be the bearer of bad news, but judging by the way prices have skyrocketed this year, it's unlikely these new Apple products are going to be easy on the wallet. </p><p>For example, the new <a href="https://apple.sjv.io/c/221109/435031/7613?subId1=tomsguide-gb-9860433177490509230&sharedId=tomsguide-gb&u=https%3A%2F%2Fwww.apple.com%2Fshop%2Fbuy-ipad%2Fipad-mini" target="_blank" rel="sponsored">iPad mini starts at $699,</a> or $58.25 per month for 12 months, for the Wi-Fi model, and $849, or $70.75 per month for 12 months, for the Wi-Fi + Cellular model. That's a big jump from the $499 starting price of the iPad mini 7 a couple of years ago and I expect the other devices announced this week to follow suit.</p><p>However, in some cases if you've been holding out on an upgrade for awhile, this could be the time to make your move. Pre-orders will almost certainly be available from Wednesday, October 28 (that's the case for the iPad mini 8) with shipping likely to occur in November.</p><p>Of course, we’ll keep an eye on the prices of outgoing models the day they’re discounted, so you’ll know exactly when the discount is real. And let's not forget that with Black Friday on the horizon we could see some stellar discounts on slightly older models that might make more sense for some people. Either way, the next few weeks are going to be prime time for buying a new Mac.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Xj2LYX"></div>                            </div>                            <script src="https://kwizly.com/embed/Xj2LYX.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/iphone-duo-wait-times-latest-updates-and-how-to-beat-apples-january-delay">iPhone Duo wait times — latest updates and how to beat Apple's January delay</a></li><li><a href="https://www.tomsguide.com/computing/cpus/ive-been-living-with-nvidias-rtx-spark-for-a-week-on-surface-laptop-ultra-its-not-a-macbook-pro-killer-but-something-much-weirder-and-wildly-powerful">I’ve been living with Nvidia’s RTX Spark for a week — it’s not a MacBook Pro killer but something much weirder and wildly powerful</a></li><li><a href="https://www.tomsguide.com/home/smart-home/apples-rumored-usd1-000-homeview-max-is-either-a-smart-home-revolution-or-a-terrifying-black-mirror-prop">At $1,000, Apple's rumored HomeView Max better do the dishes, too</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ iPhone Duo teardown by iFixit reveals key details — and could explain why Crackgate is happening ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The<a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-review"> iPhone Duo</a> has now been released, and it looks like early adopters are having to deal with some teething problems. As lucky as they might have felt to snag the sought-after foldable on release day, a <a href="https://www.tomsguide.com/phones/iphones/the-iphone-duo-just-came-out-and-owners-are-already-seeing-screens-crack-at-the-hinge">bunch of people have reported their screens are cracking</a> — a problem now dubbed "crackgate."</p><p>As it always does with new phones, <a href="https://www.ifixit.com/News/119895/iphone-duo-teardown" target="_blank">iFixit got hold of the iPhone Duo</a> and took it apart to see how everything works — and whether it's actually repairable or not. That teardown seems to have been very enlightening, revealing some secrets of the hidden hinge, factors that may be behind crackgate, and just how well that phone stands up to dust.</p><p>It's also the most repairable foldable phone to date, though other foldable phone makers haven't left the bar particularly high.</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/WOVIjFnivJA" allowfullscreen></iframe></div></div><h2 id="secrets-of-the-hidden-crease">Secrets of the hidden 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:1930px;"><p class="vanilla-image-block" style="padding-top:57.25%;"><img id="WzzxEgj7fuN37PRLyg9CGj" name="Screenshot 2026-10-26 115355" alt="ifixit iphone duo teardown" src="https://cdn.mos.cms.futurecdn.net/WzzxEgj7fuN37PRLyg9CGj-1920-80.png" mos="" align="middle" fullscreen="" width="1930" height="1105" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: iFixit)</span></figcaption></figure><p>The Duo's nano-texture coating is easily removed, and while replaceable, it is a multi-part process. In the meantime, the Duo's display is far more vulnerable to scratches and other damage. Removing it also removes the light-scattering effect, which makes working in bright light much more difficult and means any imperfections in the screen are easier to see — including the crease.</p><p>Under the microscope, iFixit can see the textured layer that diffuses incoming light, and looking further shows the pixel layout in the screen itself. Curiously, Apple has adopted a unique (and patented) pixel layout with a mix of round and ovular pixels. Apple says that this is meant to add variation to the pattern, but doesn't say what the benefit is.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1962px;"><p class="vanilla-image-block" style="padding-top:55.10%;"><img id="T6i44hjNvwTcgh92v2nxpj" name="Screenshot 2026-10-26 115329" alt="ifixit iphone duo teardown" src="https://cdn.mos.cms.futurecdn.net/T6i44hjNvwTcgh92v2nxpj-1920-80.png" mos="" align="middle" fullscreen="" width="1962" height="1081" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: iFixit)</span></figcaption></figure><p>iFixit speculates this could be another factor that helps to hide the crease by managing reflections deeper in the display and ensuring that light is less likely to make a distracting pattern. Replacing the nano-texture layer doesn't require a full screen replacement, and will set you back $49 without AppleCare+ — or $19 with it.</p><p>Some of the magic happens in the hinge, with Apple opting for the same "waterdrop" hinge design utilized by several smartphones over the past several years. This utilizes a controlled bend of the screen inside the hinge, essentially meaning the screen is half open. This reduces pressure on the fold and minimizes the amount of creasing that occurs in the process.</p><p>Apple's version uses a series of mechanical joints that actively prevent the hinge from closing too far — ensuring the screen doesn't fold more than it should.</p><h2 id="a-dusty-duo">A dusty Duo?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1969px;"><p class="vanilla-image-block" style="padding-top:55.66%;"><img id="phhi9ndGMUdgvMFdyqgW8j" name="Screenshot 2026-10-26 115316" alt="ifixit iphone duo teardown" src="https://cdn.mos.cms.futurecdn.net/phhi9ndGMUdgvMFdyqgW8j-1920-80.png" mos="" align="middle" fullscreen="" width="1969" height="1096" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: iFixit)</span></figcaption></figure><p>Using fluorescent dust, iFixit put the iPhone Duo's dust resistance rating to the test. At first, the sheer amount of dust around the outside of the phone shows that there is a pretty good seal on the phone — though the audible crunching around the hinge is a horrible thing to hear. But the phone is still foldable, which is in direct contrast to the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Galaxy Z Fold 8's</a> hinge, which was rendered basically unusable.</p><p>The dust all seems to have been stopped by the phone's adhesive layer, which means the internals are protected against stray particles getting inside. The same is true of the bezel, but from the looks of things, none of it managed to reach the fragile foldable screen and other electronics.</p><p>But the hinge is another matter, and the dust did make its way inside the mechanism — leading to that awful crunching sound. It's less dust than the Z Fold 8 and <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-fold-review">Pixel 11 Pro Fold</a>, but it proves that despite the IP68 rating, the iPhone Duo's hinge is not actually sealed against foreign particles. So bear that in mind.</p><p>iFixit notes that because of this, all foldable phones need to focus on both increased hinge protection and a more practical way to fix any damage. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Xk87ae"></div>                            </div>                            <script src="https://kwizly.com/embed/Xk87ae.js" async></script><h2 id="one-possible-explanation-for-crackgate">One possible explanation for Crackgate</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1983px;"><p class="vanilla-image-block" style="padding-top:55.67%;"><img id="KitaPPsPhJJGE4VgNPf7oi" name="Screenshot 2026-10-26 115547" alt="ifixit iphone duo teardown" src="https://cdn.mos.cms.futurecdn.net/KitaPPsPhJJGE4VgNPf7oi-1920-80.png" mos="" align="middle" fullscreen="" width="1983" height="1104" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: iFixit)</span></figcaption></figure><p>If you've been paying attention to social media this weekend, you may have noticed that some iPhone Duo users have started reporting damage to their screens. Dubbed "crackgate," it looks as though the damage is happening in the same place for everyone, with a white line down the center of the screen and across the right side. </p><p>Users often describe folding or unfolding the Duo, followed by an audible crunch. Teardowns reveal that the hinge is shaped a little differently in this spot, but it's also an area where a lot of different parts come together. Those include a protruding leaf, the accordion-shaped electrical cable that connects the two sides of the phone, and the edge of the battery on the right side of the phone is close by.</p><p>One possible answer given by iFixit is that the center support bar doesn't fall far enough when the screen is folding, which causes the display to make contact. This concentrated stress could be what's causing the screen to break.</p><h2 id="how-repairable-is-it">How repairable is 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:1974px;"><p class="vanilla-image-block" style="padding-top:56.13%;"><img id="TTYAXTyjz6PohSNoDBRoej" name="Screenshot 2026-10-26 115430" alt="ifixit iphone duo teardown" src="https://cdn.mos.cms.futurecdn.net/TTYAXTyjz6PohSNoDBRoej-1920-80.png" mos="" align="middle" fullscreen="" width="1974" height="1108" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: iFixit)</span></figcaption></figure><p>The first thing noticed during the actual teardown was that the iPhone Duo's cover screen comes off a lot more easily than most foldable phones, which is a slight win for Apple. Though iFixit immediately came across two hidden screws, which is really counterproductive. The team also noted that the outer screen is pretty robust, and the plastic bezel that caused a bunch of issues with the iPhone 18 Pro teardown stayed intact. Which is helpful considering pretty much every repair is going into the phone down this route.</p><p>The batteries are held in place by<a href="https://www.tomsguide.com/phones/iphones/iphone-16-could-be-the-most-repairable-iphone-ever-heres-how"> Apple's ionic adhesive</a>, which detaches when a current passes through it. The difference here is that there are two separate batteries, which requires this step to be done twice. The batteries also live in different areas, with one behind the cover display and another behind the back glass — which adds a little complexity to the process. However, iFixit comments that it is the best battery removal they've experienced on a foldable.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1312px;"><p class="vanilla-image-block" style="padding-top:55.87%;"><img id="8JDWm67puYCB7ttSJg9sbi" name="Screenshot 2026-10-26 115631" alt="ifixit iphone duo teardown" src="https://cdn.mos.cms.futurecdn.net/8JDWm67puYCB7ttSJg9sbi-1920-80.png" mos="" align="middle" fullscreen="" width="1312" height="733" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: iFixit)</span></figcaption></figure><p>Other notable repairability wins include a USB-C port that's much easier to access and remove, and a relatively flat design that makes a lot of the key components easily accessible during the assembly process. </p><p>Removing the foldable display is also much less painful than anticipated. The trim around the screen peels off nicely and easily, in contrast to the Z Fold 8, which had a trim that was ruined during disassembly. Sadly, removing the screen itself is more of a struggle — requiring a mix of heat and force to peel away. No wonder an AppleCare-free replacement costs $999.</p><p>Overall, this is not iFixit's first choice for those looking to have an easily replaceable smartphone. However, it is the most repairable foldable the team has tested, and that's all the more impressive considering this is a first-generation product. But that distinction is a relative one, with the iPhone Duo still getting a provisional repairability score of five out of ten.</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/iphone-duo-vs-samsung-galaxy-z-fold-8">iPhone Duo vs. Samsung Galaxy Z Fold 8: Which foldable is the best?</a></li><li><a href="https://www.tomsguide.com/phones/iphones/i-put-the-iphone-duo-and-galaxy-fold-8-through-a-thermal-torture-test-heres-the-winner">I put the iPhone Duo and Galaxy Fold 8 through a thermal torture test — here's the winner</a></li><li><a href="https://www.tomsguide.com/phones/iphones/after-spending-three-months-testing-ios-27-these-5-features-are-my-absolute-favorite">After spending three months testing iOS 27, these 5 features are my absolute favorite</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/ifixit-teardown-reveals-key-details-about-iphone-duo-design-durability-and-could-explain-why-crackgate-is-happening-what-we-know</link>
                                                                            <description>
                            <![CDATA[ The iPhone Duo still has some hidden secrets, but this iFixit teardown shines a light on more of them. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">9BBiWkhGwqACUKy59L8b3o</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/nuUZi8yxFUeHMStiDLr9cj-1920-80.png" type="image/png" length="0"></enclosure>
                                                                        <pubDate>Mon, 26 Oct 2026 13:33:24 +0000</pubDate>                                                                                                                                <updated>Mon, 26 Oct 2026 13:53:26 +0000</updated>
                                                                                                                                            <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f-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/nuUZi8yxFUeHMStiDLr9cj-1920-80.png">
                                                            <media:credit><![CDATA[iFixit]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[ifixit iphone duo teardown]]></media:description>                                                            <media:text><![CDATA[ifixit iphone duo teardown]]></media:text>
                                <media:title type="plain"><![CDATA[ifixit iphone duo teardown]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/nuUZi8yxFUeHMStiDLr9cj-1920-80.png" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The<a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-review"> iPhone Duo</a> has now been released, and it looks like early adopters are having to deal with some teething problems. As lucky as they might have felt to snag the sought-after foldable on release day, a <a href="https://www.tomsguide.com/phones/iphones/the-iphone-duo-just-came-out-and-owners-are-already-seeing-screens-crack-at-the-hinge">bunch of people have reported their screens are cracking</a> — a problem now dubbed "crackgate."</p><p>As it always does with new phones, <a href="https://www.ifixit.com/News/119895/iphone-duo-teardown" target="_blank">iFixit got hold of the iPhone Duo</a> and took it apart to see how everything works — and whether it's actually repairable or not. That teardown seems to have been very enlightening, revealing some secrets of the hidden hinge, factors that may be behind crackgate, and just how well that phone stands up to dust.</p><p>It's also the most repairable foldable phone to date, though other foldable phone makers haven't left the bar particularly high.</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/WOVIjFnivJA" allowfullscreen></iframe></div></div><h2 id="secrets-of-the-hidden-crease">Secrets of the hidden 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:1930px;"><p class="vanilla-image-block" style="padding-top:57.25%;"><img id="WzzxEgj7fuN37PRLyg9CGj" name="Screenshot 2026-10-26 115355" alt="ifixit iphone duo teardown" src="https://cdn.mos.cms.futurecdn.net/WzzxEgj7fuN37PRLyg9CGj-1920-80.png" mos="" align="middle" fullscreen="" width="1930" height="1105" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: iFixit)</span></figcaption></figure><p>The Duo's nano-texture coating is easily removed, and while replaceable, it is a multi-part process. In the meantime, the Duo's display is far more vulnerable to scratches and other damage. Removing it also removes the light-scattering effect, which makes working in bright light much more difficult and means any imperfections in the screen are easier to see — including the crease.</p><p>Under the microscope, iFixit can see the textured layer that diffuses incoming light, and looking further shows the pixel layout in the screen itself. Curiously, Apple has adopted a unique (and patented) pixel layout with a mix of round and ovular pixels. Apple says that this is meant to add variation to the pattern, but doesn't say what the benefit is.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1962px;"><p class="vanilla-image-block" style="padding-top:55.10%;"><img id="T6i44hjNvwTcgh92v2nxpj" name="Screenshot 2026-10-26 115329" alt="ifixit iphone duo teardown" src="https://cdn.mos.cms.futurecdn.net/T6i44hjNvwTcgh92v2nxpj-1920-80.png" mos="" align="middle" fullscreen="" width="1962" height="1081" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: iFixit)</span></figcaption></figure><p>iFixit speculates this could be another factor that helps to hide the crease by managing reflections deeper in the display and ensuring that light is less likely to make a distracting pattern. Replacing the nano-texture layer doesn't require a full screen replacement, and will set you back $49 without AppleCare+ — or $19 with it.</p><p>Some of the magic happens in the hinge, with Apple opting for the same "waterdrop" hinge design utilized by several smartphones over the past several years. This utilizes a controlled bend of the screen inside the hinge, essentially meaning the screen is half open. This reduces pressure on the fold and minimizes the amount of creasing that occurs in the process.</p><p>Apple's version uses a series of mechanical joints that actively prevent the hinge from closing too far — ensuring the screen doesn't fold more than it should.</p><h2 id="a-dusty-duo">A dusty Duo?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1969px;"><p class="vanilla-image-block" style="padding-top:55.66%;"><img id="phhi9ndGMUdgvMFdyqgW8j" name="Screenshot 2026-10-26 115316" alt="ifixit iphone duo teardown" src="https://cdn.mos.cms.futurecdn.net/phhi9ndGMUdgvMFdyqgW8j-1920-80.png" mos="" align="middle" fullscreen="" width="1969" height="1096" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: iFixit)</span></figcaption></figure><p>Using fluorescent dust, iFixit put the iPhone Duo's dust resistance rating to the test. At first, the sheer amount of dust around the outside of the phone shows that there is a pretty good seal on the phone — though the audible crunching around the hinge is a horrible thing to hear. But the phone is still foldable, which is in direct contrast to the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win">Galaxy Z Fold 8's</a> hinge, which was rendered basically unusable.</p><p>The dust all seems to have been stopped by the phone's adhesive layer, which means the internals are protected against stray particles getting inside. The same is true of the bezel, but from the looks of things, none of it managed to reach the fragile foldable screen and other electronics.</p><p>But the hinge is another matter, and the dust did make its way inside the mechanism — leading to that awful crunching sound. It's less dust than the Z Fold 8 and <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-fold-review">Pixel 11 Pro Fold</a>, but it proves that despite the IP68 rating, the iPhone Duo's hinge is not actually sealed against foreign particles. So bear that in mind.</p><p>iFixit notes that because of this, all foldable phones need to focus on both increased hinge protection and a more practical way to fix any damage. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Xk87ae"></div>                            </div>                            <script src="https://kwizly.com/embed/Xk87ae.js" async></script><h2 id="one-possible-explanation-for-crackgate">One possible explanation for Crackgate</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1983px;"><p class="vanilla-image-block" style="padding-top:55.67%;"><img id="KitaPPsPhJJGE4VgNPf7oi" name="Screenshot 2026-10-26 115547" alt="ifixit iphone duo teardown" src="https://cdn.mos.cms.futurecdn.net/KitaPPsPhJJGE4VgNPf7oi-1920-80.png" mos="" align="middle" fullscreen="" width="1983" height="1104" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: iFixit)</span></figcaption></figure><p>If you've been paying attention to social media this weekend, you may have noticed that some iPhone Duo users have started reporting damage to their screens. Dubbed "crackgate," it looks as though the damage is happening in the same place for everyone, with a white line down the center of the screen and across the right side. </p><p>Users often describe folding or unfolding the Duo, followed by an audible crunch. Teardowns reveal that the hinge is shaped a little differently in this spot, but it's also an area where a lot of different parts come together. Those include a protruding leaf, the accordion-shaped electrical cable that connects the two sides of the phone, and the edge of the battery on the right side of the phone is close by.</p><p>One possible answer given by iFixit is that the center support bar doesn't fall far enough when the screen is folding, which causes the display to make contact. This concentrated stress could be what's causing the screen to break.</p><h2 id="how-repairable-is-it">How repairable is 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:1974px;"><p class="vanilla-image-block" style="padding-top:56.13%;"><img id="TTYAXTyjz6PohSNoDBRoej" name="Screenshot 2026-10-26 115430" alt="ifixit iphone duo teardown" src="https://cdn.mos.cms.futurecdn.net/TTYAXTyjz6PohSNoDBRoej-1920-80.png" mos="" align="middle" fullscreen="" width="1974" height="1108" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: iFixit)</span></figcaption></figure><p>The first thing noticed during the actual teardown was that the iPhone Duo's cover screen comes off a lot more easily than most foldable phones, which is a slight win for Apple. Though iFixit immediately came across two hidden screws, which is really counterproductive. The team also noted that the outer screen is pretty robust, and the plastic bezel that caused a bunch of issues with the iPhone 18 Pro teardown stayed intact. Which is helpful considering pretty much every repair is going into the phone down this route.</p><p>The batteries are held in place by<a href="https://www.tomsguide.com/phones/iphones/iphone-16-could-be-the-most-repairable-iphone-ever-heres-how"> Apple's ionic adhesive</a>, which detaches when a current passes through it. The difference here is that there are two separate batteries, which requires this step to be done twice. The batteries also live in different areas, with one behind the cover display and another behind the back glass — which adds a little complexity to the process. However, iFixit comments that it is the best battery removal they've experienced on a foldable.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1312px;"><p class="vanilla-image-block" style="padding-top:55.87%;"><img id="8JDWm67puYCB7ttSJg9sbi" name="Screenshot 2026-10-26 115631" alt="ifixit iphone duo teardown" src="https://cdn.mos.cms.futurecdn.net/8JDWm67puYCB7ttSJg9sbi-1920-80.png" mos="" align="middle" fullscreen="" width="1312" height="733" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: iFixit)</span></figcaption></figure><p>Other notable repairability wins include a USB-C port that's much easier to access and remove, and a relatively flat design that makes a lot of the key components easily accessible during the assembly process. </p><p>Removing the foldable display is also much less painful than anticipated. The trim around the screen peels off nicely and easily, in contrast to the Z Fold 8, which had a trim that was ruined during disassembly. Sadly, removing the screen itself is more of a struggle — requiring a mix of heat and force to peel away. No wonder an AppleCare-free replacement costs $999.</p><p>Overall, this is not iFixit's first choice for those looking to have an easily replaceable smartphone. However, it is the most repairable foldable the team has tested, and that's all the more impressive considering this is a first-generation product. But that distinction is a relative one, with the iPhone Duo still getting a provisional repairability score of five out of ten.</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/iphone-duo-vs-samsung-galaxy-z-fold-8">iPhone Duo vs. Samsung Galaxy Z Fold 8: Which foldable is the best?</a></li><li><a href="https://www.tomsguide.com/phones/iphones/i-put-the-iphone-duo-and-galaxy-fold-8-through-a-thermal-torture-test-heres-the-winner">I put the iPhone Duo and Galaxy Fold 8 through a thermal torture test — here's the winner</a></li><li><a href="https://www.tomsguide.com/phones/iphones/after-spending-three-months-testing-ios-27-these-5-features-are-my-absolute-favorite">After spending three months testing iOS 27, these 5 features are my absolute favorite</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ We predicted the OLED MacBook Pro's $500 price hike — here's what the leaks say and why MacBook Air buyers may miss out ]]></title>
                                                                                                <dc:content><![CDATA[ <p>If you were hoping Apple’s leap into OLED touchscreens was going to come without a price rise, it looks like Wednesday is going to be a rude awakening.</p><p>Over the weekend, <a href="https://www.bloomberg.com/news/newsletters/2026-10-25/apple-to-unveil-touch-screen-macbook-pro-executive-promotions-in-box-checker" target="_blank">Bloomberg’s Mark Gurman</a> dumped the final puzzle pieces for Apple’s “Pro and Tell” event. The Cupertino crew are indeed launching <a href="https://www.tomsguide.com/computing/macbooks/macbook-pro-oled-all-the-expected-features">14- and 16-inch OLED touchscreen MacBook Pros</a> with Dynamic Islands to boot, but starting prices could be up to $500 higher than current models.</p><p>This confirms exactly what we reported last week, when <a href="https://www.tomsguide.com/computing/macbooks/exclusive-apples-oled-macbook-pro-may-face-a-usd300-to-usd500-price-hike-to-protect-their-profits-from-ramageddon">Counterpoint Research told us</a> that the combo of tandem OLED tech, touch features and skyrocketing memory costs (<a href="https://www.tomsguide.com/computing/ram-price-crisis-2026-everything-you-need-to-know">RAMageddon</a>) would trigger a $300 to $500 increase. Now, the leaks are backing it up.</p><p>But before you panic or grab your wallet, you need to understand the decision Apple will put on you in a couple of days.</p><h2 id="m5-brute-force-vs-m6-efficiency">M5 brute force vs M6 efficiency</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="5jsbAXhogUzmnuzcd5jTCR" name="MacBook Pro 16-inch M5 Pro review-LIST" alt="MacBook Pro 16-inch M5 Pro on a desk" src="https://cdn.mos.cms.futurecdn.net/5jsbAXhogUzmnuzcd5jTCR-1920-80.jpg" mos="" align="middle" fullscreen="" width="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 most confusing part of Wednesday’s event won’t be the price; it’ll be the silicon.</p><p>Apple is reportedly splitting the lineup. The ultra-premium MacBook Pr-OLEDs are sticking with the M5 Pro and M5 Max chips — while the standard 14-inch Pro and new iMac will pack the brand-new M6, but not have OLED or touch.</p><div ><table><thead><tr><th class="firstcol " ><p>Chip</p></th><th  ><p>Geekbench single/multi-core</p></th><th  ><p>Blackmagic Disk Speed Text (MBps write/read)</p></th><th  ><p>Handbrake (transcode 4K movie to 1080p mm:ss)</p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>M6 (Mac mini)</strong></p></td><td  ><p>4708 / 21405</p></td><td  ><p>6577 / 6372</p></td><td  ><p>02:46</p></td></tr><tr><td class="firstcol " ><p><strong>M5 Pro (MacBook Pro)</strong></p></td><td  ><p>4306 / 28586</p></td><td  ><p>8989 / 12711</p></td><td  ><p>01:45</p></td></tr><tr><td class="firstcol " ><p><strong>M5 Max (MacBook Pro)</strong></p></td><td  ><p>4338 / 29430</p></td><td  ><p>12857 / 12870</p></td><td  ><p>01:55</p></td></tr></tbody></table></div><p>It looks like a paradox, but it is actually a highly specific use-case decision. </p><p>The extra raw grunt of the Pro and Max chips really makes this the choice for creative pros who want that far better display (and Apple Pencil support…please, Apple), with the local AI chops to really challenge Nvidia’s RTX Spark.</p><h2 id="the-oled-waiting-room-is-feeling-airy">The OLED waiting room is feeling airy</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4322px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="T9AaHufp6EawHLeav5tnbG" name="MacBook Air 15-inch M5 review-2" alt="MacBook Air 15-inch M5 on a desk" src="https://cdn.mos.cms.futurecdn.net/T9AaHufp6EawHLeav5tnbG-1920-80.jpg" mos="" align="middle" fullscreen="" width="4322" height="2431" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>If you’re looking at that potential $3,000 OLED price tag and thinking, “I’ll just wait for the OLED MacBook Air,” you’ll be waiting a long time.</p><p>This is another part of Gurman’s report. Apple is indeed currently testing OLED panels for future MacBook Air and iMac models, but those releases are “some way off.”</p><p>MacBook Airs almost always refresh in the spring of each year, and it’s looking like the 2027 update will stick with the standard LCD display. You’ll have to pay the Pro premium for perfectly inky blacks and touchscreen gestures. There is no budget backdoor.</p><h2 id="what-kind-of-mac-user-are-you">What kind of Mac user are you?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="SdeLwCg7jxNHkEX2q8tqia" name="MacBook Pro M5--02" alt="MacBook Pro M5" src="https://cdn.mos.cms.futurecdn.net/SdeLwCg7jxNHkEX2q8tqia-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Wednesday is going to completely reset the Mac buying landscape. It used to be simple: pick your size, your M chip, and get largely the same excellent experience.</p><p>Now, it’s becoming a little more confusing, so let me help. If your daily workflow involves heavy video editing, digital art, or you have the budget to be an early adopter of macOS touch gestures, the OLED M5 Pro/Max is your dream machine. The multi-core power is there, and the screen will be unmatched.</p><p>But if you are a coder, writer or everyday power user who just wants future-proof efficiency without paying a $500 early-adopter display tax? Ignore the touchscreen hype. Grab the entry-level M6 MacBook Pro, enjoy the single-core speed bump, and keep that extra cash in your pocket.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/computing/macos/i-strapped-a-touchscreen-to-my-macbook-pro-to-see-if-macos-is-ready-for-next-week-3-things-that-need-fixing-quickly">I strapped a touchscreen to my MacBook Pro to see if macOS is ready for next week — 3 things that need fixing quickly</a></li><li><a href="https://www.tomsguide.com/ai/ditch-the-data-center-i-fired-my-cloud-chatbot-and-built-a-free-local-ai-agent-to-run-on-my-pc-and-you-can-too">Ditch the data center: I fired my cloud chatbot and built a free local AI agent to run on my PC — and you can too</a></li><li><a href="https://www.tomsguide.com/computing/online-security/babe-wake-up-the-internet-is-collapsing-two-massive-flaws-just-broke-the-web-and-the-data-of-billions-is-in-the-crossfire">‘Babe, wake up, the internet is collapsing’: Two massive flaws just broke the web, and the data of billions is in the crossfire</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/macbooks/we-predicted-the-oled-macbook-pros-usd500-price-hike-heres-what-the-leaks-say-and-why-macbook-air-buyers-may-miss-out</link>
                                                                            <description>
                            <![CDATA[ Apple’s OLED MacBook Pro may cost $500 more at ‘Pro and Tell’. From M5 touch vs. M6 power to delayed OLED MacBook Airs, here is the buying guide. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">2eQVttVaGaRPnBSCfqdMuH</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/sjLiTCm3et5qLAnkj5NwXU-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 26 Oct 2026 11:30:06 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[MacBooks]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Laptops]]></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/sjLiTCm3et5qLAnkj5NwXU-1920-80.jpg">
                                                            <media:credit><![CDATA[DavidGaming HDR (reddit)]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[M3 MacBook Pro with Dynamic Island]]></media:description>                                                            <media:text><![CDATA[M3 MacBook Pro with Dynamic Island]]></media:text>
                                <media:title type="plain"><![CDATA[M3 MacBook Pro with Dynamic Island]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/sjLiTCm3et5qLAnkj5NwXU-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>If you were hoping Apple’s leap into OLED touchscreens was going to come without a price rise, it looks like Wednesday is going to be a rude awakening.</p><p>Over the weekend, <a href="https://www.bloomberg.com/news/newsletters/2026-10-25/apple-to-unveil-touch-screen-macbook-pro-executive-promotions-in-box-checker" target="_blank">Bloomberg’s Mark Gurman</a> dumped the final puzzle pieces for Apple’s “Pro and Tell” event. The Cupertino crew are indeed launching <a href="https://www.tomsguide.com/computing/macbooks/macbook-pro-oled-all-the-expected-features">14- and 16-inch OLED touchscreen MacBook Pros</a> with Dynamic Islands to boot, but starting prices could be up to $500 higher than current models.</p><p>This confirms exactly what we reported last week, when <a href="https://www.tomsguide.com/computing/macbooks/exclusive-apples-oled-macbook-pro-may-face-a-usd300-to-usd500-price-hike-to-protect-their-profits-from-ramageddon">Counterpoint Research told us</a> that the combo of tandem OLED tech, touch features and skyrocketing memory costs (<a href="https://www.tomsguide.com/computing/ram-price-crisis-2026-everything-you-need-to-know">RAMageddon</a>) would trigger a $300 to $500 increase. Now, the leaks are backing it up.</p><p>But before you panic or grab your wallet, you need to understand the decision Apple will put on you in a couple of days.</p><h2 id="m5-brute-force-vs-m6-efficiency">M5 brute force vs M6 efficiency</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="5jsbAXhogUzmnuzcd5jTCR" name="MacBook Pro 16-inch M5 Pro review-LIST" alt="MacBook Pro 16-inch M5 Pro on a desk" src="https://cdn.mos.cms.futurecdn.net/5jsbAXhogUzmnuzcd5jTCR-1920-80.jpg" mos="" align="middle" fullscreen="" width="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 most confusing part of Wednesday’s event won’t be the price; it’ll be the silicon.</p><p>Apple is reportedly splitting the lineup. The ultra-premium MacBook Pr-OLEDs are sticking with the M5 Pro and M5 Max chips — while the standard 14-inch Pro and new iMac will pack the brand-new M6, but not have OLED or touch.</p><div ><table><thead><tr><th class="firstcol " ><p>Chip</p></th><th  ><p>Geekbench single/multi-core</p></th><th  ><p>Blackmagic Disk Speed Text (MBps write/read)</p></th><th  ><p>Handbrake (transcode 4K movie to 1080p mm:ss)</p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>M6 (Mac mini)</strong></p></td><td  ><p>4708 / 21405</p></td><td  ><p>6577 / 6372</p></td><td  ><p>02:46</p></td></tr><tr><td class="firstcol " ><p><strong>M5 Pro (MacBook Pro)</strong></p></td><td  ><p>4306 / 28586</p></td><td  ><p>8989 / 12711</p></td><td  ><p>01:45</p></td></tr><tr><td class="firstcol " ><p><strong>M5 Max (MacBook Pro)</strong></p></td><td  ><p>4338 / 29430</p></td><td  ><p>12857 / 12870</p></td><td  ><p>01:55</p></td></tr></tbody></table></div><p>It looks like a paradox, but it is actually a highly specific use-case decision. </p><p>The extra raw grunt of the Pro and Max chips really makes this the choice for creative pros who want that far better display (and Apple Pencil support…please, Apple), with the local AI chops to really challenge Nvidia’s RTX Spark.</p><h2 id="the-oled-waiting-room-is-feeling-airy">The OLED waiting room is feeling airy</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4322px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="T9AaHufp6EawHLeav5tnbG" name="MacBook Air 15-inch M5 review-2" alt="MacBook Air 15-inch M5 on a desk" src="https://cdn.mos.cms.futurecdn.net/T9AaHufp6EawHLeav5tnbG-1920-80.jpg" mos="" align="middle" fullscreen="" width="4322" height="2431" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>If you’re looking at that potential $3,000 OLED price tag and thinking, “I’ll just wait for the OLED MacBook Air,” you’ll be waiting a long time.</p><p>This is another part of Gurman’s report. Apple is indeed currently testing OLED panels for future MacBook Air and iMac models, but those releases are “some way off.”</p><p>MacBook Airs almost always refresh in the spring of each year, and it’s looking like the 2027 update will stick with the standard LCD display. You’ll have to pay the Pro premium for perfectly inky blacks and touchscreen gestures. There is no budget backdoor.</p><h2 id="what-kind-of-mac-user-are-you">What kind of Mac user are you?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="SdeLwCg7jxNHkEX2q8tqia" name="MacBook Pro M5--02" alt="MacBook Pro M5" src="https://cdn.mos.cms.futurecdn.net/SdeLwCg7jxNHkEX2q8tqia-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Wednesday is going to completely reset the Mac buying landscape. It used to be simple: pick your size, your M chip, and get largely the same excellent experience.</p><p>Now, it’s becoming a little more confusing, so let me help. If your daily workflow involves heavy video editing, digital art, or you have the budget to be an early adopter of macOS touch gestures, the OLED M5 Pro/Max is your dream machine. The multi-core power is there, and the screen will be unmatched.</p><p>But if you are a coder, writer or everyday power user who just wants future-proof efficiency without paying a $500 early-adopter display tax? Ignore the touchscreen hype. Grab the entry-level M6 MacBook Pro, enjoy the single-core speed bump, and keep that extra cash in your pocket.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/computing/macos/i-strapped-a-touchscreen-to-my-macbook-pro-to-see-if-macos-is-ready-for-next-week-3-things-that-need-fixing-quickly">I strapped a touchscreen to my MacBook Pro to see if macOS is ready for next week — 3 things that need fixing quickly</a></li><li><a href="https://www.tomsguide.com/ai/ditch-the-data-center-i-fired-my-cloud-chatbot-and-built-a-free-local-ai-agent-to-run-on-my-pc-and-you-can-too">Ditch the data center: I fired my cloud chatbot and built a free local AI agent to run on my PC — and you can too</a></li><li><a href="https://www.tomsguide.com/computing/online-security/babe-wake-up-the-internet-is-collapsing-two-massive-flaws-just-broke-the-web-and-the-data-of-billions-is-in-the-crossfire">‘Babe, wake up, the internet is collapsing’: Two massive flaws just broke the web, and the data of billions is in the crossfire</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I strapped a touchscreen to my MacBook Pro to see if macOS is ready for next week — 3 things that need fixing quickly ]]></title>
                                                                                                <dc:content><![CDATA[ <p>If the tidal wave of leaks leading up to <a href="https://www.tomsguide.com/computing/macbooks/apple-pro-and-tell-event-rumors-oled-macbooks-m6-chips-and-why-you-shouldnt-buy-anything-today">Apple’s ‘Pro and Tell’ event</a> this week are accurate, we are days away from the biggest paradigm shift in Mac history: the OLED touchscreen MacBook Pro.</p><p>For a decade, the Cupertino crew swore they would never put a touchscreen on a Mac. They told us the ergonomics were wrong. They told us to buy an iPad. But the PC industry moved on, OLED got cheaper, and now Apple is finally caving.</p><p>But throwing a touch panel on a laptop is only half the battle; the operating system actually has to know what to do with your fingers. Rather than wait for Apple to take my money, I got impatient. Now with macOS2 27 installed, I went back and hooked the <a href="https://intricuit.com/" target="_blank" rel="nofollow">Intricuit Magic Screen</a> touch layer to my current <a href="https://www.tomsguide.com/computing/macbooks/macbook-pro-m5-review">M5 MacBook Pro</a>.</p><p>And after aggressively poking my display to see what a touch-first Mac actually feels like, it’s clear that macOS in its current form is suffering an identity crisis. Apple has a lot of software duct tape to apply before next week.</p><h2 id="the-finger-vs-the-mouse">The finger vs. the mouse</h2><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="NbNxwvxpi4H6wWZMgPLxvV" name="Intricuit Magic Screen" alt="Intricuit Magic Screen" src="https://cdn.mos.cms.futurecdn.net/NbNxwvxpi4H6wWZMgPLxvV-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 first 10 minutes of poking my MacBook Pro felt so familiar to other touch-enabled laptops like <a href="https://www.tomsguide.com/computing/laptops/microsoft-surface-laptop-ultra-rtx-spark-review">the Surface Laptop Ultra</a> I just reviewed. Scrolling through articles with a flick of the wrist, pinching to zoom and tapping to pause on YouTube videos feels instantly natural.</p><p>But then, you actually try to get some work done.</p><p>Right now, macOS treats your finger exactly like a mouse cursor. There seems to be no native touch intelligence layer bridging the gap between your physical digit and the digital UI. That’s not a bad thing when it comes to simple tapping and scrolling, but the preciseness of a mouse cursor vs the blunt instrument of a finger is an issue.</p><p>When you try to hit the tiny, classic “traffic light” buttons in the top corner of the window, you’re playing a frustrating game of digital darts. And there isn’t any real gesture control built-in here to make the app bar appear or snap windows together.</p><h2 id="what-macos-desperately-needs">What macOS desperately needs</h2><p>Now, I know that chances are if Apple’s going to announce an OLED touchscreen MacBook Pro next week, it's already done a lot of the software tweaks in secret. But if I can propose <strong>three things that would make it great</strong>:</p><section class="howto-block">                    <h3>Aggressive icon scaling (or outright replacements)</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/5RDC9iRpUqSVtj3UCQawvV.jpg"                                        alt="Intricuit Magic Screen"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/5RDC9iRpUqSVtj3UCQawvV.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p>macOS needs a dynamic touch state. The moment the OS detects a finger press instead of a trackpad input, the hitboxes for critical UI elements need to adapt. </p><p>Either that, or Apple needs to introduce sweeping, iPad-style swipe-to-close or switch app mechanics that bypass the tiny button inputs entirely.</p></p>                </section><section class="howto-block">                    <h3>Actual multitouch gestures (and Apple Pencil support)</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/6ZeXeLtY49CjKmjhuTrxXJ.jpg"                                        alt="Intricuit Magic Screen"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/6ZeXeLtY49CjKmjhuTrxXJ.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p>We see these with the Magic Trackpad or on the MacBook’s trackpad itself, which will probably move to the screen. Four-finger swipes to switch desktops, the five-finger pinch to pull up the Launchpad. </p><p>If Apple wants this to be a true hybrid machine, the display needs to recognize that exact same multitouch gesture library. And for the creatives out there, Apple Pencil support would be massive.</p></p>                </section><section class="howto-block">                    <h3>Learn from the iPhone Duo</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/oty2YzwQZNhensgcK2MQEC.jpg"                                        alt="iPhone Duo"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/oty2YzwQZNhensgcK2MQEC.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>Yes, there may be much to learn from the iPad in terms of gesture control, but the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-review">iPhone Duo</a> actually brings a lot to the table here. </p><p>Namely, window snapping in macOS is easy enough to do with a trackpad, but the ability to physically drag apps together to create cohesive, split-screen “sessions” would be huge. Imagine that, but on the level of being able to stack more than two apps into a grid to work around!</p></p>                </section><h2 id="hardware-over-software">Hardware over 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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="7qith5nXtwL8kfwWPpBv3Z" name="Intricuit Magic Screen" alt="Intricuit Magic Screen" src="https://cdn.mos.cms.futurecdn.net/7qith5nXtwL8kfwWPpBv3Z-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>Using a touchscreen Mac today proves that the hardware experience is undeniably brilliant, but while there are some touch-friendly features on the trackpad, the OS software at the moment is actively fighting you.</p><p>If Apple unveils this MacBook Pro next week, it’s likely to be paired with a touch-optimized macOS update that borrows heavily from the iPhone Duo and iPadOS. And if they do that, they won’t just be catching up to Windows laptops; they will redefine how you interact with your computer.</p><p>Because ultimately, Windows 11 isn’t really touch friendly either, give or take some buttons. It’s a part of the laptop experience that has gone ignored for a while. And I’m quietly excited for Apple to change this.</p><p>We will find out on Wednesday. Keep your screen wipes ready.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/computing/macbooks/im-bored-of-waiting-for-a-touchscreen-macbook-so-i-made-one-myself-with-this-snap-on-magic-screen">I built a touchscreen MacBook Pro using this snap-on accessory, and I'm baffled why Apple hasn't made its own for years</a></li><li><a href="https://www.tomsguide.com/computing/macbooks/exclusive-apples-oled-macbook-pro-may-face-a-usd300-to-usd500-price-hike-to-protect-their-profits-from-ramageddon">Exclusive: Apple's OLED MacBook Pro may face a '$300 to $500' price hike to 'protect their profits' from RAMageddon</a></li><li><a href="https://www.tomsguide.com/computing/online-security/babe-wake-up-the-internet-is-collapsing-two-massive-flaws-just-broke-the-web-and-the-data-of-billions-is-in-the-crossfire">‘Babe, wake up, the internet is collapsing’: Two massive flaws just broke the web, and the data of billions is in the crossfire</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/macos/i-strapped-a-touchscreen-to-my-macbook-pro-to-see-if-macos-is-ready-for-next-week-3-things-that-need-fixing-quickly</link>
                                                                            <description>
                            <![CDATA[ I strapped a touch display to a MacBook Pro ahead of Apple’s ‘Pro and Tell’ event. From tiny hitboxes to gesture controls, here are 3 flaws macOS must fix. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">JScmhrVvQVzt32XMrtaEp5</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/SHboe3D9zCLopdZArrq6wV-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 26 Oct 2026 05:45:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[macOS]]></category>
                                                    <category><![CDATA[MacBooks]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Software]]></category>
                                                    <category><![CDATA[Operating Systems]]></category>
                                                    <category><![CDATA[Laptops]]></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/SHboe3D9zCLopdZArrq6wV-1920-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Intricuit Magic Screen]]></media:description>                                                            <media:text><![CDATA[Intricuit Magic Screen]]></media:text>
                                <media:title type="plain"><![CDATA[Intricuit Magic Screen]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/SHboe3D9zCLopdZArrq6wV-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>If the tidal wave of leaks leading up to <a href="https://www.tomsguide.com/computing/macbooks/apple-pro-and-tell-event-rumors-oled-macbooks-m6-chips-and-why-you-shouldnt-buy-anything-today">Apple’s ‘Pro and Tell’ event</a> this week are accurate, we are days away from the biggest paradigm shift in Mac history: the OLED touchscreen MacBook Pro.</p><p>For a decade, the Cupertino crew swore they would never put a touchscreen on a Mac. They told us the ergonomics were wrong. They told us to buy an iPad. But the PC industry moved on, OLED got cheaper, and now Apple is finally caving.</p><p>But throwing a touch panel on a laptop is only half the battle; the operating system actually has to know what to do with your fingers. Rather than wait for Apple to take my money, I got impatient. Now with macOS2 27 installed, I went back and hooked the <a href="https://intricuit.com/" target="_blank" rel="nofollow">Intricuit Magic Screen</a> touch layer to my current <a href="https://www.tomsguide.com/computing/macbooks/macbook-pro-m5-review">M5 MacBook Pro</a>.</p><p>And after aggressively poking my display to see what a touch-first Mac actually feels like, it’s clear that macOS in its current form is suffering an identity crisis. Apple has a lot of software duct tape to apply before next week.</p><h2 id="the-finger-vs-the-mouse">The finger vs. the mouse</h2><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="NbNxwvxpi4H6wWZMgPLxvV" name="Intricuit Magic Screen" alt="Intricuit Magic Screen" src="https://cdn.mos.cms.futurecdn.net/NbNxwvxpi4H6wWZMgPLxvV-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 first 10 minutes of poking my MacBook Pro felt so familiar to other touch-enabled laptops like <a href="https://www.tomsguide.com/computing/laptops/microsoft-surface-laptop-ultra-rtx-spark-review">the Surface Laptop Ultra</a> I just reviewed. Scrolling through articles with a flick of the wrist, pinching to zoom and tapping to pause on YouTube videos feels instantly natural.</p><p>But then, you actually try to get some work done.</p><p>Right now, macOS treats your finger exactly like a mouse cursor. There seems to be no native touch intelligence layer bridging the gap between your physical digit and the digital UI. That’s not a bad thing when it comes to simple tapping and scrolling, but the preciseness of a mouse cursor vs the blunt instrument of a finger is an issue.</p><p>When you try to hit the tiny, classic “traffic light” buttons in the top corner of the window, you’re playing a frustrating game of digital darts. And there isn’t any real gesture control built-in here to make the app bar appear or snap windows together.</p><h2 id="what-macos-desperately-needs">What macOS desperately needs</h2><p>Now, I know that chances are if Apple’s going to announce an OLED touchscreen MacBook Pro next week, it's already done a lot of the software tweaks in secret. But if I can propose <strong>three things that would make it great</strong>:</p><section class="howto-block">                    <h3>Aggressive icon scaling (or outright replacements)</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/5RDC9iRpUqSVtj3UCQawvV.jpg"                                        alt="Intricuit Magic Screen"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/5RDC9iRpUqSVtj3UCQawvV.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p>macOS needs a dynamic touch state. The moment the OS detects a finger press instead of a trackpad input, the hitboxes for critical UI elements need to adapt. </p><p>Either that, or Apple needs to introduce sweeping, iPad-style swipe-to-close or switch app mechanics that bypass the tiny button inputs entirely.</p></p>                </section><section class="howto-block">                    <h3>Actual multitouch gestures (and Apple Pencil support)</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/6ZeXeLtY49CjKmjhuTrxXJ.jpg"                                        alt="Intricuit Magic Screen"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/6ZeXeLtY49CjKmjhuTrxXJ.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p>We see these with the Magic Trackpad or on the MacBook’s trackpad itself, which will probably move to the screen. Four-finger swipes to switch desktops, the five-finger pinch to pull up the Launchpad. </p><p>If Apple wants this to be a true hybrid machine, the display needs to recognize that exact same multitouch gesture library. And for the creatives out there, Apple Pencil support would be massive.</p></p>                </section><section class="howto-block">                    <h3>Learn from the iPhone Duo</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/oty2YzwQZNhensgcK2MQEC.jpg"                                        alt="iPhone Duo"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/oty2YzwQZNhensgcK2MQEC.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>Yes, there may be much to learn from the iPad in terms of gesture control, but the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-review">iPhone Duo</a> actually brings a lot to the table here. </p><p>Namely, window snapping in macOS is easy enough to do with a trackpad, but the ability to physically drag apps together to create cohesive, split-screen “sessions” would be huge. Imagine that, but on the level of being able to stack more than two apps into a grid to work around!</p></p>                </section><h2 id="hardware-over-software">Hardware over 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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="7qith5nXtwL8kfwWPpBv3Z" name="Intricuit Magic Screen" alt="Intricuit Magic Screen" src="https://cdn.mos.cms.futurecdn.net/7qith5nXtwL8kfwWPpBv3Z-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>Using a touchscreen Mac today proves that the hardware experience is undeniably brilliant, but while there are some touch-friendly features on the trackpad, the OS software at the moment is actively fighting you.</p><p>If Apple unveils this MacBook Pro next week, it’s likely to be paired with a touch-optimized macOS update that borrows heavily from the iPhone Duo and iPadOS. And if they do that, they won’t just be catching up to Windows laptops; they will redefine how you interact with your computer.</p><p>Because ultimately, Windows 11 isn’t really touch friendly either, give or take some buttons. It’s a part of the laptop experience that has gone ignored for a while. And I’m quietly excited for Apple to change this.</p><p>We will find out on Wednesday. Keep your screen wipes ready.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/computing/macbooks/im-bored-of-waiting-for-a-touchscreen-macbook-so-i-made-one-myself-with-this-snap-on-magic-screen">I built a touchscreen MacBook Pro using this snap-on accessory, and I'm baffled why Apple hasn't made its own for years</a></li><li><a href="https://www.tomsguide.com/computing/macbooks/exclusive-apples-oled-macbook-pro-may-face-a-usd300-to-usd500-price-hike-to-protect-their-profits-from-ramageddon">Exclusive: Apple's OLED MacBook Pro may face a '$300 to $500' price hike to 'protect their profits' from RAMageddon</a></li><li><a href="https://www.tomsguide.com/computing/online-security/babe-wake-up-the-internet-is-collapsing-two-massive-flaws-just-broke-the-web-and-the-data-of-billions-is-in-the-crossfire">‘Babe, wake up, the internet is collapsing’: Two massive flaws just broke the web, and the data of billions is in the crossfire</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ After spending three months testing iOS 27, these 5 features are my absolute favorite ]]></title>
                                                                                                <dc:content><![CDATA[ <p>I've spent the last 90 days testing every single feature, shortcut, and hidden setting iOS 27 has to offer on my iPhone. Beyond the initial hype, the real test of any new software comes down to what actually improves your daily routine once the novelty wears off. </p><p>From privacy-first security shields to photo fixes and simple keyboard hacks, these are the five standout iOS 27 features. </p><section class="howto-block">                    <h3>1. Generative photo fixes with Reframe and Extend</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/DWkaP5iCxiuWmtzhezpkS6.jpg"                                        alt="How to extend Photos on iPhone in iOS 27"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/DWkaP5iCxiuWmtzhezpkS6.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>This is one feature I’ve come to rely on so much, and it has made all the difference when going through my camera roll. The Photos app includes two tools under the Apple Intelligence edit menu that let you fix shot perspective long after taking the picture. </p><p><strong>Selecting Reframe lets you touch and drag a photo to adjust its camera angle </strong>as if you had physically moved before shooting. If an image is cropped too tightly,<strong> tapping Extend</strong> <strong>and pulling outward on the borders </strong>prompts the software to fill in surrounding textures, lighting, and colors, building out new background detail to fill the frame.</p></p>                </section><section class="howto-block">                    <h3>2. The instant quick-paste keyboard bar</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/yK9YGGUWo3PoPcybdKkx2i.jpg"                                        alt="iOS 27 paste shortcut in Messages on iPhone"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/yK9YGGUWo3PoPcybdKkx2i.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>While major features get all the press, the single tweak I use dozens of times a day is the new dedicated paste shortcut built directly into the keyboard.</p><p>Instead of copying text, tapping a blank field, and waiting for a pop-up menu, <strong>iOS 27 automatically displays a smart suggestion bar above the top row of your keyboard whenever an item is saved to your clipboard</strong>. The bar even shows a live preview thumbnail of copied text, URLs, or photos before you hit send, making copying and pasting more effortless.</p></p>                </section><section class="howto-block">                    <h3>3. Anti-scam protection </h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/w7pKAEkEvLiNX44gxvn4pL.jpg"                                        alt="How to turn on Impersonation Risk Detection in iOS 27"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/w7pKAEkEvLiNX44gxvn4pL.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>To combat social engineering scams, iOS 27 adds a built-in safety net called Impersonation Risk Detection. Operating entirely on your phone to protect your privacy, it checks behavioral patterns and sensor data whenever you attempt sensitive actions. </p><p>Apple never reads your private messages or emails; it simply calculates an on-device risk score so apps can display warnings or request extra verification before you hand over money.</p><p>Because it shares limited event signals with diagnostic servers, Apple leaves this feature off by default. <strong>You can turn it on under Settings, Privacy & Security, Impersonation Risk Detection, and toggling on</strong>. </p><p>Protection signals can take up to 24 hours to fully activate across supported apps, after which you can return to this menu to view a log of recent risk checks.</p></p>                </section><section class="howto-block">                    <h3>4. Video frame extraction </h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/qczP4ySotNTjouxzeiYdHN.jpg"                                        alt="How to save video frame as photo on iPhone in iOS 27"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/qczP4ySotNTjouxzeiYdHN.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide )</div></figure>                    <p><p>Pulling a clean freeze-frame photo out of a video clip used to require a clunky workaround: pausing playback, taking a screenshot, and manually cropping away black bars. On iOS 27, you can extract full-resolution image stills directly from any video file without losing quality. </p><p>While watching a video clip<strong>, simply pause on the exact millisecond you want to keep, tap the three-dot menu icon</strong> in the top-right corner, and <strong>select the option to save the frame as a photo</strong>. Your iPhone exports a crisp, standalone image straight to your main photo library in its original resolution and aspect ratio.</p></p>                </section><section class="howto-block">                    <h3>5. Liquid Glass opacity controls</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/UQ98FkNG6uR8qoVpLAYRAn.jpg"                                        alt="Liquid glass slider in iOS 27 highlighted "                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/UQ98FkNG6uR8qoVpLAYRAn.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>Apple’s translucent Liquid Glass design receives a usability update in iOS 27, replacing fixed system looks with a simple customization slider. While real-time transparency looks clean, it can sometimes make text hard to read over busy wallpapers. </p><p>By heading to <strong>Settings, Appearance, and Liquid Glass</strong>,<strong> you can drag an opacity slider </strong>— pulling it left for transparent menu blurs, or sliding it right to flatten out background reflections for maximum text contrast across notification banners and system menus.</p></p>                </section><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide </span></h3><ul><li><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/your-using-your-iphone-action-button-wrong-how-ios-27-unlocks-three-features-at-once"><strong>You're using your iPhone Action Button wrong — how iOS 27 unlocks three features at once</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/ios-27-has-a-hidden-anti-scam-setting-heres-why-every-iphone-user-should-turn-it-on"><strong>iOS 27 has a hidden anti-scam setting — here’s why every iPhone user should turn it on</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/after-spending-three-months-testing-ios-27-these-5-features-are-my-absolute-favorite</link>
                                                                            <description>
                            <![CDATA[ After 90 days of using iOS 27, these are the standout upgrades. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">dxvAKhuc4QiLrfKZu3SNrJ</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/qCqRx69EK98Yt86UK3KgVA-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 25 Oct 2026 09:30:00 +0000</pubDate>                                                                                                                                <updated>Sun, 25 Oct 2026 12:27:39 +0000</updated>
                                                                                                                                            <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ kaycee.hill@futurenet.com (Kaycee Hill) ]]></author>                    <dc:creator><![CDATA[ Kaycee Hill ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/xHn6RmpEqg87cvtLwrBu9G-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/qCqRx69EK98Yt86UK3KgVA-1920-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iOS 27 logo on iPhone]]></media:description>                                                            <media:text><![CDATA[iOS 27 logo on iPhone]]></media:text>
                                <media:title type="plain"><![CDATA[iOS 27 logo on iPhone]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/qCqRx69EK98Yt86UK3KgVA-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I've spent the last 90 days testing every single feature, shortcut, and hidden setting iOS 27 has to offer on my iPhone. Beyond the initial hype, the real test of any new software comes down to what actually improves your daily routine once the novelty wears off. </p><p>From privacy-first security shields to photo fixes and simple keyboard hacks, these are the five standout iOS 27 features. </p><section class="howto-block">                    <h3>1. Generative photo fixes with Reframe and Extend</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/DWkaP5iCxiuWmtzhezpkS6.jpg"                                        alt="How to extend Photos on iPhone in iOS 27"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/DWkaP5iCxiuWmtzhezpkS6.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>This is one feature I’ve come to rely on so much, and it has made all the difference when going through my camera roll. The Photos app includes two tools under the Apple Intelligence edit menu that let you fix shot perspective long after taking the picture. </p><p><strong>Selecting Reframe lets you touch and drag a photo to adjust its camera angle </strong>as if you had physically moved before shooting. If an image is cropped too tightly,<strong> tapping Extend</strong> <strong>and pulling outward on the borders </strong>prompts the software to fill in surrounding textures, lighting, and colors, building out new background detail to fill the frame.</p></p>                </section><section class="howto-block">                    <h3>2. The instant quick-paste keyboard bar</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/yK9YGGUWo3PoPcybdKkx2i.jpg"                                        alt="iOS 27 paste shortcut in Messages on iPhone"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/yK9YGGUWo3PoPcybdKkx2i.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>While major features get all the press, the single tweak I use dozens of times a day is the new dedicated paste shortcut built directly into the keyboard.</p><p>Instead of copying text, tapping a blank field, and waiting for a pop-up menu, <strong>iOS 27 automatically displays a smart suggestion bar above the top row of your keyboard whenever an item is saved to your clipboard</strong>. The bar even shows a live preview thumbnail of copied text, URLs, or photos before you hit send, making copying and pasting more effortless.</p></p>                </section><section class="howto-block">                    <h3>3. Anti-scam protection </h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/w7pKAEkEvLiNX44gxvn4pL.jpg"                                        alt="How to turn on Impersonation Risk Detection in iOS 27"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/w7pKAEkEvLiNX44gxvn4pL.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>To combat social engineering scams, iOS 27 adds a built-in safety net called Impersonation Risk Detection. Operating entirely on your phone to protect your privacy, it checks behavioral patterns and sensor data whenever you attempt sensitive actions. </p><p>Apple never reads your private messages or emails; it simply calculates an on-device risk score so apps can display warnings or request extra verification before you hand over money.</p><p>Because it shares limited event signals with diagnostic servers, Apple leaves this feature off by default. <strong>You can turn it on under Settings, Privacy & Security, Impersonation Risk Detection, and toggling on</strong>. </p><p>Protection signals can take up to 24 hours to fully activate across supported apps, after which you can return to this menu to view a log of recent risk checks.</p></p>                </section><section class="howto-block">                    <h3>4. Video frame extraction </h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/qczP4ySotNTjouxzeiYdHN.jpg"                                        alt="How to save video frame as photo on iPhone in iOS 27"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/qczP4ySotNTjouxzeiYdHN.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide )</div></figure>                    <p><p>Pulling a clean freeze-frame photo out of a video clip used to require a clunky workaround: pausing playback, taking a screenshot, and manually cropping away black bars. On iOS 27, you can extract full-resolution image stills directly from any video file without losing quality. </p><p>While watching a video clip<strong>, simply pause on the exact millisecond you want to keep, tap the three-dot menu icon</strong> in the top-right corner, and <strong>select the option to save the frame as a photo</strong>. Your iPhone exports a crisp, standalone image straight to your main photo library in its original resolution and aspect ratio.</p></p>                </section><section class="howto-block">                    <h3>5. Liquid Glass opacity controls</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/UQ98FkNG6uR8qoVpLAYRAn.jpg"                                        alt="Liquid glass slider in iOS 27 highlighted "                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/UQ98FkNG6uR8qoVpLAYRAn.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>Apple’s translucent Liquid Glass design receives a usability update in iOS 27, replacing fixed system looks with a simple customization slider. While real-time transparency looks clean, it can sometimes make text hard to read over busy wallpapers. </p><p>By heading to <strong>Settings, Appearance, and Liquid Glass</strong>,<strong> you can drag an opacity slider </strong>— pulling it left for transparent menu blurs, or sliding it right to flatten out background reflections for maximum text contrast across notification banners and system menus.</p></p>                </section><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide </span></h3><ul><li><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/your-using-your-iphone-action-button-wrong-how-ios-27-unlocks-three-features-at-once"><strong>You're using your iPhone Action Button wrong — how iOS 27 unlocks three features at once</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/ios-27-has-a-hidden-anti-scam-setting-heres-why-every-iphone-user-should-turn-it-on"><strong>iOS 27 has a hidden anti-scam setting — here’s why every iPhone user should turn it on</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ The iPhone Duo just came out, and owners are already seeing screens crack at the hinge ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Apple's long-awaited foldable phone, the iPhone Duo, came out this week, and already the cracks are starting to show. And I mean that literally: Some iPhone Duo early adopters are already running into issues that cause the display to crack along the entire hinge. Photos shared on <a href="https://www.reddit.com/r/iPhoneDuo/comments/1xdemgv/here_are_the_several_cases_i_mentioned_earlier/" target="_blank">Reddit</a> show the iPhone Duo's inner display cracking from top to bottom alongside the hinge —  exactly where the device folds — less than 24 hours after launch.  </p><p>It’s still not entirely clear what’s causing the issue, but photos of cracked iPhone Duo displays circulating on social media show a consistent pattern. A large crack appears on the inner display along the hinge, causing a pixel issue that produces a bright white line down the right-hand side of the screen. Early iPhone Duo adopters from the U.S. to China and Australia are seeing the same issue crop up, so it doesn't appear limited to any specific market. </p><p>After about six hours of use, <a href="https://www.reddit.com/r/iPhoneDuo/comments/1xday9i/iphone_duo_screen_cracked_within_6_hours_of/" target="_blank">one Reddit user</a> in Australia said they "heard an audible crack, and the screen broke right along the hinge." They estimated they'd probably opened it less than 20 times so far. At first, Apple offered an express replacement over the phone, with the stipulation that the customer would have to place a hold for the full cost of the handset. Apple also couldn't provide an estimated arrival date for the replacement. Rather than wait, they went to an Apple Store in person, where staff "apologized and replaced it with a brand-new one on the spot," suggesting Apple may have replacement iPhone Duo units available in-store to handle early hardware failures.</p><h2 id="iphone-duo-fails-durability-tests">iPhone Duo fails durability tests</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/5laDGy4INB0" allowfullscreen></iframe></div></div><p>Early durability tests show the inner display's crease at the hinge becomes more visible the more users fold and unfold the device, something they are want to do considering that's kinda the biggest selling point for Apple's $2,000 handset. YouTuber JerryRigEverything put Apple's foldable phone through its paces in his latest durability test video, and the iPhone Duo failed miserably. </p><p>Despite its IP68 rating for dust resistance, dust made its way into the hinge through multiple entry points, overpowering the magnets designed to keep the phone closed. A subsequent bend test resulted in a permanent green line across the inner display, which eventually stopped responding altogether.</p><p>The outer display, protected by Ceramic Shield 2, resisted scratches until level 7 on the Mohs hardness scale. The inner screen, however, showed scratches at level 2 with deeper grooves at a level fingernail. Its matte nano-texture coating did offer one clever trick, making marks seemingly "magically disappear," but that wasn't enough to save the phone from failing the durability test.</p><p>"I've been testing these folding phones since the first generation seven years ago – most do survive," said Zack Nelson. "The iPhone Duo did not."</p><p>With so many people getting their hands on the iPhone Duo this week, some defective units are to be expected. However, it's unclear how widespread the issue is or whether we'll see more reports of hinge failures trickle in over time. Any problems resulting from normal use should be covered by Apple's one-year warranty, and there's also a 14-day window to return your iPhone Duo if need be. </p><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gdR2W4" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/ive-been-testing-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><li><a href="https://www.tomsguide.com/phones/iphones/7-ways-the-iphone-duo-already-beats-the-galaxy-z-fold-8">7 ways the iPhone Duo already beats the Galaxy Z Fold 8</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-zoom-test-do-you-really-need-a-telephoto-lens">iPhone Duo zoom test — do you really need a telephoto lens?</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/the-iphone-duo-just-came-out-and-owners-are-already-seeing-screens-crack-at-the-hinge</link>
                                                                            <description>
                            <![CDATA[ Early iPhone duo adopters are already reporting cracks along the foldable phone's hinges. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">hKw4itQoaAucL7SyRypEkn</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/mvrfSVVZTktfFQmrkz2Cm4-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 24 Oct 2026 19:07:51 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Alyse Stanley ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/BxNnQuBWRHqkv5xWZsjrjc-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Alyse Stanley is a news editor at Tom’s Guide, overseeing weekend coverage and writing about the latest in tech, gaming, and entertainment. Before Tom’s Guide, Alyse worked as an editor for the Washington Post’s sunsetted video game section, Launcher, where she also wrote about indie games you shouldn’t miss, how to tackle your gaming backlog, and all things Nintendo. She previously led Gizmodo’s weekend news desk covering breaking tech news and has written game reviews and features for outlets like Polygon, Unwinnable, and Rock, Paper, Shotgun. A recent Chicago-area transplant born and raised in Virginia, Alyse is a big fan of horror movies, cartoons, and roller skating. She&#039;s also a puzzle fan and can often be found contributing to the NYT Connections coverage on Tom&#039;s Guide &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/mvrfSVVZTktfFQmrkz2Cm4-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPhone Duo]]></media:description>                                                            <media:text><![CDATA[iPhone Duo]]></media:text>
                                <media:title type="plain"><![CDATA[iPhone Duo]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/mvrfSVVZTktfFQmrkz2Cm4-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Apple's long-awaited foldable phone, the iPhone Duo, came out this week, and already the cracks are starting to show. And I mean that literally: Some iPhone Duo early adopters are already running into issues that cause the display to crack along the entire hinge. Photos shared on <a href="https://www.reddit.com/r/iPhoneDuo/comments/1xdemgv/here_are_the_several_cases_i_mentioned_earlier/" target="_blank">Reddit</a> show the iPhone Duo's inner display cracking from top to bottom alongside the hinge —  exactly where the device folds — less than 24 hours after launch.  </p><p>It’s still not entirely clear what’s causing the issue, but photos of cracked iPhone Duo displays circulating on social media show a consistent pattern. A large crack appears on the inner display along the hinge, causing a pixel issue that produces a bright white line down the right-hand side of the screen. Early iPhone Duo adopters from the U.S. to China and Australia are seeing the same issue crop up, so it doesn't appear limited to any specific market. </p><p>After about six hours of use, <a href="https://www.reddit.com/r/iPhoneDuo/comments/1xday9i/iphone_duo_screen_cracked_within_6_hours_of/" target="_blank">one Reddit user</a> in Australia said they "heard an audible crack, and the screen broke right along the hinge." They estimated they'd probably opened it less than 20 times so far. At first, Apple offered an express replacement over the phone, with the stipulation that the customer would have to place a hold for the full cost of the handset. Apple also couldn't provide an estimated arrival date for the replacement. Rather than wait, they went to an Apple Store in person, where staff "apologized and replaced it with a brand-new one on the spot," suggesting Apple may have replacement iPhone Duo units available in-store to handle early hardware failures.</p><h2 id="iphone-duo-fails-durability-tests">iPhone Duo fails durability tests</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/5laDGy4INB0" allowfullscreen></iframe></div></div><p>Early durability tests show the inner display's crease at the hinge becomes more visible the more users fold and unfold the device, something they are want to do considering that's kinda the biggest selling point for Apple's $2,000 handset. YouTuber JerryRigEverything put Apple's foldable phone through its paces in his latest durability test video, and the iPhone Duo failed miserably. </p><p>Despite its IP68 rating for dust resistance, dust made its way into the hinge through multiple entry points, overpowering the magnets designed to keep the phone closed. A subsequent bend test resulted in a permanent green line across the inner display, which eventually stopped responding altogether.</p><p>The outer display, protected by Ceramic Shield 2, resisted scratches until level 7 on the Mohs hardness scale. The inner screen, however, showed scratches at level 2 with deeper grooves at a level fingernail. Its matte nano-texture coating did offer one clever trick, making marks seemingly "magically disappear," but that wasn't enough to save the phone from failing the durability test.</p><p>"I've been testing these folding phones since the first generation seven years ago – most do survive," said Zack Nelson. "The iPhone Duo did not."</p><p>With so many people getting their hands on the iPhone Duo this week, some defective units are to be expected. However, it's unclear how widespread the issue is or whether we'll see more reports of hinge failures trickle in over time. Any problems resulting from normal use should be covered by Apple's one-year warranty, and there's also a 14-day window to return your iPhone Duo if need be. </p><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gdR2W4" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/ive-been-testing-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><li><a href="https://www.tomsguide.com/phones/iphones/7-ways-the-iphone-duo-already-beats-the-galaxy-z-fold-8">7 ways the iPhone Duo already beats the Galaxy Z Fold 8</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-zoom-test-do-you-really-need-a-telephoto-lens">iPhone Duo zoom test — do you really need a telephoto lens?</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ iPhone Duo zoom test — do you really need a telephoto lens? ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-review">iPhone Duo</a> is an impressive phone, but we can't ignore the fact that you do have to <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-trade-offs">accept a bunch of compromises</a>. One of them is the fact that the foldable phone only offers two main cameras, and misses out on the telephoto lens you'll find on the likes of the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-and-pro-max-review">iPhone 18 Pro Max</a>. But does that actually matter in the long run?</p><p>We found that the loss of the telephoto lens was <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">detrimental to the quality of zoomed in shots</a> on 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> compared to the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Z Fold 8 Ultra</a>. That doesn't bode well for the Duo, even if Apple's cameras operate very differently than Samsung's — especially on the software side of things. </p><p>So we decided to do some testing to find out exactly what the deal was, comparing the Duo to both the iPhone 18 Pro Max and the telephoto-less Galaxy Z Fold 8. Here's what we found.</p><h3 class="article-body__section" id="section-2x-magnification"><span>2x magnification</span></h3><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/UvRPFB227mNQENHeGLqGfL-1920-80.jpg" alt="iphone duo zoom test vs galaxy z fold 8 & iphone 18 pro max" /><figcaption>iPhone Duo<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/FkyCp7DGBMNqQmz8kDHAfL-1920-80.jpg" alt="iphone duo zoom test vs galaxy z fold 8 & iphone 18 pro max" /><figcaption>iPhone 18 Pro Max<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/wipVCj3JteBPusbUcn9jfL-1920-80.jpg" alt="iphone duo zoom test vs galaxy z fold 8 & iphone 18 pro max" /><figcaption>Samsung Galaxy Z Fold 8<small role="credit">Future</small></figcaption></figure></figure><p>Like the iPhone 18 Pro Max, the iPhone Duo has something Apple calls "optical quality 2x telephoto" capabilities. This is essentially a form of digital zoom, which takes a photo with the 48MP main camera and crops it down to 12MP — imitating magnification in the process. The main cameras aren't identical, but they are pretty close from a hardware perspective.</p><p>It's no surprise that the photo quality isn't that different at 2x magnification. There is some difference in sharpness and overall quality in the iPhone Duo's favor, as well as some over-exposure on the iPhone 18 Pro Max. But, overall, the two photos are close enough that the majority of people won't see the difference.</p><p>As for Samsung's Galaxy Z Fold 8, we can see a little more sharpness and color saturation at 2x magnification, but overall the amount of differences between the two phones are pretty meager.</p><h3 class="article-body__section" id="section-4x-magnification"><span>4x magnification</span></h3><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/ynpbTMoqbKXG2bv4Ls2sy7-1920-80.jpg" alt="iphone duo zoom test vs iphone 18 pro max and galaxy z fold 8" /><figcaption>iPhone Duo<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/mzAXRyUrz6ktmhJzvuYG38-1920-80.jpg" alt="iphone duo zoom test vs iphone 18 pro max and galaxy z fold 8" /><figcaption>iPhone 18 Pro Max<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/cuEqxNxCTx8YQm83rLxgy7-1920-80.jpg" alt="iphone duo zoom test vs iphone 18 pro max and galaxy z fold 8" /><figcaption>Samsung Galaxy Z Fold 8<small role="credit">Future</small></figcaption></figure></figure><p>The iPhone 18 Pro Max's tetraprism telephoto lens tops out at 4x optical zoom, so it's no surprise that it can take much higher-quality photos at this magnification than the iPhone Duo. That's fairly noticeable at the offset, especially if you look at the wooden pillar in the foreground, but the more you zoom in the more the quality and sharpness degrades on the Duo's photo.</p><p>The Z Fold 8 also has the slight edge when it comes to those same factors. While the iPhone 18 Pro Max still trumps Samsung's telephoto-less foldable, the level of detail captured by the Z Fold 8 at 4x zoom is noticeably better than that of the iPhone Duo.</p><h3 class="article-body__section" id="section-8x-magnification"><span>8x magnification</span></h3><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/atmXvnUg6GaXo6nuJcA6vH-1920-80.jpg" alt="iphone duo zoom test vs iphone 18 pro max and galaxy z fold 8" /><figcaption>iPhone Duo<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/HC9gdMBbkUMGLanFB9auvH-1920-80.jpg" alt="iphone duo zoom test vs iphone 18 pro max and galaxy z fold 8" /><figcaption>iPhone 18 Pro Max<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/6HgGZTMBRqjKtj9EqnGMpH-1920-80.jpg" alt="iphone duo zoom test vs iphone 18 pro max and galaxy z fold 8" /><figcaption>Samsung Galaxy Z Fold 8<small role="credit">Future</small></figcaption></figure></figure><p>If you up the zoom to 8x magnification, you can see that the quality difference is even more pronounced between the two iPhones. No doubt thanks to the 8x "optical quality" camera, the iPhone 18 Pro Max still offers a sharp image that captures a fairly high-quality photo. </p><p>Meanwhile, the iPhone Duo is noticeably degraded, and that's most obvious on the letters, which are starting to turn blurry and pixelated, and even starting to merge together in the case of some of the smallest lettering.</p><p>The Galaxy Z Fold 8 looks a little better than the Duo, though it is noticeably worse quality than the iPhone 18 Pro Max. The lettering and details are getting pixelated, but the details are still sharper than those captured by Apple's foldable. That's especially noticeable on the logo at the rear of the boat, which is sharper and has better-defined shapes than the fuzzier image on the iPhone Duo.</p><h3 class="article-body__section" id="section-10x-magnification"><span>10x magnification</span></h3><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/xeVeqY6pruDBSHKoaY8m3C-1920-80.jpg" alt="iphone duo zoom test vs iphone 18 pro max and galaxy z fold 8" /><figcaption>iPhone Duo<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/4GUzjGCQ36SES2LHVGgAHB-1920-80.jpg" alt="iphone duo zoom test vs iphone 18 pro max and galaxy z fold 8" /><figcaption>iPhone 18 Pro Max<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/qEyGpB2iXP3gsrGSbgv9K9-1920-80.jpg" alt="iphone duo zoom test vs iphone 18 pro max and galaxy z fold 8" /><figcaption>Samsung Galaxy Z Fold 8<small role="credit">Future</small></figcaption></figure></figure><p>It's a very similar story at 10x magnification, and it shows just how well the iPhone 18 Pro Max's "optical quality" zoom is able to perform. The flagship's pseudo-zoom stretches to 16x magnification, and you can't really see any loss of quality at this particular level. Meanwhile, the iPhone Duo looks slightly worse than it did at 8x magnification, with slightly more visible blurring to the finer details on display.</p><p>You can see the quality start to drop on the Galaxy Z Fold 8 as well. Letters are getting fuzzy, details on the logo are even more blurred, and the grain on the wooden post in the foreground is starting to merge together. It still has a slight edge over the iPhone Duo, but it's catching up to Apple's foldable fast — which isn't a good thing.</p><h3 class="article-body__section" id="section-beyond-10x"><span>Beyond 10x </span></h3><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/wzkS7oLnhVi6goZ4SZ6o7H-1920-80.jpg" alt="iphone duo zoom test vs iphone 18 pro max and galaxy z fold 8" /><figcaption>iPhone 18 Pro Max (20x)<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/N7P5ezBkzzfrdbPkyrBi8H-1920-80.jpg" alt="iphone duo zoom test vs iphone 18 pro max and galaxy z fold 8" /><figcaption>iPhone 18 Pro Max (40x)<small role="credit">Future</small></figcaption></figure></figure><p>The iPhone Duo's magnification maxes out at 10x, so we can't actually compare its capabilities further. Which is a shame, considering the iPhone 18 Pro Max extends all the way up to 40x zoom — a point in which AI plays a much bigger role in the quality of the photo in question.</p><p>The quality still holds up at 20x zoom, which is pretty incredible considering how much degradation there was on both the iPhone Duo and Galaxy Z Fold 8. Things start to get worse for wear at 40x, even with help from AI, but the damage is mostly relegated to minor blurring and pixelation on the different parts of the image. </p><p>It's not the greatest picture in the world, but it's much clearer and pleasant to look at compared to the 10x shots on the iPhone Duo and Z Fold 8.</p><h3 class="article-body__section" id="section-bottom-line"><span>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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="zBHjJoz6DppuWEk7mW4eSL" name="Apple iPhone Duo-20" alt="iPhone Duo shown held in hand" src="https://cdn.mos.cms.futurecdn.net/zBHjJoz6DppuWEk7mW4eSL-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 iPhone Duo's zoomed-in shots started off pretty strong, thanks to the 2x optical quality camera mode, but things started going downhill pretty fast. It even starts falling behind the Galaxy Z Fold 8, and while the difference isn't as large as it is with the iPhone 18 Pro Max, it does paint the iPhone Duo's zooming capabilities in a particularly bad light.</p><p>Still, it's obvious to everyone that the iPhone 18 Pro Max's zooming camera outclasses the iPhone Duo in every way. The tetraprism lens, in conjunction with up to 16x optical quality zoom, managed to maintain a high quality picture for a surprisingly long time. Which just goes to show that the telephoto lens isn't quite as frivolous as it seems — and here's hoping that the inevitable iPhone Duo 2 adds that all important third camera lens.</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/iphone-duo-wait-times-latest-updates-and-how-to-beat-apples-january-delay">iPhone Duo wait times — latest updates and how to beat Apple's January delay</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/iphone-duo-zoom-test-do-you-really-need-a-telephoto-lens</link>
                                                                            <description>
                            <![CDATA[ iPhone Duo only has two camera lenses, and misses out on the telephoto-zooming camera. But does that matter? We put it to the test. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">QfcG7ErjfyZBrWW5RJ5DRb</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/fmAu96RLMpGDsLfJCkCsQK-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 24 Oct 2026 07:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f-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/fmAu96RLMpGDsLfJCkCsQK-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPhone Duo shown held in hand]]></media:description>                                                            <media:text><![CDATA[iPhone Duo shown held in hand]]></media:text>
                                <media:title type="plain"><![CDATA[iPhone Duo shown held in hand]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/fmAu96RLMpGDsLfJCkCsQK-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-review">iPhone Duo</a> is an impressive phone, but we can't ignore the fact that you do have to <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-trade-offs">accept a bunch of compromises</a>. One of them is the fact that the foldable phone only offers two main cameras, and misses out on the telephoto lens you'll find on the likes of the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-and-pro-max-review">iPhone 18 Pro Max</a>. But does that actually matter in the long run?</p><p>We found that the loss of the telephoto lens was <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">detrimental to the quality of zoomed in shots</a> on 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> compared to the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Z Fold 8 Ultra</a>. That doesn't bode well for the Duo, even if Apple's cameras operate very differently than Samsung's — especially on the software side of things. </p><p>So we decided to do some testing to find out exactly what the deal was, comparing the Duo to both the iPhone 18 Pro Max and the telephoto-less Galaxy Z Fold 8. Here's what we found.</p><h3 class="article-body__section" id="section-2x-magnification"><span>2x magnification</span></h3><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/UvRPFB227mNQENHeGLqGfL-1920-80.jpg" alt="iphone duo zoom test vs galaxy z fold 8 & iphone 18 pro max" /><figcaption>iPhone Duo<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/FkyCp7DGBMNqQmz8kDHAfL-1920-80.jpg" alt="iphone duo zoom test vs galaxy z fold 8 & iphone 18 pro max" /><figcaption>iPhone 18 Pro Max<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/wipVCj3JteBPusbUcn9jfL-1920-80.jpg" alt="iphone duo zoom test vs galaxy z fold 8 & iphone 18 pro max" /><figcaption>Samsung Galaxy Z Fold 8<small role="credit">Future</small></figcaption></figure></figure><p>Like the iPhone 18 Pro Max, the iPhone Duo has something Apple calls "optical quality 2x telephoto" capabilities. This is essentially a form of digital zoom, which takes a photo with the 48MP main camera and crops it down to 12MP — imitating magnification in the process. The main cameras aren't identical, but they are pretty close from a hardware perspective.</p><p>It's no surprise that the photo quality isn't that different at 2x magnification. There is some difference in sharpness and overall quality in the iPhone Duo's favor, as well as some over-exposure on the iPhone 18 Pro Max. But, overall, the two photos are close enough that the majority of people won't see the difference.</p><p>As for Samsung's Galaxy Z Fold 8, we can see a little more sharpness and color saturation at 2x magnification, but overall the amount of differences between the two phones are pretty meager.</p><h3 class="article-body__section" id="section-4x-magnification"><span>4x magnification</span></h3><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/ynpbTMoqbKXG2bv4Ls2sy7-1920-80.jpg" alt="iphone duo zoom test vs iphone 18 pro max and galaxy z fold 8" /><figcaption>iPhone Duo<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/mzAXRyUrz6ktmhJzvuYG38-1920-80.jpg" alt="iphone duo zoom test vs iphone 18 pro max and galaxy z fold 8" /><figcaption>iPhone 18 Pro Max<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/cuEqxNxCTx8YQm83rLxgy7-1920-80.jpg" alt="iphone duo zoom test vs iphone 18 pro max and galaxy z fold 8" /><figcaption>Samsung Galaxy Z Fold 8<small role="credit">Future</small></figcaption></figure></figure><p>The iPhone 18 Pro Max's tetraprism telephoto lens tops out at 4x optical zoom, so it's no surprise that it can take much higher-quality photos at this magnification than the iPhone Duo. That's fairly noticeable at the offset, especially if you look at the wooden pillar in the foreground, but the more you zoom in the more the quality and sharpness degrades on the Duo's photo.</p><p>The Z Fold 8 also has the slight edge when it comes to those same factors. While the iPhone 18 Pro Max still trumps Samsung's telephoto-less foldable, the level of detail captured by the Z Fold 8 at 4x zoom is noticeably better than that of the iPhone Duo.</p><h3 class="article-body__section" id="section-8x-magnification"><span>8x magnification</span></h3><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/atmXvnUg6GaXo6nuJcA6vH-1920-80.jpg" alt="iphone duo zoom test vs iphone 18 pro max and galaxy z fold 8" /><figcaption>iPhone Duo<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/HC9gdMBbkUMGLanFB9auvH-1920-80.jpg" alt="iphone duo zoom test vs iphone 18 pro max and galaxy z fold 8" /><figcaption>iPhone 18 Pro Max<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/6HgGZTMBRqjKtj9EqnGMpH-1920-80.jpg" alt="iphone duo zoom test vs iphone 18 pro max and galaxy z fold 8" /><figcaption>Samsung Galaxy Z Fold 8<small role="credit">Future</small></figcaption></figure></figure><p>If you up the zoom to 8x magnification, you can see that the quality difference is even more pronounced between the two iPhones. No doubt thanks to the 8x "optical quality" camera, the iPhone 18 Pro Max still offers a sharp image that captures a fairly high-quality photo. </p><p>Meanwhile, the iPhone Duo is noticeably degraded, and that's most obvious on the letters, which are starting to turn blurry and pixelated, and even starting to merge together in the case of some of the smallest lettering.</p><p>The Galaxy Z Fold 8 looks a little better than the Duo, though it is noticeably worse quality than the iPhone 18 Pro Max. The lettering and details are getting pixelated, but the details are still sharper than those captured by Apple's foldable. That's especially noticeable on the logo at the rear of the boat, which is sharper and has better-defined shapes than the fuzzier image on the iPhone Duo.</p><h3 class="article-body__section" id="section-10x-magnification"><span>10x magnification</span></h3><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/xeVeqY6pruDBSHKoaY8m3C-1920-80.jpg" alt="iphone duo zoom test vs iphone 18 pro max and galaxy z fold 8" /><figcaption>iPhone Duo<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/4GUzjGCQ36SES2LHVGgAHB-1920-80.jpg" alt="iphone duo zoom test vs iphone 18 pro max and galaxy z fold 8" /><figcaption>iPhone 18 Pro Max<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/qEyGpB2iXP3gsrGSbgv9K9-1920-80.jpg" alt="iphone duo zoom test vs iphone 18 pro max and galaxy z fold 8" /><figcaption>Samsung Galaxy Z Fold 8<small role="credit">Future</small></figcaption></figure></figure><p>It's a very similar story at 10x magnification, and it shows just how well the iPhone 18 Pro Max's "optical quality" zoom is able to perform. The flagship's pseudo-zoom stretches to 16x magnification, and you can't really see any loss of quality at this particular level. Meanwhile, the iPhone Duo looks slightly worse than it did at 8x magnification, with slightly more visible blurring to the finer details on display.</p><p>You can see the quality start to drop on the Galaxy Z Fold 8 as well. Letters are getting fuzzy, details on the logo are even more blurred, and the grain on the wooden post in the foreground is starting to merge together. It still has a slight edge over the iPhone Duo, but it's catching up to Apple's foldable fast — which isn't a good thing.</p><h3 class="article-body__section" id="section-beyond-10x"><span>Beyond 10x </span></h3><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/wzkS7oLnhVi6goZ4SZ6o7H-1920-80.jpg" alt="iphone duo zoom test vs iphone 18 pro max and galaxy z fold 8" /><figcaption>iPhone 18 Pro Max (20x)<small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/N7P5ezBkzzfrdbPkyrBi8H-1920-80.jpg" alt="iphone duo zoom test vs iphone 18 pro max and galaxy z fold 8" /><figcaption>iPhone 18 Pro Max (40x)<small role="credit">Future</small></figcaption></figure></figure><p>The iPhone Duo's magnification maxes out at 10x, so we can't actually compare its capabilities further. Which is a shame, considering the iPhone 18 Pro Max extends all the way up to 40x zoom — a point in which AI plays a much bigger role in the quality of the photo in question.</p><p>The quality still holds up at 20x zoom, which is pretty incredible considering how much degradation there was on both the iPhone Duo and Galaxy Z Fold 8. Things start to get worse for wear at 40x, even with help from AI, but the damage is mostly relegated to minor blurring and pixelation on the different parts of the image. </p><p>It's not the greatest picture in the world, but it's much clearer and pleasant to look at compared to the 10x shots on the iPhone Duo and Z Fold 8.</p><h3 class="article-body__section" id="section-bottom-line"><span>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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="zBHjJoz6DppuWEk7mW4eSL" name="Apple iPhone Duo-20" alt="iPhone Duo shown held in hand" src="https://cdn.mos.cms.futurecdn.net/zBHjJoz6DppuWEk7mW4eSL-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 iPhone Duo's zoomed-in shots started off pretty strong, thanks to the 2x optical quality camera mode, but things started going downhill pretty fast. It even starts falling behind the Galaxy Z Fold 8, and while the difference isn't as large as it is with the iPhone 18 Pro Max, it does paint the iPhone Duo's zooming capabilities in a particularly bad light.</p><p>Still, it's obvious to everyone that the iPhone 18 Pro Max's zooming camera outclasses the iPhone Duo in every way. The tetraprism lens, in conjunction with up to 16x optical quality zoom, managed to maintain a high quality picture for a surprisingly long time. Which just goes to show that the telephoto lens isn't quite as frivolous as it seems — and here's hoping that the inevitable iPhone Duo 2 adds that all important third camera lens.</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/iphone-duo-wait-times-latest-updates-and-how-to-beat-apples-january-delay">iPhone Duo wait times — latest updates and how to beat Apple's January delay</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I tested the iPhone Duo vs Galaxy Z Fold 8 displays side-by-side — and the internet is at war over the winner ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The debate over foldable phone displays just reached a boiling point. It seems everyone has an opinion on Apple’s new nano-texture display for the <a href="https://www.youtube.com/watch?v=pbWV4A3i7kE"><u>iPhone Duo</u></a> and how it stacks up to the ultra-vibrant glossy OLED on Samsung’s <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>.</p><p>I posted two videos comparing these displays both indoors and outdoors on <a href="https://www.tiktok.com/@mspoonyg/video/7699091190553038093"><u>TikTok,</u></a> and the reaction was instantaneous, racking up over 1.2 million views and nearly 5,000 comments.</p><p>On one side, the Duo’s nano-texture coating virtually erases glare and makes the creases almost invisible. On the other side, the Fold 8 delivers perfect black levels and punchy saturation you can’t get from a matte treatment.</p><p>I want you to be the judge. Watch the tests below, check out the debate and let me know in the comments if you agree with my verdict. </p><h2 id="iphone-duo-vs-fold-8-test-1-outdoors-in-the-sun-the-glare-test">iPhone Duo vs Fold 8 Test 1: Outdoors in the sun (The Glare Test)</h2>                    <div class= "tiktok-wrapper" style="min-height: 750px;"><blockquote class="tiktok-embed" cite="https://www.tiktok.com/@mspoonyg/video/7699091190553038093" data-video-id="7699091190553038093" 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="♬ original sound - mspoonyg" href="https://www.tiktok.com/music/original-sound-7699091201709902605">♬ original sound - mspoonyg</a></section>                    </blockquote></div>                <p>I want to give you fair warning that I’m obsessed with Marvel, so I used MCU movies for both comparisons. Starting outside in the shade but on a sunny day, I played the “Avengers Doomsday" trailer on both the iPhone Duo and Galaxy Z Fold 8.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="R8eKR7P39FA7tkrtM94H9A" name="iPhone Duo display outside" alt="iPhone Duo display outside vs Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/R8eKR7P39FA7tkrtM94H9A-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>As I pan around, you can tell that the Fold 8 suffers from more glare, and the crease is more visible, but this is more of a stress test. The average person is going to look at their device head-on, but the fact that glare creeps in off-angle is relevant when it comes to sharing content with 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="gYM88DaNzrwCeQCBtz2xiL" name="iPhone Duo display outside 3" alt="iPhone Duo vs Galaxy Z Fold 8 displays outside" src="https://cdn.mos.cms.futurecdn.net/gYM88DaNzrwCeQCBtz2xiL-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>However, the Galaxy Z Fold 8 offers deeper blacks and more saturated colors, just as you would expect from a glossier OLED panel. So I’d say in this round the Duo has the advantage, but it’s not a rout by any stretch.</p><h3 class="article-body__section" id="section-top-comments"><span>Top comments </span></h3><ul><li>“That crease kills it for the top one. (Fold 8)”</li><li>“The colors are def more vibrant on the Samsung but that glare and crease are terrible. I would choose the Apple.”</li><li>“I like the anti glare of the bottom one (iPhone Duo) but the vibrancy of the top one (Fold 8).”</li><li>“Samsung looks better but the crease…”</li><li>I can’t understand why people love matte displays. It just looks so greyish”</li></ul><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Xk87ae"></div>                            </div>                            <script src="https://kwizly.com/embed/Xk87ae.js" async></script><h2 id="iphone-duo-vs-fold-8-test-2-indoors-the-color-amp-contrast-test">iPhone Duo vs Fold 8 Test 2: Indoors (The Color & Contrast Test)</h2>                    <div class= "tiktok-wrapper" style="min-height: 750px;"><blockquote class="tiktok-embed" cite="https://www.tiktok.com/@mspoonyg/video/7699473118661758222" data-video-id="7699473118661758222" 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="♬ Spider-Man: Brand New Day Main Theme (Original Inspired Soundtrack) - CastroMusic" href="https://www.tiktok.com/music/Spider-Man-Brand-New-Day-Main-Theme-Original-Inspired-Soundtrack-7540024439208790033">♬ Spider-Man: Brand New Day Main Theme (Original Inspired Soundtrack) - CastroMusic</a></section>                    </blockquote></div>                <p>Next, I tested the iPhone Duo and Fold 8 side by side in our video studio, so the lights are fairly bright overhead. In this environment, the crease on the Samsung was less visible and I noticed less glare.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/gWnvoAE8buAYsCPRa26qb7-1920-80.jpg" alt="iPhone Duo display inside vs Galaxy Z Fold 8" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/o9YYFvoWTqWeR7kVdzYVo6-1920-80.jpg" alt="iPhone Duo display inside vs Galaxy Z Fold 8" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/5AddgbxDC3RV3CZ74BQJx6-1920-80.jpg" alt="iPhone Duo display inside vs Galaxy Z Fold 8" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/hBUg3qCsjmG834DwD6jXc7-1920-80.jpg" alt="iPhone Duo display inside vs Galaxy Z Fold 8" /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>More importantly, the colors on the Fold 8’s display look much richer, as Spider-Man’s red uniform pops a lot more. And once again, the black levels are perfect through the Samsung. There’s just better contrast overall. Even the Marvel Studios graphic looks better on the Fold 8.</p><p>The caveat here is that you’ll get better visuals from the iPhone Duo when it’s in your hand versus off- angle, but I did stand directly above these foldable phones when shooting. </p><h3 class="article-body__section" id="section-top-comments"><span>Top comments</span></h3><ul><li>“Unbelievable work from Apple — they’ve sacrificed brightness, contrast, sharpness, and HDR+ just to hide the crease, bravo.”</li><li>“Matte made that OLED look like an IPS.”</li><li>“Gloss > matte.”</li><li>“The Duo looks dull.”</li><li>The iPhone, because you can actually see the screen even if there’s light shining on it.”</li></ul><h2 id="my-take">My take</h2><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>I honestly don’t believe that one display is objectively better than the other. It depends on what you prioritize. But based on my testing so far, I personally prefer the iPhone Duo’s main screen.</p><p>Apple’s panel does a better job of cutting down on glare and minimizing the crease to the point where it’s hard to see. I especially prefer using the iPhone Duo outdoors. I find it easier to do everything from watching videos in tent mode to reading, even in direct sunlight.</p><p>However, there’s no denying that the Galaxy Z Fold 8’s main display offers richer colors and the perfect black levels you’d expect from an OLED. And it's also worth keeping in mind that we've been using the Fold 8 for longer, which contributes to the crease.</p><p>I wish there was a screen that offered the best of both worlds. But for now, it all comes down to what you want in a foldable. </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-battery-life-results-are-in-how-does-it-compare-to-other-foldables">iPhone Duo battery life results: Here's how long it lasts</a></li><li><a href="https://www.tomsguide.com/phones/iphones/best-iphone-duo-deals-retailers-carriers">Best iPhone Duo deals — save up to $1,200 right now</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">I put the iPhone Duo vs Galaxy Z Fold 8 through a 10-round camera face-off — here's the winner</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>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</link>
                                                                            <description>
                            <![CDATA[ I put the iPhone Duo and Galaxy Z Fold 8 displays side by side inside and out. Here are the pros and cons of each panel. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">84vsRsHzSxkWuMhXzQ83yj</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/T2KGZbC8NRZCKAFfuEHRLW-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 23 Oct 2026 11:57:40 +0000</pubDate>                                                                                                                                <updated>Fri, 23 Oct 2026 12:53:41 +0000</updated>
                                                                                                                                            <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[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/T2KGZbC8NRZCKAFfuEHRLW-1920-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPhone Duo vs Galaxy Z Fold 8 display showing Spider-Man Brand New Day]]></media:description>                                                            <media:text><![CDATA[iPhone Duo vs Galaxy Z Fold 8 display showing Spider-Man Brand New Day]]></media:text>
                                <media:title type="plain"><![CDATA[iPhone Duo vs Galaxy Z Fold 8 display showing Spider-Man Brand New Day]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/T2KGZbC8NRZCKAFfuEHRLW-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The debate over foldable phone displays just reached a boiling point. It seems everyone has an opinion on Apple’s new nano-texture display for the <a href="https://www.youtube.com/watch?v=pbWV4A3i7kE"><u>iPhone Duo</u></a> and how it stacks up to the ultra-vibrant glossy OLED on Samsung’s <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>.</p><p>I posted two videos comparing these displays both indoors and outdoors on <a href="https://www.tiktok.com/@mspoonyg/video/7699091190553038093"><u>TikTok,</u></a> and the reaction was instantaneous, racking up over 1.2 million views and nearly 5,000 comments.</p><p>On one side, the Duo’s nano-texture coating virtually erases glare and makes the creases almost invisible. On the other side, the Fold 8 delivers perfect black levels and punchy saturation you can’t get from a matte treatment.</p><p>I want you to be the judge. Watch the tests below, check out the debate and let me know in the comments if you agree with my verdict. </p><h2 id="iphone-duo-vs-fold-8-test-1-outdoors-in-the-sun-the-glare-test">iPhone Duo vs Fold 8 Test 1: Outdoors in the sun (The Glare Test)</h2>                    <div class= "tiktok-wrapper" style="min-height: 750px;"><blockquote class="tiktok-embed" cite="https://www.tiktok.com/@mspoonyg/video/7699091190553038093" data-video-id="7699091190553038093" 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="♬ original sound - mspoonyg" href="https://www.tiktok.com/music/original-sound-7699091201709902605">♬ original sound - mspoonyg</a></section>                    </blockquote></div>                <p>I want to give you fair warning that I’m obsessed with Marvel, so I used MCU movies for both comparisons. Starting outside in the shade but on a sunny day, I played the “Avengers Doomsday" trailer on both the iPhone Duo and Galaxy Z Fold 8.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="R8eKR7P39FA7tkrtM94H9A" name="iPhone Duo display outside" alt="iPhone Duo display outside vs Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/R8eKR7P39FA7tkrtM94H9A-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>As I pan around, you can tell that the Fold 8 suffers from more glare, and the crease is more visible, but this is more of a stress test. The average person is going to look at their device head-on, but the fact that glare creeps in off-angle is relevant when it comes to sharing content with 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="gYM88DaNzrwCeQCBtz2xiL" name="iPhone Duo display outside 3" alt="iPhone Duo vs Galaxy Z Fold 8 displays outside" src="https://cdn.mos.cms.futurecdn.net/gYM88DaNzrwCeQCBtz2xiL-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>However, the Galaxy Z Fold 8 offers deeper blacks and more saturated colors, just as you would expect from a glossier OLED panel. So I’d say in this round the Duo has the advantage, but it’s not a rout by any stretch.</p><h3 class="article-body__section" id="section-top-comments"><span>Top comments </span></h3><ul><li>“That crease kills it for the top one. (Fold 8)”</li><li>“The colors are def more vibrant on the Samsung but that glare and crease are terrible. I would choose the Apple.”</li><li>“I like the anti glare of the bottom one (iPhone Duo) but the vibrancy of the top one (Fold 8).”</li><li>“Samsung looks better but the crease…”</li><li>I can’t understand why people love matte displays. It just looks so greyish”</li></ul><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Xk87ae"></div>                            </div>                            <script src="https://kwizly.com/embed/Xk87ae.js" async></script><h2 id="iphone-duo-vs-fold-8-test-2-indoors-the-color-amp-contrast-test">iPhone Duo vs Fold 8 Test 2: Indoors (The Color & Contrast Test)</h2>                    <div class= "tiktok-wrapper" style="min-height: 750px;"><blockquote class="tiktok-embed" cite="https://www.tiktok.com/@mspoonyg/video/7699473118661758222" data-video-id="7699473118661758222" 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="♬ Spider-Man: Brand New Day Main Theme (Original Inspired Soundtrack) - CastroMusic" href="https://www.tiktok.com/music/Spider-Man-Brand-New-Day-Main-Theme-Original-Inspired-Soundtrack-7540024439208790033">♬ Spider-Man: Brand New Day Main Theme (Original Inspired Soundtrack) - CastroMusic</a></section>                    </blockquote></div>                <p>Next, I tested the iPhone Duo and Fold 8 side by side in our video studio, so the lights are fairly bright overhead. In this environment, the crease on the Samsung was less visible and I noticed less glare.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/gWnvoAE8buAYsCPRa26qb7-1920-80.jpg" alt="iPhone Duo display inside vs Galaxy Z Fold 8" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/o9YYFvoWTqWeR7kVdzYVo6-1920-80.jpg" alt="iPhone Duo display inside vs Galaxy Z Fold 8" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/5AddgbxDC3RV3CZ74BQJx6-1920-80.jpg" alt="iPhone Duo display inside vs Galaxy Z Fold 8" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/hBUg3qCsjmG834DwD6jXc7-1920-80.jpg" alt="iPhone Duo display inside vs Galaxy Z Fold 8" /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>More importantly, the colors on the Fold 8’s display look much richer, as Spider-Man’s red uniform pops a lot more. And once again, the black levels are perfect through the Samsung. There’s just better contrast overall. Even the Marvel Studios graphic looks better on the Fold 8.</p><p>The caveat here is that you’ll get better visuals from the iPhone Duo when it’s in your hand versus off- angle, but I did stand directly above these foldable phones when shooting. </p><h3 class="article-body__section" id="section-top-comments"><span>Top comments</span></h3><ul><li>“Unbelievable work from Apple — they’ve sacrificed brightness, contrast, sharpness, and HDR+ just to hide the crease, bravo.”</li><li>“Matte made that OLED look like an IPS.”</li><li>“Gloss > matte.”</li><li>“The Duo looks dull.”</li><li>The iPhone, because you can actually see the screen even if there’s light shining on it.”</li></ul><h2 id="my-take">My take</h2><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>I honestly don’t believe that one display is objectively better than the other. It depends on what you prioritize. But based on my testing so far, I personally prefer the iPhone Duo’s main screen.</p><p>Apple’s panel does a better job of cutting down on glare and minimizing the crease to the point where it’s hard to see. I especially prefer using the iPhone Duo outdoors. I find it easier to do everything from watching videos in tent mode to reading, even in direct sunlight.</p><p>However, there’s no denying that the Galaxy Z Fold 8’s main display offers richer colors and the perfect black levels you’d expect from an OLED. And it's also worth keeping in mind that we've been using the Fold 8 for longer, which contributes to the crease.</p><p>I wish there was a screen that offered the best of both worlds. But for now, it all comes down to what you want in a foldable. </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-battery-life-results-are-in-how-does-it-compare-to-other-foldables">iPhone Duo battery life results: Here's how long it lasts</a></li><li><a href="https://www.tomsguide.com/phones/iphones/best-iphone-duo-deals-retailers-carriers">Best iPhone Duo deals — save up to $1,200 right now</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">I put the iPhone Duo vs Galaxy Z Fold 8 through a 10-round camera face-off — here's the winner</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ iPod 25th anniversary: 25 things to know about the product that changed Apple (and the world) ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The iPod is long gone now, but it was the product that turned around Apple's fortunes, got PC users to take the Apple brand seriously, established Apple as a player in mobile devices, and went on to revolutionize the music industry and lay the groundwork for the iPhone. And it did all of that in a tiny window of time, from its introduction in the fall of 2001 to the rapid rise of the iPhone beginning in 2007.</p><p>Here are 25 things you might not know about how the iPod came to be, and its legacy.</p><h2 id="1-steve-jobs-thought-he-missed-his-moment">1. Steve Jobs thought he missed his moment</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bmoM9dGcJ7Bv5MUnFjBCM4" name="GettyImages-1328270-2" alt="Steve Jobs, CEO of Apple, attends the Macworld Conference July 18, 2001 in New York City." src="https://cdn.mos.cms.futurecdn.net/bmoM9dGcJ7Bv5MUnFjBCM4-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: Mario Tama/Getty)</span></figcaption></figure><p>In the year before the iPod began development, Steve Jobs introduced a whole new concept in order to sell Macs: the "Digital Hub." The idea was that a proliferation of new gadgets — most notably digital cameras and digital video camcorders — worked best when connected to a computer, and that meant a Mac. This was the origin of the iMovie app, which exists to this day.</p><p>But despite Jobs's personal love of music, he never really noticed the rise of MP3s, Napster, and the new wave of MP3 players (like the Diamond Rio) that were hitting the scene. It was only in late 1999 that Jobs realized that he had been so focused on photos and video that he had missed the digital music revolution.</p><p>"I felt like a dope," Jobs told Fortune's Brent Schlender. "I thought we had missed it. We had to work hard to catch up." Apple quickly reached out to the developers of SoundJam, as well as another MP3 app called Audion, and made it clear that it was interested in bringing those developers to Cupertino to work on a crash project that became iTunes.</p><h2 id="2-itunes-owes-its-life-to-an-mp3-player-but-not-the-ipod">2. iTunes owes its life to an MP3 player, but not the iPod</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="3bH9hacE9aR9kEeWdQnwhj" name="shutterstock_2121168062-2" alt="Diamond Rio MP3 player" src="https://cdn.mos.cms.futurecdn.net/3bH9hacE9aR9kEeWdQnwhj-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: Shutterstock)</span></figcaption></figure><p>Apple couldn't have made the iPod without iTunes, which performed most of the important tasks of organizing and syncing so that the tiny device didn't need as much brainpower or custom software. But iTunes wasn't built with the iPod in mind.</p><p>Instead, former Apple engineer Bill Kincaid started building SoundJam, the app that would one day become iTunes, in order to let Macs sync with the Diamond Rio, an early MP3 player that held roughly a dozen songs. To help with the user interface, Kincaid enlisted former Apple intern Jeff Robbin, and the pair went on to create the app that formed the basis of iTunes. Jobs bought SoundJam, moved Robbin and Kincaid into an office a short walk from his own, and began the process of building an MP3 player jukebox app with Jobs's sensibilities in mind.</p><h2 id="3-it-all-started-with-a-hard-drive">3. It all started with a hard drive</h2><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="C73L2qiNcXyyba82hGnnjc" name="GettyImages-1247850613-2" alt="Japan's electronics giant Toshiba Chairman Taizo Nishimuro displyas the company's latest product PCMCIA type II sized 2 GB HDD (C), world's highest capacity 1.8-inch HDD media, in December 2000." src="https://cdn.mos.cms.futurecdn.net/C73L2qiNcXyyba82hGnnjc-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: Yoshikazu Tsuno/AFP/Getty)</span></figcaption></figure><p>In 2000, Jobs decided Apple needed to build its own MP3 player. Early the next year, a bunch of Apple executives (including Jobs, marketing director Phil Schiller, and hardware chief Jon Rubinstein) were in Japan for Macworld Tokyo. Rubinstein took the opportunity to make a tour of Apple's suppliers, and at the end of a meeting with Toshiba, execs brought out a new product that they admitted they hadn't found any use for.</p><p>It was an incredibly tiny 5GB 1.8-inch hard drive, much smaller than anything found in a laptop in those days. Rubinstein and operations exec Jeff Williams took one look at it and realized that it would be perfect for that MP3 player. Rubinstein called Jobs and said he needed a $10 million check to buy out every single drive Toshiba could make. Jobs was happy to oblige, and the trajectory of the iPod was sealed: it would be built around that little Toshiba drive.</p><h2 id="4-apple-hired-a-contractor-to-run-the-ipod-team">4. Apple hired a contractor to run the iPod team</h2><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="mDcL4xnu94a5owd5AxUS4U" name="GettyImages-1140039167-2" alt="Tony Fadell" src="https://cdn.mos.cms.futurecdn.net/mDcL4xnu94a5owd5AxUS4U-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: Wei Leng Tay/Bloomberg /Getty)</span></figcaption></figure><p>In 2001, Apple was a much smaller company than it is today, and it was intensely focused on turning around the Mac product line after years of stagnation before Jobs returned to Apple in early 1997. As a result, Rubinstein felt that he couldn't devote any of his senior people to the MP3 player project. Instead, he asked around Silicon Valley and ended up with a referral to a guy who had been trying to build portable devices (including MP3 players) at his own startup for a few years.</p><p>Rubinstein reached that guy, Tony Fadell, when Fadell was on a chairlift, skiing at Vail. Fadell was intrigued, as he had worked with numerous early Mac legends earlier in his career at General Magic. But Rubinstein refused to tell him any details about what Apple wanted him to build until he took the job. Fadell signed on for an eight-week contract, and only then was told that he was going to be spinning up a team to build an Apple MP3 player.</p><h2 id="5-the-ipod-39-s-product-manager-tried-to-leave">5. The iPod's product manager tried to leave</h2><p>Eight weeks into the project, as the project was hurtling forward, Fadell expressed uncertainty about whether he wanted to keep working on the iPod or if he should go back to his startup. Rubinstein ended up demanding that he sign on as an employee right in front of the entire iPod team. Fadell agreed, but he also never forgave Rubinstein for putting him on the spot. The two executives would clash repeatedly over their tenures at Apple.</p><h2 id="6-the-ipod-39-s-killer-feature-also-made-it-brutally-incompatible">6. The iPod's killer feature also made it brutally incompatible</h2><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:54.22%;"><img id="MRKcjWQM7Ns7j7pZVbT6c" name="GettyImages-1168799_Apple" alt="iBook and iPod in 2001" src="https://cdn.mos.cms.futurecdn.net/MRKcjWQM7Ns7j7pZVbT6c-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1388" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Apple/Getty/Tom's Guide)</span></figcaption></figure><p>In 2001, most computers used USB 1.0 for peripherals. But transferring MP3s at USB 1.0 rates was excruciatingly slow. Apple estimated you'd need ten minutes to transfer one CD's worth of music via USB. But not so with the iPod, which was built around the newer, much faster FireWire standard that was common on digital camcorders during that era. Most new Macs were shipping with FireWire, as well as a handful of PCs.</p><p>FireWire could transfer an entire album in something like 30 seconds. It would have been excruciating to transfer 1,000 songs to the iPod at USB 1.0 speeds. The result was an incredibly fast syncing process with iTunes, and the optional ability to load your personal files on the iPod hard drive – but it meant that even if Apple built or licensed some Windows software to sync to the iPod, almost no PCs could connect to it.</p><p>A couple of years later, the much faster USB 2 standard arrived, freeing the iPod from FireWire at last.</p><h2 id="7-the-ipod-ran-on-someone-else-39-s-operating-system">7. The iPod ran on someone else's operating system</h2><p>We're so used to Apple building and owning the whole widget, hardware and software. But Apple of 2001 was still trying to ship the first stable, usable version of Mac OS X while also keeping Mac OS 9 alive. It didn't have the time to build an entirely new operating system for the iPod, and certainly not if it was going to ship by the end of 2001.</p><p>So Apple relied on a small Silicon Valley company called PIXO, which had built a tiny embedded operating system atop a processor built by a company called PortalPlayer. PIXO and PortalPlayer were creating products designed for portable devices, including figuring out how to use a spinning hard drive in a music player without skipping or killing the battery. (They came up with a clever system of buffering audio, then spinning down the hard drive until it was needed to fill the buffer again).</p><p>The companies also had connections with other links in the digital music supply chain, introducing Apple to the Scottish company that would supply the digital-to-analog audio converter that fed the iPod's headphone jack.</p><h2 id="8-the-ipod-was-dumb-and-itunes-was-smart">8. The iPod was dumb, and iTunes was smart</h2><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:74.80%;"><img id="YnvRgg23gLdLcizzMN9vyA" name="GettyImages-1959069" alt="iTunes 2003" src="https://cdn.mos.cms.futurecdn.net/YnvRgg23gLdLcizzMN9vyA-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1915" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Apple Computer/Getty)</span></figcaption></figure><p>With very little time to build an interface on top of the PIXO operating system, Apple made a fateful and smart decision: It offloaded as much of the work that went into building the iPod's music database and file organization as possible onto the connected Mac running iTunes. iTunes did all the heavy lifting and synced the results to the iPod, allowing the iPod software to remain relatively lightweight, and let Apple focus on building a pleasant interface on top of PIXO's software.</p><p>The one drawback to this approach is that it meant that only iTunes could sync with the iPod, which meant it couldn't work even with Windows PCs with FireWire ports. Eventually it added support for Windows, first via MusicMatch Jukebox and later iTunes itself.</p><h2 id="9-fadell-used-a-good-better-best-approach-to-impress-steve-jobs">9. Fadell used a good/better/best approach to impress Steve Jobs</h2><p>When it came time to unveil potential designs to Jobs, Fadell took the advice of Rubinstein and revealed mock-ups one at a time, from worst to best. Fadell showed off a player with a slot, into which you could plug a spinning hard drive or a flash memory card. It ran on double-A batteries. Jobs thought it was too complicated.</p><p>Next was something more like the Diamond Rio, a compact flash-memory based device, but with dynamic memory. If its rechargeable battery ever got too low, the memory would be wiped and you'd need to re-load all your songs. Jobs thought that was no good.</p><p>Then Fadell assembled something very much like the iPod from an array of component parts already on the table, a bit like snapping together Lego. Jobs seemed intrigued by the result, at which point Fadell revealed something very much like the final iPod design, which had been hiding under a bowl on the table the entire time. Jobs was sold.</p><h2 id="10-apple-39-s-marketing-guy-came-up-with-the-scroll-wheel">10. Apple's marketing guy came up with the scroll wheel</h2><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="B7dwTgWoQVak6HqKSEmKtg" name="shutterstock_1644720085-2" alt="original iPod" src="https://cdn.mos.cms.futurecdn.net/B7dwTgWoQVak6HqKSEmKtg-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: Shutterstock)</span></figcaption></figure><p>Jobs hated that the other MP3 players in the category were covered with buttons and hard to navigate. He felt that Apple needed to find a better way, especially if users were expected to load a thousand songs on the device.</p><p>The answer was counterintuitive and pretty brilliant — the iPod's interface was driven by a wheel that you spun around, with a button in the middle that you'd click to select an item. The wheel was encircled by four other buttons to take you up a level, forward or reverse, or pause/play. It made driving the iPod's hierarchical interface easy and fast, which is what Jobs insisted on.</p><p>What's funny about it is that the scroll wheel didn't come from Apple designer Jonathan Ive, or Fadell, or Rubinstein. It came from Apple marketing executive Phil Schiller, who had been inspired by a Bang & Olufsen land line he had at his house. Jobs loved it, and Fadell quickly agreed that the wheel could be part of his device.</p><h2 id="11-to-hide-the-ipod-39-s-design-apple-built-a-quot-soviet-rocket-launcher-quot">11. To hide the iPod's design, Apple built a "Soviet rocket launcher"</h2><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="vrS22AfjG8CfEP8HxE2XCH" name="iPod-prototype_apple_panic-2" alt="iPod prototype" src="https://cdn.mos.cms.futurecdn.net/vrS22AfjG8CfEP8HxE2XCH-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: Panic Blog)</span></figcaption></figure><p>Apple is famously secretive, and it didn't let even most employees working on the iPod actually see what it would look like. Instead, it created<a href="https://blog.panic.com/a-prototype-original-ipod/"> <u>impossibly ugly plastic enclosures</u></a> for its guts, which were mostly air inside. On the outside was a big wheel, a screen, and a bunch of buttons. Employees said it looked brutal and ridiculous, like a vintage Soviet rocket launcher.</p><h2 id="12-the-ipod-is-the-reason-jony-ive-loves-the-color-white">12. The iPod is the reason Jony Ive loves the color white</h2><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.80%;"><img id="N5pA3eLZDqasB2fuCH3ySS" name="GettyImages-985104230_Paul Harris_Getty" alt="Jony Ive shown in 2004" src="https://cdn.mos.cms.futurecdn.net/N5pA3eLZDqasB2fuCH3ySS-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1454" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Paul Harris/Getty)</span></figcaption></figure><p>The caricature of Jony Ive as a designer is that he was someone obsessed with minimalism, and usually appeared on Apple product videos inside an entirely white room. But in 2001, he was not that guy. Ive was the guy who had designed the original iMac, a very unusually shaped computer with translucent colored plastic. It was the opposite of minimal — it was meant to draw attention.</p><p>But for the iPod, he took a different approach. Ive believed that the personal nature of the iPod, that it was a small thing you carried in one hand and slipped in a pocket, required an entirely different approach to an iMac. He wanted it to be "restrained, pure, and quiet." And that's what led him to white.</p><p>But if it was going to be white, it was going to be <em>really</em> white. Jobs and Ive argued about exactly which shade, but once they settled, they also made sure that the headphones were entirely white — an Apple branding coup to this day.</p><h2 id="13-the-name-is-a-reference-to-a-classic-movie">13. The name is a reference to a classic movie</h2><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="2Cjw2egvt2jSuEbqm5jkXE" name="2001 Space Odyssey 1968 Alamy" alt="2001: Space Odyssey" src="https://cdn.mos.cms.futurecdn.net/2Cjw2egvt2jSuEbqm5jkXE-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: Alamy)</span></figcaption></figure><p>Nobody seems to remember the moment when "iPod" was picked as the product's name. The iPod's code name was P68, which is far from memorable. A group of execs and people in Apple's marketing department, as well as people from Apple's ad agency, kept meeting and throwing out ideas. Most of them were terrible.</p><p>One name thrown out by Apple creative director Vinnie Chieco was, he said later, inspired by the fact that it was the year 2001, and in "2001: A Space Odyssey," the astronaut Dave Bowman famously orders the mad computer HAL to "open the pod bay doors" and let him fly his space pod back in. Pod – that sounded futuristic.</p><p>Nobody really liked it. Schiller thought it sounded sinister, like the pod people from "Invasion of the Body Snatchers." But Steve Jobs thought it might work... with Apple's telltale lower-case letter "i" (introduced with the iMac) stuck on the front of it.</p><p>In the run-up to the product launch, Jobs never seemed to truly embrace the name. But no other name came along that was better, so it stuck.</p><h2 id="14-the-manufacturer-didn-39-t-even-read-the-contract">14. The manufacturer didn't even read the contract</h2><p>In a show of hardball supply-chain negotiating tactics that would become an Apple hallmark over the next two decades, Apple's potential manufacturer for the iPod was given no time to consider or even read its contract with Apple. Apple's ruthless supply executive, Tony Blevins, went to Taiwanese manufacturer Inventec, put a contract down on the table, and told them to sign it or lose the business.</p><p>Blevins was probably a great poker player. Apple didn't have many alternatives to using Inventec. But rather than insisting on showing the deal to its lawyers, Inventec executives just signed the contract — and built the iPod.</p><h2 id="15-the-whole-thing-was-done-in-less-than-a-year">15. The whole thing was done in less than a year</h2><p>Today it seems that we hear about new Apple products a couple of years before they arrive, at the very least. But Apple of 2001 was a much smaller and more nimble company.</p><p>Still, the speed of the iPod's development is staggering when you think of it. In February, Rubinstein and Williams saw Toshiba's hard drive and got Jobs to write them a $10 million check. Apple announced the iPod eight months later, and shipped it nine months later.</p><h2 id="16-apple-cleaned-out-bay-area-record-stores-to-buy-cds">16. Apple cleaned out Bay Area record stores to buy CDs</h2><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="BReyCCoWcSe5ZAQBQrpWyW" name="CDs music store Spencer Platt Getty" alt="CDs in a music store in 2002" src="https://cdn.mos.cms.futurecdn.net/BReyCCoWcSe5ZAQBQrpWyW-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: Spencer Platt/Getty)</span></figcaption></figure><p>When it came time to introduce the iPod, Jobs was concerned that Apple would be accused of furthering Napster-style MP3 piracy. In those days, digital music wasn't for sale online; you had to buy CDs and "rip" them to your hard drive... or just use peer-to-peer file sharing to download them for free.</p><p>Apple planned on giving iPods to journalists who attended the event, but they realized that forcing journalists to find a FireWire-equipped Mac, install a prerelease version of iTunes that synced with the iPod, and convert their own music was asking <em>a lot</em>. So instead, every iPod came equipped with a selection of music.</p><p>The problem was that Apple didn't have the right to load that music on those iPods. It came across as reinforcing the idea of the iPod as a piracy device.</p><p>So instead, Apple dispatched its PR and marketing people to local record stores to buy multiple copies of every CD they were planning on pre-loading onto the iPod. The result: journalists didn't just receive a prerelease iPod when leaving the event, but a gift bag that also included a taped-together cube of CD jewel cases representing the albums that were preloaded on the iPod.</p><h2 id="17-the-product-launch-event-was-lightly-attended-due-to-9-11">17. The product launch event was lightly attended due to 9/11</h2><p>If you didn't live through it, you might not realize that the announcement and release of the iPod happened in the aftermath of the 9/11 attacks. And as a result, Apple's launch event on October 23 was lightly attended, with many international and even East Coast outlets declining to make anyone fly out to California. Apple managed to fill its Town Hall conference center with lots and lots of Bay Area journalists (Macworld magazine brought at least a half-dozen people, myself included) and a lot of Apple employees as well.</p><p>The 9/11 attacks also affected the product's launch in November, since it was meant to draw people to Apple's then-new retail stores — but in that era, people were reluctant to go to shopping malls or other high-profile public places.</p><h2 id="18-the-guy-from-smash-mouth-played-a-prominent-role-in-the-product-video">18. The guy from Smash Mouth played a prominent role in the product video</h2><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="EGutcXM9tLzAZnMJQZRukS" name="Smash Mouth Theo Wargo-WireImage-Getty" alt="Steve Harwell, lead singer of Smash Mouth" src="https://cdn.mos.cms.futurecdn.net/EGutcXM9tLzAZnMJQZRukS-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: Theo Wargo/WireImage/Getty)</span></figcaption></figure><p>As was usual for the period, Apple's introduction included a lengthy demo from Steve Jobs, as well as a few pre-produced product videos. One featured Jony Ive extolling the virtues of its design — and yes, the color white — at length. Another, though, was essentially a proto-reaction-video of several professional musicians being amazed by what the iPod represented.</p><p>If you know your 2000s music, you may not be surprised by the appearance of electronic artist Moby or pop singer Seal. You may be more surprised to see Steve Harwell, the late singer of the band Smash Mouth. But make no mistake: Harwell was a huge presence in Apple commercials during this period, including one introducing the concept of burning your own audio CDs.</p><h2 id="19-2001-social-media-hated-the-ipod">19. 2001 social media hated the iPod</h2><p>You may think the Internet has gotten worse in the last decade or two, but it was pretty bad even back in 2001. In the wake of the iPod announcement, a reader of the aggregation site Slashdot submitted a link to Macworld's coverage over the event with a summation of the product's features and prices.</p><p>Famously, Slashdot editor Rob "CmdrTaco" Malda offered a one-line critique of the product: "No wireless. Less space than a [Creative Labs] Nomad. Lame."</p><p>Sorry, Malda's going to have to live that one down forever.</p><h2 id="20-it-wasn-39-t-a-hit-at-first">20. It wasn't a hit… At first</h2><p>Because the original iPod didn't work with Windows, it was a strictly Mac-only product. The second-generation model added limited Windows support (which Steve Jobs allowed only under protest!), but you still had to have a PC with FireWire, which was rare. Only with the third-generation model, which supported USB, did the iPod take off.</p><h2 id="21-the-ipod-halo-effect-was-real-and-huge-for-apple">21. The iPod halo effect was real and huge 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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="6NgTeG5yaBLop3rHyo9BkU" name="GettyImages-1300223783-2" alt="Apple Store in 2001" src="https://cdn.mos.cms.futurecdn.net/6NgTeG5yaBLop3rHyo9BkU-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: Bob Riha/Getty)</span></figcaption></figure><p>To put it bluntly, the iPod completely rehabbed Apple's brand image. A company that was viewed as having seen better days, who made a computer that was incompatible with PCs and used by 5% of the computer-using population, was just too weird and sad. But then the iPod happened, and PC users fell in love with it, and once you love an Apple product, you start to wonder whether those computers Apple makes might be worth looking into — and oh, what luck — Apple happens to have a retail store in my local shopping mall.</p><p>It was a huge swing in fortunes for Apple. Mac sales began to grow rapidly. And the entire thing laid the groundwork for the iPhone.</p><h2 id="22-the-ipod-really-only-had-five-years-as-apple-s-golden-child">22. The iPod really only had five years as Apple’s golden child</h2><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="ehYaCkRiahPtQjGguMT2rS" name="GettyImages-71864365-2" alt="Steve Jobs at iPod Nano event in 2006" src="https://cdn.mos.cms.futurecdn.net/ehYaCkRiahPtQjGguMT2rS-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: Justin Sullivan/Getty)</span></figcaption></figure><p>It's stunning to think about it, but by the time the first USB iPod arrived, the iPhone was only four years away. The biggest hit iPod model, the iPod Nano, debuted two years before the iPhone was announced. If you lived through that era, it's hard to really conceive of how relatively quickly it came and went. But maybe it's better to burn out than to fade away?</p><p>To be clear, iPod sales peaked in 2008 with 55 million sold, but the iPhone would blow past that number with 72 million by 2011.</p><h2 id="23-the-iphone-music-app-was-originally-called-ipod">23. The iPhone music app was originally called iPod</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="cxVmsQoaWQ6zFSwgGLoyk8" name="shutterstock_1598882821-2" alt="original iPod" src="https://cdn.mos.cms.futurecdn.net/cxVmsQoaWQ6zFSwgGLoyk8-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: Shutterstock)</span></figcaption></figure><p>How big was the iPod? When Steve Jobs introduced the iPhone, one of its three primary features was to be a great iPod. So much so that the music app on the iPhone was, for several years, called <em>iPod</em>. Branding!</p><h2 id="24-the-iphone-used-the-ipod-connector-until-iphone-5">24. The iPhone used the iPod connector until iPhone 5</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="5WysEb4dVufdPmg9BC9pb8" name="shutterstock_2342899377-2" alt="original iPod" src="https://cdn.mos.cms.futurecdn.net/5WysEb4dVufdPmg9BC9pb8-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: Shutterstock)</span></figcaption></figure><p>Today's iPhones use USB connections, and for many years (from the iPhone 5 onward) they used the tiny Apple-designed Lightning port. But the first five iPhone models all shipped with Apple's iPod dock connector port on the bottom. It's just one of the many ways that the iPhone owes a lot of its legacy to its mobile-device predecessor.</p><h2 id="25-my-daughter-might-be-the-first-quot-ipod-baby-quot">25. My daughter might be the first "iPod Baby"</h2><p>Apple handed out those cubes of CDs and demo iPods to the press after the iPod launch event on October 23, but the product didn't ship to the public until November 10. In those intervening two-plus weeks, members of the press were pretty much the only people outside of Apple to have access to the exciting new music player.</p><p>Something else happened during that brief window: My wife and I had our first child. (Yes, this means my daughter turns 25 this year, too.) And, yes, we built a playlist to play in the birth room, and brought the iPod along with a portable stereo with a cassette adapter that let us play the iPod out of some speakers into the room. I'm a little dubious if Apple would have let any of its employees out in public with an iPod before it was announced, which may mean that my daughter was the first baby to be born with an iPod in the delivery room. If someone else can beat that story, I don't want to hear about it.</p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/audio/ipod-25th-anniversary-25-things-you-need-to-know-about-the-product-that-changed-apple-and-the-world</link>
                                                                            <description>
                            <![CDATA[ From the iconic white design and Click Wheel interface to the debate behind the name, here’s how the iPod changed Apple — and how we listen to music — forever. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">3WZvKNxLVhKurkhBW3yJj6</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/DcNTPeXbyMTfHjtkmRQagD-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 23 Oct 2026 11:00:00 +0000</pubDate>                                                                                                                                <updated>Fri, 23 Oct 2026 17:19:20 +0000</updated>
                                                                                                                                            <category><![CDATA[Audio]]></category>
                                                                                                                    <dc:creator><![CDATA[ Jason Snell ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/dpTh7bbcQcwJr7AL8bWPPn-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/DcNTPeXbyMTfHjtkmRQagD-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&amp;#39;s Guide/Getty/Shutterstock/Apple]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Steve Jobs, Jony Ive and the original iPod in 2001]]></media:description>                                                            <media:text><![CDATA[Steve Jobs, Jony Ive and the original iPod in 2001]]></media:text>
                                <media:title type="plain"><![CDATA[Steve Jobs, Jony Ive and the original iPod in 2001]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/DcNTPeXbyMTfHjtkmRQagD-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The iPod is long gone now, but it was the product that turned around Apple's fortunes, got PC users to take the Apple brand seriously, established Apple as a player in mobile devices, and went on to revolutionize the music industry and lay the groundwork for the iPhone. And it did all of that in a tiny window of time, from its introduction in the fall of 2001 to the rapid rise of the iPhone beginning in 2007.</p><p>Here are 25 things you might not know about how the iPod came to be, and its legacy.</p><h2 id="1-steve-jobs-thought-he-missed-his-moment">1. Steve Jobs thought he missed his moment</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bmoM9dGcJ7Bv5MUnFjBCM4" name="GettyImages-1328270-2" alt="Steve Jobs, CEO of Apple, attends the Macworld Conference July 18, 2001 in New York City." src="https://cdn.mos.cms.futurecdn.net/bmoM9dGcJ7Bv5MUnFjBCM4-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: Mario Tama/Getty)</span></figcaption></figure><p>In the year before the iPod began development, Steve Jobs introduced a whole new concept in order to sell Macs: the "Digital Hub." The idea was that a proliferation of new gadgets — most notably digital cameras and digital video camcorders — worked best when connected to a computer, and that meant a Mac. This was the origin of the iMovie app, which exists to this day.</p><p>But despite Jobs's personal love of music, he never really noticed the rise of MP3s, Napster, and the new wave of MP3 players (like the Diamond Rio) that were hitting the scene. It was only in late 1999 that Jobs realized that he had been so focused on photos and video that he had missed the digital music revolution.</p><p>"I felt like a dope," Jobs told Fortune's Brent Schlender. "I thought we had missed it. We had to work hard to catch up." Apple quickly reached out to the developers of SoundJam, as well as another MP3 app called Audion, and made it clear that it was interested in bringing those developers to Cupertino to work on a crash project that became iTunes.</p><h2 id="2-itunes-owes-its-life-to-an-mp3-player-but-not-the-ipod">2. iTunes owes its life to an MP3 player, but not the iPod</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="3bH9hacE9aR9kEeWdQnwhj" name="shutterstock_2121168062-2" alt="Diamond Rio MP3 player" src="https://cdn.mos.cms.futurecdn.net/3bH9hacE9aR9kEeWdQnwhj-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: Shutterstock)</span></figcaption></figure><p>Apple couldn't have made the iPod without iTunes, which performed most of the important tasks of organizing and syncing so that the tiny device didn't need as much brainpower or custom software. But iTunes wasn't built with the iPod in mind.</p><p>Instead, former Apple engineer Bill Kincaid started building SoundJam, the app that would one day become iTunes, in order to let Macs sync with the Diamond Rio, an early MP3 player that held roughly a dozen songs. To help with the user interface, Kincaid enlisted former Apple intern Jeff Robbin, and the pair went on to create the app that formed the basis of iTunes. Jobs bought SoundJam, moved Robbin and Kincaid into an office a short walk from his own, and began the process of building an MP3 player jukebox app with Jobs's sensibilities in mind.</p><h2 id="3-it-all-started-with-a-hard-drive">3. It all started with a hard drive</h2><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="C73L2qiNcXyyba82hGnnjc" name="GettyImages-1247850613-2" alt="Japan's electronics giant Toshiba Chairman Taizo Nishimuro displyas the company's latest product PCMCIA type II sized 2 GB HDD (C), world's highest capacity 1.8-inch HDD media, in December 2000." src="https://cdn.mos.cms.futurecdn.net/C73L2qiNcXyyba82hGnnjc-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: Yoshikazu Tsuno/AFP/Getty)</span></figcaption></figure><p>In 2000, Jobs decided Apple needed to build its own MP3 player. Early the next year, a bunch of Apple executives (including Jobs, marketing director Phil Schiller, and hardware chief Jon Rubinstein) were in Japan for Macworld Tokyo. Rubinstein took the opportunity to make a tour of Apple's suppliers, and at the end of a meeting with Toshiba, execs brought out a new product that they admitted they hadn't found any use for.</p><p>It was an incredibly tiny 5GB 1.8-inch hard drive, much smaller than anything found in a laptop in those days. Rubinstein and operations exec Jeff Williams took one look at it and realized that it would be perfect for that MP3 player. Rubinstein called Jobs and said he needed a $10 million check to buy out every single drive Toshiba could make. Jobs was happy to oblige, and the trajectory of the iPod was sealed: it would be built around that little Toshiba drive.</p><h2 id="4-apple-hired-a-contractor-to-run-the-ipod-team">4. Apple hired a contractor to run the iPod team</h2><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="mDcL4xnu94a5owd5AxUS4U" name="GettyImages-1140039167-2" alt="Tony Fadell" src="https://cdn.mos.cms.futurecdn.net/mDcL4xnu94a5owd5AxUS4U-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: Wei Leng Tay/Bloomberg /Getty)</span></figcaption></figure><p>In 2001, Apple was a much smaller company than it is today, and it was intensely focused on turning around the Mac product line after years of stagnation before Jobs returned to Apple in early 1997. As a result, Rubinstein felt that he couldn't devote any of his senior people to the MP3 player project. Instead, he asked around Silicon Valley and ended up with a referral to a guy who had been trying to build portable devices (including MP3 players) at his own startup for a few years.</p><p>Rubinstein reached that guy, Tony Fadell, when Fadell was on a chairlift, skiing at Vail. Fadell was intrigued, as he had worked with numerous early Mac legends earlier in his career at General Magic. But Rubinstein refused to tell him any details about what Apple wanted him to build until he took the job. Fadell signed on for an eight-week contract, and only then was told that he was going to be spinning up a team to build an Apple MP3 player.</p><h2 id="5-the-ipod-39-s-product-manager-tried-to-leave">5. The iPod's product manager tried to leave</h2><p>Eight weeks into the project, as the project was hurtling forward, Fadell expressed uncertainty about whether he wanted to keep working on the iPod or if he should go back to his startup. Rubinstein ended up demanding that he sign on as an employee right in front of the entire iPod team. Fadell agreed, but he also never forgave Rubinstein for putting him on the spot. The two executives would clash repeatedly over their tenures at Apple.</p><h2 id="6-the-ipod-39-s-killer-feature-also-made-it-brutally-incompatible">6. The iPod's killer feature also made it brutally incompatible</h2><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:54.22%;"><img id="MRKcjWQM7Ns7j7pZVbT6c" name="GettyImages-1168799_Apple" alt="iBook and iPod in 2001" src="https://cdn.mos.cms.futurecdn.net/MRKcjWQM7Ns7j7pZVbT6c-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1388" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Apple/Getty/Tom's Guide)</span></figcaption></figure><p>In 2001, most computers used USB 1.0 for peripherals. But transferring MP3s at USB 1.0 rates was excruciatingly slow. Apple estimated you'd need ten minutes to transfer one CD's worth of music via USB. But not so with the iPod, which was built around the newer, much faster FireWire standard that was common on digital camcorders during that era. Most new Macs were shipping with FireWire, as well as a handful of PCs.</p><p>FireWire could transfer an entire album in something like 30 seconds. It would have been excruciating to transfer 1,000 songs to the iPod at USB 1.0 speeds. The result was an incredibly fast syncing process with iTunes, and the optional ability to load your personal files on the iPod hard drive – but it meant that even if Apple built or licensed some Windows software to sync to the iPod, almost no PCs could connect to it.</p><p>A couple of years later, the much faster USB 2 standard arrived, freeing the iPod from FireWire at last.</p><h2 id="7-the-ipod-ran-on-someone-else-39-s-operating-system">7. The iPod ran on someone else's operating system</h2><p>We're so used to Apple building and owning the whole widget, hardware and software. But Apple of 2001 was still trying to ship the first stable, usable version of Mac OS X while also keeping Mac OS 9 alive. It didn't have the time to build an entirely new operating system for the iPod, and certainly not if it was going to ship by the end of 2001.</p><p>So Apple relied on a small Silicon Valley company called PIXO, which had built a tiny embedded operating system atop a processor built by a company called PortalPlayer. PIXO and PortalPlayer were creating products designed for portable devices, including figuring out how to use a spinning hard drive in a music player without skipping or killing the battery. (They came up with a clever system of buffering audio, then spinning down the hard drive until it was needed to fill the buffer again).</p><p>The companies also had connections with other links in the digital music supply chain, introducing Apple to the Scottish company that would supply the digital-to-analog audio converter that fed the iPod's headphone jack.</p><h2 id="8-the-ipod-was-dumb-and-itunes-was-smart">8. The iPod was dumb, and iTunes was smart</h2><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:74.80%;"><img id="YnvRgg23gLdLcizzMN9vyA" name="GettyImages-1959069" alt="iTunes 2003" src="https://cdn.mos.cms.futurecdn.net/YnvRgg23gLdLcizzMN9vyA-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1915" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Apple Computer/Getty)</span></figcaption></figure><p>With very little time to build an interface on top of the PIXO operating system, Apple made a fateful and smart decision: It offloaded as much of the work that went into building the iPod's music database and file organization as possible onto the connected Mac running iTunes. iTunes did all the heavy lifting and synced the results to the iPod, allowing the iPod software to remain relatively lightweight, and let Apple focus on building a pleasant interface on top of PIXO's software.</p><p>The one drawback to this approach is that it meant that only iTunes could sync with the iPod, which meant it couldn't work even with Windows PCs with FireWire ports. Eventually it added support for Windows, first via MusicMatch Jukebox and later iTunes itself.</p><h2 id="9-fadell-used-a-good-better-best-approach-to-impress-steve-jobs">9. Fadell used a good/better/best approach to impress Steve Jobs</h2><p>When it came time to unveil potential designs to Jobs, Fadell took the advice of Rubinstein and revealed mock-ups one at a time, from worst to best. Fadell showed off a player with a slot, into which you could plug a spinning hard drive or a flash memory card. It ran on double-A batteries. Jobs thought it was too complicated.</p><p>Next was something more like the Diamond Rio, a compact flash-memory based device, but with dynamic memory. If its rechargeable battery ever got too low, the memory would be wiped and you'd need to re-load all your songs. Jobs thought that was no good.</p><p>Then Fadell assembled something very much like the iPod from an array of component parts already on the table, a bit like snapping together Lego. Jobs seemed intrigued by the result, at which point Fadell revealed something very much like the final iPod design, which had been hiding under a bowl on the table the entire time. Jobs was sold.</p><h2 id="10-apple-39-s-marketing-guy-came-up-with-the-scroll-wheel">10. Apple's marketing guy came up with the scroll wheel</h2><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="B7dwTgWoQVak6HqKSEmKtg" name="shutterstock_1644720085-2" alt="original iPod" src="https://cdn.mos.cms.futurecdn.net/B7dwTgWoQVak6HqKSEmKtg-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: Shutterstock)</span></figcaption></figure><p>Jobs hated that the other MP3 players in the category were covered with buttons and hard to navigate. He felt that Apple needed to find a better way, especially if users were expected to load a thousand songs on the device.</p><p>The answer was counterintuitive and pretty brilliant — the iPod's interface was driven by a wheel that you spun around, with a button in the middle that you'd click to select an item. The wheel was encircled by four other buttons to take you up a level, forward or reverse, or pause/play. It made driving the iPod's hierarchical interface easy and fast, which is what Jobs insisted on.</p><p>What's funny about it is that the scroll wheel didn't come from Apple designer Jonathan Ive, or Fadell, or Rubinstein. It came from Apple marketing executive Phil Schiller, who had been inspired by a Bang & Olufsen land line he had at his house. Jobs loved it, and Fadell quickly agreed that the wheel could be part of his device.</p><h2 id="11-to-hide-the-ipod-39-s-design-apple-built-a-quot-soviet-rocket-launcher-quot">11. To hide the iPod's design, Apple built a "Soviet rocket launcher"</h2><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="vrS22AfjG8CfEP8HxE2XCH" name="iPod-prototype_apple_panic-2" alt="iPod prototype" src="https://cdn.mos.cms.futurecdn.net/vrS22AfjG8CfEP8HxE2XCH-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: Panic Blog)</span></figcaption></figure><p>Apple is famously secretive, and it didn't let even most employees working on the iPod actually see what it would look like. Instead, it created<a href="https://blog.panic.com/a-prototype-original-ipod/"> <u>impossibly ugly plastic enclosures</u></a> for its guts, which were mostly air inside. On the outside was a big wheel, a screen, and a bunch of buttons. Employees said it looked brutal and ridiculous, like a vintage Soviet rocket launcher.</p><h2 id="12-the-ipod-is-the-reason-jony-ive-loves-the-color-white">12. The iPod is the reason Jony Ive loves the color white</h2><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.80%;"><img id="N5pA3eLZDqasB2fuCH3ySS" name="GettyImages-985104230_Paul Harris_Getty" alt="Jony Ive shown in 2004" src="https://cdn.mos.cms.futurecdn.net/N5pA3eLZDqasB2fuCH3ySS-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1454" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Paul Harris/Getty)</span></figcaption></figure><p>The caricature of Jony Ive as a designer is that he was someone obsessed with minimalism, and usually appeared on Apple product videos inside an entirely white room. But in 2001, he was not that guy. Ive was the guy who had designed the original iMac, a very unusually shaped computer with translucent colored plastic. It was the opposite of minimal — it was meant to draw attention.</p><p>But for the iPod, he took a different approach. Ive believed that the personal nature of the iPod, that it was a small thing you carried in one hand and slipped in a pocket, required an entirely different approach to an iMac. He wanted it to be "restrained, pure, and quiet." And that's what led him to white.</p><p>But if it was going to be white, it was going to be <em>really</em> white. Jobs and Ive argued about exactly which shade, but once they settled, they also made sure that the headphones were entirely white — an Apple branding coup to this day.</p><h2 id="13-the-name-is-a-reference-to-a-classic-movie">13. The name is a reference to a classic movie</h2><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="2Cjw2egvt2jSuEbqm5jkXE" name="2001 Space Odyssey 1968 Alamy" alt="2001: Space Odyssey" src="https://cdn.mos.cms.futurecdn.net/2Cjw2egvt2jSuEbqm5jkXE-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: Alamy)</span></figcaption></figure><p>Nobody seems to remember the moment when "iPod" was picked as the product's name. The iPod's code name was P68, which is far from memorable. A group of execs and people in Apple's marketing department, as well as people from Apple's ad agency, kept meeting and throwing out ideas. Most of them were terrible.</p><p>One name thrown out by Apple creative director Vinnie Chieco was, he said later, inspired by the fact that it was the year 2001, and in "2001: A Space Odyssey," the astronaut Dave Bowman famously orders the mad computer HAL to "open the pod bay doors" and let him fly his space pod back in. Pod – that sounded futuristic.</p><p>Nobody really liked it. Schiller thought it sounded sinister, like the pod people from "Invasion of the Body Snatchers." But Steve Jobs thought it might work... with Apple's telltale lower-case letter "i" (introduced with the iMac) stuck on the front of it.</p><p>In the run-up to the product launch, Jobs never seemed to truly embrace the name. But no other name came along that was better, so it stuck.</p><h2 id="14-the-manufacturer-didn-39-t-even-read-the-contract">14. The manufacturer didn't even read the contract</h2><p>In a show of hardball supply-chain negotiating tactics that would become an Apple hallmark over the next two decades, Apple's potential manufacturer for the iPod was given no time to consider or even read its contract with Apple. Apple's ruthless supply executive, Tony Blevins, went to Taiwanese manufacturer Inventec, put a contract down on the table, and told them to sign it or lose the business.</p><p>Blevins was probably a great poker player. Apple didn't have many alternatives to using Inventec. But rather than insisting on showing the deal to its lawyers, Inventec executives just signed the contract — and built the iPod.</p><h2 id="15-the-whole-thing-was-done-in-less-than-a-year">15. The whole thing was done in less than a year</h2><p>Today it seems that we hear about new Apple products a couple of years before they arrive, at the very least. But Apple of 2001 was a much smaller and more nimble company.</p><p>Still, the speed of the iPod's development is staggering when you think of it. In February, Rubinstein and Williams saw Toshiba's hard drive and got Jobs to write them a $10 million check. Apple announced the iPod eight months later, and shipped it nine months later.</p><h2 id="16-apple-cleaned-out-bay-area-record-stores-to-buy-cds">16. Apple cleaned out Bay Area record stores to buy CDs</h2><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="BReyCCoWcSe5ZAQBQrpWyW" name="CDs music store Spencer Platt Getty" alt="CDs in a music store in 2002" src="https://cdn.mos.cms.futurecdn.net/BReyCCoWcSe5ZAQBQrpWyW-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: Spencer Platt/Getty)</span></figcaption></figure><p>When it came time to introduce the iPod, Jobs was concerned that Apple would be accused of furthering Napster-style MP3 piracy. In those days, digital music wasn't for sale online; you had to buy CDs and "rip" them to your hard drive... or just use peer-to-peer file sharing to download them for free.</p><p>Apple planned on giving iPods to journalists who attended the event, but they realized that forcing journalists to find a FireWire-equipped Mac, install a prerelease version of iTunes that synced with the iPod, and convert their own music was asking <em>a lot</em>. So instead, every iPod came equipped with a selection of music.</p><p>The problem was that Apple didn't have the right to load that music on those iPods. It came across as reinforcing the idea of the iPod as a piracy device.</p><p>So instead, Apple dispatched its PR and marketing people to local record stores to buy multiple copies of every CD they were planning on pre-loading onto the iPod. The result: journalists didn't just receive a prerelease iPod when leaving the event, but a gift bag that also included a taped-together cube of CD jewel cases representing the albums that were preloaded on the iPod.</p><h2 id="17-the-product-launch-event-was-lightly-attended-due-to-9-11">17. The product launch event was lightly attended due to 9/11</h2><p>If you didn't live through it, you might not realize that the announcement and release of the iPod happened in the aftermath of the 9/11 attacks. And as a result, Apple's launch event on October 23 was lightly attended, with many international and even East Coast outlets declining to make anyone fly out to California. Apple managed to fill its Town Hall conference center with lots and lots of Bay Area journalists (Macworld magazine brought at least a half-dozen people, myself included) and a lot of Apple employees as well.</p><p>The 9/11 attacks also affected the product's launch in November, since it was meant to draw people to Apple's then-new retail stores — but in that era, people were reluctant to go to shopping malls or other high-profile public places.</p><h2 id="18-the-guy-from-smash-mouth-played-a-prominent-role-in-the-product-video">18. The guy from Smash Mouth played a prominent role in the product video</h2><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="EGutcXM9tLzAZnMJQZRukS" name="Smash Mouth Theo Wargo-WireImage-Getty" alt="Steve Harwell, lead singer of Smash Mouth" src="https://cdn.mos.cms.futurecdn.net/EGutcXM9tLzAZnMJQZRukS-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: Theo Wargo/WireImage/Getty)</span></figcaption></figure><p>As was usual for the period, Apple's introduction included a lengthy demo from Steve Jobs, as well as a few pre-produced product videos. One featured Jony Ive extolling the virtues of its design — and yes, the color white — at length. Another, though, was essentially a proto-reaction-video of several professional musicians being amazed by what the iPod represented.</p><p>If you know your 2000s music, you may not be surprised by the appearance of electronic artist Moby or pop singer Seal. You may be more surprised to see Steve Harwell, the late singer of the band Smash Mouth. But make no mistake: Harwell was a huge presence in Apple commercials during this period, including one introducing the concept of burning your own audio CDs.</p><h2 id="19-2001-social-media-hated-the-ipod">19. 2001 social media hated the iPod</h2><p>You may think the Internet has gotten worse in the last decade or two, but it was pretty bad even back in 2001. In the wake of the iPod announcement, a reader of the aggregation site Slashdot submitted a link to Macworld's coverage over the event with a summation of the product's features and prices.</p><p>Famously, Slashdot editor Rob "CmdrTaco" Malda offered a one-line critique of the product: "No wireless. Less space than a [Creative Labs] Nomad. Lame."</p><p>Sorry, Malda's going to have to live that one down forever.</p><h2 id="20-it-wasn-39-t-a-hit-at-first">20. It wasn't a hit… At first</h2><p>Because the original iPod didn't work with Windows, it was a strictly Mac-only product. The second-generation model added limited Windows support (which Steve Jobs allowed only under protest!), but you still had to have a PC with FireWire, which was rare. Only with the third-generation model, which supported USB, did the iPod take off.</p><h2 id="21-the-ipod-halo-effect-was-real-and-huge-for-apple">21. The iPod halo effect was real and huge 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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="6NgTeG5yaBLop3rHyo9BkU" name="GettyImages-1300223783-2" alt="Apple Store in 2001" src="https://cdn.mos.cms.futurecdn.net/6NgTeG5yaBLop3rHyo9BkU-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: Bob Riha/Getty)</span></figcaption></figure><p>To put it bluntly, the iPod completely rehabbed Apple's brand image. A company that was viewed as having seen better days, who made a computer that was incompatible with PCs and used by 5% of the computer-using population, was just too weird and sad. But then the iPod happened, and PC users fell in love with it, and once you love an Apple product, you start to wonder whether those computers Apple makes might be worth looking into — and oh, what luck — Apple happens to have a retail store in my local shopping mall.</p><p>It was a huge swing in fortunes for Apple. Mac sales began to grow rapidly. And the entire thing laid the groundwork for the iPhone.</p><h2 id="22-the-ipod-really-only-had-five-years-as-apple-s-golden-child">22. The iPod really only had five years as Apple’s golden child</h2><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="ehYaCkRiahPtQjGguMT2rS" name="GettyImages-71864365-2" alt="Steve Jobs at iPod Nano event in 2006" src="https://cdn.mos.cms.futurecdn.net/ehYaCkRiahPtQjGguMT2rS-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: Justin Sullivan/Getty)</span></figcaption></figure><p>It's stunning to think about it, but by the time the first USB iPod arrived, the iPhone was only four years away. The biggest hit iPod model, the iPod Nano, debuted two years before the iPhone was announced. If you lived through that era, it's hard to really conceive of how relatively quickly it came and went. But maybe it's better to burn out than to fade away?</p><p>To be clear, iPod sales peaked in 2008 with 55 million sold, but the iPhone would blow past that number with 72 million by 2011.</p><h2 id="23-the-iphone-music-app-was-originally-called-ipod">23. The iPhone music app was originally called iPod</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="cxVmsQoaWQ6zFSwgGLoyk8" name="shutterstock_1598882821-2" alt="original iPod" src="https://cdn.mos.cms.futurecdn.net/cxVmsQoaWQ6zFSwgGLoyk8-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: Shutterstock)</span></figcaption></figure><p>How big was the iPod? When Steve Jobs introduced the iPhone, one of its three primary features was to be a great iPod. So much so that the music app on the iPhone was, for several years, called <em>iPod</em>. Branding!</p><h2 id="24-the-iphone-used-the-ipod-connector-until-iphone-5">24. The iPhone used the iPod connector until iPhone 5</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="5WysEb4dVufdPmg9BC9pb8" name="shutterstock_2342899377-2" alt="original iPod" src="https://cdn.mos.cms.futurecdn.net/5WysEb4dVufdPmg9BC9pb8-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: Shutterstock)</span></figcaption></figure><p>Today's iPhones use USB connections, and for many years (from the iPhone 5 onward) they used the tiny Apple-designed Lightning port. But the first five iPhone models all shipped with Apple's iPod dock connector port on the bottom. It's just one of the many ways that the iPhone owes a lot of its legacy to its mobile-device predecessor.</p><h2 id="25-my-daughter-might-be-the-first-quot-ipod-baby-quot">25. My daughter might be the first "iPod Baby"</h2><p>Apple handed out those cubes of CDs and demo iPods to the press after the iPod launch event on October 23, but the product didn't ship to the public until November 10. In those intervening two-plus weeks, members of the press were pretty much the only people outside of Apple to have access to the exciting new music player.</p><p>Something else happened during that brief window: My wife and I had our first child. (Yes, this means my daughter turns 25 this year, too.) And, yes, we built a playlist to play in the birth room, and brought the iPod along with a portable stereo with a cassette adapter that let us play the iPod out of some speakers into the room. I'm a little dubious if Apple would have let any of its employees out in public with an iPod before it was announced, which may mean that my daughter was the first baby to be born with an iPod in the delivery room. If someone else can beat that story, I don't want to hear about it.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Your Mac has a free AI chatbot hiding in plain sight — here's how to use it ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Your Mac might already have a free AI chatbot built right into it, and you probably had no idea it was there. No <a href="https://www.tomsguide.com/ai/your-ai-subscription-is-about-to-look-very-different-heres-what-to-expect-in-the-next-year">ChatGPT subscription</a>, no downloading a separate AI app and no internet connection required once the model is ready to go. Just local AI when you need it. </p><p>That's what X user <a href="https://x.com/AlexChhk/status/2112893927351296369" target="_blank">Alex Choi</a> discovered this week when he posted about finding a local large language model (LLM) hiding inside his MacBook's Terminal app.</p><p>"wtf i just discovered that a macbook comes with a free local LLM in your terminal," <a href="https://x.com/AlexChhk/status/2112893927351296369" target="_blank">he wrote</a> in a post on October 21 that attracted more than 1 million views in the accompanying screenshot.</p><p>The discovery caught people's attention for a good reason. We're used to opening ChatGPT, Claude or Gemini in a browser whenever we need AI assistance. But if you're running macOS 27 on a compatible Mac, Apple has already given you another option. And accessing it is surprisingly easy.</p><div class="see-more see-more--clipped"><figure><blockquote class="twitter-tweet hawk-ignore" data-lang="en" cite="https://twitter.com/cantworkitout/status/2112893927351296369"><p lang="en" dir="ltr">wtf i just discovered that a macbook comes with a free local LLM in your terminal https://t.co/Kegrr2aYUs<a href="https://twitter.com/cantworkitout/status/2112893927351296369">October 21, 2026</a></p></blockquote></figure><div class="see-more__filter"></div></div><h2 id="your-mac-has-its-own-ai-chatbot">Your Mac has its own AI chatbot</h2><p>The feature is called <a href="https://developer.apple.com/documentation/foundationmodels" target="_blank">Apple Foundation Models CL</a>I, or fm for short. Apple introduced it with macOS 27 Golden Gate, which arrived in September.</p><p>Unlike ChatGPT or Claude, which typically send requests to cloud servers, Apple's built-in tool can run an AI model directly on your Mac. This means a you can ask questions, brainstorm ideas, rewrite text and get help with everyday tasks without sending your prompts to an external AI service.</p><p>Apple demonstrated the feature during <a href="https://developer.apple.com/videos/play/wwdc2026/334/" target="_blank">WWDC 2026</a>, explaining that the command-line tool comes preinstalled with macOS 27.</p><p>It's primarily designed for developers, but there's no reason everyday Mac users can't experiment with it, too. In fact, because it's <a href="https://www.tomsguide.com/ai/i-tested-local-ai-vs-chatgpt-side-by-side-here-are-the-7-biggest-differences">local AI</a>, it's a great way to learn more about what AI can do while keeping your information out of the cloud. </p><p>The catch? You'll need to open <a href="https://support.apple.com/guide/terminal/open-or-quit-terminal-apd5265185d-f365-44cb-8b09-71a064a42125/mac" target="_blank">Terminal</a>, which might look intimidating if you've never used it. Fortunately, getting started only requires a couple of commands.</p><h2 id="how-to-access-your-mac-39-s-free-ai-chatbot">How to access your Mac's free AI chatbot</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="FEuXiAvTQXTMvKQ2r2vVxb" name="Apple Intelligence mac.jpg" alt="Apple Intelligence on MacBook" src="https://cdn.mos.cms.futurecdn.net/FEuXiAvTQXTMvKQ2r2vVxb-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>First, make sure you're running <a href="https://www.tomsguide.com/computing/if-your-mac-is-suddenly-running-out-of-space-after-macos-27-check-this-one-setting">macOS 27</a> and using a Mac with Apple silicon. You'll also need <a href="https://www.tomsguide.com/ai/5-apple-intelligence-features-to-try-on-your-new-macbook">Apple Intelligence enabled</a> and its on-device models downloaded.</p><p>Here's how to get started.</p><p><strong>1. Open Terminal.</strong> Press Command + Space, type "Terminal" and press Return.</p><p><strong>2. Check that Apple's AI tool is available.</strong> Type fm and press Return. If prompted to accept Apple's Foundation Models CLI terms, you'll need to review and accept them before continuing. You can do this by entering sudo fm license, providing your Mac administrator password and following the prompts.</p><p><strong>3. Start chatting.</strong> Once the tool is ready, type fm chat and press Return.</p><p><strong>4. Ask a question.</strong> You should now see an interactive interface where you can enter a prompt and receive a response from Apple's AI model.</p><p>That's it. From there, you're chatting with an AI model running locally on your Mac. You can start with something simple, such as "Give me five easy dinner ideas using chicken and rice" or "Explain compound interest like I'm 12."</p><p>You can also ask follow-up questions, just as you would with <a href="https://www.tomsguide.com/ai/ive-tried-all-the-leading-ai-chatbots-heres-why-i-keep-going-back-to-claudehttps://www.tomsguide.com/ai/i-plan-to-diversify-my-ai-chatbots-for-2026-heres-how-im-using-chatgpt-gemini-and-claude-in-the-new-year">other AI chatbots</a>.</p><p>If you don't want an ongoing conversation, there's another useful command. Type fm respond followed by your question in quotation marks to get a single response without opening the chat interface.</p><h2 id="what-can-you-actually-do-with-it">What can you actually do with 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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="XuAkzPJFVQMbRv4JBjk9aJ" name="shutterstock_2680365443-2" alt="ai jobs" src="https://cdn.mos.cms.futurecdn.net/XuAkzPJFVQMbRv4JBjk9aJ-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: Shutterstock)</span></figcaption></figure><p>Apple's local AI isn't designed to replace the most advanced versions of ChatGPT, Claude or Gemini. It's a smaller model intended for tasks that don't necessarily need a massive <a href="https://www.tomsguide.com/computing/thats-not-going-to-last-jeff-bezos-believes-ai-will-force-you-to-rent-your-pc-from-the-cloud-and-the-ram-crisis-is-accelerating-it">cloud-based</a> AI system. </p><p>You could ask it to rewrite a long email so it sounds more professional, brainstorm birthday party themes, explain an unfamiliar term or help outline a project.</p><p>One of the biggest advantages is privacy. Because the on-device model processes requests locally, your prompts don't need to be sent to an outside server to generate a response. That also makes it useful when you're traveling or working somewhere with unreliable Wi-Fi.</p><p>There's even another benefit: cost. You don't need an <a href="https://www.tomsguide.com/ai/i-was-paying-for-too-many-ai-tools-here-are-the-4-i-kept-and-3-i-cancelled">additional AI subscription</a>, and there are no per-message charges for using the local model through the built-in tool.</p><p>Of course, there are limitations. Smaller models can struggle with complicated reasoning, lengthy conversations and questions that require current information. And because the model runs locally, it doesn't automatically have access to the latest news or information from the internet.</p><p>There's one catch: Not every Mac supports it. So, before you rush to open Terminal, there are a few requirements worth knowing. Apple's fm command-line tool comes with macOS 27, so it won't be available as a built-in feature on Macs running older versions of macOS.</p><p>You'll also need compatible hardware. Apple Intelligence supports Macs with M1 chips or later, along with the Apple silicon-equipped MacBook Neo. Older Intel-based Macs aren't supported.</p><p><a href="https://www.tomsguide.com/ai/apple-intelligence-unveiled-all-the-new-ai-features-coming-to-ios-18-ipados-18-and-macos-sequoiahttps://www.tomsguide.com/ai/apple-intelligence-all-the-major-announcements-made-at-wwdc-2026">Apple Intelligence </a>must also be enabled, and the necessary on-device models must finish downloading. You can check your settings under System Settings and Apple Intelligence & Siri.</p><p>If you're unsure whether your Mac qualifies, Apple has a <a href="https://support.apple.com/en-us/121115" target="_blank">full list of Apple Intelligence requirements</a>.</p><h2 id="the-takeaway">The takeaway</h2><p>There's something refreshing about discovering that a computer you already own can do something you previously relied on a separate AI service for.</p><p>Apple has been building AI into macOS for years, but this little Terminal trick makes that technology feel more accessible, and the best part is that you don't have to pay anything extra to try it.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/ai/openai-unleashed-thousands-of-ai-agents-to-study-a-parkinson-like-disease-heres-what-they-found-in-32-minutes"><strong>OpenAI unleashed thousands of AI agents to study a Parkinson-like disease — here's what they found in 32 minutes</strong></a></li><li><a href="https://www.tomsguide.com/ai/7-chatgpt-plugins-that-are-a-must-have-for-anyone-with-a-side-hustle"><strong>7 ChatGPT plugins that are a must-have for anyone with a side hustle</strong></a></li><li><a href="https://www.tomsguide.com/ai/google-just-cut-down-250-000-trees-for-ai-data-centers-and-now-its-facing-a-major-backlash"><strong>Google just cut down 250,000 trees for AI data centers — and now it's facing a major backlash</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/ai/your-mac-has-a-free-ai-chatbot-hiding-in-plain-sight-heres-how-to-use-it</link>
                                                                            <description>
                            <![CDATA[ Your Mac has a free AI chatbot built right in. Here's how to find Apple's hidden local AI model and use it without a subscription. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">CgEKKyRpAszQFGgHDysF2W</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/CEfpKe7hvMUcn5xC89RJWb-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 23 Oct 2026 04:45:00 +0000</pubDate>                                                                                                                                <updated>Fri, 23 Oct 2026 08:27:51 +0000</updated>
                                                                                                                                            <category><![CDATA[AI]]></category>
                                                                                                <author><![CDATA[ amanda.caswell@futurenet.com (Amanda Caswell) ]]></author>                    <dc:creator><![CDATA[ Amanda Caswell ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/zYjevim2q7FjQiefqpjZRB-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/CEfpKe7hvMUcn5xC89RJWb-1920-80.jpg">
                                                            <media:credit><![CDATA[Wes Hicks from Unsplash]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Person working on their Mac]]></media:description>                                                            <media:text><![CDATA[Person working on their Mac]]></media:text>
                                <media:title type="plain"><![CDATA[Person working on their Mac]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/CEfpKe7hvMUcn5xC89RJWb-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Your Mac might already have a free AI chatbot built right into it, and you probably had no idea it was there. No <a href="https://www.tomsguide.com/ai/your-ai-subscription-is-about-to-look-very-different-heres-what-to-expect-in-the-next-year">ChatGPT subscription</a>, no downloading a separate AI app and no internet connection required once the model is ready to go. Just local AI when you need it. </p><p>That's what X user <a href="https://x.com/AlexChhk/status/2112893927351296369" target="_blank">Alex Choi</a> discovered this week when he posted about finding a local large language model (LLM) hiding inside his MacBook's Terminal app.</p><p>"wtf i just discovered that a macbook comes with a free local LLM in your terminal," <a href="https://x.com/AlexChhk/status/2112893927351296369" target="_blank">he wrote</a> in a post on October 21 that attracted more than 1 million views in the accompanying screenshot.</p><p>The discovery caught people's attention for a good reason. We're used to opening ChatGPT, Claude or Gemini in a browser whenever we need AI assistance. But if you're running macOS 27 on a compatible Mac, Apple has already given you another option. And accessing it is surprisingly easy.</p><div class="see-more see-more--clipped"><figure><blockquote class="twitter-tweet hawk-ignore" data-lang="en" cite="https://twitter.com/cantworkitout/status/2112893927351296369"><p lang="en" dir="ltr">wtf i just discovered that a macbook comes with a free local LLM in your terminal https://t.co/Kegrr2aYUs<a href="https://twitter.com/cantworkitout/status/2112893927351296369">October 21, 2026</a></p></blockquote></figure><div class="see-more__filter"></div></div><h2 id="your-mac-has-its-own-ai-chatbot">Your Mac has its own AI chatbot</h2><p>The feature is called <a href="https://developer.apple.com/documentation/foundationmodels" target="_blank">Apple Foundation Models CL</a>I, or fm for short. Apple introduced it with macOS 27 Golden Gate, which arrived in September.</p><p>Unlike ChatGPT or Claude, which typically send requests to cloud servers, Apple's built-in tool can run an AI model directly on your Mac. This means a you can ask questions, brainstorm ideas, rewrite text and get help with everyday tasks without sending your prompts to an external AI service.</p><p>Apple demonstrated the feature during <a href="https://developer.apple.com/videos/play/wwdc2026/334/" target="_blank">WWDC 2026</a>, explaining that the command-line tool comes preinstalled with macOS 27.</p><p>It's primarily designed for developers, but there's no reason everyday Mac users can't experiment with it, too. In fact, because it's <a href="https://www.tomsguide.com/ai/i-tested-local-ai-vs-chatgpt-side-by-side-here-are-the-7-biggest-differences">local AI</a>, it's a great way to learn more about what AI can do while keeping your information out of the cloud. </p><p>The catch? You'll need to open <a href="https://support.apple.com/guide/terminal/open-or-quit-terminal-apd5265185d-f365-44cb-8b09-71a064a42125/mac" target="_blank">Terminal</a>, which might look intimidating if you've never used it. Fortunately, getting started only requires a couple of commands.</p><h2 id="how-to-access-your-mac-39-s-free-ai-chatbot">How to access your Mac's free AI chatbot</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="FEuXiAvTQXTMvKQ2r2vVxb" name="Apple Intelligence mac.jpg" alt="Apple Intelligence on MacBook" src="https://cdn.mos.cms.futurecdn.net/FEuXiAvTQXTMvKQ2r2vVxb-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>First, make sure you're running <a href="https://www.tomsguide.com/computing/if-your-mac-is-suddenly-running-out-of-space-after-macos-27-check-this-one-setting">macOS 27</a> and using a Mac with Apple silicon. You'll also need <a href="https://www.tomsguide.com/ai/5-apple-intelligence-features-to-try-on-your-new-macbook">Apple Intelligence enabled</a> and its on-device models downloaded.</p><p>Here's how to get started.</p><p><strong>1. Open Terminal.</strong> Press Command + Space, type "Terminal" and press Return.</p><p><strong>2. Check that Apple's AI tool is available.</strong> Type fm and press Return. If prompted to accept Apple's Foundation Models CLI terms, you'll need to review and accept them before continuing. You can do this by entering sudo fm license, providing your Mac administrator password and following the prompts.</p><p><strong>3. Start chatting.</strong> Once the tool is ready, type fm chat and press Return.</p><p><strong>4. Ask a question.</strong> You should now see an interactive interface where you can enter a prompt and receive a response from Apple's AI model.</p><p>That's it. From there, you're chatting with an AI model running locally on your Mac. You can start with something simple, such as "Give me five easy dinner ideas using chicken and rice" or "Explain compound interest like I'm 12."</p><p>You can also ask follow-up questions, just as you would with <a href="https://www.tomsguide.com/ai/ive-tried-all-the-leading-ai-chatbots-heres-why-i-keep-going-back-to-claudehttps://www.tomsguide.com/ai/i-plan-to-diversify-my-ai-chatbots-for-2026-heres-how-im-using-chatgpt-gemini-and-claude-in-the-new-year">other AI chatbots</a>.</p><p>If you don't want an ongoing conversation, there's another useful command. Type fm respond followed by your question in quotation marks to get a single response without opening the chat interface.</p><h2 id="what-can-you-actually-do-with-it">What can you actually do with 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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="XuAkzPJFVQMbRv4JBjk9aJ" name="shutterstock_2680365443-2" alt="ai jobs" src="https://cdn.mos.cms.futurecdn.net/XuAkzPJFVQMbRv4JBjk9aJ-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: Shutterstock)</span></figcaption></figure><p>Apple's local AI isn't designed to replace the most advanced versions of ChatGPT, Claude or Gemini. It's a smaller model intended for tasks that don't necessarily need a massive <a href="https://www.tomsguide.com/computing/thats-not-going-to-last-jeff-bezos-believes-ai-will-force-you-to-rent-your-pc-from-the-cloud-and-the-ram-crisis-is-accelerating-it">cloud-based</a> AI system. </p><p>You could ask it to rewrite a long email so it sounds more professional, brainstorm birthday party themes, explain an unfamiliar term or help outline a project.</p><p>One of the biggest advantages is privacy. Because the on-device model processes requests locally, your prompts don't need to be sent to an outside server to generate a response. That also makes it useful when you're traveling or working somewhere with unreliable Wi-Fi.</p><p>There's even another benefit: cost. You don't need an <a href="https://www.tomsguide.com/ai/i-was-paying-for-too-many-ai-tools-here-are-the-4-i-kept-and-3-i-cancelled">additional AI subscription</a>, and there are no per-message charges for using the local model through the built-in tool.</p><p>Of course, there are limitations. Smaller models can struggle with complicated reasoning, lengthy conversations and questions that require current information. And because the model runs locally, it doesn't automatically have access to the latest news or information from the internet.</p><p>There's one catch: Not every Mac supports it. So, before you rush to open Terminal, there are a few requirements worth knowing. Apple's fm command-line tool comes with macOS 27, so it won't be available as a built-in feature on Macs running older versions of macOS.</p><p>You'll also need compatible hardware. Apple Intelligence supports Macs with M1 chips or later, along with the Apple silicon-equipped MacBook Neo. Older Intel-based Macs aren't supported.</p><p><a href="https://www.tomsguide.com/ai/apple-intelligence-unveiled-all-the-new-ai-features-coming-to-ios-18-ipados-18-and-macos-sequoiahttps://www.tomsguide.com/ai/apple-intelligence-all-the-major-announcements-made-at-wwdc-2026">Apple Intelligence </a>must also be enabled, and the necessary on-device models must finish downloading. You can check your settings under System Settings and Apple Intelligence & Siri.</p><p>If you're unsure whether your Mac qualifies, Apple has a <a href="https://support.apple.com/en-us/121115" target="_blank">full list of Apple Intelligence requirements</a>.</p><h2 id="the-takeaway">The takeaway</h2><p>There's something refreshing about discovering that a computer you already own can do something you previously relied on a separate AI service for.</p><p>Apple has been building AI into macOS for years, but this little Terminal trick makes that technology feel more accessible, and the best part is that you don't have to pay anything extra to try it.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/ai/openai-unleashed-thousands-of-ai-agents-to-study-a-parkinson-like-disease-heres-what-they-found-in-32-minutes"><strong>OpenAI unleashed thousands of AI agents to study a Parkinson-like disease — here's what they found in 32 minutes</strong></a></li><li><a href="https://www.tomsguide.com/ai/7-chatgpt-plugins-that-are-a-must-have-for-anyone-with-a-side-hustle"><strong>7 ChatGPT plugins that are a must-have for anyone with a side hustle</strong></a></li><li><a href="https://www.tomsguide.com/ai/google-just-cut-down-250-000-trees-for-ai-data-centers-and-now-its-facing-a-major-backlash"><strong>Google just cut down 250,000 trees for AI data centers — and now it's facing a major backlash</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ iPhone Duo sold out? Here are the 6 best alternatives in stock now ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-review">iPhone Duo</a> is proving <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-wait-times-latest-updates-and-how-to-beat-apples-january-delay">very difficult to come by</a>, and right now, on the official release day, Apple's own delivery estimates stretch into late January of next year. The Duo is, by our metrics, an excellent foldable phone, but it isn't the only option available to you right now. In fact, there are more of the <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">best foldable phones</a> to choose from, none of which have the same availability issues Apple's option is experiencing.</p><p>Obviously these phones have one key difference, in that they run Android rather than Apple's iOS. That is enough to turn off a lot of people, especially if they've been Apple users for a long time. That said, if you're more open to being platform-agnostic, and desperately want to pick up a foldable phone without waiting, you have some options available to you.</p><p>Here are the best iPhone Duo alternatives you can buy today</p><h2 id="best-iphone-duo-alternatives">Best iPhone Duo alternatives</h2><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-8"><span>Samsung Galaxy Z Fold 8</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2878px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="SEkA5wnoLHBqHNAFZEUp8Z" name="Galaxy Z Fold 8 review-6" alt="Galaxy Z Fold 8 shown held in-hand" src="https://cdn.mos.cms.futurecdn.net/SEkA5wnoLHBqHNAFZEUp8Z-1920-80.jpg" mos="" align="middle" fullscreen="" width="2878" 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>If you're looking for another passport-shaped foldable — with a shorter design when closed and widescreen when open — then 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> is easily your best bet. The Z Fold 8 offers a 5.5-inch cover display and 7.6-inch foldable display, which is close in size to the Duo. </p><p>That larger screen packs Samsung's 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> which promises to improve durability and minimize the crease. There's also an anti-reflective coating to prevent glare and help you see what's on screen. The Fold 8 is thinner and lighter than the iPhone Duo, and it lets you three apps at once instead of just two.</p><p>Camera-wise you're looking at a pair of 50MP rear lenses, with main and ultrawide shooters. Like the Duo, <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">there's no telephoto lens</a> for zoomed in shots. Selfie cameras are 10MP each, and you'll find one in both screens — though there's no under-display camera in this one. It's also a lot thinner and lighter than the Duo, and features the performance power of the Snapdragon 8 Elite Gen 5 for Galaxy. </p><p>That's as good as you'll get on an Android phone. Oh, and you get some of the best AI features of any phone, with a price tag that's $100 less than the iPhone Duo.</p><div data-widget-type="review" data-model-name="Samsung Galaxy Z Fold 8"></div><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-8-ultra"><span>Samsung Galaxy Z Fold 8 Ultra</span></h3><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>If you want a foldable that's a little larger than what the Duo has to offer, then <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review" target="_blank">Samsung's Z Fold 8 Ultra</a> is worth considering. It offers all the same features and benefits as the Z Fold 8, albeit without the newly-popular wide design. Instead there's a skinnier 6.5-inch cover display and a 8-inch foldable display on the inside.</p><p>The Z Fold 8 Ultra benefits from better camera hardware, including a 200MP main camera lens and a 10MP telephoto shooter with 3x optical zooming capabilities. On top of that you get a larger battery with 14 hours and 30 minutes of battery life (an hour longer than the iPhone Duo. </p><p>You also get a lightweight and thin frame, and everything Galaxy AI and Google Gemini have to offer. The downside is that Galaxy foldables don't offer stylus support or dust resistance, and the 8 Ultra is $100 more expensive than the iPhone Duo.</p><div data-widget-type="review" data-model-name="Samsung Galaxy Z Fold 8 Ultra"></div><h3 class="article-body__section" id="section-motorola-razr-fold"><span>Motorola Razr Fold</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3896px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="se3bqMdBi7dSZFBpcvBaDj" name="Motorola Razr Fold Review" alt="Motorola Razr Fold Review." src="https://cdn.mos.cms.futurecdn.net/se3bqMdBi7dSZFBpcvBaDj-1920-80.jpg" mos="" align="middle" fullscreen="" width="3896" height="2192" 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>Here's another book-shaped foldable, coming in with the same $1,900 price tag as the iPhone Duo. The <a href="https://www.tomsguide.com/phones/motorola-phones/motorola-razr-fold-review">Motorola Razr Fold</a> puts an emphasis on premium hardware at that base price, with a 6,000 mAh battery (with over 14 hours of life), 80W charging, 512GB of storage and 16GB of RAM that works in conjunction with the Snapdragon 8 Elite Gen 5 chipset. </p><p>Screens are a little bigger, measuring 6.6-inches for the cover display and 8.1-inches for the foldable inner screen. You also get a trio of 50MP cameras, which are complemented by a 32MP inner selfie camera and a 20MP cover screen camera. Optional stylus support, a slightly thinner design than the iPhone Duo, and a bunch of Motorola's AI features round out the perks. </p><div data-widget-type="review" data-model-name="Motorola Razr Fold"></div><h3 class="article-body__section" id="section-google-pixel-11-pro-fold"><span>Google Pixel 11 Pro Fold</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4387px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="Q4SHdg39j56f2vhg3S7qSb" name="Google Pixel 11 Pro Fold-15" alt="Google Pixel 11 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/Q4SHdg39j56f2vhg3S7qSb-1920-80.jpg" mos="" align="middle" fullscreen="" width="4387" height="2468" attribution="" endorsement="" class="inline"></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 a whole, the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-fold-review">Pixel 11 Pro Fold</a> is not that impressive compared to other foldables. Performance is weak; app scaling is a very real problem; and the battery life is not particularly impressive. But there are a lot of benefits to picking up a Google-made foldable instead of one of its rivals. Particularly the AI support, which is some of the best you'll find on any Android thanks to the fact Google is responsible for Pixel phones and Gemini AI.</p><p>The Pixel 11 Pro Fold also features the brightest screen of any foldable, with a 6.5-inch cover display and 8-inch main display, a 5x telephoto lens (with 30x Super Zoom), 16GB of RAM, 25W wireless charging, and the new <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-wrote-and-edited-this-article-with-pixel-11s-rambler-dictation-feature-and-things-did-not-go-according-to-plan">Rambler dictation system</a>. </p><p>On top of that, Google has added a new "app bubbles" system that lets you dock different apps at the bottom of your screen — with the ability to summon them as an extra layer on top of an ordinary split-view mode. There's no stylus support, though.</p><div data-widget-type="review" data-model-name="Google Pixel 11 Pro Fold"></div><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OR9PJW"></div>                            </div>                            <script src="https://kwizly.com/embed/OR9PJW.js" async></script><h2 id="other-foldable-options">Other foldable options</h2><p>The thing about foldable phones is that there are a lot more of them out there than you might realize. In fact, the foldable segment is particularly popular among Chinese brands and some of them actually go on sale outside of the country. Sadly, they can be much harder to find, especially if you live in the U.S. </p><p>That's less of an issue in places like the U.K., and any readers from across the Atlantic should be aware of a couple of extra options that are available to you. Plus, while these phones technically run on Android, the software looks very similar to <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> — which means the shock of switching platforms won't be quite as severe.</p><h3 class="article-body__section" id="section-honor-magic-v6"><span>Honor Magic V6</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4595px;"><p class="vanilla-image-block" style="padding-top:42.85%;"><img id="sG2fsV4Z2onmrx84YtCwuT" name="Honor Magic V6 hands-on_HERO" alt="Honor Magic V6 in tent position" src="https://cdn.mos.cms.futurecdn.net/sG2fsV4Z2onmrx84YtCwuT-1920-80.jpg" mos="" align="middle" fullscreen="" width="4595" height="1969" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The <a href="https://www.tomsguide.com/phones/android-phones/honor-magic-v6-hands-on-review">Honor Magic V6</a> is a foldable that aims to be as premium as possible, particularly in the camera department. This thing packs in 50MP main and ultrawide lenses, alongside a 64MP telephoto camera with 3x optical zoom and a pair of 20MP selfie cameras — one on each screen. </p><p>The software is very reminiscent of iOS, and it features a bunch of stuff that you'd normally only get from an iPhone. That includes the ability to use the V6 as a secondary Mac screen, the inclusion of an Apple-like interface for AirPods and even Apple Watch notification support. Which is astounding for an Android</p><p>As for the screens, you get a 7.95-inch foldable display with anti-reflective coating and a 6.52-inch cover display with anti-scratch coating. Both screens are rated for a respective 5,000 and 6,000 nits. You get stylus support on both displays, and they come wrapped in a shiny gold casing. Add in the swift Snapdragon 8 Elite Gen 5 and up to 16GB of RAM and you have a powerful phone that's ready for AI.</p><div data-widget-type="review" data-model-name="Honor Magic V6"></div><h3 class="article-body__section" id="section-oppo-find-n6"><span>Oppo Find N6 </span></h3><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>Oppo's Find N series has been the gold standard for crease elimination for the past couple of generations, and the <a href="https://www.tomsguide.com/phones/android-phones/i-have-been-testing-oppo-find-n6-crease-free-foldable-phone">Oppo Find N6</a> is the bar at which the iPhone Duo's lack of crease will be judged by. The 8.12-inch foldable screen also features a "self-healing memory glass" which is said to keep that crease away for good. Both it and the 6.62-inch cover display offer stylus support, as well as Dolby Vision and HDR10+.</p><p>As for cameras, you're looking at a 200MP main lens, a 50MP ultrawide and a 50MP telephoto lens with 3x optical zoom. Selfie cameras are both 20MP, using a hole-punch design on each screen. Performance is handled by the Snapdragon 8 Elite Gen 5, in conjunction with either 12 or 16GB of RAM. Meanwhile, there's a monster 6,000 mAh battery inside, complete with 80W wired charging speeds.,</p><div data-widget-type="review" data-model-name="Oppo Find N6"></div><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/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/iphones/iphone-duo-is-impossible-to-buy-right-now-but-these-6-alternatives-are-available-right-now</link>
                                                                            <description>
                            <![CDATA[ iPhone Duo is hard to come by right now, but these six foldables phones are in stock right now — here are the options. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">ZKYXDf7m4XFZJRskju7gzM</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/4RtoBDsrwS8sGu7dtM78Xh-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 23 Oct 2026 04:01:00 +0000</pubDate>                                                                                                                                <updated>Fri, 23 Oct 2026 08:27:52 +0000</updated>
                                                                                                                                            <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f-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/4RtoBDsrwS8sGu7dtM78Xh-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/4RtoBDsrwS8sGu7dtM78Xh-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-review">iPhone Duo</a> is proving <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-wait-times-latest-updates-and-how-to-beat-apples-january-delay">very difficult to come by</a>, and right now, on the official release day, Apple's own delivery estimates stretch into late January of next year. The Duo is, by our metrics, an excellent foldable phone, but it isn't the only option available to you right now. In fact, there are more of the <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">best foldable phones</a> to choose from, none of which have the same availability issues Apple's option is experiencing.</p><p>Obviously these phones have one key difference, in that they run Android rather than Apple's iOS. That is enough to turn off a lot of people, especially if they've been Apple users for a long time. That said, if you're more open to being platform-agnostic, and desperately want to pick up a foldable phone without waiting, you have some options available to you.</p><p>Here are the best iPhone Duo alternatives you can buy today</p><h2 id="best-iphone-duo-alternatives">Best iPhone Duo alternatives</h2><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-8"><span>Samsung Galaxy Z Fold 8</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2878px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="SEkA5wnoLHBqHNAFZEUp8Z" name="Galaxy Z Fold 8 review-6" alt="Galaxy Z Fold 8 shown held in-hand" src="https://cdn.mos.cms.futurecdn.net/SEkA5wnoLHBqHNAFZEUp8Z-1920-80.jpg" mos="" align="middle" fullscreen="" width="2878" 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>If you're looking for another passport-shaped foldable — with a shorter design when closed and widescreen when open — then 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> is easily your best bet. The Z Fold 8 offers a 5.5-inch cover display and 7.6-inch foldable display, which is close in size to the Duo. </p><p>That larger screen packs Samsung's 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> which promises to improve durability and minimize the crease. There's also an anti-reflective coating to prevent glare and help you see what's on screen. The Fold 8 is thinner and lighter than the iPhone Duo, and it lets you three apps at once instead of just two.</p><p>Camera-wise you're looking at a pair of 50MP rear lenses, with main and ultrawide shooters. Like the Duo, <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">there's no telephoto lens</a> for zoomed in shots. Selfie cameras are 10MP each, and you'll find one in both screens — though there's no under-display camera in this one. It's also a lot thinner and lighter than the Duo, and features the performance power of the Snapdragon 8 Elite Gen 5 for Galaxy. </p><p>That's as good as you'll get on an Android phone. Oh, and you get some of the best AI features of any phone, with a price tag that's $100 less than the iPhone Duo.</p><div data-widget-type="review" data-model-name="Samsung Galaxy Z Fold 8"></div><h3 class="article-body__section" id="section-samsung-galaxy-z-fold-8-ultra"><span>Samsung Galaxy Z Fold 8 Ultra</span></h3><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>If you want a foldable that's a little larger than what the Duo has to offer, then <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review" target="_blank">Samsung's Z Fold 8 Ultra</a> is worth considering. It offers all the same features and benefits as the Z Fold 8, albeit without the newly-popular wide design. Instead there's a skinnier 6.5-inch cover display and a 8-inch foldable display on the inside.</p><p>The Z Fold 8 Ultra benefits from better camera hardware, including a 200MP main camera lens and a 10MP telephoto shooter with 3x optical zooming capabilities. On top of that you get a larger battery with 14 hours and 30 minutes of battery life (an hour longer than the iPhone Duo. </p><p>You also get a lightweight and thin frame, and everything Galaxy AI and Google Gemini have to offer. The downside is that Galaxy foldables don't offer stylus support or dust resistance, and the 8 Ultra is $100 more expensive than the iPhone Duo.</p><div data-widget-type="review" data-model-name="Samsung Galaxy Z Fold 8 Ultra"></div><h3 class="article-body__section" id="section-motorola-razr-fold"><span>Motorola Razr Fold</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3896px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="se3bqMdBi7dSZFBpcvBaDj" name="Motorola Razr Fold Review" alt="Motorola Razr Fold Review." src="https://cdn.mos.cms.futurecdn.net/se3bqMdBi7dSZFBpcvBaDj-1920-80.jpg" mos="" align="middle" fullscreen="" width="3896" height="2192" 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>Here's another book-shaped foldable, coming in with the same $1,900 price tag as the iPhone Duo. The <a href="https://www.tomsguide.com/phones/motorola-phones/motorola-razr-fold-review">Motorola Razr Fold</a> puts an emphasis on premium hardware at that base price, with a 6,000 mAh battery (with over 14 hours of life), 80W charging, 512GB of storage and 16GB of RAM that works in conjunction with the Snapdragon 8 Elite Gen 5 chipset. </p><p>Screens are a little bigger, measuring 6.6-inches for the cover display and 8.1-inches for the foldable inner screen. You also get a trio of 50MP cameras, which are complemented by a 32MP inner selfie camera and a 20MP cover screen camera. Optional stylus support, a slightly thinner design than the iPhone Duo, and a bunch of Motorola's AI features round out the perks. </p><div data-widget-type="review" data-model-name="Motorola Razr Fold"></div><h3 class="article-body__section" id="section-google-pixel-11-pro-fold"><span>Google Pixel 11 Pro Fold</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4387px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="Q4SHdg39j56f2vhg3S7qSb" name="Google Pixel 11 Pro Fold-15" alt="Google Pixel 11 Pro Fold" src="https://cdn.mos.cms.futurecdn.net/Q4SHdg39j56f2vhg3S7qSb-1920-80.jpg" mos="" align="middle" fullscreen="" width="4387" height="2468" attribution="" endorsement="" class="inline"></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 a whole, the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-fold-review">Pixel 11 Pro Fold</a> is not that impressive compared to other foldables. Performance is weak; app scaling is a very real problem; and the battery life is not particularly impressive. But there are a lot of benefits to picking up a Google-made foldable instead of one of its rivals. Particularly the AI support, which is some of the best you'll find on any Android thanks to the fact Google is responsible for Pixel phones and Gemini AI.</p><p>The Pixel 11 Pro Fold also features the brightest screen of any foldable, with a 6.5-inch cover display and 8-inch main display, a 5x telephoto lens (with 30x Super Zoom), 16GB of RAM, 25W wireless charging, and the new <a href="https://www.tomsguide.com/phones/google-pixel-phones/i-wrote-and-edited-this-article-with-pixel-11s-rambler-dictation-feature-and-things-did-not-go-according-to-plan">Rambler dictation system</a>. </p><p>On top of that, Google has added a new "app bubbles" system that lets you dock different apps at the bottom of your screen — with the ability to summon them as an extra layer on top of an ordinary split-view mode. There's no stylus support, though.</p><div data-widget-type="review" data-model-name="Google Pixel 11 Pro Fold"></div><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OR9PJW"></div>                            </div>                            <script src="https://kwizly.com/embed/OR9PJW.js" async></script><h2 id="other-foldable-options">Other foldable options</h2><p>The thing about foldable phones is that there are a lot more of them out there than you might realize. In fact, the foldable segment is particularly popular among Chinese brands and some of them actually go on sale outside of the country. Sadly, they can be much harder to find, especially if you live in the U.S. </p><p>That's less of an issue in places like the U.K., and any readers from across the Atlantic should be aware of a couple of extra options that are available to you. Plus, while these phones technically run on Android, the software looks very similar to <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> — which means the shock of switching platforms won't be quite as severe.</p><h3 class="article-body__section" id="section-honor-magic-v6"><span>Honor Magic V6</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4595px;"><p class="vanilla-image-block" style="padding-top:42.85%;"><img id="sG2fsV4Z2onmrx84YtCwuT" name="Honor Magic V6 hands-on_HERO" alt="Honor Magic V6 in tent position" src="https://cdn.mos.cms.futurecdn.net/sG2fsV4Z2onmrx84YtCwuT-1920-80.jpg" mos="" align="middle" fullscreen="" width="4595" height="1969" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The <a href="https://www.tomsguide.com/phones/android-phones/honor-magic-v6-hands-on-review">Honor Magic V6</a> is a foldable that aims to be as premium as possible, particularly in the camera department. This thing packs in 50MP main and ultrawide lenses, alongside a 64MP telephoto camera with 3x optical zoom and a pair of 20MP selfie cameras — one on each screen. </p><p>The software is very reminiscent of iOS, and it features a bunch of stuff that you'd normally only get from an iPhone. That includes the ability to use the V6 as a secondary Mac screen, the inclusion of an Apple-like interface for AirPods and even Apple Watch notification support. Which is astounding for an Android</p><p>As for the screens, you get a 7.95-inch foldable display with anti-reflective coating and a 6.52-inch cover display with anti-scratch coating. Both screens are rated for a respective 5,000 and 6,000 nits. You get stylus support on both displays, and they come wrapped in a shiny gold casing. Add in the swift Snapdragon 8 Elite Gen 5 and up to 16GB of RAM and you have a powerful phone that's ready for AI.</p><div data-widget-type="review" data-model-name="Honor Magic V6"></div><h3 class="article-body__section" id="section-oppo-find-n6"><span>Oppo Find N6 </span></h3><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>Oppo's Find N series has been the gold standard for crease elimination for the past couple of generations, and the <a href="https://www.tomsguide.com/phones/android-phones/i-have-been-testing-oppo-find-n6-crease-free-foldable-phone">Oppo Find N6</a> is the bar at which the iPhone Duo's lack of crease will be judged by. The 8.12-inch foldable screen also features a "self-healing memory glass" which is said to keep that crease away for good. Both it and the 6.62-inch cover display offer stylus support, as well as Dolby Vision and HDR10+.</p><p>As for cameras, you're looking at a 200MP main lens, a 50MP ultrawide and a 50MP telephoto lens with 3x optical zoom. Selfie cameras are both 20MP, using a hole-punch design on each screen. Performance is handled by the Snapdragon 8 Elite Gen 5, in conjunction with either 12 or 16GB of RAM. Meanwhile, there's a monster 6,000 mAh battery inside, complete with 80W wired charging speeds.,</p><div data-widget-type="review" data-model-name="Oppo Find N6"></div><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/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[ Couldn't pre-order iPhone Duo? Your local Apple Store may have stock tomorrow — but only in limited numbers ]]></title>
                                                                                                <dc:content><![CDATA[ <p>If you haven't been able to get yourself an <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-review">iPhone Duo</a>, and you'd rather not wait for different retailers and carriers to get them back in stock, I have some good news — and some bad news. The good news is that Apple has confirmed some walk-in customers will be able to buy an iPhone Duo on launch day (October 23). The bad news is that supply will be limited.</p><p>Apple confirmed this to <a href="https://www.macrumors.com/2026/10/21/apple-stores-limited-iphone-duo-for-walk-in/" target="_blank">MacRumors</a>, with a spokesperson reiterating that some countries will be able to sell iPhone Duo units to walk-in customers — meaning those people who do not have a valid pre-order or confirmed collection booked.</p><p>"On Friday morning, our teams look forward to welcoming customers at Apple Stores to experience iPhone Duo and the incredible iPhone line-up for themselves," the statement reads. "Apple Stores will have limited iPhone Duo available for walk-in customers, and we're working hard to get this revolutionary new product into customers' hands as quickly as possible."</p><h2 id="what-we-know-about-in-store-iphone-duo-stock">What we know about in-store iPhone Duo stock</h2><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="uXcmimb2Hbxp2mcLVmVCHC" name="Apple iPhone Duo-24" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/uXcmimb2Hbxp2mcLVmVCHC-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>Countries confirmed to get walk-in stock include:</p><ul><li>United States</li><li>United Kingdom</li><li>Australia</li><li>Austria</li><li>Belgium</li><li>Canada</li><li>Mexico</li><li>Germany</li><li>Netherlands</li><li>Singapore</li><li>Spain</li><li>Sweden</li><li>Switzerland</li><li>Türkiye</li></ul><p>Certain Italian Apple Stores will also have stock, but Apple hasn't specified which ones. </p><p>We don't know how limited the supply of in-store iPhone Duos will be, but Apple has said that they'll only be available on launch day. My guess is that, given the sheer amount of demand for the iPhone Duo, Apple is simply assuming that stores will sell out on day one. I'd be surprised if they still had walk-in Duo units available by lunchtime, to be perfectly honest.</p><p>If you're planning on picking up an iPhone Duo from the Apple Store, my advice would be to get there early and try to be first in line — or as close as you can be. Obviously your success is going to differ depending on the rules at that specific store, and the mall many of them are located inside.</p><p>Apple has previously told customers to check back on October 24 (Saturday) if they want to try and get a pickup reservation, but it's unclear if any will actually be available if units all sell out tomorrow. It's equally unclear as to whether customers will be able to reserve an in-store pickup tomorrow, and secure a Duo without setting up camp outside the front door. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-O6y7AW"></div>                            </div>                            <script src="https://kwizly.com/embed/O6y7AW.js" async></script><h2 id="apple-39-s-ordering-even-more-duo-units">Apple's ordering even more Duo units</h2><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="GkekestwUzwcBHtU776KEC" name="Apple iPhone Duo-20" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/GkekestwUzwcBHtU776KEC-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>Obviously, demand has been extremely high, and Apple has described it as "nothing short of extraordinary." To the point where we've already heard claims Apple could be increasing its iPhone Duo order to 10 million units, or <a href="https://www.tomsguide.com/phones/iphones/apple-increases-iphone-duo-production-by-30-percent-heres-what-that-means-for-you">roughly 30% more </a>than it reportedly wanted for the remainder of 2026. </p><p>In fact, a report from <a href="https://www.digitimes.com/news/a20261022PD219/iphone-apple-shipments-demand-foldable.html">DigiTimes</a> claims Apple is raising that figure to <em>14 million units</em>. That order apparently covers the next 12 months, rather than the several weeks left of the calendar year. If things all go according to plan, this should help ease the supply issues Apple is facing over time. </p><p>DigiTimes did note that the actual output will depend on the assembly process, and whether Apple can overcome the challenges it's reported to have faced since the Duo entered mass production earlier this year.</p><p>Not that this actually helps you pick up an iPhone Duo on launch day. For that, you're going to have to head to the Apple Store ahead of opening time and hope for the best. Or you can check out our ever-updating list of <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-wait-times-latest-updates-and-how-to-beat-apples-january-delay">when all the major retailers and carriers are expecting to deliver new iPhone Duo orders.</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/lefties-are-out-of-luck-with-the-iphone-duo-but-apple-plans-to-add-reachability-features-later-this-year">Lefties are out of luck with the iPhone Duo, but Apple plans to add reachability features later this year</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/polished-but-rough-the-common-flaws-in-the-iphone-duo-found-by-nine-different-reviewers">'Polished but rough': The common flaws in the iPhone Duo found by nine different reviewers</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/couldnt-get-an-iphone-duo-for-launch-day-your-local-apple-store-may-have-some-in-stock-tomorrow-but-only-in-limited-numbers</link>
                                                                            <description>
                            <![CDATA[ Some lucky people may be able to grab an iPhone Duo from the Apple Store — but don't expect an unlimited supply. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">x9SvVnPgynpXYKWpAQd2X4</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/ZhFuJYhmVGtqxQkRvR5EwU-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 22 Oct 2026 11:04:31 +0000</pubDate>                                                                                                                                <updated>Thu, 22 Oct 2026 12:11:03 +0000</updated>
                                                                                                                                            <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f-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/ZhFuJYhmVGtqxQkRvR5EwU-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPhone Duo]]></media:description>                                                            <media:text><![CDATA[iPhone Duo]]></media:text>
                                <media:title type="plain"><![CDATA[iPhone Duo]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/ZhFuJYhmVGtqxQkRvR5EwU-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>If you haven't been able to get yourself an <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-review">iPhone Duo</a>, and you'd rather not wait for different retailers and carriers to get them back in stock, I have some good news — and some bad news. The good news is that Apple has confirmed some walk-in customers will be able to buy an iPhone Duo on launch day (October 23). The bad news is that supply will be limited.</p><p>Apple confirmed this to <a href="https://www.macrumors.com/2026/10/21/apple-stores-limited-iphone-duo-for-walk-in/" target="_blank">MacRumors</a>, with a spokesperson reiterating that some countries will be able to sell iPhone Duo units to walk-in customers — meaning those people who do not have a valid pre-order or confirmed collection booked.</p><p>"On Friday morning, our teams look forward to welcoming customers at Apple Stores to experience iPhone Duo and the incredible iPhone line-up for themselves," the statement reads. "Apple Stores will have limited iPhone Duo available for walk-in customers, and we're working hard to get this revolutionary new product into customers' hands as quickly as possible."</p><h2 id="what-we-know-about-in-store-iphone-duo-stock">What we know about in-store iPhone Duo stock</h2><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="uXcmimb2Hbxp2mcLVmVCHC" name="Apple iPhone Duo-24" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/uXcmimb2Hbxp2mcLVmVCHC-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>Countries confirmed to get walk-in stock include:</p><ul><li>United States</li><li>United Kingdom</li><li>Australia</li><li>Austria</li><li>Belgium</li><li>Canada</li><li>Mexico</li><li>Germany</li><li>Netherlands</li><li>Singapore</li><li>Spain</li><li>Sweden</li><li>Switzerland</li><li>Türkiye</li></ul><p>Certain Italian Apple Stores will also have stock, but Apple hasn't specified which ones. </p><p>We don't know how limited the supply of in-store iPhone Duos will be, but Apple has said that they'll only be available on launch day. My guess is that, given the sheer amount of demand for the iPhone Duo, Apple is simply assuming that stores will sell out on day one. I'd be surprised if they still had walk-in Duo units available by lunchtime, to be perfectly honest.</p><p>If you're planning on picking up an iPhone Duo from the Apple Store, my advice would be to get there early and try to be first in line — or as close as you can be. Obviously your success is going to differ depending on the rules at that specific store, and the mall many of them are located inside.</p><p>Apple has previously told customers to check back on October 24 (Saturday) if they want to try and get a pickup reservation, but it's unclear if any will actually be available if units all sell out tomorrow. It's equally unclear as to whether customers will be able to reserve an in-store pickup tomorrow, and secure a Duo without setting up camp outside the front door. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-O6y7AW"></div>                            </div>                            <script src="https://kwizly.com/embed/O6y7AW.js" async></script><h2 id="apple-39-s-ordering-even-more-duo-units">Apple's ordering even more Duo units</h2><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="GkekestwUzwcBHtU776KEC" name="Apple iPhone Duo-20" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/GkekestwUzwcBHtU776KEC-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>Obviously, demand has been extremely high, and Apple has described it as "nothing short of extraordinary." To the point where we've already heard claims Apple could be increasing its iPhone Duo order to 10 million units, or <a href="https://www.tomsguide.com/phones/iphones/apple-increases-iphone-duo-production-by-30-percent-heres-what-that-means-for-you">roughly 30% more </a>than it reportedly wanted for the remainder of 2026. </p><p>In fact, a report from <a href="https://www.digitimes.com/news/a20261022PD219/iphone-apple-shipments-demand-foldable.html">DigiTimes</a> claims Apple is raising that figure to <em>14 million units</em>. That order apparently covers the next 12 months, rather than the several weeks left of the calendar year. If things all go according to plan, this should help ease the supply issues Apple is facing over time. </p><p>DigiTimes did note that the actual output will depend on the assembly process, and whether Apple can overcome the challenges it's reported to have faced since the Duo entered mass production earlier this year.</p><p>Not that this actually helps you pick up an iPhone Duo on launch day. For that, you're going to have to head to the Apple Store ahead of opening time and hope for the best. Or you can check out our ever-updating list of <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-wait-times-latest-updates-and-how-to-beat-apples-january-delay">when all the major retailers and carriers are expecting to deliver new iPhone Duo orders.</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/lefties-are-out-of-luck-with-the-iphone-duo-but-apple-plans-to-add-reachability-features-later-this-year">Lefties are out of luck with the iPhone Duo, but Apple plans to add reachability features later this year</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/polished-but-rough-the-common-flaws-in-the-iphone-duo-found-by-nine-different-reviewers">'Polished but rough': The common flaws in the iPhone Duo found by nine different reviewers</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Ditch the data center: I fired my cloud chatbot and built a free local AI agent to run on my PC — and you can too ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Right now, you are probably paying a monthly subscription to rent a sliver of a server farm in middle America. You ask a cloud chatbot to write an email, it pings a data center and you get an answer.</p><p>It’s fast, magical and a <strong>massive trap.</strong></p><p>We are handing our personal data, our workflows and our wallets over to massive tech conglomerates, and for what? To prop up a cloud AI bubble that looks ripe for bursting, encourage more aggressive build-outs of data centers nobody wants, and feed an ever-learning black box with more and more of our sensitive information.</p><p>But there’s a different way. It’s a way I’ve always believed in. <strong>The future of AI is local.</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="smbPnamxm3PGHaCLBJQsR9" name="Nvidia RTX Spark" alt="Nvidia RTX Spark" src="https://cdn.mos.cms.futurecdn.net/smbPnamxm3PGHaCLBJQsR9-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>After spending the past two weeks stress-testing the new <a href="https://www.tomsguide.com/computing/cpus/ive-been-living-with-nvidias-rtx-spark-for-a-week-on-surface-laptop-ultra-its-not-a-macbook-pro-killer-but-something-much-weirder-and-wildly-powerful">Nvidia RTX Spark laptops</a> — and with <a href="https://www.tomsguide.com/computing/macbooks/macbook-pro-oled-all-the-expected-features">Apple’s M6 MacBook Pro</a> rumored to arrive next week with vast AI acceleration — the hardware has finally crossed the threshold.</p><p>You no longer need the cloud. It’s time to build your own personal, local moat. But to do so the <em>right </em>way is different to what you’re used to. And I’m going to start from the beginning and break some things down for you.</p><h2 class="article-body__section" id="section-what-is-an-ai-agent"><span>What is an AI agent?</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="dKVDgYKCQMbbRLyrUpNXQU" name="shutterstock_2615992757-2" alt="ai agents" src="https://cdn.mos.cms.futurecdn.net/dKVDgYKCQMbbRLyrUpNXQU-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: Shutterstock)</span></figcaption></figure><p>A standard chatbot waits for you to ask a question. An <em>agentic </em>AI has autonomy.</p><p>You give it a goal, a set of tools (like access to your file system or a web browser) and permission to execute tasks on its own using a ReAct (Reason + Act) loop. It thinks, acts, checks its work, and continues until the job is done.</p><p>Now, this is all fair and good, and you see cloud options available like <a href="https://www.tomsguide.com/ai/i-used-meta-muse-as-an-ai-house-manager-for-my-family-of-five-heres-what-happened">Meta Muse</a>. But I’ll be real, the difference in control and privacy between a zippy cloud agent and a local agent makes the time you’ll wait for your on-device one to get things done well worth the wait.</p><p><strong>P.S.</strong> you can make time for other fun things while it works away, but I’ll get to that.</p><h2 class="article-body__section" id="section-how-to-set-it-up-the-hermes-agent-method"><span>How to set it up (the Hermes Agent method)</span></h2><p>Now I know there’s going to be several enthusiasts out there who may have a debate about which is best between the likes of <a href="https://www.tomsguide.com/computing/cpus/ive-been-living-with-nvidias-rtx-spark-for-a-week-on-surface-laptop-ultra-its-not-a-macbook-pro-killer-but-something-much-weirder-and-wildly-powerful">Hermes Agent</a>, <a href="https://www.tomsguide.com/ai/i-tested-the-viral-ai-agent-that-could-replace-apps-and-it-made-me-appreciate-my-computer-without-it">OpenClaw</a> or <a href="https://www.tomsguide.com/ai/i-tested-local-ai-vs-chatgpt-side-by-side-here-are-the-7-biggest-differences">LM Studio Bionic</a>. Ultimately, this is personal taste and (in my opinion) the easiest to transition to from using a cloud AI like my Gemini Pro subscription.</p><section class="howto-block">                    <h3>Download Hermes Agent</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/gMAtfsupYFiQjuJMfwCWPN.jpg"                                        alt="Hermes Agent"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/gMAtfsupYFiQjuJMfwCWPN.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p>It’s a clean, open-source local installation that runs on Windows and Mac. Just <a href="https://www.hermes-agent.org/" target="_blank">download the package and install.</a></p></p>                </section><section class="howto-block">                    <h3>Set it up</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/oaktGZ8yyAFCDeTQG7fFPN.jpg"                                        alt="Hermes Agent"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/oaktGZ8yyAFCDeTQG7fFPN.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p>Hermes Agent has a simple setup process where it’ll ask your name, what app connectors you want to download (the things it can see and interact with), and a color for your app’s overall theme.</p></p>                </section><section class="howto-block">                    <h3>Pick your brain</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/WKF5nQXH5HLcUDZwxM23yM.jpg"                                        alt="Hermes Agent"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/WKF5nQXH5HLcUDZwxM23yM.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p>Go into settings > provider and select “local.” From there, head to model and download a local one to act as the agent’s brain.</p></p>                </section><p>Your choice here will depend entirely on your laptop’s memory:</p><ul><li><strong>8-16GB RAM: </strong>Stick to smaller 7-8B parameter models like<strong> Llama 3.1 8B </strong>(as of the time of writing this). They are lightweight and fast for quick tasks, but prone to getting confused if you throw anything complex at it.</li><li><strong>32-64GB RAM: </strong>The sweet spot. You can run 30B-70B parameter models like the<strong> Qwen 3.8 27B </strong>option I’ve been running on this Asus ProArt P14 I’m testing.</li><li><strong>128GB+ RAM: </strong>The monster tier. Chances are you already know full well what you aim to do with AI with this much memory. But to catch everyone else up, you can run massive, enterprise-grade models like<strong> Qwen 3.8 Flash-Next </strong>— that can rival GPT-4, completely offline.</li></ul><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="JJNziVZ2JqeXM5WcnKUYNN" name="Hermes Agent" alt="Hermes Agent" src="https://cdn.mos.cms.futurecdn.net/JJNziVZ2JqeXM5WcnKUYNN-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>Now this is the world of open source, so there’s <em>so </em>many to choose from. A great source of reference is going to be <a href="http://modelfit.io" target="_blank">modelfit.io</a>. I used it when I got properly started!</p><h3 class="article-body__section" id="section-how-to-shrink-a-brain-quantization"><span>How to shrink a brain (quantization)</span></h3><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="nkmr599UYtxFv3rRMmYQK9" name="Nvidia RTX Spark" alt="Nvidia RTX Spark" src="https://cdn.mos.cms.futurecdn.net/nkmr599UYtxFv3rRMmYQK9-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>Now, there is an extra wrinkle to this that you need to pay attention to. There are some models that sound like massive, multi-billion parameter options that usually require a refrigerator-sized server rack. How does it fit on your laptop?</p><p>The secret is a process called <strong>quantization.</strong></p><p>Think of quantization like shrinking down a massive, uncompressed RAW photograph into a JPEG. The AI engineers take the incredibly precise, memory-hogging mathematical weights of a model and round them down. You lose a microscopic fraction of absolute precision, but the file size shrinks drastically.</p><p>For the ProArt P14, I am downloading a model called Qwen3.8-27b-gguf Q3_K_XL. To translate that alphabet soup: it’s a brilliant 27-billion parameter model that has been quantized (that’s the Q3 part) so perfectly that it fits entirely within the 32GB of RAM.</p><p><strong>Pro tip: </strong>When you go to download your models, look for those “GGUF” and “Q” tags — they are the cheat codes that let massive AI brains run on consumer hardware.</p><h2 class="article-body__section" id="section-cloud-vs-local-the-coffee-break-rule"><span>Cloud vs. Local: the coffee break rule</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="agfTw54oiM8zjbm6XiaCPN" name="Hermes Agent" alt="Hermes Agent" src="https://cdn.mos.cms.futurecdn.net/agfTw54oiM8zjbm6XiaCPN-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>There are two big differences I found between using cloud and local AI. The first is speed. </p><p>Cloud AI is instantaneous — throwing vast data center computing power at your prompt to give you a millisecond response. Local AI runs on your laptop’s silicon, so naturally it’s slower.</p><p>If I ask my local agent to parse a 50-page PDF and cross-reference it with my calendar, it might take three to four minutes, whereas on cloud that’d happen in 30-60 seconds. </p><p>It’s slower for sure, but a trade-off I’d absolutely make for the reasons I spoke about up top: privacy, and the ability to build my own personal brain without spending a penny for the tokens I burn.</p><p>And when it gets more complex — like me tasking my team of agents to go through my emails and calendar, take note of the previous meetings I had, understand the context of the wider world of tech news, track any analytical trends in the site’s traffic and craft my day of work, it can take a little bit of time.</p><p>The trick is to treat it like a real assistant: give it the task that would’ve normally taken you a while to do yourself, and spend that time doing something else. For me, it’s that calm breakfast in the morning or a walk around the park. And by the time you sit back down at your desk, the work is done.</p><h3 class="article-body__section" id="section-the-4-rules-of-parenting-a-local-ai"><span>The 4 rules of “parenting” a local AI</span></h3><p>Beyond that speed difference, you have to completely rewire how you talk to your computer. Cloud AIs are designed to be frictionless, constantly updated by engineers behind the scenes. Local AI is like a raw blank slate. It’s only as useful as what you give it, so follow these four rules:</p><h2 id="you-are-the-sole-provider-of-its-data-diet">You are the sole provider of its data diet</h2><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="dDfGksj4sSxc4oD3k5Ffu8" name="Nvidia RTX Spark" alt="Nvidia RTX Spark" src="https://cdn.mos.cms.futurecdn.net/dDfGksj4sSxc4oD3k5Ffu8-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>Cloud AI is constantly scraping the internet and updating its worldview. Your local AI is completely isolated. It only knows what you feed it. </p><p>If you want it to understand how you format invoices, or the specific tone you use in emails, you have to explicitly provide those documents. It isn’t going to magically know you from the get-go.</p><h2 id="make-your-prompts-hyper-specific">Make your prompts hyper-specific</h2><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="CMvweX3ByQqQGuBRKXQ6PN" name="Hermes Agent" alt="Hermes Agent" src="https://cdn.mos.cms.futurecdn.net/CMvweX3ByQqQGuBRKXQ6PN-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>Since cloud AIs have billions (maybe trillions) of data points of context, they can read between the lines of those vague, half-baked questions you have. </p><p>Local AI is intensely literal. If you give it sparse instructions, it will give you a sparse, unhelpful output. Instead of “organize my downloads,” think “organize my downloads by file type and rename them to be more contextual with what they are.”</p><h2 id="the-carrot-not-the-stick-reinforcement">The carrot, not the stick (reinforcement)</h2><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="xfNXrR3xfBFpSjYWU3w6AD" name="Hermes Agent" alt="Hermes Agent" src="https://cdn.mos.cms.futurecdn.net/xfNXrR3xfBFpSjYWU3w6AD-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>To highlight, I don’t mean the “reinforcement learning” AI engineers are doing across the globe on frontier AI, I mean like I learned from teaching my nephew new skills. Something more human. You have to tell local AI to remember the victory. </p><p>If it nails that spreadsheet format exactly as you wanted it, reply with: “This is perfect. Save the way you did this into your memory.” Give it a treat so it repeats the behavior.</p><p>BTW, you don't need to give the agents names like I did. It just helps me organize them.</p><h2 id="build-its-mind-map-in-obsidian">Build its mind map in Obsidian</h2><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="YKbzTpLjz827z2kgb4NsfM" name="Hermes Agent" alt="Hermes Agent" src="https://cdn.mos.cms.futurecdn.net/YKbzTpLjz827z2kgb4NsfM-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>An AI without a long-term memory is just a calculator. To make it genuinely useful, give it a digital filing cabinet. I use <a href="https://obsidian.md/" target="_blank">Obsidian</a>, a free markdown note-taking app that saves files locally to your storage. </p><p>Just point your Hermes agent at Obsidian with a prompt like “can you take everything you’ve learned about me over our past interactions and put it into an Obsidian vault?” And from there, you’ll see the synapses start to form and connect.</p><h2 class="article-body__section" id="section-the-economics-of-owning-your-own-brain"><span>The economics of owning your own brain</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="yDsc4To3fThmCezy6SBUL8" name="Nvidia-2" alt="Nvidia RTX Spark laptop" src="https://cdn.mos.cms.futurecdn.net/yDsc4To3fThmCezy6SBUL8-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>Now, before I sign off on part one, let’s address the elephant in the room: hardware is expensive. It’s actually one of the reasons I believe the future of AI is local, because these damn cloud AI infrastructures have jacked up the price of memory!</p><p>But you have to look at the math of the cloud tax. Right now, you’re probably paying $20 a month for a mid-premium tier service, and if you try to do anything more adventurous, you’re met with limitations.</p><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="auFZPRTucNhgQGbSsg5SYg" name="Nvidia RTX Spark for a week" alt="Nvidia RTX Spark" src="https://cdn.mos.cms.futurecdn.net/auFZPRTucNhgQGbSsg5SYg-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>That’s hundreds of dollars a year in digital rent just to borrow someone else’s server. When you run local AI, the ongoing cost is <strong>zero. </strong>That means no limitations on what you can do, no restrictions on the amount of images and videos you can generate in Comfy UI. You buy the hardware once, and the open-source software is free.</p><p>It’s the difference between renting a cramped apartment where your landlord reads your mail, versus owning your own house. Over a two-to-three-year laptop upgrade cycle, this machine pays for itself in canceled subscriptions — provided you know how to use it.</p><h2 class="article-body__section" id="section-outlook"><span>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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="fzLwFVKeCvJejaXimCGG3G" name="Hermes Agent" alt="Hermes Agent" src="https://cdn.mos.cms.futurecdn.net/fzLwFVKeCvJejaXimCGG3G-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>And that’s what I’m here to do. Over the next few weeks, I’ll give you a look into my local AI workspace, introduce you to my first agent “Jeeves” and the rest of my team, and show you how to extract the most value out of it really easily.</p><p>It’s going to be a journey, and I can’t wait to see what you come up with. But any questions whatsoever, throw them 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/ai/would-you-give-up-chatgpt-to-stop-ai-data-centers-reddits-answer-was-brutal"><strong>Would you give up ChatGPT to stop AI data centers? Reddit's answer was brutal</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/ai/chatbots-and-agents-like-muse-are-getting-a-face-but-does-that-make-us-trust-them-more-heres-what-this-ai-expert-had-to-say"><strong>Chatbots and agents like Muse are getting a face — but does that make us trust them more? Here's what this AI expert had to say</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/ai/joseph-gordon-levitt-warns-the-real-ai-threat-isnt-killer-robots-its-the-companies-building-them"><strong>Joseph Gordon-Levitt warns the real AI threat isn’t killer robots — it’s the companies building them</strong></a><strong></strong></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/ai/ditch-the-data-center-i-fired-my-cloud-chatbot-and-built-a-free-local-ai-agent-to-run-on-my-pc-and-you-can-too</link>
                                                                            <description>
                            <![CDATA[ Ditch the cloud subscription tax. Here is how I fired my cloud chatbot, built a free local AI agent on my PC with Hermes, and took back my data privacy. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">Bi44wEkAihvUhRFFUb7ZTn</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/doqhdCzqgVbj6K7mL5m6L8-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 22 Oct 2026 10:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[AI]]></category>
                                                    <category><![CDATA[Computing]]></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/doqhdCzqgVbj6K7mL5m6L8-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Nvidia RTX Spark laptop]]></media:description>                                                            <media:text><![CDATA[Nvidia RTX Spark laptop]]></media:text>
                                <media:title type="plain"><![CDATA[Nvidia RTX Spark laptop]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/doqhdCzqgVbj6K7mL5m6L8-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Right now, you are probably paying a monthly subscription to rent a sliver of a server farm in middle America. You ask a cloud chatbot to write an email, it pings a data center and you get an answer.</p><p>It’s fast, magical and a <strong>massive trap.</strong></p><p>We are handing our personal data, our workflows and our wallets over to massive tech conglomerates, and for what? To prop up a cloud AI bubble that looks ripe for bursting, encourage more aggressive build-outs of data centers nobody wants, and feed an ever-learning black box with more and more of our sensitive information.</p><p>But there’s a different way. It’s a way I’ve always believed in. <strong>The future of AI is local.</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="smbPnamxm3PGHaCLBJQsR9" name="Nvidia RTX Spark" alt="Nvidia RTX Spark" src="https://cdn.mos.cms.futurecdn.net/smbPnamxm3PGHaCLBJQsR9-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>After spending the past two weeks stress-testing the new <a href="https://www.tomsguide.com/computing/cpus/ive-been-living-with-nvidias-rtx-spark-for-a-week-on-surface-laptop-ultra-its-not-a-macbook-pro-killer-but-something-much-weirder-and-wildly-powerful">Nvidia RTX Spark laptops</a> — and with <a href="https://www.tomsguide.com/computing/macbooks/macbook-pro-oled-all-the-expected-features">Apple’s M6 MacBook Pro</a> rumored to arrive next week with vast AI acceleration — the hardware has finally crossed the threshold.</p><p>You no longer need the cloud. It’s time to build your own personal, local moat. But to do so the <em>right </em>way is different to what you’re used to. And I’m going to start from the beginning and break some things down for you.</p><h2 class="article-body__section" id="section-what-is-an-ai-agent"><span>What is an AI agent?</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="dKVDgYKCQMbbRLyrUpNXQU" name="shutterstock_2615992757-2" alt="ai agents" src="https://cdn.mos.cms.futurecdn.net/dKVDgYKCQMbbRLyrUpNXQU-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: Shutterstock)</span></figcaption></figure><p>A standard chatbot waits for you to ask a question. An <em>agentic </em>AI has autonomy.</p><p>You give it a goal, a set of tools (like access to your file system or a web browser) and permission to execute tasks on its own using a ReAct (Reason + Act) loop. It thinks, acts, checks its work, and continues until the job is done.</p><p>Now, this is all fair and good, and you see cloud options available like <a href="https://www.tomsguide.com/ai/i-used-meta-muse-as-an-ai-house-manager-for-my-family-of-five-heres-what-happened">Meta Muse</a>. But I’ll be real, the difference in control and privacy between a zippy cloud agent and a local agent makes the time you’ll wait for your on-device one to get things done well worth the wait.</p><p><strong>P.S.</strong> you can make time for other fun things while it works away, but I’ll get to that.</p><h2 class="article-body__section" id="section-how-to-set-it-up-the-hermes-agent-method"><span>How to set it up (the Hermes Agent method)</span></h2><p>Now I know there’s going to be several enthusiasts out there who may have a debate about which is best between the likes of <a href="https://www.tomsguide.com/computing/cpus/ive-been-living-with-nvidias-rtx-spark-for-a-week-on-surface-laptop-ultra-its-not-a-macbook-pro-killer-but-something-much-weirder-and-wildly-powerful">Hermes Agent</a>, <a href="https://www.tomsguide.com/ai/i-tested-the-viral-ai-agent-that-could-replace-apps-and-it-made-me-appreciate-my-computer-without-it">OpenClaw</a> or <a href="https://www.tomsguide.com/ai/i-tested-local-ai-vs-chatgpt-side-by-side-here-are-the-7-biggest-differences">LM Studio Bionic</a>. Ultimately, this is personal taste and (in my opinion) the easiest to transition to from using a cloud AI like my Gemini Pro subscription.</p><section class="howto-block">                    <h3>Download Hermes Agent</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/gMAtfsupYFiQjuJMfwCWPN.jpg"                                        alt="Hermes Agent"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/gMAtfsupYFiQjuJMfwCWPN.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p>It’s a clean, open-source local installation that runs on Windows and Mac. Just <a href="https://www.hermes-agent.org/" target="_blank">download the package and install.</a></p></p>                </section><section class="howto-block">                    <h3>Set it up</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/oaktGZ8yyAFCDeTQG7fFPN.jpg"                                        alt="Hermes Agent"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/oaktGZ8yyAFCDeTQG7fFPN.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p>Hermes Agent has a simple setup process where it’ll ask your name, what app connectors you want to download (the things it can see and interact with), and a color for your app’s overall theme.</p></p>                </section><section class="howto-block">                    <h3>Pick your brain</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/WKF5nQXH5HLcUDZwxM23yM.jpg"                                        alt="Hermes Agent"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/WKF5nQXH5HLcUDZwxM23yM.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p>Go into settings > provider and select “local.” From there, head to model and download a local one to act as the agent’s brain.</p></p>                </section><p>Your choice here will depend entirely on your laptop’s memory:</p><ul><li><strong>8-16GB RAM: </strong>Stick to smaller 7-8B parameter models like<strong> Llama 3.1 8B </strong>(as of the time of writing this). They are lightweight and fast for quick tasks, but prone to getting confused if you throw anything complex at it.</li><li><strong>32-64GB RAM: </strong>The sweet spot. You can run 30B-70B parameter models like the<strong> Qwen 3.8 27B </strong>option I’ve been running on this Asus ProArt P14 I’m testing.</li><li><strong>128GB+ RAM: </strong>The monster tier. Chances are you already know full well what you aim to do with AI with this much memory. But to catch everyone else up, you can run massive, enterprise-grade models like<strong> Qwen 3.8 Flash-Next </strong>— that can rival GPT-4, completely offline.</li></ul><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="JJNziVZ2JqeXM5WcnKUYNN" name="Hermes Agent" alt="Hermes Agent" src="https://cdn.mos.cms.futurecdn.net/JJNziVZ2JqeXM5WcnKUYNN-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>Now this is the world of open source, so there’s <em>so </em>many to choose from. A great source of reference is going to be <a href="http://modelfit.io" target="_blank">modelfit.io</a>. I used it when I got properly started!</p><h3 class="article-body__section" id="section-how-to-shrink-a-brain-quantization"><span>How to shrink a brain (quantization)</span></h3><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="nkmr599UYtxFv3rRMmYQK9" name="Nvidia RTX Spark" alt="Nvidia RTX Spark" src="https://cdn.mos.cms.futurecdn.net/nkmr599UYtxFv3rRMmYQK9-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>Now, there is an extra wrinkle to this that you need to pay attention to. There are some models that sound like massive, multi-billion parameter options that usually require a refrigerator-sized server rack. How does it fit on your laptop?</p><p>The secret is a process called <strong>quantization.</strong></p><p>Think of quantization like shrinking down a massive, uncompressed RAW photograph into a JPEG. The AI engineers take the incredibly precise, memory-hogging mathematical weights of a model and round them down. You lose a microscopic fraction of absolute precision, but the file size shrinks drastically.</p><p>For the ProArt P14, I am downloading a model called Qwen3.8-27b-gguf Q3_K_XL. To translate that alphabet soup: it’s a brilliant 27-billion parameter model that has been quantized (that’s the Q3 part) so perfectly that it fits entirely within the 32GB of RAM.</p><p><strong>Pro tip: </strong>When you go to download your models, look for those “GGUF” and “Q” tags — they are the cheat codes that let massive AI brains run on consumer hardware.</p><h2 class="article-body__section" id="section-cloud-vs-local-the-coffee-break-rule"><span>Cloud vs. Local: the coffee break rule</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="agfTw54oiM8zjbm6XiaCPN" name="Hermes Agent" alt="Hermes Agent" src="https://cdn.mos.cms.futurecdn.net/agfTw54oiM8zjbm6XiaCPN-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>There are two big differences I found between using cloud and local AI. The first is speed. </p><p>Cloud AI is instantaneous — throwing vast data center computing power at your prompt to give you a millisecond response. Local AI runs on your laptop’s silicon, so naturally it’s slower.</p><p>If I ask my local agent to parse a 50-page PDF and cross-reference it with my calendar, it might take three to four minutes, whereas on cloud that’d happen in 30-60 seconds. </p><p>It’s slower for sure, but a trade-off I’d absolutely make for the reasons I spoke about up top: privacy, and the ability to build my own personal brain without spending a penny for the tokens I burn.</p><p>And when it gets more complex — like me tasking my team of agents to go through my emails and calendar, take note of the previous meetings I had, understand the context of the wider world of tech news, track any analytical trends in the site’s traffic and craft my day of work, it can take a little bit of time.</p><p>The trick is to treat it like a real assistant: give it the task that would’ve normally taken you a while to do yourself, and spend that time doing something else. For me, it’s that calm breakfast in the morning or a walk around the park. And by the time you sit back down at your desk, the work is done.</p><h3 class="article-body__section" id="section-the-4-rules-of-parenting-a-local-ai"><span>The 4 rules of “parenting” a local AI</span></h3><p>Beyond that speed difference, you have to completely rewire how you talk to your computer. Cloud AIs are designed to be frictionless, constantly updated by engineers behind the scenes. Local AI is like a raw blank slate. It’s only as useful as what you give it, so follow these four rules:</p><h2 id="you-are-the-sole-provider-of-its-data-diet">You are the sole provider of its data diet</h2><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="dDfGksj4sSxc4oD3k5Ffu8" name="Nvidia RTX Spark" alt="Nvidia RTX Spark" src="https://cdn.mos.cms.futurecdn.net/dDfGksj4sSxc4oD3k5Ffu8-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>Cloud AI is constantly scraping the internet and updating its worldview. Your local AI is completely isolated. It only knows what you feed it. </p><p>If you want it to understand how you format invoices, or the specific tone you use in emails, you have to explicitly provide those documents. It isn’t going to magically know you from the get-go.</p><h2 id="make-your-prompts-hyper-specific">Make your prompts hyper-specific</h2><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="CMvweX3ByQqQGuBRKXQ6PN" name="Hermes Agent" alt="Hermes Agent" src="https://cdn.mos.cms.futurecdn.net/CMvweX3ByQqQGuBRKXQ6PN-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>Since cloud AIs have billions (maybe trillions) of data points of context, they can read between the lines of those vague, half-baked questions you have. </p><p>Local AI is intensely literal. If you give it sparse instructions, it will give you a sparse, unhelpful output. Instead of “organize my downloads,” think “organize my downloads by file type and rename them to be more contextual with what they are.”</p><h2 id="the-carrot-not-the-stick-reinforcement">The carrot, not the stick (reinforcement)</h2><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="xfNXrR3xfBFpSjYWU3w6AD" name="Hermes Agent" alt="Hermes Agent" src="https://cdn.mos.cms.futurecdn.net/xfNXrR3xfBFpSjYWU3w6AD-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>To highlight, I don’t mean the “reinforcement learning” AI engineers are doing across the globe on frontier AI, I mean like I learned from teaching my nephew new skills. Something more human. You have to tell local AI to remember the victory. </p><p>If it nails that spreadsheet format exactly as you wanted it, reply with: “This is perfect. Save the way you did this into your memory.” Give it a treat so it repeats the behavior.</p><p>BTW, you don't need to give the agents names like I did. It just helps me organize them.</p><h2 id="build-its-mind-map-in-obsidian">Build its mind map in Obsidian</h2><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="YKbzTpLjz827z2kgb4NsfM" name="Hermes Agent" alt="Hermes Agent" src="https://cdn.mos.cms.futurecdn.net/YKbzTpLjz827z2kgb4NsfM-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>An AI without a long-term memory is just a calculator. To make it genuinely useful, give it a digital filing cabinet. I use <a href="https://obsidian.md/" target="_blank">Obsidian</a>, a free markdown note-taking app that saves files locally to your storage. </p><p>Just point your Hermes agent at Obsidian with a prompt like “can you take everything you’ve learned about me over our past interactions and put it into an Obsidian vault?” And from there, you’ll see the synapses start to form and connect.</p><h2 class="article-body__section" id="section-the-economics-of-owning-your-own-brain"><span>The economics of owning your own brain</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="yDsc4To3fThmCezy6SBUL8" name="Nvidia-2" alt="Nvidia RTX Spark laptop" src="https://cdn.mos.cms.futurecdn.net/yDsc4To3fThmCezy6SBUL8-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>Now, before I sign off on part one, let’s address the elephant in the room: hardware is expensive. It’s actually one of the reasons I believe the future of AI is local, because these damn cloud AI infrastructures have jacked up the price of memory!</p><p>But you have to look at the math of the cloud tax. Right now, you’re probably paying $20 a month for a mid-premium tier service, and if you try to do anything more adventurous, you’re met with limitations.</p><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="auFZPRTucNhgQGbSsg5SYg" name="Nvidia RTX Spark for a week" alt="Nvidia RTX Spark" src="https://cdn.mos.cms.futurecdn.net/auFZPRTucNhgQGbSsg5SYg-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>That’s hundreds of dollars a year in digital rent just to borrow someone else’s server. When you run local AI, the ongoing cost is <strong>zero. </strong>That means no limitations on what you can do, no restrictions on the amount of images and videos you can generate in Comfy UI. You buy the hardware once, and the open-source software is free.</p><p>It’s the difference between renting a cramped apartment where your landlord reads your mail, versus owning your own house. Over a two-to-three-year laptop upgrade cycle, this machine pays for itself in canceled subscriptions — provided you know how to use it.</p><h2 class="article-body__section" id="section-outlook"><span>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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="fzLwFVKeCvJejaXimCGG3G" name="Hermes Agent" alt="Hermes Agent" src="https://cdn.mos.cms.futurecdn.net/fzLwFVKeCvJejaXimCGG3G-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>And that’s what I’m here to do. Over the next few weeks, I’ll give you a look into my local AI workspace, introduce you to my first agent “Jeeves” and the rest of my team, and show you how to extract the most value out of it really easily.</p><p>It’s going to be a journey, and I can’t wait to see what you come up with. But any questions whatsoever, throw them 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/ai/would-you-give-up-chatgpt-to-stop-ai-data-centers-reddits-answer-was-brutal"><strong>Would you give up ChatGPT to stop AI data centers? Reddit's answer was brutal</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/ai/chatbots-and-agents-like-muse-are-getting-a-face-but-does-that-make-us-trust-them-more-heres-what-this-ai-expert-had-to-say"><strong>Chatbots and agents like Muse are getting a face — but does that make us trust them more? Here's what this AI expert had to say</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/ai/joseph-gordon-levitt-warns-the-real-ai-threat-isnt-killer-robots-its-the-companies-building-them"><strong>Joseph Gordon-Levitt warns the real AI threat isn’t killer robots — it’s the companies building them</strong></a><strong></strong></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Exclusive: Apple's OLED MacBook Pro may face a '$300 to $500' price hike to 'protect their profits' from RAMageddon ]]></title>
                                                                                                <dc:content><![CDATA[ <p><a href="https://www.tomsguide.com/computing/macbooks/apple-pro-and-tell-event-rumors-oled-macbooks-m6-chips-and-why-you-shouldnt-buy-anything-today">Apple’s ‘Pro and Tell’ event </a>is just days away, and the tech world is practically vibrating over the rumors of a redesigned <a href="https://www.tomsguide.com/computing/macbooks/macbook-pro-oled-all-the-expected-features">OLED touchscreen MacBook Pro.</a></p><p>It sounds like a dream machine. But before you get your wallet out for it, we need to have a very grounded conversation about what that screen is actually going to cost you, and whether OLED is going to be a smokescreen for skyrocketing memory costs.</p><p>I’ve been speaking with David Naranjo, Associate Director at Counterpoint Research, who just ran a Bill of Materials (BOM) analysis on what this leap to OLED actually means for the PC industry.</p><p>And the data tells a fascinating story: OLED isn’t just making your laptop look prettier. It is fundamentally changing how much you are going to pay, and acting as a very convenient distraction for rising hardware prices.</p><h2 id="brace-for-a-300-to-500-hike">Brace for a $300 to $500 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="aeAsuGHPsdeNftt767USaK" name="MacBook Pro M5--01-LIST" alt="MacBook Pro M5" src="https://cdn.mos.cms.futurecdn.net/aeAsuGHPsdeNftt767USaK-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Let’s cut straight to the math. Right now, if you want a 14-inch MacBook Pro with M5 Pro and a mini-LED display, the starting price is $2,499. If Apple drops an OLED model next week, Naranjo is expecting that cost to jump.</p><p>“Based on a<a href="https://counterpointresearch.com/en/reports/bom-analysis-for-apple-macbook-pro-m5-pro" target="_blank" rel="nofollow"> BOM analysis</a> for the current mini LED model and our<a href="https://counterpointresearch.com/en/coverage/display/it-displays" target="_blank" rel="nofollow"> IT Panel cost report,</a> I would expect a 14" OLED version to start between $2,799 and $2,999,” Naranjo commented.</p><p>That’s a sizable $3-500 “Apple Tax” increase overnight, so where is that money going? According to Counterpoint, it covers the advanced tandem OLED technology (the same bright, vivid panel you see in the M5 iPad Pro), the long-rumored touchscreen features, and — crucially — ongoing memory expenses.</p><p>With PC demand slowing and buyers pinching pennies, Apple and other manufacturers (more on those in a minute) are betting on the higher end — that you’ll pay more for something premium to get those perfectly inky blacks and a touch interface.</p><h2 id="the-memory-cost-distraction">The memory cost distraction</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:6820px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="4YibtQAHoKKwDCm6y8NNaM" name="RAM Memory credit Shutterstock-2 (1)" alt="RAM stick on US dollars" src="https://cdn.mos.cms.futurecdn.net/4YibtQAHoKKwDCm6y8NNaM-1920-80.jpg" mos="" align="middle" fullscreen="" width="6820" height="3836" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>Here is where my BS detector starts blaring. Across the tech world right now, we are quietly living through an era of memory hyper-inflation. A "RAMageddon," if you will.</p><p>And over the past year, I’ve seen lots of manufacturers point to new OLED screens as the justification — even when the internal specs haven’t moved an inch.</p><p>A great recent example, the <a href="https://www.tomsguide.com/gaming/handheld-gaming/asus-rog-xbox-ally-x20-review">Asus ROG Xbox Ally X20</a> has the same internals as last year’s model, but it’s $300 more and packs an OLED display. Not to say that screen isn’t good, but it got me thinking: <strong>is OLED just a shiny smokescreen to soften the blow of massively inflated memory costs?</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="vZM5DonM5EgqMYPMJkSZTX" name="Asus ROG Xbox Ally X20 vs MSI Claw 8 EX AI+" alt="Asus ROG Xbox Ally X20 vs MSI Claw 8 EX AI+" src="https://cdn.mos.cms.futurecdn.net/vZM5DonM5EgqMYPMJkSZTX-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>Naranjo wouldn’t go as far as calling it a smokescreen — OLED does genuinely improve contrast, color accuracy and response times after all. But he does admit it is a very convenient shield.</p><p>"It’s becoming a way for PC makers to justify higher prices as memory and component costs go up," he told me. "Manufacturers are using these premium displays to protect their profits and balance the rising costs."</p><p>In other words: RAM and SSD storage are getting ridiculously expensive to acquire right now. Instead of just raising the price of the laptop and making you angry, Apple and others may be slapping a gorgeous OLED panel on the front so you feel like you are getting an upgrade for extra cash.</p><h2 id="plot-twist-windows-users-should-thank-apple">Plot twist: Windows users should thank 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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="5X7LesSj9fyDU8yrouBoSU" name="Asus ProArt P14 vs MacBook Pro M5" alt="Asus ProArt P14 vs MacBook Pro M5" src="https://cdn.mos.cms.futurecdn.net/5X7LesSj9fyDU8yrouBoSU-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>If you use Windows laptops from the likes of Asus, Lenovo HP or Dell, you’re probably rolling your eyes right now. They’ve had stunning OLED screens for years. So why is Apple getting the credit for a “turning point” in the industry?</p><p>Put simply, it comes down to supply chain bullying.</p><p>Apple isn’t the first to the party (same as they weren’t with the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-review">iPhone Duo</a>), but they buy at a scale that bends reality. "Thanks to its influence and buying power, Apple could speed up investment in the display supply chain," Naranjo notes.</p><p>Just like they did with smartphones, when Apple adopts OLED for MacBooks, display factories have to massively expand their manufacturing capacity.</p><p>That expansion improves production yields and inevitably lowers the cost of the screens for <em>everyone. </em>Counterpoint forecasts OLED notebook panel shipments will jump 50% in 2026, while mini-LED (the current MacBook Pro tech) plummets by 38%.</p><p>Apple’s rumored leap next week would subsidize cheaper OLED screens for budget and mainstream Windows laptops over the next four years.</p><h2 id="the-verdict">The 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="sdoFFhu6vJpjZXtVp4fGuj" name="MacBook Pro M5--05" alt="MacBook Pro M5" src="https://cdn.mos.cms.futurecdn.net/sdoFFhu6vJpjZXtVp4fGuj-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>If this announcement happens next week, and you’re planning to hit the “buy” button on an OLED MacBook Pro, you need to accept you’re probably paying quite the early-adopter tax to cover rising memory costs.</p><p>If your livelihood depends on perfect color accuracy, or you have been desperately waiting to touch your Mac’s screen, that $2,799 starting price might be worth it to you.</p><p>But if you just need a reliable, lightning-fast workhorse, this price prediction is your ultimate signal. I mentioned this in other articles before but to summarize: wait for that October 28 event and watch the current mini LED MacBook Pro prices like a hawk.</p><p>Outgoing stock plus Black Friday build-up means you can expect some steep discounts.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/computing/cpus/ive-been-living-with-nvidias-rtx-spark-for-a-week-on-surface-laptop-ultra-its-not-a-macbook-pro-killer-but-something-much-weirder-and-wildly-powerful">I’ve been living with Nvidia’s RTX Spark for a week — it’s not a MacBook Pro killer but something much weirder and wildly powerful</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><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></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/macbooks/exclusive-apples-oled-macbook-pro-may-face-a-usd300-to-usd500-price-hike-to-protect-their-profits-from-ramageddon</link>
                                                                            <description>
                            <![CDATA[ Exclusive: Counterpoint Research predicts Apple’s OLED MacBook Pro will jump $300 to $500. Here is how OLED is shielding rising memory costs. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">VRSxcmYpXpvYV6md7m9EWF</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/7sihnbDHhcPr4yJ8oHbPeA-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 22 Oct 2026 10:27:14 +0000</pubDate>                                                                                                                                <updated>Fri, 23 Oct 2026 13:02:36 +0000</updated>
                                                                                                                                            <category><![CDATA[MacBooks]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Laptops]]></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/7sihnbDHhcPr4yJ8oHbPeA-1920-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A 2023 MacBook Pro 14-inch]]></media:description>                                                            <media:text><![CDATA[A 2023 MacBook Pro 14-inch]]></media:text>
                                <media:title type="plain"><![CDATA[A 2023 MacBook Pro 14-inch]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/7sihnbDHhcPr4yJ8oHbPeA-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p><a href="https://www.tomsguide.com/computing/macbooks/apple-pro-and-tell-event-rumors-oled-macbooks-m6-chips-and-why-you-shouldnt-buy-anything-today">Apple’s ‘Pro and Tell’ event </a>is just days away, and the tech world is practically vibrating over the rumors of a redesigned <a href="https://www.tomsguide.com/computing/macbooks/macbook-pro-oled-all-the-expected-features">OLED touchscreen MacBook Pro.</a></p><p>It sounds like a dream machine. But before you get your wallet out for it, we need to have a very grounded conversation about what that screen is actually going to cost you, and whether OLED is going to be a smokescreen for skyrocketing memory costs.</p><p>I’ve been speaking with David Naranjo, Associate Director at Counterpoint Research, who just ran a Bill of Materials (BOM) analysis on what this leap to OLED actually means for the PC industry.</p><p>And the data tells a fascinating story: OLED isn’t just making your laptop look prettier. It is fundamentally changing how much you are going to pay, and acting as a very convenient distraction for rising hardware prices.</p><h2 id="brace-for-a-300-to-500-hike">Brace for a $300 to $500 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="aeAsuGHPsdeNftt767USaK" name="MacBook Pro M5--01-LIST" alt="MacBook Pro M5" src="https://cdn.mos.cms.futurecdn.net/aeAsuGHPsdeNftt767USaK-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Let’s cut straight to the math. Right now, if you want a 14-inch MacBook Pro with M5 Pro and a mini-LED display, the starting price is $2,499. If Apple drops an OLED model next week, Naranjo is expecting that cost to jump.</p><p>“Based on a<a href="https://counterpointresearch.com/en/reports/bom-analysis-for-apple-macbook-pro-m5-pro" target="_blank" rel="nofollow"> BOM analysis</a> for the current mini LED model and our<a href="https://counterpointresearch.com/en/coverage/display/it-displays" target="_blank" rel="nofollow"> IT Panel cost report,</a> I would expect a 14" OLED version to start between $2,799 and $2,999,” Naranjo commented.</p><p>That’s a sizable $3-500 “Apple Tax” increase overnight, so where is that money going? According to Counterpoint, it covers the advanced tandem OLED technology (the same bright, vivid panel you see in the M5 iPad Pro), the long-rumored touchscreen features, and — crucially — ongoing memory expenses.</p><p>With PC demand slowing and buyers pinching pennies, Apple and other manufacturers (more on those in a minute) are betting on the higher end — that you’ll pay more for something premium to get those perfectly inky blacks and a touch interface.</p><h2 id="the-memory-cost-distraction">The memory cost distraction</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:6820px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="4YibtQAHoKKwDCm6y8NNaM" name="RAM Memory credit Shutterstock-2 (1)" alt="RAM stick on US dollars" src="https://cdn.mos.cms.futurecdn.net/4YibtQAHoKKwDCm6y8NNaM-1920-80.jpg" mos="" align="middle" fullscreen="" width="6820" height="3836" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>Here is where my BS detector starts blaring. Across the tech world right now, we are quietly living through an era of memory hyper-inflation. A "RAMageddon," if you will.</p><p>And over the past year, I’ve seen lots of manufacturers point to new OLED screens as the justification — even when the internal specs haven’t moved an inch.</p><p>A great recent example, the <a href="https://www.tomsguide.com/gaming/handheld-gaming/asus-rog-xbox-ally-x20-review">Asus ROG Xbox Ally X20</a> has the same internals as last year’s model, but it’s $300 more and packs an OLED display. Not to say that screen isn’t good, but it got me thinking: <strong>is OLED just a shiny smokescreen to soften the blow of massively inflated memory costs?</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="vZM5DonM5EgqMYPMJkSZTX" name="Asus ROG Xbox Ally X20 vs MSI Claw 8 EX AI+" alt="Asus ROG Xbox Ally X20 vs MSI Claw 8 EX AI+" src="https://cdn.mos.cms.futurecdn.net/vZM5DonM5EgqMYPMJkSZTX-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>Naranjo wouldn’t go as far as calling it a smokescreen — OLED does genuinely improve contrast, color accuracy and response times after all. But he does admit it is a very convenient shield.</p><p>"It’s becoming a way for PC makers to justify higher prices as memory and component costs go up," he told me. "Manufacturers are using these premium displays to protect their profits and balance the rising costs."</p><p>In other words: RAM and SSD storage are getting ridiculously expensive to acquire right now. Instead of just raising the price of the laptop and making you angry, Apple and others may be slapping a gorgeous OLED panel on the front so you feel like you are getting an upgrade for extra cash.</p><h2 id="plot-twist-windows-users-should-thank-apple">Plot twist: Windows users should thank 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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="5X7LesSj9fyDU8yrouBoSU" name="Asus ProArt P14 vs MacBook Pro M5" alt="Asus ProArt P14 vs MacBook Pro M5" src="https://cdn.mos.cms.futurecdn.net/5X7LesSj9fyDU8yrouBoSU-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>If you use Windows laptops from the likes of Asus, Lenovo HP or Dell, you’re probably rolling your eyes right now. They’ve had stunning OLED screens for years. So why is Apple getting the credit for a “turning point” in the industry?</p><p>Put simply, it comes down to supply chain bullying.</p><p>Apple isn’t the first to the party (same as they weren’t with the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-review">iPhone Duo</a>), but they buy at a scale that bends reality. "Thanks to its influence and buying power, Apple could speed up investment in the display supply chain," Naranjo notes.</p><p>Just like they did with smartphones, when Apple adopts OLED for MacBooks, display factories have to massively expand their manufacturing capacity.</p><p>That expansion improves production yields and inevitably lowers the cost of the screens for <em>everyone. </em>Counterpoint forecasts OLED notebook panel shipments will jump 50% in 2026, while mini-LED (the current MacBook Pro tech) plummets by 38%.</p><p>Apple’s rumored leap next week would subsidize cheaper OLED screens for budget and mainstream Windows laptops over the next four years.</p><h2 id="the-verdict">The 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="sdoFFhu6vJpjZXtVp4fGuj" name="MacBook Pro M5--05" alt="MacBook Pro M5" src="https://cdn.mos.cms.futurecdn.net/sdoFFhu6vJpjZXtVp4fGuj-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>If this announcement happens next week, and you’re planning to hit the “buy” button on an OLED MacBook Pro, you need to accept you’re probably paying quite the early-adopter tax to cover rising memory costs.</p><p>If your livelihood depends on perfect color accuracy, or you have been desperately waiting to touch your Mac’s screen, that $2,799 starting price might be worth it to you.</p><p>But if you just need a reliable, lightning-fast workhorse, this price prediction is your ultimate signal. I mentioned this in other articles before but to summarize: wait for that October 28 event and watch the current mini LED MacBook Pro prices like a hawk.</p><p>Outgoing stock plus Black Friday build-up means you can expect some steep discounts.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/computing/cpus/ive-been-living-with-nvidias-rtx-spark-for-a-week-on-surface-laptop-ultra-its-not-a-macbook-pro-killer-but-something-much-weirder-and-wildly-powerful">I’ve been living with Nvidia’s RTX Spark for a week — it’s not a MacBook Pro killer but something much weirder and wildly powerful</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><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></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I’ve been testing dozens of iPhone Duo apps — here’s my top 15 picks so far ]]></title>
                                                                                                <dc:content><![CDATA[ <p>One of the best reasons to get the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-review">iPhone Duo</a> over an <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">Android foldable</a> is the app selection. Yes, already. It’s clear that developers have been preparing for this device, as there are lots of apps that have been optimized for Apple’s first foldable.</p><p>And I’m not just talking about two-column layouts that look better on the Duo’s big 7.6-inch screen. Apps like Netflix put playback controls on the bottom half of the screen in “seated” mode, and there are some really fun and ingenious examples of what foldable-first apps should look and feel like, from music to games.</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>Now that I’ve been living with Apple’s $2,000 device for a week, here are my favorite iPhone Duo apps so far.</p><h2 id="slack">Slack</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/V8B93WdFWQSrwdAfChnpnd-1920-80.jpg" alt="iPhone Duo apps" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/uVihFvAH6Lwc2A724GVtZd-1920-80.jpg" alt="iPhone Duo apps" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure></figure><p>I put <a href="https://apps.apple.com/us/app/slack/id618783545" target="_blank">Slack</a> at the top of my list because it’s the app I use most often. The app uses a handy two-column layout that puts your rooms and contacts on the left and your messages on the right. You’ll find the controls on the right side, including Home, Direct Messages, Notifications and Search. You can also remove the left pane from the menu at any time. The Cover Display view is a bit cluttered and I wish it was easier to hide the keyboard, but overall this is a good app.</p><h2 id="tiktok">TikTok</h2><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="QJNWsmHfhh6QkkRA6bPBmd" name="iPhone Duo apps-8" alt="iPhone Duo apps" src="https://cdn.mos.cms.futurecdn.net/QJNWsmHfhh6QkkRA6bPBmd-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>My famous time waster just got even more addictive. <a href="https://apps.apple.com/us/app/tiktok-videos-shop-live/id835599320" target="_blank">TikTok</a> has an optimized app for iPhone Duo that lets you seamlessly scroll videos on the cover display and have a super immersive viewing experience in portrait mode on the main screen. Want to check out comments? Flip over to landscape and you can read them on the right while doom scrolling on the left. The only thing missing are controls on the right, which I’m assuming is imminent with an update.</p><h2 id="ungodly">UnGodly</h2><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="esNPDrGqiVFc6n3V9Zzind" name="iPhone Duo apps-3" alt="iPhone Duo apps" src="https://cdn.mos.cms.futurecdn.net/esNPDrGqiVFc6n3V9Zzind-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>If you’re looking for a 3D action game that makes full use of the iPhone Duo’s A20 chip and massive 7.6-inch screen, this is it. <a href="https://apps.apple.com/us/app/ungodly/id6740617332" target="_blank">UnGodly</a> is a fantasy action RPG that lets you play as multiple characters as you battle. I had a blast swinging swords, launching lightning attacks and hurling fire at my enemies. And the graphics look great on the iPhone Duo, complete with complex lighting effects and reflections.</p><h2 id="instagram">Instagram</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/wuNoq7PRrLVCmDUEB5xofd-1920-80.jpg" alt="iPhone Duo apps" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/wLD47Pg6EULd6Q6kgesNkd-1920-80.jpg" alt="iPhone Duo apps" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure></figure><p>I give Meta credit for being one of the first developers out with fully optimized Duo apps. That includes <a href="https://apps.apple.com/us/app/instagram/id389801252" target="_blank">Instagram</a>, Facebook and Threads. I like Instagram best because it offers an immersive video experience on the front display as you scroll. And on the inside display you can turn the Duo to portrait mode for watching vertical video or go landscape. The comments load on the right side and stay there as you keep scrolling.</p><h2 id="deck-man">Deck-Man</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/QZJmxLcdTinYzoLvkWZwVQ-1920-80.jpg" alt="Deck-Man iPhone Duo app" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/zKanDD5xRoszeX2BVEbgWQ-1920-80.jpg" alt="Deck-Man iPhone Duo app" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure></figure><p>The <a href="https://apps.apple.com/us/app/deck-man-cassette-player/id6817070335" target="_blank">Deck-Man</a> app proves that developers can have fun with the iPhone Duo’s foldable design. The app transforms your device into a 1980s-style Walkman. With the iPhone Duo open you choose your music via virtual cassette tapes (it syncs with Apple Music), and when you close the phone the front screen shows the cassette spinning along with playback controls. Put the Duo in tent mode and you can flip through thumbnails of your music collection. It’s a very slick design.</p><h2 id="youtube-tv">YouTube TV</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/fgQuwnvCty2fgq3oSNZPod-1920-80.jpg" alt="iPhone Duo apps" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/GgYCZpsNZrMbAddDRUhjkd-1920-80.jpg" alt="iPhone Duo apps" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure></figure><p>Technically <a href="https://apps.apple.com/us/app/youtube-tv/id1193350206" target="_blank">YouTube TV</a> isn’t yet fully optimized for the iPhone Duo, because the controls aren’t on the right side yet, leaving a sliver of blank space on the right side of the screen. I don’t care. Once you start watching your favorite shows — it’s First Take on ESPN for me — they take up the full screen. Even better, you can watch up to four shows and/or movies at once with the Multiview feature. I also like that you can continue watching in tent mode, perfect for when I’m grilling and need to keep my hands free.</p><h2 id="spotify">Spotify</h2><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="YuPSVZ242FcLqVQYnAmGmd" name="iPhone Duo apps-6" alt="iPhone Duo apps" src="https://cdn.mos.cms.futurecdn.net/YuPSVZ242FcLqVQYnAmGmd-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><a href="https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580" target="_blank">Spotify</a> is one of my favorite iPhone Duo apps because it takes (nearly) full advantage of the big display. You get an expansive view of your music collection along with recommended stations and a dedicated mini player that pops up on the right side. The menu items have not yet moved to the far right, leaving a blank space. I’d also like to see a tent mode view added once Spotify fully optimizes this app.</p><h2 id="perplexity">Perplexity</h2><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="PNS2MJUyf7xJP3RGzzaCnd" name="iPhone Duo apps-7" alt="iPhone Duo apps" src="https://cdn.mos.cms.futurecdn.net/PNS2MJUyf7xJP3RGzzaCnd-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><a href="https://apps.apple.com/us/app/perplexity-ai-search-chat/id1668000334" target="_blank">Perplexity</a> is an AI app that I generally trust for direct answers to my questions, complete with citations. You can use Deep Research for projects and there’s a built-in assistant for doing things for you like drafting emails and booking reservations. The two-column layout looks snazzy on the iPhone Duo’s main display. I asked for the key differences between the iPhone Duo and Samsung Galaxy Z Fold 8 and got a helpful and unbiased guide along with a handy table.</p><h2 id="netflix">Netflix</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/WFPanGnqfTTmqLLzboyopd-1920-80.jpg" alt="iPhone Duo apps" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/XJSVFwzLEVYMkdezJGCdmd-1920-80.jpg" alt="iPhone Duo apps" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure></figure><p>There’s a reason Apple showed off <a href="https://apps.apple.com/us/app/netflix/id363590051" target="_blank">Netflix</a> at the iPhone Duo launch event. The app was built from the ground up for this foldable. The cover display is great for scrolling through mobile Clips. And on the main display you can watch movies and shows full screen or use the phone half-folded in tabletop mode with the content up top and controls below. The colors from the top part reflect on the bottom, which is a nice touch.</p><h2 id="opentable">OpenTable</h2><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="T6AkWKDzm8irp8YjWXBand" name="iPhone Duo apps-11" alt="iPhone Duo apps" src="https://cdn.mos.cms.futurecdn.net/T6AkWKDzm8irp8YjWXBand-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><a href="https://apps.apple.com/us/app/id296581815" target="_blank">OpenTable</a> is a beautifully designed iPhone Duo app that’s guaranteed to make you hungry. When clicking on restaurants you’ll see wide photos that stretch across the big screen, and the available times up top. The Notify Me feature sends an alert when a last-minute table opens up at a popular spot. The controls on the right side look just as good on the main display as on the cover display.</p><h2 id="carrot-weather">Carrot Weather</h2><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="v84Zhkb7dcAQzaSP7Prekd" name="iPhone Duo apps-12" alt="iPhone Duo apps" src="https://cdn.mos.cms.futurecdn.net/v84Zhkb7dcAQzaSP7Prekd-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>If you like your weather apps with a bit of personality, <a href="https://apps.apple.com/us/app/carrot-weather-alerts-radar/id961390574?see-all=reviews" target="_blank">Carrot Weather</a> will not disappoint. You can choose from Professional, Friendly, Snarky and more. But it’s the slick layout that keeps me coming back for more. There’s multiple widgets to help you keep tabs on the weather at a glance, including hourly and 7-day forecasts, UV index, Sunset and more. And you can even customize the layout. </p><h2 id="gemini">Gemini</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="RUNReZJ9wzyeXxx4cXGDQd" name="iPhone Duo apps-13" alt="iPhone Duo apps" src="https://cdn.mos.cms.futurecdn.net/RUNReZJ9wzyeXxx4cXGDQd-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 think <a href="https://apps.apple.com/us/app/google-gemini/id6477489729" target="_blank">Gemini</a> looks pretty good on the iPhone Duo, though it’s not fully optimized yet and has a weird bug. But first the good news. You get a two-column layout that shows the main menu on the left (Library, Images, Gems, etc), as well as your recent history, and the main chat window on the right. My only issue is that the button for going live with your camera gets covered up on the large screen due to overlapping menus. It’s better to access that option from the front screen for now.</p><h2 id="pianofold">PianoFold</h2><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="Wey9KU75SgZ8hdaaHKQjjd" name="iPhone Duo apps-14" alt="iPhone Duo apps" src="https://cdn.mos.cms.futurecdn.net/Wey9KU75SgZ8hdaaHKQjjd-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><a href="https://apps.apple.com/us/app/pianofold-rhythm-game/id6822806944" target="_blank">PianoFold</a> is what happens when developers take full advantage of the iPhone Duo’s foldable nature. You can play with the screen fully open in flat mode, but the game feels more immersive in laptop (folded) mode. The goal is to hit the bars on the bottom display just as the colorful notes fall from the top portion. And, yes, you can choose a realistic keyboard instead. I found the game quite challenging, and it helps that the Duo has great speakers.</p><h2 id="airmail">Airmail</h2><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="fFWwo2bEoFPrRoUefyNkkd" name="iPhone Duo apps-15" alt="iPhone Duo apps" src="https://cdn.mos.cms.futurecdn.net/fFWwo2bEoFPrRoUefyNkkd-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><a href="https://apps.apple.com/us/app/airmail-for-gmail-outlook-mail/id993160329" target="_blank">Airmail</a> is a great alternative to Gmail, and right now it’s a better looking email app for the iPhone Duo. This Apple Design Award winner lets you sync Gmail, Outlook, Exchange and more into a single inbox. The two-column layout is easy to navigate, and it’s a cinch to clean out your inbox with customize swipes.</p><h2 id="battlefleet-duo">Battlefleet Duo</h2><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="2s4YP4XoZBTWaSpbqSqbnd" name="iPhone Duo apps-16" alt="iPhone Duo apps" src="https://cdn.mos.cms.futurecdn.net/2s4YP4XoZBTWaSpbqSqbnd-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>You sunk my Battleship! Get ready for the nostalgic feels to come flooding back with <a href="https://apps.apple.com/cz/app/battlefleet-duo/id6811120963" target="_blank">Battlefleet Duo</a>, an app that mirrors the classic board game. In tabletop mode you position your ships on the bottom part of the display and launch your attacks on the top,  watching as your missiles fire across the water. When you miss, you’ll just hear a splash, but when you get a direct hit you’ll see and feel an explosion. It’s simple and it’s a blast.</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-just-bumped-up-some-iphone-duo-delivery-dates-here-is-how-to-check-yours"><strong>Apple just bumped up some iPhone Duo delivery dates — here is how to check yours</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><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>My iPhone 18 Pro Max just got delivered and I immediately regret the purchase and I think iPhone Duo is to blame</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/ive-been-testing-dozens-of-iphone-duo-apps-heres-my-top-15-picks-so-far</link>
                                                                            <description>
                            <![CDATA[ The iPhone Duo has a ton of optimized apps. I’ve been testing dozens of them and narrowed down my top picks for productivity, games, social video, music and more. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">FjTtJEEQc8tzMotktbGRKg</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/qHpbChEbq7Bjd7bCVJF5yN-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 22 Oct 2026 07:30:00 +0000</pubDate>                                                                                                                                <updated>Thu, 22 Oct 2026 09:43:00 +0000</updated>
                                                                                                                                            <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[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/qHpbChEbq7Bjd7bCVJF5yN-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPhone Duo apps]]></media:description>                                                            <media:text><![CDATA[iPhone Duo apps]]></media:text>
                                <media:title type="plain"><![CDATA[iPhone Duo apps]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/qHpbChEbq7Bjd7bCVJF5yN-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>One of the best reasons to get the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-review">iPhone Duo</a> over an <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">Android foldable</a> is the app selection. Yes, already. It’s clear that developers have been preparing for this device, as there are lots of apps that have been optimized for Apple’s first foldable.</p><p>And I’m not just talking about two-column layouts that look better on the Duo’s big 7.6-inch screen. Apps like Netflix put playback controls on the bottom half of the screen in “seated” mode, and there are some really fun and ingenious examples of what foldable-first apps should look and feel like, from music to games.</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>Now that I’ve been living with Apple’s $2,000 device for a week, here are my favorite iPhone Duo apps so far.</p><h2 id="slack">Slack</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/V8B93WdFWQSrwdAfChnpnd-1920-80.jpg" alt="iPhone Duo apps" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/uVihFvAH6Lwc2A724GVtZd-1920-80.jpg" alt="iPhone Duo apps" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure></figure><p>I put <a href="https://apps.apple.com/us/app/slack/id618783545" target="_blank">Slack</a> at the top of my list because it’s the app I use most often. The app uses a handy two-column layout that puts your rooms and contacts on the left and your messages on the right. You’ll find the controls on the right side, including Home, Direct Messages, Notifications and Search. You can also remove the left pane from the menu at any time. The Cover Display view is a bit cluttered and I wish it was easier to hide the keyboard, but overall this is a good app.</p><h2 id="tiktok">TikTok</h2><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="QJNWsmHfhh6QkkRA6bPBmd" name="iPhone Duo apps-8" alt="iPhone Duo apps" src="https://cdn.mos.cms.futurecdn.net/QJNWsmHfhh6QkkRA6bPBmd-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>My famous time waster just got even more addictive. <a href="https://apps.apple.com/us/app/tiktok-videos-shop-live/id835599320" target="_blank">TikTok</a> has an optimized app for iPhone Duo that lets you seamlessly scroll videos on the cover display and have a super immersive viewing experience in portrait mode on the main screen. Want to check out comments? Flip over to landscape and you can read them on the right while doom scrolling on the left. The only thing missing are controls on the right, which I’m assuming is imminent with an update.</p><h2 id="ungodly">UnGodly</h2><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="esNPDrGqiVFc6n3V9Zzind" name="iPhone Duo apps-3" alt="iPhone Duo apps" src="https://cdn.mos.cms.futurecdn.net/esNPDrGqiVFc6n3V9Zzind-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>If you’re looking for a 3D action game that makes full use of the iPhone Duo’s A20 chip and massive 7.6-inch screen, this is it. <a href="https://apps.apple.com/us/app/ungodly/id6740617332" target="_blank">UnGodly</a> is a fantasy action RPG that lets you play as multiple characters as you battle. I had a blast swinging swords, launching lightning attacks and hurling fire at my enemies. And the graphics look great on the iPhone Duo, complete with complex lighting effects and reflections.</p><h2 id="instagram">Instagram</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/wuNoq7PRrLVCmDUEB5xofd-1920-80.jpg" alt="iPhone Duo apps" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/wLD47Pg6EULd6Q6kgesNkd-1920-80.jpg" alt="iPhone Duo apps" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure></figure><p>I give Meta credit for being one of the first developers out with fully optimized Duo apps. That includes <a href="https://apps.apple.com/us/app/instagram/id389801252" target="_blank">Instagram</a>, Facebook and Threads. I like Instagram best because it offers an immersive video experience on the front display as you scroll. And on the inside display you can turn the Duo to portrait mode for watching vertical video or go landscape. The comments load on the right side and stay there as you keep scrolling.</p><h2 id="deck-man">Deck-Man</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/QZJmxLcdTinYzoLvkWZwVQ-1920-80.jpg" alt="Deck-Man iPhone Duo app" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/zKanDD5xRoszeX2BVEbgWQ-1920-80.jpg" alt="Deck-Man iPhone Duo app" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure></figure><p>The <a href="https://apps.apple.com/us/app/deck-man-cassette-player/id6817070335" target="_blank">Deck-Man</a> app proves that developers can have fun with the iPhone Duo’s foldable design. The app transforms your device into a 1980s-style Walkman. With the iPhone Duo open you choose your music via virtual cassette tapes (it syncs with Apple Music), and when you close the phone the front screen shows the cassette spinning along with playback controls. Put the Duo in tent mode and you can flip through thumbnails of your music collection. It’s a very slick design.</p><h2 id="youtube-tv">YouTube TV</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/fgQuwnvCty2fgq3oSNZPod-1920-80.jpg" alt="iPhone Duo apps" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/GgYCZpsNZrMbAddDRUhjkd-1920-80.jpg" alt="iPhone Duo apps" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure></figure><p>Technically <a href="https://apps.apple.com/us/app/youtube-tv/id1193350206" target="_blank">YouTube TV</a> isn’t yet fully optimized for the iPhone Duo, because the controls aren’t on the right side yet, leaving a sliver of blank space on the right side of the screen. I don’t care. Once you start watching your favorite shows — it’s First Take on ESPN for me — they take up the full screen. Even better, you can watch up to four shows and/or movies at once with the Multiview feature. I also like that you can continue watching in tent mode, perfect for when I’m grilling and need to keep my hands free.</p><h2 id="spotify">Spotify</h2><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="YuPSVZ242FcLqVQYnAmGmd" name="iPhone Duo apps-6" alt="iPhone Duo apps" src="https://cdn.mos.cms.futurecdn.net/YuPSVZ242FcLqVQYnAmGmd-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><a href="https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580" target="_blank">Spotify</a> is one of my favorite iPhone Duo apps because it takes (nearly) full advantage of the big display. You get an expansive view of your music collection along with recommended stations and a dedicated mini player that pops up on the right side. The menu items have not yet moved to the far right, leaving a blank space. I’d also like to see a tent mode view added once Spotify fully optimizes this app.</p><h2 id="perplexity">Perplexity</h2><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="PNS2MJUyf7xJP3RGzzaCnd" name="iPhone Duo apps-7" alt="iPhone Duo apps" src="https://cdn.mos.cms.futurecdn.net/PNS2MJUyf7xJP3RGzzaCnd-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><a href="https://apps.apple.com/us/app/perplexity-ai-search-chat/id1668000334" target="_blank">Perplexity</a> is an AI app that I generally trust for direct answers to my questions, complete with citations. You can use Deep Research for projects and there’s a built-in assistant for doing things for you like drafting emails and booking reservations. The two-column layout looks snazzy on the iPhone Duo’s main display. I asked for the key differences between the iPhone Duo and Samsung Galaxy Z Fold 8 and got a helpful and unbiased guide along with a handy table.</p><h2 id="netflix">Netflix</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/WFPanGnqfTTmqLLzboyopd-1920-80.jpg" alt="iPhone Duo apps" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/XJSVFwzLEVYMkdezJGCdmd-1920-80.jpg" alt="iPhone Duo apps" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure></figure><p>There’s a reason Apple showed off <a href="https://apps.apple.com/us/app/netflix/id363590051" target="_blank">Netflix</a> at the iPhone Duo launch event. The app was built from the ground up for this foldable. The cover display is great for scrolling through mobile Clips. And on the main display you can watch movies and shows full screen or use the phone half-folded in tabletop mode with the content up top and controls below. The colors from the top part reflect on the bottom, which is a nice touch.</p><h2 id="opentable">OpenTable</h2><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="T6AkWKDzm8irp8YjWXBand" name="iPhone Duo apps-11" alt="iPhone Duo apps" src="https://cdn.mos.cms.futurecdn.net/T6AkWKDzm8irp8YjWXBand-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><a href="https://apps.apple.com/us/app/id296581815" target="_blank">OpenTable</a> is a beautifully designed iPhone Duo app that’s guaranteed to make you hungry. When clicking on restaurants you’ll see wide photos that stretch across the big screen, and the available times up top. The Notify Me feature sends an alert when a last-minute table opens up at a popular spot. The controls on the right side look just as good on the main display as on the cover display.</p><h2 id="carrot-weather">Carrot Weather</h2><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="v84Zhkb7dcAQzaSP7Prekd" name="iPhone Duo apps-12" alt="iPhone Duo apps" src="https://cdn.mos.cms.futurecdn.net/v84Zhkb7dcAQzaSP7Prekd-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>If you like your weather apps with a bit of personality, <a href="https://apps.apple.com/us/app/carrot-weather-alerts-radar/id961390574?see-all=reviews" target="_blank">Carrot Weather</a> will not disappoint. You can choose from Professional, Friendly, Snarky and more. But it’s the slick layout that keeps me coming back for more. There’s multiple widgets to help you keep tabs on the weather at a glance, including hourly and 7-day forecasts, UV index, Sunset and more. And you can even customize the layout. </p><h2 id="gemini">Gemini</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="RUNReZJ9wzyeXxx4cXGDQd" name="iPhone Duo apps-13" alt="iPhone Duo apps" src="https://cdn.mos.cms.futurecdn.net/RUNReZJ9wzyeXxx4cXGDQd-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 think <a href="https://apps.apple.com/us/app/google-gemini/id6477489729" target="_blank">Gemini</a> looks pretty good on the iPhone Duo, though it’s not fully optimized yet and has a weird bug. But first the good news. You get a two-column layout that shows the main menu on the left (Library, Images, Gems, etc), as well as your recent history, and the main chat window on the right. My only issue is that the button for going live with your camera gets covered up on the large screen due to overlapping menus. It’s better to access that option from the front screen for now.</p><h2 id="pianofold">PianoFold</h2><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="Wey9KU75SgZ8hdaaHKQjjd" name="iPhone Duo apps-14" alt="iPhone Duo apps" src="https://cdn.mos.cms.futurecdn.net/Wey9KU75SgZ8hdaaHKQjjd-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><a href="https://apps.apple.com/us/app/pianofold-rhythm-game/id6822806944" target="_blank">PianoFold</a> is what happens when developers take full advantage of the iPhone Duo’s foldable nature. You can play with the screen fully open in flat mode, but the game feels more immersive in laptop (folded) mode. The goal is to hit the bars on the bottom display just as the colorful notes fall from the top portion. And, yes, you can choose a realistic keyboard instead. I found the game quite challenging, and it helps that the Duo has great speakers.</p><h2 id="airmail">Airmail</h2><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="fFWwo2bEoFPrRoUefyNkkd" name="iPhone Duo apps-15" alt="iPhone Duo apps" src="https://cdn.mos.cms.futurecdn.net/fFWwo2bEoFPrRoUefyNkkd-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><a href="https://apps.apple.com/us/app/airmail-for-gmail-outlook-mail/id993160329" target="_blank">Airmail</a> is a great alternative to Gmail, and right now it’s a better looking email app for the iPhone Duo. This Apple Design Award winner lets you sync Gmail, Outlook, Exchange and more into a single inbox. The two-column layout is easy to navigate, and it’s a cinch to clean out your inbox with customize swipes.</p><h2 id="battlefleet-duo">Battlefleet Duo</h2><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="2s4YP4XoZBTWaSpbqSqbnd" name="iPhone Duo apps-16" alt="iPhone Duo apps" src="https://cdn.mos.cms.futurecdn.net/2s4YP4XoZBTWaSpbqSqbnd-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>You sunk my Battleship! Get ready for the nostalgic feels to come flooding back with <a href="https://apps.apple.com/cz/app/battlefleet-duo/id6811120963" target="_blank">Battlefleet Duo</a>, an app that mirrors the classic board game. In tabletop mode you position your ships on the bottom part of the display and launch your attacks on the top,  watching as your missiles fire across the water. When you miss, you’ll just hear a splash, but when you get a direct hit you’ll see and feel an explosion. It’s simple and it’s a blast.</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-just-bumped-up-some-iphone-duo-delivery-dates-here-is-how-to-check-yours"><strong>Apple just bumped up some iPhone Duo delivery dates — here is how to check yours</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><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>My iPhone 18 Pro Max just got delivered and I immediately regret the purchase and I think iPhone Duo is to blame</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 'Polished but rough': The common flaws in the iPhone Duo found by nine different reviewers ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The iPhone Duo has been in reviewers' hands for at least a week, and early reviews are starting to trickle out. I read and watched reviews from multiple sites, including the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-review"><strong>Tom's Guide iPhone Duo review</strong>,</a> to find out what consistent flaws critics found in Apple's first foldable.</p><p>Overall, the reviews are quite positive, with a common refrain being that the iPhone Duo is an early adopter device. This means that there are some initial growing pains but with plenty of room for Apple to grow.</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>Most of the complaints come down to hardware issues, both what's missing (Face ID) and how it feels to use the Duo. One <a href="https://www.tomsguide.com/phones/iphones/lefties-are-out-of-luck-with-the-iphone-duo-but-apple-plans-to-add-reachability-features-later-this-year">consistent flaw is software-based,</a> but that might be fixed before most people get their foldable <a href="https://www.tomsguide.com/phones/iphones/apple-just-bumped-up-some-iphone-duo-delivery-dates-here-is-how-to-check-yours">iPhones in a couple of months</a>.</p><p>Let's dig into the seven most common flaws in the iPhone Duo.</p><h2 id="the-price">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="Xb3foWRcd6ExqbaxKwwfGQ" name="shutterstock_1894395892.jpg" alt="Person holding a credit card in one hand and a phone in the other" src="https://cdn.mos.cms.futurecdn.net/Xb3foWRcd6ExqbaxKwwfGQ-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>Bringing it back to the early adopter tone, price is mentioned in every review I looked at, but it's not listed as a major concern. Most reviewers acknowledge that the $2,000+ price tag is high (higher than 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> by $100). </p><p>However, compared to other foldables, the iPhone Duo appears right in line pricewise and is a good phone.</p><p>"If anything, the Duo’s high cost and limited availability only reinforce that Apple’s foldable isn’t for everyone,"<a href="https://www.cnet.com/tech/mobile/iphone-duo-review/" target="_blank"> CNET's Abrar Al-Heetl </a>wrote. "But if you’re looking for something compact that unfurls into a tablet-like experience – and you want to stick with iOS – the iPhone Duo could be the right fit."</p><p>For people who aren't early adopters or need to be more mindful of their budget , that high price can be an impediment, and it's unlikely to get cheaper any time soon thanks to the ongoing AI-fueled memory shortage.</p><h2 id="missing-camera">Missing camera</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width: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>Outside of price, the lack of a telephoto lens was remarked on by nearly every review. The cameras are a downgrade compared to the iPhone 18 Pro models.</p><p><a href="https://petapixel.com/2026/10/21/iphone-duo-review-a-compromise-but-not-compromised/" target="_blank">PetaPixel </a>has more of a camera focus in general, and truly breaks down the cameras in their review, but it can be summarized in one line: "This camera is the epitome of 'fine,' Jaron Schneider said.</p><p>He also noted that shooting with the Duo is awkward, lacking a firm grip when closed and feeling like a grandmother with an iPad when unfolded.</p><p>Notably, the iPhone Duo's Smart Take feature was praised since it waited for people to enter and pose in frame before taking photos and hopefully that's a feature that comes to other iPhones.</p><h2 id="a-dim-display">A dim 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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="wAz484va9KcSempYnMD2yk" name="Apple iPhone Duo" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/wAz484va9KcSempYnMD2yk-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>For foldable phones, one of the concerns is the crease that becomes more prominent over time as the display is opened and closed hundreds, nay, thousands, of times.</p><p>Apple's attempt to obscure the crease mostly works thanks to the nanotexture layer on the display that hides it a bit. This is both a boon, with many describing it as reducing glare and feeling nice to the touch.</p><p>Though, as <a href="https://www.wired.com/review/apple-iphone-duo/" target="_blank">Wired's Julian Chokkattu</a> noted, videos aren't as crisp compared to the iPhone 18 Pro, even if people are watching more content on the larger 7.6-inch inner display. "You don’t get the crisp video quality, deep blacks, and sharp contrast of the iPhone 18 Pro when watching movies and shows on apps like Netflix on the nanotexture panel."</p><p>Apple already features the nanotexture display as an option on the <a href="https://www.tomsguide.com/computing/macbooks/the-new-macbook-pro-m4-is-a-game-changer-for-how-i-work-and-it-has-nothing-to-do-with-apple-intelligence">MacBook Pro</a> and <a href="https://www.tomsguide.com/computing/monitors/apple-studio-display-xdr-review">Studio Display XDR</a> but If you don't like it there, you likely won't enjoy it on the Duo.</p><h2 id="missing-face-id">Missing Face ID</h2><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="sujLhqTd9qT2dA5iw276HC" name="Apple iPhone Duo-26" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/sujLhqTd9qT2dA5iw276HC-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 called the lack of Face ID in favor of Touch ID a downgrade in our review. This was a quite common complaint regarding the Duo, with most reviewers finding it quite annoying.</p><p>"Touch ID introduces lag versus Face ID when unlocking your phone. Not a lot, just enough to be annoying," Tom's Guide editor-in-chief Mark Spoonauer said. "If you own an <a href="https://www.tomsguide.com/tag/apple-watch">Apple Watch</a>, you can unlock your iPhone Duo just by swiping up, but even that’s slower than Face ID."</p><h2 id="heat-and-weight">Heat and weight</h2><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="7Cn9qroJxminynrPqXfiqk" name="Apple iPhone Duo thermal" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/7Cn9qroJxminynrPqXfiqk-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've combined these two because it relates to how it feels to use the iPhone Duo. </p><p>"The Duo feels significant and solid," <a href="https://www.youtube.com/watch?v=ESABTN4VtrA" target="_blank">Marques Brownlee said</a> in his review, but compared it to the Z Fold 8, which is 20% lighter. "Making everything metal, glass and heavy doesn't necessarily make it better to use. It's the permanent Apple-design default."</p><p>The iPhone Duo weighs 8.96 oz (254 grams) compared to the Z Fold 8's 7.09 oz (201 g). It's not the end of the world, but over time that weight is noticeable, especially if you pick up another company's phone. </p><p>As for heat, we noted that the iPhone Duo was a few degrees hotter than the Z Fold 8 in our testing, though it appeared that Apple's phone spread the heat out more.</p><p>Joanna Stern found that the back of the phone kept getting "really warm."</p><p>"I've consistently noticed the back of the Duo getting surprisingly warm when taking photos, FaceTiming, and using certain apps," she said.<a href="https://www.youtube.com/watch?v=bxDTWuL9GxY" target="_blank"> In one clip,</a> as she FaceTimed with Casey Nystat, she ended a call because the phone felt too hot.</p><h2 id="software-optimization">Software Optimization</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="qgQPZ4N2mQWFTqfTwXEGPC" name="Disney Plus iPhone Duo" alt="Disney Plus on iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/qgQPZ4N2mQWFTqfTwXEGPC-1920-80.jpg" mos="" align="middle" fullscreen="" width="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 utilizes a customized version of iOS 27, but it has some flaws, like the fact that <a href="https://www.tomsguide.com/phones/iphones/lefties-are-out-of-luck-with-the-iphone-duo-but-apple-plans-to-add-reachability-features-later-this-year">lefties are out of luck </a>thanks to the locked dock on the right side of the display.</p><p>When it comes to Apple's own apps, the iPhone Duo and iOS 27 are great, with the apps designed to fill the inner display. However, third-party apps aren't yet optimized for the Duo, including apps like Telegram and Disney Plus. </p><p>It can make non-optimized apps look terrible, from huge black sidebars to as simple as a sense that the app is a bit askew.</p><p>"The difference between optimized and unoptimized apps is the biggest growing pain you'll face on Apple's first foldable," <a href="https://www.engadget.com/2292333/apple-iphone-duo-review/" target="_blank">Engadget's Sam Rutherford wrote</a>.</p><p>Fortunately, unlike any hardware complaints, this one is more easily rectified since developers can update their apps for the Duo. Or in the case of things like the docked controls, Apple has already promised an update in the coming months. </p><p>Anything I missed that you think is a concern? Let me know in the comments below.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><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&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/polished-but-rough-the-common-flaws-in-the-iphone-duo-found-by-nine-different-reviewers</link>
                                                                            <description>
                            <![CDATA[ Multiple reviewers have their first impressions on the iPhone Duo out now, and we found the common flaws that popped up across all of them. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">r47qGdXXyM5rdpNcFARo2a</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/rSoCvpXGwqJDaxV5wFWorU-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 21 Oct 2026 19:56:56 +0000</pubDate>                                                                                                                                <updated>Wed, 21 Oct 2026 22:04:22 +0000</updated>
                                                                                                                                            <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ scott.younker@futurenet.com (Scott Younker) ]]></author>                    <dc:creator><![CDATA[ Scott Younker ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/RZsUpqcJ6Uj2q83oCUwNhQ-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/rSoCvpXGwqJDaxV5wFWorU-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&amp;#39;s Guide / Jeff Parsons]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPhone Duo hands-on pictures]]></media:description>                                                            <media:text><![CDATA[iPhone Duo hands-on pictures]]></media:text>
                                <media:title type="plain"><![CDATA[iPhone Duo hands-on pictures]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/rSoCvpXGwqJDaxV5wFWorU-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The iPhone Duo has been in reviewers' hands for at least a week, and early reviews are starting to trickle out. I read and watched reviews from multiple sites, including the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-review"><strong>Tom's Guide iPhone Duo review</strong>,</a> to find out what consistent flaws critics found in Apple's first foldable.</p><p>Overall, the reviews are quite positive, with a common refrain being that the iPhone Duo is an early adopter device. This means that there are some initial growing pains but with plenty of room for Apple to grow.</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>Most of the complaints come down to hardware issues, both what's missing (Face ID) and how it feels to use the Duo. One <a href="https://www.tomsguide.com/phones/iphones/lefties-are-out-of-luck-with-the-iphone-duo-but-apple-plans-to-add-reachability-features-later-this-year">consistent flaw is software-based,</a> but that might be fixed before most people get their foldable <a href="https://www.tomsguide.com/phones/iphones/apple-just-bumped-up-some-iphone-duo-delivery-dates-here-is-how-to-check-yours">iPhones in a couple of months</a>.</p><p>Let's dig into the seven most common flaws in the iPhone Duo.</p><h2 id="the-price">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="Xb3foWRcd6ExqbaxKwwfGQ" name="shutterstock_1894395892.jpg" alt="Person holding a credit card in one hand and a phone in the other" src="https://cdn.mos.cms.futurecdn.net/Xb3foWRcd6ExqbaxKwwfGQ-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>Bringing it back to the early adopter tone, price is mentioned in every review I looked at, but it's not listed as a major concern. Most reviewers acknowledge that the $2,000+ price tag is high (higher than 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> by $100). </p><p>However, compared to other foldables, the iPhone Duo appears right in line pricewise and is a good phone.</p><p>"If anything, the Duo’s high cost and limited availability only reinforce that Apple’s foldable isn’t for everyone,"<a href="https://www.cnet.com/tech/mobile/iphone-duo-review/" target="_blank"> CNET's Abrar Al-Heetl </a>wrote. "But if you’re looking for something compact that unfurls into a tablet-like experience – and you want to stick with iOS – the iPhone Duo could be the right fit."</p><p>For people who aren't early adopters or need to be more mindful of their budget , that high price can be an impediment, and it's unlikely to get cheaper any time soon thanks to the ongoing AI-fueled memory shortage.</p><h2 id="missing-camera">Missing camera</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width: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>Outside of price, the lack of a telephoto lens was remarked on by nearly every review. The cameras are a downgrade compared to the iPhone 18 Pro models.</p><p><a href="https://petapixel.com/2026/10/21/iphone-duo-review-a-compromise-but-not-compromised/" target="_blank">PetaPixel </a>has more of a camera focus in general, and truly breaks down the cameras in their review, but it can be summarized in one line: "This camera is the epitome of 'fine,' Jaron Schneider said.</p><p>He also noted that shooting with the Duo is awkward, lacking a firm grip when closed and feeling like a grandmother with an iPad when unfolded.</p><p>Notably, the iPhone Duo's Smart Take feature was praised since it waited for people to enter and pose in frame before taking photos and hopefully that's a feature that comes to other iPhones.</p><h2 id="a-dim-display">A dim 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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="wAz484va9KcSempYnMD2yk" name="Apple iPhone Duo" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/wAz484va9KcSempYnMD2yk-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>For foldable phones, one of the concerns is the crease that becomes more prominent over time as the display is opened and closed hundreds, nay, thousands, of times.</p><p>Apple's attempt to obscure the crease mostly works thanks to the nanotexture layer on the display that hides it a bit. This is both a boon, with many describing it as reducing glare and feeling nice to the touch.</p><p>Though, as <a href="https://www.wired.com/review/apple-iphone-duo/" target="_blank">Wired's Julian Chokkattu</a> noted, videos aren't as crisp compared to the iPhone 18 Pro, even if people are watching more content on the larger 7.6-inch inner display. "You don’t get the crisp video quality, deep blacks, and sharp contrast of the iPhone 18 Pro when watching movies and shows on apps like Netflix on the nanotexture panel."</p><p>Apple already features the nanotexture display as an option on the <a href="https://www.tomsguide.com/computing/macbooks/the-new-macbook-pro-m4-is-a-game-changer-for-how-i-work-and-it-has-nothing-to-do-with-apple-intelligence">MacBook Pro</a> and <a href="https://www.tomsguide.com/computing/monitors/apple-studio-display-xdr-review">Studio Display XDR</a> but If you don't like it there, you likely won't enjoy it on the Duo.</p><h2 id="missing-face-id">Missing Face ID</h2><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="sujLhqTd9qT2dA5iw276HC" name="Apple iPhone Duo-26" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/sujLhqTd9qT2dA5iw276HC-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 called the lack of Face ID in favor of Touch ID a downgrade in our review. This was a quite common complaint regarding the Duo, with most reviewers finding it quite annoying.</p><p>"Touch ID introduces lag versus Face ID when unlocking your phone. Not a lot, just enough to be annoying," Tom's Guide editor-in-chief Mark Spoonauer said. "If you own an <a href="https://www.tomsguide.com/tag/apple-watch">Apple Watch</a>, you can unlock your iPhone Duo just by swiping up, but even that’s slower than Face ID."</p><h2 id="heat-and-weight">Heat and weight</h2><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="7Cn9qroJxminynrPqXfiqk" name="Apple iPhone Duo thermal" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/7Cn9qroJxminynrPqXfiqk-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've combined these two because it relates to how it feels to use the iPhone Duo. </p><p>"The Duo feels significant and solid," <a href="https://www.youtube.com/watch?v=ESABTN4VtrA" target="_blank">Marques Brownlee said</a> in his review, but compared it to the Z Fold 8, which is 20% lighter. "Making everything metal, glass and heavy doesn't necessarily make it better to use. It's the permanent Apple-design default."</p><p>The iPhone Duo weighs 8.96 oz (254 grams) compared to the Z Fold 8's 7.09 oz (201 g). It's not the end of the world, but over time that weight is noticeable, especially if you pick up another company's phone. </p><p>As for heat, we noted that the iPhone Duo was a few degrees hotter than the Z Fold 8 in our testing, though it appeared that Apple's phone spread the heat out more.</p><p>Joanna Stern found that the back of the phone kept getting "really warm."</p><p>"I've consistently noticed the back of the Duo getting surprisingly warm when taking photos, FaceTiming, and using certain apps," she said.<a href="https://www.youtube.com/watch?v=bxDTWuL9GxY" target="_blank"> In one clip,</a> as she FaceTimed with Casey Nystat, she ended a call because the phone felt too hot.</p><h2 id="software-optimization">Software Optimization</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="qgQPZ4N2mQWFTqfTwXEGPC" name="Disney Plus iPhone Duo" alt="Disney Plus on iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/qgQPZ4N2mQWFTqfTwXEGPC-1920-80.jpg" mos="" align="middle" fullscreen="" width="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 utilizes a customized version of iOS 27, but it has some flaws, like the fact that <a href="https://www.tomsguide.com/phones/iphones/lefties-are-out-of-luck-with-the-iphone-duo-but-apple-plans-to-add-reachability-features-later-this-year">lefties are out of luck </a>thanks to the locked dock on the right side of the display.</p><p>When it comes to Apple's own apps, the iPhone Duo and iOS 27 are great, with the apps designed to fill the inner display. However, third-party apps aren't yet optimized for the Duo, including apps like Telegram and Disney Plus. </p><p>It can make non-optimized apps look terrible, from huge black sidebars to as simple as a sense that the app is a bit askew.</p><p>"The difference between optimized and unoptimized apps is the biggest growing pain you'll face on Apple's first foldable," <a href="https://www.engadget.com/2292333/apple-iphone-duo-review/" target="_blank">Engadget's Sam Rutherford wrote</a>.</p><p>Fortunately, unlike any hardware complaints, this one is more easily rectified since developers can update their apps for the Duo. Or in the case of things like the docked controls, Apple has already promised an update in the coming months. </p><p>Anything I missed that you think is a concern? Let me know in the comments below.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><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&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[ Lefties are out of luck with the iPhone Duo, but Apple plans to add reachability features later this year ]]></title>
                                                                                                <dc:content><![CDATA[ <p>As a leftie, one of the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-review">iPhone Duo's</a> biggest drawbacks is the controls. The current setup isn't great for those of us who want to use the phone with our left hand. </p><p>Fortunately, a fix is on the way, and since most <a href="https://www.tomsguide.com/phones/iphones/apple-just-bumped-up-some-iphone-duo-delivery-dates-here-is-how-to-check-yours">people won't get their Duo until Decembe</a>r or January anyway, it might not be a problem by the time you get one. </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>Apple told Tom's Guide in a briefing that reachability features will come later this year. It's unclear exactly when the setting will arrive. </p><p>As you can see in our video above, the iPhone Duo is not quite left-handed-friendly. For a better example of the stretch your thumb will need, check out this <a href="https://www.instagram.com/reel/DdWfP6ZoO50/" target="_blank">Instagram reel from Bytereview</a>. </p><p>For those of us with shorter thumbs or smaller hands, getting across the display to tap apps or controls will be quite the stretch.</p><p>For the unfamiliar, Reachability is an accessibility setting that is available for standard iPhone models. It allows you to swipe down on the bottom edge of the screen to bring the top half of the UI down so that controls are easier to reach with one hand. </p><p>It's not quite the ability to customize where the control dock is actually located, but it's helpful. </p><h2 id="that-39-s-not-all">That's not 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="RVQtVtADxHFrALUGQ9mGSR" name="iphone duo outlook" alt="iphone duo" src="https://cdn.mos.cms.futurecdn.net/RVQtVtADxHFrALUGQ9mGSR-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Reachability isn't the only potential misstep on the iPhone Duo. As my colleague <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#section-it-s-built-like-a-brick">Dave LeClair points out</a>, the Duo is heavy, expensive and not quite optimized outside of Apple's in-house apps.</p><p>The iPhone Duo is an interesting foldable. In our lab testing, the battery results and<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"> full performance benchmarks </a>showcase a foldable that is powerful and efficient, with <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-battery-life-results-are-in-how-does-it-compare-to-other-foldables">battery life that will last you</a> most of the day.</p><p>In a <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-ask-our-foldable-phone-experts-anything">recent Live Q&A</a>, we covered many questions that Tom's Guide readers had about the Duo. Including answers about the crease, the drawbacks to the camera system, and Touch ID versus Face ID.</p><p>What do you think? Let us know in the comments if the locked dock on the iPhone Duo is a major flaw or a mere nuisance. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/computing/macbooks/apple-pro-and-tell-event-rumors-oled-macbooks-m6-chips-and-why-you-shouldnt-buy-anything-today"><strong>Apple 'Pro and Tell' event rumors: OLED MacBooks, M6 chips, and why you shouldn't buy anything today</strong></a></li><li><a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-ask-our-foldable-phone-experts-anything"><strong>iPhone Duo Live Q&A: I spent a week with Apple's foldable and can answer ALL your questions</strong></a></li><li><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></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/lefties-are-out-of-luck-with-the-iphone-duo-but-apple-plans-to-add-reachability-features-later-this-year</link>
                                                                            <description>
                            <![CDATA[ Apple has plans to add reachability features to the iPhone Duo later this year for those who are left handed and want better access to the control bar. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">fQdFoG3g5f4uWkF5wawNtg</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/CcFGaWKVmd5WPUBEfFrBk4-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 21 Oct 2026 17:07:44 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ scott.younker@futurenet.com (Scott Younker) ]]></author>                    <dc:creator><![CDATA[ Scott Younker ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/RZsUpqcJ6Uj2q83oCUwNhQ-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/CcFGaWKVmd5WPUBEfFrBk4-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPhone Duo]]></media:description>                                                            <media:text><![CDATA[iPhone Duo]]></media:text>
                                <media:title type="plain"><![CDATA[iPhone Duo]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/CcFGaWKVmd5WPUBEfFrBk4-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>As a leftie, one of the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-review">iPhone Duo's</a> biggest drawbacks is the controls. The current setup isn't great for those of us who want to use the phone with our left hand. </p><p>Fortunately, a fix is on the way, and since most <a href="https://www.tomsguide.com/phones/iphones/apple-just-bumped-up-some-iphone-duo-delivery-dates-here-is-how-to-check-yours">people won't get their Duo until Decembe</a>r or January anyway, it might not be a problem by the time you get one. </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>Apple told Tom's Guide in a briefing that reachability features will come later this year. It's unclear exactly when the setting will arrive. </p><p>As you can see in our video above, the iPhone Duo is not quite left-handed-friendly. For a better example of the stretch your thumb will need, check out this <a href="https://www.instagram.com/reel/DdWfP6ZoO50/" target="_blank">Instagram reel from Bytereview</a>. </p><p>For those of us with shorter thumbs or smaller hands, getting across the display to tap apps or controls will be quite the stretch.</p><p>For the unfamiliar, Reachability is an accessibility setting that is available for standard iPhone models. It allows you to swipe down on the bottom edge of the screen to bring the top half of the UI down so that controls are easier to reach with one hand. </p><p>It's not quite the ability to customize where the control dock is actually located, but it's helpful. </p><h2 id="that-39-s-not-all">That's not 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="RVQtVtADxHFrALUGQ9mGSR" name="iphone duo outlook" alt="iphone duo" src="https://cdn.mos.cms.futurecdn.net/RVQtVtADxHFrALUGQ9mGSR-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Reachability isn't the only potential misstep on the iPhone Duo. As my colleague <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#section-it-s-built-like-a-brick">Dave LeClair points out</a>, the Duo is heavy, expensive and not quite optimized outside of Apple's in-house apps.</p><p>The iPhone Duo is an interesting foldable. In our lab testing, the battery results and<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"> full performance benchmarks </a>showcase a foldable that is powerful and efficient, with <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-battery-life-results-are-in-how-does-it-compare-to-other-foldables">battery life that will last you</a> most of the day.</p><p>In a <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-ask-our-foldable-phone-experts-anything">recent Live Q&A</a>, we covered many questions that Tom's Guide readers had about the Duo. Including answers about the crease, the drawbacks to the camera system, and Touch ID versus Face ID.</p><p>What do you think? Let us know in the comments if the locked dock on the iPhone Duo is a major flaw or a mere nuisance. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/computing/macbooks/apple-pro-and-tell-event-rumors-oled-macbooks-m6-chips-and-why-you-shouldnt-buy-anything-today"><strong>Apple 'Pro and Tell' event rumors: OLED MacBooks, M6 chips, and why you shouldn't buy anything today</strong></a></li><li><a href="https://www.tomsguide.com/phones/iphones/apple-iphone-duo-ask-our-foldable-phone-experts-anything"><strong>iPhone Duo Live Q&A: I spent a week with Apple's foldable and can answer ALL your questions</strong></a></li><li><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></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ iPhone Duo full benchmarks — the world's fastest foldable, but how does it stack up to iPhone 18 Pro? ]]></title>
                                                                                                <dc:content><![CDATA[ <p>​Apple has a lot to prove to critics — including myself — if it wants to show that the iPhone Duo is, without question, the <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">best foldable phone</a> on the market. That’s because book-style foldables demand far more system resources, especially when driving larger canvases than traditional slab phones.</p><p>​One area where the iPhone Duo could solidify its position as the foldable to beat is performance. Armed with 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 chip</a>, early signs suggest it is no slouch, especially given the outstanding performance we’ve seen from the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-benchmarks-apple-just-built-the-most-powerful-phones-weve-ever-seen">iPhone 18 Pro and 18 Pro Max</a>. But where does it land against key rivals, as well as its slab siblings?</p><p>After running various synthetic benchmark tests, I can tell you that the iPhone Duo is easily one of the most powerful phones around. Here’s why.</p><h2 class="article-body__section" id="section-iphone-duo-cpu-performance-geekbench"><span>iPhone Duo CPU performance: Geekbench</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="M8Q4yuNxo8apYZAixPuwWL" name="Apple iPhone Duo-16" alt="iPhone Duo shown held in hand" src="https://cdn.mos.cms.futurecdn.net/M8Q4yuNxo8apYZAixPuwWL-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>​First off, I want to show how the iPhone Duo operates on a baseline level when its CPU is put to the test — which is where Geekbench scores come in. This synthetic benchmark tests a device’s single- and multi-core performance, and the A20 Pro proves once again that it is just as formidable inside the iPhone Duo.</p><p>Apple’s first foldable phone pulls in impressive Geekbench 6 single- and multi-core scores of 4,722 and 12,708, respectively. While those figures trail its Pro siblings slightly, the difference is practically negligible given that the single-core scores are separated by fewer than 20 points, and multi-core by less than 100.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Geekbench 6</strong><br><strong>(single/multi-core)</strong></p></td><td  ><p><strong>Geekbench 7</strong><br><strong>(single/multi-core)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>iPhone Duo</strong></p></td><td  ><p>4,722 / 12,708</p></td><td  ><p>4,007 / 11,363</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 18 Pro</strong></p></td><td  ><p>4,735 / 12,800</p></td><td  ><p>4,022 / 11,543</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 18 Pro Max</strong></p></td><td  ><p>4,741 / 12,789</p></td><td  ><p>4,025 / 11,525</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>3,110 / 10,578</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>2,978 / 9,811</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>N/A</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 11 Pro Fold</strong></p></td><td  ><p>2,687 / 7,381</p></td><td  ><p>2,309 / 6,803</p></td></tr></tbody></table></div><p>If you’re curious, the iPhone 18 Pro Max edges out the iPhone Duo across the board in Geekbench 6 and 7, but it holds less than a 1.5% performance advantage overall — effectively proving that the Duo is just as capable as Apple’s traditional flagship slabs.</p><p>​Compared to foldable rivals like the Galaxy Z Fold 8, the iPhone Duo easily outmuscles the field. Neither the Galaxy Z Fold 8 Ultra nor the Motorola Razr Fold eclipses the 4,000-point mark in Geekbench 6 single-core, while the Pixel 11 Pro Fold sits far behind the pack with noticeably subpar scores.</p><h2 class="article-body__section" id="section-iphone-duo-graphics-performance-3dmark"><span>iPhone Duo graphics performance: 3DMark</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="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>​Nowadays, you could argue that most flagship phones feel perfectly responsive during basic tasks — like sending emails, browsing the web, or streaming the occasional video. Where I tend to notice the biggest differences, however, is how they handle the demanding load of running today’s graphically intensive games. While the iPhone 18 Pro and 18 Pro Max have already proven that Apple's silicon can outpace Qualcomm's (for now) the iPhone Duo simply cements that lead.</p><p>​Running 3DMark’s Solar Bay Unlimited test, the iPhone Duo achieves the same fluid frame rates as its siblings. Averaging 62.3 fps, it slots directly between the two Pro flagships. And while it doesn't cross the 17,000 threshold like the iPhone 18 Pro Max, the iPhone Duo’s score of 16,496 is still remarkably strong.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>3DMark Solar Bay Unlimited</strong></p></td></tr><tr><td class="firstcol " ><p><strong>iPhone Duo</strong></p></td><td  ><p>62.3 fps / 16,496</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 18 Pro</strong></p></td><td  ><p>61.93 fps  / 16,288</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 18 Pro Max</strong></p></td><td  ><p>67.9 fps / 17,850</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8 Ultra</strong></p></td><td  ><p>49.24 fps / 12,950</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8</strong></p></td><td  ><p>47.35 fps / 12,454</p></td></tr><tr><td class="firstcol " ><p><strong>Motorola Razr Fold</strong></p></td><td  ><p>34.65 fps / 9,413</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 11 Pro Fold</strong></p></td><td  ><p>N/A</p></td></tr></tbody></table></div><p>That advantage becomes even more pronounced when comparing its graphics processing scores against rival foldables. In fact, none of its key competitors come close to cracking the 50-fps mark. The Galaxy Z Fold 8 Ultra and Fold 8 hover just beneath it at 49.24 fps and 47.35 fps, respectively, but the iPhone Duo’s 62.3-fps average puts it in an entirely different league. That translates to a roughly 32% GPU performance advantage over the Z Fold 8 — a massive gap in mobile gaming.</p><p>​All of this points to an obvious takeaway: the iPhone Duo is a legitimate gamer’s phone. Beyond its sprawling 7.8-inch main canvas that beautifully renders complex landscapes with realistic lighting effects, it delivers smooth, fluid gameplay without noticeable stutter or frame drops when on-screen action heats up.</p><h2 class="article-body__section" id="section-iphone-duo-performance-geekbench-ai"><span>iPhone Duo performance: GeekBench AI</span></h2><div ><table><tbody><tr><td class="firstcol empty" ></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>69,438 (Quantitized Core ML/Neural Engine)</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 18 Pro</strong></p></td><td  ><p>69,245 (Quantitized Core ML/Neural Engine)</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 18 Pro Max</strong></p></td><td  ><p>71,974 (Quantitized Core ML/Neural Engine)</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8 Ultra</strong></p></td><td  ><p>71,715 (TensorFlow Lite QNN)</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8</strong></p></td><td  ><p>72,242 (TensorFlow Lite QNN)</p></td></tr><tr><td class="firstcol " ><p><strong>Motorola Razr Fold</strong></p></td><td  ><p>59,663 (TensorFlow Lite QNN)</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 11 Pro Fold</strong></p></td><td  ><p>9,92 (TensorFlow Lite NNAPI)</p></td></tr></tbody></table></div><p>With more and more people leaning on AI tools, it’s always telling to see how phones handle on-device tasks — because let’s face it, waiting for an AI assitant to come back with a request can quickly derail my productivity. Running Geekbench AI 1.7, the A20 Pro’s dual 16-core Neural Engine handles machine learning models with impressive speed.</p><p>​Its average score of 69,438 in Geekbench AI 1.7 is strong enough to once again slot right between the iPhone 18 Pro and 18 Pro Max. However, the Galaxy Z Fold 8 Ultra and standard Z Fold 8 hold a narrow lead here with scores of 71,715 and 72,242, respectively. Even though Qualcomm's silicon notches a win over the A20 Pro in this specific test, the gap is so slim (roughly 3% to 4%) that it won't matter in day-to-day use.</p><h2 class="article-body__section" id="section-iphone-duo-performance-bottom-line"><span>iPhone Duo performance: 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="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>Apple’s switch to a 2-nanometer manufacturing process with the A20 Pro is clearly paying off in the iPhone Duo. While benchmark scores prove it is easily one of the most powerful iPhones to date, that strength translates directly into daily use, where it handles complex tasks with the same finesse as basic navigation. Considering its sprawling main display is designed specifically to run two apps side by side, these benchmark results show that the Duo can more than deliver on that multitasking promise.</p><p>​At the same time, this serves as a wake-up call for Samsung, Google, and Motorola. With their next-generation foldables already deep in development, the iPhone Duo’s performance proves that rivals can no longer afford to compromise on raw power or thermal execution.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Oqg5Re"></div>                            </div>                            <script src="https://kwizly.com/embed/Oqg5Re.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/7-ways-the-iphone-duo-could-change-foldables-for-the-better">7 ways the iPhone Duo could change foldables for the better</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/iphone-duo-full-benchmarks-the-worlds-fastest-foldable-but-how-does-it-stack-up-to-iphone-18-pro</link>
                                                                            <description>
                            <![CDATA[ The iPhone Duo is powered by the same A20 Pro chip found in the iPhone 18 Pro and 18 Pro Max. Here's how it performs against key rivals. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">CN5N4EmPnwsVEwqHXY7zZ</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/hQsu44H2c5ev7LvhgLRi73-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 21 Oct 2026 14:08:39 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ john.velasco@futurenet.com (John Velasco) ]]></author>                    <dc:creator><![CDATA[ John Velasco ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/TSj224oX8d5ERXaDs8pDGd-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/hQsu44H2c5ev7LvhgLRi73-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPhone Duo]]></media:description>                                                            <media:text><![CDATA[iPhone Duo]]></media:text>
                                <media:title type="plain"><![CDATA[iPhone Duo]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/hQsu44H2c5ev7LvhgLRi73-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>​Apple has a lot to prove to critics — including myself — if it wants to show that the iPhone Duo is, without question, the <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">best foldable phone</a> on the market. That’s because book-style foldables demand far more system resources, especially when driving larger canvases than traditional slab phones.</p><p>​One area where the iPhone Duo could solidify its position as the foldable to beat is performance. Armed with 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 chip</a>, early signs suggest it is no slouch, especially given the outstanding performance we’ve seen from the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-benchmarks-apple-just-built-the-most-powerful-phones-weve-ever-seen">iPhone 18 Pro and 18 Pro Max</a>. But where does it land against key rivals, as well as its slab siblings?</p><p>After running various synthetic benchmark tests, I can tell you that the iPhone Duo is easily one of the most powerful phones around. Here’s why.</p><h2 class="article-body__section" id="section-iphone-duo-cpu-performance-geekbench"><span>iPhone Duo CPU performance: Geekbench</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="M8Q4yuNxo8apYZAixPuwWL" name="Apple iPhone Duo-16" alt="iPhone Duo shown held in hand" src="https://cdn.mos.cms.futurecdn.net/M8Q4yuNxo8apYZAixPuwWL-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>​First off, I want to show how the iPhone Duo operates on a baseline level when its CPU is put to the test — which is where Geekbench scores come in. This synthetic benchmark tests a device’s single- and multi-core performance, and the A20 Pro proves once again that it is just as formidable inside the iPhone Duo.</p><p>Apple’s first foldable phone pulls in impressive Geekbench 6 single- and multi-core scores of 4,722 and 12,708, respectively. While those figures trail its Pro siblings slightly, the difference is practically negligible given that the single-core scores are separated by fewer than 20 points, and multi-core by less than 100.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Geekbench 6</strong><br><strong>(single/multi-core)</strong></p></td><td  ><p><strong>Geekbench 7</strong><br><strong>(single/multi-core)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>iPhone Duo</strong></p></td><td  ><p>4,722 / 12,708</p></td><td  ><p>4,007 / 11,363</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 18 Pro</strong></p></td><td  ><p>4,735 / 12,800</p></td><td  ><p>4,022 / 11,543</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 18 Pro Max</strong></p></td><td  ><p>4,741 / 12,789</p></td><td  ><p>4,025 / 11,525</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>3,110 / 10,578</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>2,978 / 9,811</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>N/A</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 11 Pro Fold</strong></p></td><td  ><p>2,687 / 7,381</p></td><td  ><p>2,309 / 6,803</p></td></tr></tbody></table></div><p>If you’re curious, the iPhone 18 Pro Max edges out the iPhone Duo across the board in Geekbench 6 and 7, but it holds less than a 1.5% performance advantage overall — effectively proving that the Duo is just as capable as Apple’s traditional flagship slabs.</p><p>​Compared to foldable rivals like the Galaxy Z Fold 8, the iPhone Duo easily outmuscles the field. Neither the Galaxy Z Fold 8 Ultra nor the Motorola Razr Fold eclipses the 4,000-point mark in Geekbench 6 single-core, while the Pixel 11 Pro Fold sits far behind the pack with noticeably subpar scores.</p><h2 class="article-body__section" id="section-iphone-duo-graphics-performance-3dmark"><span>iPhone Duo graphics performance: 3DMark</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="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>​Nowadays, you could argue that most flagship phones feel perfectly responsive during basic tasks — like sending emails, browsing the web, or streaming the occasional video. Where I tend to notice the biggest differences, however, is how they handle the demanding load of running today’s graphically intensive games. While the iPhone 18 Pro and 18 Pro Max have already proven that Apple's silicon can outpace Qualcomm's (for now) the iPhone Duo simply cements that lead.</p><p>​Running 3DMark’s Solar Bay Unlimited test, the iPhone Duo achieves the same fluid frame rates as its siblings. Averaging 62.3 fps, it slots directly between the two Pro flagships. And while it doesn't cross the 17,000 threshold like the iPhone 18 Pro Max, the iPhone Duo’s score of 16,496 is still remarkably strong.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>3DMark Solar Bay Unlimited</strong></p></td></tr><tr><td class="firstcol " ><p><strong>iPhone Duo</strong></p></td><td  ><p>62.3 fps / 16,496</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 18 Pro</strong></p></td><td  ><p>61.93 fps  / 16,288</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 18 Pro Max</strong></p></td><td  ><p>67.9 fps / 17,850</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8 Ultra</strong></p></td><td  ><p>49.24 fps / 12,950</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8</strong></p></td><td  ><p>47.35 fps / 12,454</p></td></tr><tr><td class="firstcol " ><p><strong>Motorola Razr Fold</strong></p></td><td  ><p>34.65 fps / 9,413</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 11 Pro Fold</strong></p></td><td  ><p>N/A</p></td></tr></tbody></table></div><p>That advantage becomes even more pronounced when comparing its graphics processing scores against rival foldables. In fact, none of its key competitors come close to cracking the 50-fps mark. The Galaxy Z Fold 8 Ultra and Fold 8 hover just beneath it at 49.24 fps and 47.35 fps, respectively, but the iPhone Duo’s 62.3-fps average puts it in an entirely different league. That translates to a roughly 32% GPU performance advantage over the Z Fold 8 — a massive gap in mobile gaming.</p><p>​All of this points to an obvious takeaway: the iPhone Duo is a legitimate gamer’s phone. Beyond its sprawling 7.8-inch main canvas that beautifully renders complex landscapes with realistic lighting effects, it delivers smooth, fluid gameplay without noticeable stutter or frame drops when on-screen action heats up.</p><h2 class="article-body__section" id="section-iphone-duo-performance-geekbench-ai"><span>iPhone Duo performance: GeekBench AI</span></h2><div ><table><tbody><tr><td class="firstcol empty" ></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>69,438 (Quantitized Core ML/Neural Engine)</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 18 Pro</strong></p></td><td  ><p>69,245 (Quantitized Core ML/Neural Engine)</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 18 Pro Max</strong></p></td><td  ><p>71,974 (Quantitized Core ML/Neural Engine)</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8 Ultra</strong></p></td><td  ><p>71,715 (TensorFlow Lite QNN)</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8</strong></p></td><td  ><p>72,242 (TensorFlow Lite QNN)</p></td></tr><tr><td class="firstcol " ><p><strong>Motorola Razr Fold</strong></p></td><td  ><p>59,663 (TensorFlow Lite QNN)</p></td></tr><tr><td class="firstcol " ><p><strong>Pixel 11 Pro Fold</strong></p></td><td  ><p>9,92 (TensorFlow Lite NNAPI)</p></td></tr></tbody></table></div><p>With more and more people leaning on AI tools, it’s always telling to see how phones handle on-device tasks — because let’s face it, waiting for an AI assitant to come back with a request can quickly derail my productivity. Running Geekbench AI 1.7, the A20 Pro’s dual 16-core Neural Engine handles machine learning models with impressive speed.</p><p>​Its average score of 69,438 in Geekbench AI 1.7 is strong enough to once again slot right between the iPhone 18 Pro and 18 Pro Max. However, the Galaxy Z Fold 8 Ultra and standard Z Fold 8 hold a narrow lead here with scores of 71,715 and 72,242, respectively. Even though Qualcomm's silicon notches a win over the A20 Pro in this specific test, the gap is so slim (roughly 3% to 4%) that it won't matter in day-to-day use.</p><h2 class="article-body__section" id="section-iphone-duo-performance-bottom-line"><span>iPhone Duo performance: 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="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>Apple’s switch to a 2-nanometer manufacturing process with the A20 Pro is clearly paying off in the iPhone Duo. While benchmark scores prove it is easily one of the most powerful iPhones to date, that strength translates directly into daily use, where it handles complex tasks with the same finesse as basic navigation. Considering its sprawling main display is designed specifically to run two apps side by side, these benchmark results show that the Duo can more than deliver on that multitasking promise.</p><p>​At the same time, this serves as a wake-up call for Samsung, Google, and Motorola. With their next-generation foldables already deep in development, the iPhone Duo’s performance proves that rivals can no longer afford to compromise on raw power or thermal execution.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Oqg5Re"></div>                            </div>                            <script src="https://kwizly.com/embed/Oqg5Re.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/7-ways-the-iphone-duo-could-change-foldables-for-the-better">7 ways the iPhone Duo could change foldables for the better</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[ iPhone Duo battery life results are in — here's how it compares to other foldables (and iPhone 18 Pro Max) ]]></title>
                                                                                                <dc:content><![CDATA[ <p><a href="https://www.tomsguide.com/best-picks/best-foldable-phones">The best foldable phones</a> come with some compromises, and 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 no exception to that. You only have two main cameras, the screen is shorter than you'd find on other iPhones and the battery is noticeably smaller than the one in the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-and-pro-max-review">iPhone 18 Pro Max</a> — just to name a few. </p><p>But when it comes to battery, size only matters so much. There are a bunch of different factors that impact how long a device can last on a single charge, which is why testing is so important. </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>We have done our testing with the iPhone Duo, using a custom battery life test designed to mimic ordinary daily use. And the results are fairly impressive, even if they aren't as impressive as they were on iPhone 18 Pro Max.</p><h3 class="article-body__section" id="section-iphone-duo-battery-life-results"><span>iPhone Duo Battery Life Results</span></h3><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="ZhFuJYhmVGtqxQkRvR5EwU" name="Apple iPhone Duo-30" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/ZhFuJYhmVGtqxQkRvR5EwU-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><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Battery Life (Hrs:Mins)</strong></p></td><td  ><p><strong>Battery Size (mAh)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>iPhone Duo</strong></p></td><td  ><p>13:20</p></td><td  ><p>4,883</p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy Z Fold 8</strong></p></td><td  ><p>10:06 (New test)</p></td><td  ><p>4,800</p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy Z Fold 8 Ultra</strong></p></td><td  ><p>14:33</p></td><td  ><p>5,000</p></td></tr><tr><td class="firstcol " ><p><strong>Motorola Razr Fold</strong></p></td><td  ><p>14:44</p></td><td  ><p>6,000</p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 11 Pro Fold</strong></p></td><td  ><p>12:31</p></td><td  ><p>4,806</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 18 Pro Max</strong></p></td><td  ><p>17:31 (New Test)</p></td><td  ><p>5,567</p></td></tr></tbody></table></div><p>We tested the battery life of the iPhone Duo, iPhone 18 Pro Max and <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> simultaneously, with all three phones situated side-by-side. The results of this test found that the iPhone Duo lasted 13 hours and 20 minutes, and unsurprisingly the iPhone 18 Pro Max lasted 17 hours and 31 minutes. The difference isn't that surprising, since the 18 Pro Max has an extra 684 mAh of battery capacity.</p><p>How the Duo compares to the Z Fold 8 is rather interesting, considering the difference in battery size is a mere 83 mAh. According to this test the Duo lasted more than three hours longer than the Z Fold 8, which just goes to show how much of a difference energy efficiency and reduced power consumption can make.</p><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="XvxwnrgkcgqgDyvXVN5J73" name="Apple iPhone Duo-15" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/XvxwnrgkcgqgDyvXVN5J73-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 should also caveat this by pointing out that our original battery life test for the Galaxy Z Fold 8 review saw the phone last 12 hours and 19 minutes. The discrepancy is down to the fact that the Fold is now a little older, and the variables of the test environment may be having an impact. However, it's worth noting that the original battery life result is still almost an hour less battery life than the Duo. </p><p>As for the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Samsung Galaxy Z Fold 8 Ultra</a>, the extra 117 mAh of capacity pushes the battery life a little bit further with an extra hour and 13 minutes of battery life. Though this is the original result, and that figure did not come from a brand new battery life test.</p><p>The iPhone Duo also exceeds the battery life of the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-fold-review">Pixel 11 Pro Fold</a>, which died 49 minutes faster than Apple's foldable. Considering the minor difference between the two battery sizes, and Pixel phones' reputation for less-then-stellar battery life, that's not a huge surprise. Likewise it's not shocking that the 6,000 mAh <a href="https://www.tomsguide.com/phones/motorola-phones/motorola-razr-fold-review">Motorola Razr Fold</a> lasted 14 hours and 44 minutes, considering how much more battery capacity it has.</p><h3 class="article-body__section" id="section-iphone-duo-charging-speed"><span>iPhone Duo charging speed</span></h3><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="JbqwCsepn38yRyvgKjsK7L" name="Apple iPhone Duo-LIST3" alt="iPhone Duo shown held in hand" src="https://cdn.mos.cms.futurecdn.net/JbqwCsepn38yRyvgKjsK7L-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><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>15 minutes</strong></p></td><td  ><p><strong>30 minutes</strong></p></td><td  ><p><strong>Charge Speed</strong></p></td></tr><tr><td class="firstcol " ><p><strong>iPhone Duo</strong></p></td><td  ><p>42%</p></td><td  ><p>66%</p></td><td  ><p>60W</p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy Z Fold 8</strong></p></td><td  ><p>43%</p></td><td  ><p>70%</p></td><td  ><p>45W</p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy Z Fold 8 Ultra</strong></p></td><td  ><p>49%</p></td><td  ><p>76%</p></td><td  ><p>45W</p></td></tr><tr><td class="firstcol " ><p><strong>Motorola Razr Fold</strong></p></td><td  ><p>42%</p></td><td  ><p>75%</p></td><td  ><p>80W</p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 11 Pro Fold</strong></p></td><td  ><p>29%</p></td><td  ><p>56%</p></td><td  ><p>30W</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 18 Pro Max</strong></p></td><td  ><p>44%</p></td><td  ><p>77%</p></td><td  ><p>60W</p></td></tr></tbody></table></div><p>The iPhone Duo is meant to offer 60W charging, the same as the iPhone 18 Pro Max, but that doesn't mean it charges at the same rate. In fact, despite having a larger battery, the 18 Pro Max draws in power much more quickly. After 15 minutes it was at 44%, compared to the Duo's 42%, and after half an hour of charging the foldable had 11% less power than its non-folding sibling.</p><p>It's a similar situation with the iPhone Z Fold 8 and Z Fold 8 Ultra, both of which are limited to 45W charging speeds. The Ultra hit 49% after 15 minutes, while the smaller battery in the Fold 8 reached 43%. After half an hour the two phones held a respective 76% and 70% charge. Meanwhile the Razr Fold, which supports up to 80W wired charging, had 75% of its power restored after a 30 minute recharge.</p><p>Unsurprisingly the Pixel 11 Pro Fold comes out much worse for wear in this test as well. It only managed to recoup 29% charge in 15 minutes and 56% after half an hour — a problem exacerbated by its limited 30W charging speeds.</p><h3 class="article-body__section" id="section-how-we-test-phone-battery-life"><span>How we test phone battery life</span></h3><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="7Gn3ZLxaZrGJtebjmmoS83" name="Apple iPhone Duo-12" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/7Gn3ZLxaZrGJtebjmmoS83-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 key thing we should mention about battery testing the iPhone Duo was that our typical test had to be redesigned to fill the entire screen. Otherwise it wouldn't have been a very fair test. The test itself involved continually surfing the web over a 5G connection, with the screen brightness set to a consistent 150 nits.</p><p>In the case of foldable phones, this test is always performed on the larger folding screen.</p><p>All phones we test go through this process, though so far only three have gone through this newly optimized testing regiment. They are the iPhone Duo, Samsung Galaxy Z Fold 8 and the iPhone 18 Pro Max. In this instance all three phones were tested in the same room, with the tests running simultaneously. </p><h3 class="article-body__section" id="section-bottom-line"><span>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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="zBHjJoz6DppuWEk7mW4eSL" name="Apple iPhone Duo-20" alt="iPhone Duo shown held in hand" src="https://cdn.mos.cms.futurecdn.net/zBHjJoz6DppuWEk7mW4eSL-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>Overall the iPhone Duo's battery life is rather middling compared to its rivals, but that's not to say that it's bad. The battery isn't good enough to land a place on our best phone battery life list, but it should be enough to get through a typical day without having to carry a charger with you.</p><p>Those hoping to prioritize strong battery life above all else will want to stick with the non-folding iPhone 18 Pro Max. It's a sad fact that foldables are just a little too power hungry to outpace their single-screen counterparts in the battery department. But as far as foldables go you could do a lot worse than the iPhone Duo. </p><p>Though, admittedly, two Android rivals offer over an hour extra battery life as well. Likewise many of them charge faster than Apple's phone, even if regaining 42% in 15 minutes isn't a particularly slow recharge speed. That should, at the very least, get you through a good part of your day before the usual low battery anxieties start knocking at your door.</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-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/samsung-phones/forget-iphone-duo-samsung-could-release-six-different-foldable-phones-next-year-including-the-mysterious-galaxy-z-slide">Forget iPhone Duo, Samsung could release six different foldable phones next year — including the mysterious 'Galaxy Z Slide'</a></li><li><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 — latest updates and how to beat Apple's January delay</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/iphone-duo-battery-life-results-are-in-how-does-it-compare-to-other-foldables</link>
                                                                            <description>
                            <![CDATA[ The iPhone Duo can't match the heights of the iPhone 18 Pro Max, but it still has a fairly long-lasting battery life. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">5MrkUravgAwmrVJ5smAh7S</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/vBwqfA2ssezXqWnPua6d83-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 21 Oct 2026 12:00:00 +0000</pubDate>                                                                                                                                <updated>Wed, 21 Oct 2026 18:51:43 +0000</updated>
                                                                                                                                            <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f-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/vBwqfA2ssezXqWnPua6d83-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPhone Duo]]></media:description>                                                            <media:text><![CDATA[iPhone Duo]]></media:text>
                                <media:title type="plain"><![CDATA[iPhone Duo]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/vBwqfA2ssezXqWnPua6d83-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p><a href="https://www.tomsguide.com/best-picks/best-foldable-phones">The best foldable phones</a> come with some compromises, and 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 no exception to that. You only have two main cameras, the screen is shorter than you'd find on other iPhones and the battery is noticeably smaller than the one in the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-and-pro-max-review">iPhone 18 Pro Max</a> — just to name a few. </p><p>But when it comes to battery, size only matters so much. There are a bunch of different factors that impact how long a device can last on a single charge, which is why testing is so important. </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>We have done our testing with the iPhone Duo, using a custom battery life test designed to mimic ordinary daily use. And the results are fairly impressive, even if they aren't as impressive as they were on iPhone 18 Pro Max.</p><h3 class="article-body__section" id="section-iphone-duo-battery-life-results"><span>iPhone Duo Battery Life Results</span></h3><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="ZhFuJYhmVGtqxQkRvR5EwU" name="Apple iPhone Duo-30" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/ZhFuJYhmVGtqxQkRvR5EwU-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><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Battery Life (Hrs:Mins)</strong></p></td><td  ><p><strong>Battery Size (mAh)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>iPhone Duo</strong></p></td><td  ><p>13:20</p></td><td  ><p>4,883</p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy Z Fold 8</strong></p></td><td  ><p>10:06 (New test)</p></td><td  ><p>4,800</p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy Z Fold 8 Ultra</strong></p></td><td  ><p>14:33</p></td><td  ><p>5,000</p></td></tr><tr><td class="firstcol " ><p><strong>Motorola Razr Fold</strong></p></td><td  ><p>14:44</p></td><td  ><p>6,000</p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 11 Pro Fold</strong></p></td><td  ><p>12:31</p></td><td  ><p>4,806</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 18 Pro Max</strong></p></td><td  ><p>17:31 (New Test)</p></td><td  ><p>5,567</p></td></tr></tbody></table></div><p>We tested the battery life of the iPhone Duo, iPhone 18 Pro Max and <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> simultaneously, with all three phones situated side-by-side. The results of this test found that the iPhone Duo lasted 13 hours and 20 minutes, and unsurprisingly the iPhone 18 Pro Max lasted 17 hours and 31 minutes. The difference isn't that surprising, since the 18 Pro Max has an extra 684 mAh of battery capacity.</p><p>How the Duo compares to the Z Fold 8 is rather interesting, considering the difference in battery size is a mere 83 mAh. According to this test the Duo lasted more than three hours longer than the Z Fold 8, which just goes to show how much of a difference energy efficiency and reduced power consumption can make.</p><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="XvxwnrgkcgqgDyvXVN5J73" name="Apple iPhone Duo-15" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/XvxwnrgkcgqgDyvXVN5J73-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 should also caveat this by pointing out that our original battery life test for the Galaxy Z Fold 8 review saw the phone last 12 hours and 19 minutes. The discrepancy is down to the fact that the Fold is now a little older, and the variables of the test environment may be having an impact. However, it's worth noting that the original battery life result is still almost an hour less battery life than the Duo. </p><p>As for the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Samsung Galaxy Z Fold 8 Ultra</a>, the extra 117 mAh of capacity pushes the battery life a little bit further with an extra hour and 13 minutes of battery life. Though this is the original result, and that figure did not come from a brand new battery life test.</p><p>The iPhone Duo also exceeds the battery life of the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-fold-review">Pixel 11 Pro Fold</a>, which died 49 minutes faster than Apple's foldable. Considering the minor difference between the two battery sizes, and Pixel phones' reputation for less-then-stellar battery life, that's not a huge surprise. Likewise it's not shocking that the 6,000 mAh <a href="https://www.tomsguide.com/phones/motorola-phones/motorola-razr-fold-review">Motorola Razr Fold</a> lasted 14 hours and 44 minutes, considering how much more battery capacity it has.</p><h3 class="article-body__section" id="section-iphone-duo-charging-speed"><span>iPhone Duo charging speed</span></h3><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="JbqwCsepn38yRyvgKjsK7L" name="Apple iPhone Duo-LIST3" alt="iPhone Duo shown held in hand" src="https://cdn.mos.cms.futurecdn.net/JbqwCsepn38yRyvgKjsK7L-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><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>15 minutes</strong></p></td><td  ><p><strong>30 minutes</strong></p></td><td  ><p><strong>Charge Speed</strong></p></td></tr><tr><td class="firstcol " ><p><strong>iPhone Duo</strong></p></td><td  ><p>42%</p></td><td  ><p>66%</p></td><td  ><p>60W</p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy Z Fold 8</strong></p></td><td  ><p>43%</p></td><td  ><p>70%</p></td><td  ><p>45W</p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy Z Fold 8 Ultra</strong></p></td><td  ><p>49%</p></td><td  ><p>76%</p></td><td  ><p>45W</p></td></tr><tr><td class="firstcol " ><p><strong>Motorola Razr Fold</strong></p></td><td  ><p>42%</p></td><td  ><p>75%</p></td><td  ><p>80W</p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 11 Pro Fold</strong></p></td><td  ><p>29%</p></td><td  ><p>56%</p></td><td  ><p>30W</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 18 Pro Max</strong></p></td><td  ><p>44%</p></td><td  ><p>77%</p></td><td  ><p>60W</p></td></tr></tbody></table></div><p>The iPhone Duo is meant to offer 60W charging, the same as the iPhone 18 Pro Max, but that doesn't mean it charges at the same rate. In fact, despite having a larger battery, the 18 Pro Max draws in power much more quickly. After 15 minutes it was at 44%, compared to the Duo's 42%, and after half an hour of charging the foldable had 11% less power than its non-folding sibling.</p><p>It's a similar situation with the iPhone Z Fold 8 and Z Fold 8 Ultra, both of which are limited to 45W charging speeds. The Ultra hit 49% after 15 minutes, while the smaller battery in the Fold 8 reached 43%. After half an hour the two phones held a respective 76% and 70% charge. Meanwhile the Razr Fold, which supports up to 80W wired charging, had 75% of its power restored after a 30 minute recharge.</p><p>Unsurprisingly the Pixel 11 Pro Fold comes out much worse for wear in this test as well. It only managed to recoup 29% charge in 15 minutes and 56% after half an hour — a problem exacerbated by its limited 30W charging speeds.</p><h3 class="article-body__section" id="section-how-we-test-phone-battery-life"><span>How we test phone battery life</span></h3><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="7Gn3ZLxaZrGJtebjmmoS83" name="Apple iPhone Duo-12" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/7Gn3ZLxaZrGJtebjmmoS83-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 key thing we should mention about battery testing the iPhone Duo was that our typical test had to be redesigned to fill the entire screen. Otherwise it wouldn't have been a very fair test. The test itself involved continually surfing the web over a 5G connection, with the screen brightness set to a consistent 150 nits.</p><p>In the case of foldable phones, this test is always performed on the larger folding screen.</p><p>All phones we test go through this process, though so far only three have gone through this newly optimized testing regiment. They are the iPhone Duo, Samsung Galaxy Z Fold 8 and the iPhone 18 Pro Max. In this instance all three phones were tested in the same room, with the tests running simultaneously. </p><h3 class="article-body__section" id="section-bottom-line"><span>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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="zBHjJoz6DppuWEk7mW4eSL" name="Apple iPhone Duo-20" alt="iPhone Duo shown held in hand" src="https://cdn.mos.cms.futurecdn.net/zBHjJoz6DppuWEk7mW4eSL-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>Overall the iPhone Duo's battery life is rather middling compared to its rivals, but that's not to say that it's bad. The battery isn't good enough to land a place on our best phone battery life list, but it should be enough to get through a typical day without having to carry a charger with you.</p><p>Those hoping to prioritize strong battery life above all else will want to stick with the non-folding iPhone 18 Pro Max. It's a sad fact that foldables are just a little too power hungry to outpace their single-screen counterparts in the battery department. But as far as foldables go you could do a lot worse than the iPhone Duo. </p><p>Though, admittedly, two Android rivals offer over an hour extra battery life as well. Likewise many of them charge faster than Apple's phone, even if regaining 42% in 15 minutes isn't a particularly slow recharge speed. That should, at the very least, get you through a good part of your day before the usual low battery anxieties start knocking at your door.</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-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/samsung-phones/forget-iphone-duo-samsung-could-release-six-different-foldable-phones-next-year-including-the-mysterious-galaxy-z-slide">Forget iPhone Duo, Samsung could release six different foldable phones next year — including the mysterious 'Galaxy Z Slide'</a></li><li><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 — latest updates and how to beat Apple's January delay</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I tested the iPhone Duo for a week — my favorite foldable yet, but there's a catch ]]></title>
                                                                                                <dc:content><![CDATA[ <p>I honestly haven’t been this excited about a new iPhone since the <a href="https://www.tomsguide.com/us/iphone-x,review-4800.html"><u>iPhone X</u></a> nearly a decade ago. The iPhone Duo finally gives Apple fans a foldable phone, and there’s something really cool about having a 5.4-inch iPhone that transforms into a 7.6-inch mini tablet in your pocket, complete with dual-app multitasking. Finally! </p><p>Apple’s first <a href="https://www.tomsguide.com/best-picks/best-foldable-phones"><u>foldable phone</u></a> doesn’t look or feel like a first attempt, either, because of the sheer attention to detail. The way the friction hinge holds nearly any angle. The seamless switching between the cover and main display with the same aspect ratio. And the nano-texture coating, which minimizes glare and the dreaded crease. I also like how the hardware and software play together, giving you several different modes. It feels like I’m playing with a $2,000 Transformer. </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>On the other hand, the Duo name is apt because I’m of two minds about it. While the first wave of iPhone Duo apps look great, many third-party apps aren’t optimized for this form factor (yet).</p><p>And then there’s the trade-offs versus the iPhone 18 Pro Max, such as the lack of a telephoto zoom and Face ID. I’ve spent the past week living with this $2,000 device as my daily driver. From the nano-texture display and battery life to real-world performance and software quirks, I’m going to answer all your most pressing questions in my full iPhone Duo review. <strong>And I'll keep adding questions and answers to my Duo review based on your feedback, so feel free to drop into the comments!</strong></p><h4 class="article-body__section" id="section-who-is-the-iphone-duo-for"><span>Who is the iPhone Duo for?</span></h4><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="ZhFuJYhmVGtqxQkRvR5EwU" name="Apple iPhone Duo-30" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/ZhFuJYhmVGtqxQkRvR5EwU-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 iPhone Duo is for people who want a big screen on the go for watching videos and playing games, as well as for heavy multitaskers who want to run two apps at once. It’s for people who want a compact phone and tablet in a single device — and are willing to pay a hefty premium to get it.</p><p>For example, I used the iPhone Duo a lot during my commute to get caught up on Slack while watching “First Take” on YouTube TV in another window. And I could open spreadsheets without having to endlessly scroll. I think business travelers in particular are going to love this foldable.</p><h3 class="article-body__section" id="section-design"><span>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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="JbqwCsepn38yRyvgKjsK7L" name="Apple iPhone Duo-LIST3" alt="iPhone Duo shown held in hand" src="https://cdn.mos.cms.futurecdn.net/JbqwCsepn38yRyvgKjsK7L-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><h4 id="how-does-it-feel-and-how-is-the-weight">How does it feel and how is the weight?</h4><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="zBHjJoz6DppuWEk7mW4eSL" name="Apple iPhone Duo-20" alt="iPhone Duo shown held in hand" src="https://cdn.mos.cms.futurecdn.net/zBHjJoz6DppuWEk7mW4eSL-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>My colleague Tony Polanco may have said it best when he picked up the iPhone Duo for the first time. He said “It feels like an iPhone.” And that’s a good way to sum up the build quality of this foldable.</p><p>The passport design has already been done by Samsung with the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win" target="_blank">Galaxy Z Fold 8</a>, but to me, Apple’s Duo feels a notch above. The asymmetrical design looks a bit weird at first, with the flat left side and rounded corners on the right, but it allowed Apple to offer identical 1.4:1 aspect ratios on both the cover and main display. And I think this makes the Duo feel more polished.</p><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" 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>Speaking of which, the iPhone Duo’s polished titanium frame looks premium while being tougher than aluminum. This might sound minor but I also like that the Duo doesn’t wobble as much when placed on a table.</p><p>And I really dig the reassuring and satisfying clasping sound the Duo makes when you close it, thanks to the help of magnets.</p><div ><table><tbody><tr><td class="firstcol " ><p><strong>Device</strong></p></td><td  ><p><strong>Folded Dimensions</strong></p></td><td  ><p><strong>Unfolded Dimensions</strong></p></td><td  ><p><strong>Weight</strong></p></td></tr><tr><td class="firstcol " ><p><strong>iPhone Duo</strong></p></td><td  ><p>4.64 × 3.31 × 0.44 in (117.8 × 84.1 × 11.3 mm)<br></p></td><td  ><p>4.64 × 6.48 × 0.21 in (117.8 × 164.6 × 5.2 mm)</p></td><td  ><p>8.96 oz (254 g)</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8</strong></p></td><td  ><p>4.88 × 3.22 × 0.38 in (123.9 × 81.9 × 9.7 mm)<br></p></td><td  ><p>4.88 × 6.35 × 0.18 in (123.9 × 161.4 × 4.5 mm)</p></td><td  ><p>7.09 oz (201 g)</p></td></tr></tbody></table></div><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="NLi9LYkBth5kk4ZSxAMiKj" name="Apple iPhone Duo-6" alt="iPhone Duo vs Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/NLi9LYkBth5kk4ZSxAMiKj-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>On the other hand, the Duo is pretty chunky compared to the Fold 8. The iPhone Duo is the world’s thinnest iPhone when opened at 5.2mm thin, but it’s thicker than Samsung’s 4.5mm. And when closed the Duo is 16.5% thicker than the Fold 8.</p><p>I also felt the additional heft of the Duo when picking up both foldables. Still, the Duo slipped easily into my front jeans pocket without weighing me down.</p><h4 id="what-can-you-do-with-the-hinge-what-are-all-the-modes">What can you do with the hinge? What are all the modes?</h4><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="MBwuXQM2EUxLEPZgrhYYXL" name="Apple iPhone Duo-15" alt="iPhone Duo shown held in hand" src="https://cdn.mos.cms.futurecdn.net/MBwuXQM2EUxLEPZgrhYYXL-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 iPhone Duo’s hinge is super flexible yet rigid, thanks to a variable torque profile. There’s just the right amount of friction. And you can position the hinge at almost any angle you like for optimal viewing.</p><p>Even better, the iPhone Duo is smart enough to know how you’ve positioned the device and the software adapts (if the app is optimized). For example, when watching “Man of Steel” for the hundredth time on the Apple TV app, I could put the Duo in tabletop mode like a laptop, and it showed the video up top and the playback controls down below. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="vnLnHCXkHaw8KxMHPAAQvB" name="Apple iPhone Duo-28" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/vnLnHCXkHaw8KxMHPAAQvB-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>And when watching Ohio State vs Indiana on YouTube TV while writing this review, I put the Duo in tent mode on my desk so I could keep one eye on the action.</p><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>Apple also gives you a couple of Standby modes with the Duo. I turned this phone into an alarm clock at night in tent mode. And while I was working I half folded the phone in portrait mode to transform the Duo into a clock and digital photo frame.</p><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="2suhj2e7UrM4tHMBEJRPpk" name="Apple iPhone Duo-2" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/2suhj2e7UrM4tHMBEJRPpk-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>You can even literally use the iPhone Duo as a mini laptop in apps like Notes where the keyboard takes up the bottom half of the display. And if you’re in Safari and half fold the screen in landscape mode the keyboard will automatically split, though I don’t find typing this way comfy.</p><h4 id="how-durable-is-it">How durable is it?</h4><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="442uz43hHtDty9c2jmsNw" name="Apple iPhone Duo-8" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/442uz43hHtDty9c2jmsNw-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 iPhone Duo makes up for some of its girth with the fact that it has an IP68 rating. That means it's resistant to both dust and water. That’s better than the Fold 8’s water-only IP48 rating. </p><p>In addition to the Grade 5 Titanium frame, you also get a titanium hinge cover. And Ceramic Shield 2 protects the outer display while regular Ceramic Shield protects the back on the phone. </p><p>Apple employed a nano-texture cover layer on the main display using an advanced polymer that’s up to 40% stiffer than what competing foldables use, which is designed to prevent scratches and dents. This will come in handy for the Apple Pencil, whose support is coming with a software update.</p><h3 class="article-body__section" id="section-display"><span>Display</span></h3><h4 id="how-good-is-the-matte-nano-texture-display-and-does-it-mute-the-colors">How good is the matte nano-texture display? And does it mute the colors?</h4><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="pvaRXhmcDUjqMo3wuVfVfK" name="Apple iPhone Duo-10" alt="iPhone Duo shown held in hand" src="https://cdn.mos.cms.futurecdn.net/pvaRXhmcDUjqMo3wuVfVfK-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’m going to be honest. I’m torn about the iPhone Duo’s nano-texture display. Yes, I like this matte panel seriously reduces glare. And the paper-like texture feels especially nice when you’re reading ebooks. It almost feels like you’re flipping a real page.</p><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="wAz484va9KcSempYnMD2yk" name="Apple iPhone Duo" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/wAz484va9KcSempYnMD2yk-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>But while the iPhone Duo’s main display gets plenty bright, it doesn’t offer the perfect blacks or vibrant hues I normally associate with OLED. When I played the “Avengers: Doomsday” trailer on the Duo and Fold 8, I preferred Samsung’s screen because of those inky blacks and richer colors, even though I could make out more details in the shadows on the Duo. Sometimes, glossy is better.</p><p>However, when I watched the same trailer outside, the Duo exhibited much less glare and the crease was a lot less prominent. Check it out in this video.</p>                    <div class= "tiktok-wrapper" style="min-height: 750px;"><blockquote class="tiktok-embed" cite="https://www.tiktok.com/@mspoonyg/video/7699091190553038093" data-video-id="7699091190553038093" 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="♬ original sound - mspoonyg" href="https://www.tiktok.com/music/original-sound-7699091201709902605">♬ original sound - mspoonyg</a></section>                    </blockquote></div>                <p>The front 5.4-inch display on the Duo is a more traditional glossy OLED panel, and I prefer the color saturation there. But it’s too small for me to watch a movie.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>iPhone Duo </strong></p></td><td  ><p><strong>Galaxy Z Fold 8</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Brightness Nits (SDR)</strong></p></td><td  ><p>1,986 </p></td><td  ><p>1,328</p></td></tr><tr><td class="firstcol " ><p><strong>Brightness Nits (HDR)</strong></p></td><td  ><p>2,558</p></td><td  ><p>2,649 </p></td></tr><tr><td class="firstcol " ><p><strong>Color Gamut (DCI-P3)</strong></p></td><td  ><p>83.5%</p></td><td  ><p>82% (Natural) / 95.4% (Vivid)</p></td></tr><tr><td class="firstcol " ><p><strong>Delta-E Color Accuracy (Lower is better)</strong></p></td><td  ><p>0.27</p></td><td  ><p>0.25</p></td></tr></tbody></table></div><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="sujLhqTd9qT2dA5iw276HC" name="Apple iPhone Duo-26" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/sujLhqTd9qT2dA5iw276HC-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 do have to give a shout-out to the iPhone Duo’s designers for the under-display camera. They did a fantastic job hiding it when not in use. That’s thanks in part to the A20 Pro’s new display engine that blends the pixels around the area.</p><p>The iPhone Duo’s display fared well in our lab testing, reaching nearly 2,600 nits of brightness with HDR content. That’s slightly behind the Fold 8. The Fold 8’s panel offered comparable color reproduction and color accuracy.</p><h4 id="is-there-a-visible-crease">Is there a visible crease?</h4><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="5wVT8JefxympkCCHESK5PL" name="Apple iPhone Duo-LIST4" alt="iPhone Duo shown held in hand" src="https://cdn.mos.cms.futurecdn.net/5wVT8JefxympkCCHESK5PL-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>This is where the nano-texture finish shines. I had a hard time making out the crease on the iPhone Duo while viewing content even when outside. It’s there, but you have to angle the display just right to see it.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:53.75%;"><img id="mvrfSVVZTktfFQmrkz2Cm4" name="Apple iPhone Duo-36" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/mvrfSVVZTktfFQmrkz2Cm4-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1376" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>On the Fold 8, Samsung Flex Titanium tech also does a great job minimizing the crease, but it’s more prominent. Though, to be fair, we’ve been opening and closing this foldable for over three months while the Duo is still fresh.</p><h4 id="is-the-front-screen-big-enough-for-running-apps-and-how-about-typing">Is the front screen big enough for running apps? And how about typing?</h4><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="ZfAzN3CpqFSr4QwyRADNmk" name="Apple iPhone Duo-4" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/ZfAzN3CpqFSr4QwyRADNmk-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 5.4-inch cover display on the iPhone Duo is plenty bright, colorful and sharp, but its squatter dimensions means I could see less info at once in Gmail and Safari.</p><p>Still, the aspect ratio is great for scrolling through TikTok and Instagram. I easily got lost when watching a student in a Spider-Man outfit kick a $3 million field goal before the Notre Dame game.</p><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:54.77%;"><img id="CcFGaWKVmd5WPUBEfFrBk4" name="Apple iPhone Duo-37" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/CcFGaWKVmd5WPUBEfFrBk4-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1402" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>And when it comes to cranking out quick replies to Slack messages or emails, the cover display is plenty wide for typing with two thumbs. </p><p>However, reaching the left side of the front screen can be a challenge. I had to stretch my thumb to reach those app icons.</p><h3 class="article-body__section" id="section-audio"><span>Audio</span></h3><h4 id="how-good-are-the-speakers">How good are the speakers?</h4><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="rknMLwrtvLe3AQZ64qwRDC" name="Apple iPhone Duo-21" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/rknMLwrtvLe3AQZ64qwRDC-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>Surprisingly good! Apple positioned the speakers on the iPhone Duo so that when open they’re on the top left and bottom right. That means you get more balanced sound versus the Galaxy Fold 8, whose speakers are on the top and bottom left when open.</p><p>I played Batille’s “Save My Soul” on the iPhone Duo via Spotify and then switched to the Fold 8, and Apple’s foldable provided better bass and more well-round audio. Samsung’s sound was loud but tinny by comparison.</p><h3 class="article-body__section" id="section-touch-id"><span>Touch ID</span></h3><h4 id="is-it-a-big-deal-that-face-id-is-gone">Is it a big deal that Face ID is gone?</h4><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" 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>I’ve already engaged some commenters in a debate on this and I haven’t changed my mind. Replacing Face ID with Touch ID on the iPhone Duo is a downgrade. The Touch ID sensor works perfectly fine, which is embedded in the oversized side button.</p><div class="looped-video"><video class="lazyload-in-view lazyloading" data-src="https://cdn.mos.cms.futurecdn.net/kRif3feX2N5YvpqjpcoBAN/iPhone%20Duo%20Touch%20ID.mp4" autoplay loop muted playsinline src="https://cdn.mos.cms.futurecdn.net/kRif3feX2N5YvpqjpcoBAN/iPhone%20Duo%20Touch%20ID.mp4"></video></div><p>However, Touch ID introduces lag versus Face ID when unlocking your phone. Not a lot, just enough to be annoying. If you own an Apple Watch, you can unlock your iPhone Duo just by swiping up, but even that’s slower than Face ID. Come at me, bruh.</p><h3 class="article-body__section" id="section-software-and-multitasking"><span>Software and Multitasking</span></h3><h4 id="did-apple-make-the-right-call-with-redesigning-ios-27-and-are-lefties-screwed">Did Apple make the right call with redesigning iOS 27, and are lefties screwed?</h4><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="DZMT6KETAxKUecqBLJ4gkk" name="Apple iPhone Duo-5" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/DZMT6KETAxKUecqBLJ4gkk-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 iPhone Duo runs a custom version of iOS 27 as opposed to iPadOS. This includes combining key status bar elements like battery life and signal strength into a circle in the top right corner. And the Dynamic Island pops out of the top right corner on both the cover display and big screen.</p><p>It took me time getting used to the dock on the right side of the display. The controls and menu items in your apps move to the right, too.</p><p>The bad news is that you can’t move the dock or app controls to the left side, which is a bummer if you’re lefty. And it’s clear Apple could do this if they wanted to. When you’re multitasking I noticed that the dock moves to the left on the left home screen view.</p><p>Apple is going to be rolling out a software update that improves reachability overall, but southpaws are generally still out of luck.</p><h4 id="what-is-split-view-multitasking-like-any-downsides">What is Split View multitasking like? Any downsides?</h4><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>The iPhone Duo introduces dual-app multitasking for the first time on an iPhone, and it’s super intuitive. I just swiped up on an app I was using, like Messages, and then you see that you can dock it to the left or right side of the display.</p><p>From there, the iPhone home screen automatically appears on the other side of the screen. It’s like having two distinct desktops. As you’d expect, dragging and dropping items like photos works seamlessly. </p><p>I also like how easy Apple makes it to create app pairs. Simply tap the center of the bar in the middle of the main display. When you go back to the app switcher it will automatically show up. </p><p>However, I was annoyed to discover that turning the iPhone Duo to portrait mode temporarily breaks the Split View, leaving you with just a single app. The Galaxy Z Fold 8 gives you two skinny versions of the same app, which is better than nothing. At least when you turn the Duo back to landscape the app pair returns.</p><p>You can do a form of multitasking on the iPhone Duo in portrait mode. You can park a video player up top while running another app down below. But entering this mode requires hitting a tiny button rather than dragging and dropping the window. It’s a weird UI inconsistency.</p><h3 class="article-body__section" id="section-apps"><span>Apps</span></h3><h4 id="what-are-the-best-iphone-duo-apps-so-far">What are the best iPhone Duo apps so far?</h4><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="ZVt26nY5LUzSijUdLr3do6" name="Apple iPhone Duo-31" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/ZVt26nY5LUzSijUdLr3do6-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 you might expect, Apple’s own apps look fantastic on the Duo. For example, I love being able to quickly move between multiple tabs in Safari, and Notes and Messages have handy two-column layouts. Apple Music looks slick, too, with Liquid Glass menu items that persist on the right as you scroll.</p><p>But I was more intrigued to try third-party apps optimized for the iPhone Duo, and there are plenty of standouts so far. For example, the new Slack app gives you a dual-pane layout on the 7.6-inch display with your contacts and rooms on the left and messages on the right. The Fold 8’s version is a stretched out phone app with wasted 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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="akmQeVPdgx69uVZyYneQaL" name="Apple iPhone Duo-13" alt="iPhone Duo shown held in hand" src="https://cdn.mos.cms.futurecdn.net/akmQeVPdgx69uVZyYneQaL-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>Netflix lets you scroll through mobile clips on the cover display. But the cooler effect is in the tabletop mode. The content in the top screen reflects on the bottom portion, complete with touch controls.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/SqnDKA6GGKNfdmZVzNWaFC-1920-80.jpg" alt="iPhone Duo" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/GkekestwUzwcBHtU776KEC-1920-80.jpg" alt="iPhone Duo" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/EZTdmCG3cKD6ggjUsDjKEC-1920-80.jpg" alt="iPhone Duo" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure></figure><p>Instagram and TikTok have also been updated for the iPhone Duo. Scrolling videos in portrait mode on the main display is supper immersive, and if you flip the phone sideways you can load comments on the right.</p><p>Other iPhone Duo apps that take full advantage of the 7.6-inch display include Carrot Weather, Sonos, Gemini and OpenTable.</p><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="CCBxNpZpcxGV4h8k7uPBHC" name="Apple iPhone Duo-18" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/CCBxNpZpcxGV4h8k7uPBHC-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>Another standout is Battlefleet. It’s just like playing Battleship, where you put the Duo in tabletop mode and launch missiles at the enemy on the top part of the display and position your own ships on the bottom half.</p><p>The Deck-Man app is nostalgic fun. It turns the Duo into a 80's-style Walkman, complete with all the buttons on the cover display. For more, check out my roundup of the <a href="https://www.tomsguide.com/phones/iphones/ive-been-testing-dozens-of-iphone-duo-apps-heres-my-top-15-picks-so-far#mrfhud=true">best iPhone Duo apps</a> so far. </p><h4 id="how-bad-do-non-optimized-apps-look">How bad do non-optimized apps look?</h4><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="qgQPZ4N2mQWFTqfTwXEGPC" name="Disney Plus iPhone Duo" alt="Disney Plus on iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/qgQPZ4N2mQWFTqfTwXEGPC-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Non-optimized apps for the iPhone Duo can range from looking a bit off to horrible.</p><p>Keeping in mind that many top apps will be updated by the Duo’s release date, I noticed that certain apps had huge black bars on the left and right side of the display, like Disney Plus and The Weather Channel.</p><p>Unoptimized games look pretty terrible, too, filling up only three quarters of the screen.</p><p>Other apps have been updated for iOS 27 but not for the Duo. So they will go close to full screen but still have a narrow black bar on the right side. This includes YouTube, though I appreciate that comments pop up on the right side during playback.</p><p>Gemini has a sleek dual-pane layout, as does Spotify, so you can see the player on the right and your stations on the left. </p><p>I just hope developers update their wares. Quickly. And I expect they will out of fear of sheer embarrassment.</p><h3 class="article-body__section" id="section-cameras"><span>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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="fmAu96RLMpGDsLfJCkCsQK" name="Apple iPhone Duo-21" alt="iPhone Duo shown held in hand" src="https://cdn.mos.cms.futurecdn.net/fmAu96RLMpGDsLfJCkCsQK-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><h4 id="do-you-really-miss-not-having-a-telephoto-zoom">Do you really miss not having a telephoto zoom?</h4><p>I think it’s a big deal that the iPhone Duo doesn’t have a telephoto lens. You get just a 48MP main and 48MP Ultrawide, which take great shots. But if you’re zooming in you’re going to miss the level of detail a dedicated optical can provide.</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=603c4eb1-ccd1-11f1-ba1b-0e6f42328d7d"></iframe><p>Check out this photo of a hot dog stand. The Sabrett sign is much sharper through the iPhone 18 Pro Max at 10x zoom, while the iPhone Duo’s image looks like a blurry water color. Same thing goes for this No Smoking sign at the same 10x. You can’t even make out smaller text on the Duo.</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=79d946de-ccd1-11f1-ba1b-0e6f42328d7d"></iframe><p>I also took a series of photos between the iPhone Duo and iPhone 18 Pro Max of this dock at 2x, 4x, 8x and 10x. The Duo holds its own up until 8x and then things start to get fuzzy, like the text on the boat and engine.</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><h4 id="is-the-image-quality-good-enough-from-the-dual-48mp-cameras">Is the image quality good enough from the dual 48MP cameras?</h4><p>The iPhone Duo’s main camera is quite capable, capturing bright and vibrant flowers in this shot. The Galaxy Fold 8’s image is brighter but looks a bit washed out and less crisp when I zoom in.</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>The Duo also does a good job with this shot of fruit inside Whole Foods. The oranges pop more on the iPhone versus the Fold 8’s image, but Samsung’s image has better focus on the lemons to the left.</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=569adc1a-cccb-11f1-ba1b-0e6f42328d7d"></iframe><p>I’m kind of torn on this portrait, as my face is brighter through the Fold 8. But I prefer the bokeh effect through the Duo, and my shirt and jacket have a lot more detail. It gets pretty fuzzy on Samsung zoomed in.</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=9b8866ee-cccb-11f1-ba1b-0e6f42328d7d"></iframe><p>The 48MP ultrawide on the iPhone Duo impressed in my testing, too. It struggles a bit with the darkness of the fountain in the foreground, but the Fold 8 pumps up the brightness so much it blows out the buildings, and the trees look more natural through the iPhone.</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>I give the edge to the Fold 8 in this macro shot of a bright orange Zinnia. There’s more contrast and the Duo looks a bit flat.</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=dbfb2194-cccb-11f1-ba1b-0e6f42328d7d"></iframe><p>In low light, the iPhone Duo wins hands-down. Check out this shot of Halloween decorations. The mystical hand and the fuzzy eyes and plant all look sharper versus the Fold 8.</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><h4 id="how-is-the-under-display-facetime-camera-for-selfies-and-video-calls">How is the under-display FaceTime camera for selfies and video calls?</h4><p>Lots of people have been asking me if the under-display FaceTime camera on the iPhone Duo is trash. And I’m happy to report that it’s not. It wouldn’t be my first pick for selfies, but it captures reasonably sharp images as you can see in this comparison with the Fold 8.</p><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>I calculated the resolution, since Apple doesn’t tell you the megapixels, and it’s 4.4MP. The Fold 8’s shot was 5.7MP. </p><p>I also used the FaceTime camera to have a call with my daughter. She said I looked fine but a bit grainy. I did like that I could prop up the Duo like a laptop so I didn’t have to hold the phone.</p><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="d2MHCtvqA3JHYicVM4qECC" name="Apple iPhone Duo-23" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/d2MHCtvqA3JHYicVM4qECC-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>Just as with portraits, I found the iPhone Duo produced more detailed selfies with its 12MP Center Stage camera. But when taking selfies with the main 48MP camera I thought the Duo was neck and neck with Samsung.</p><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="ZzS3iFc9ZNnreBgZMeAERK" name="Apple iPhone Duo-24" alt="iPhone Duo shown held in hand" src="https://cdn.mos.cms.futurecdn.net/ZzS3iFc9ZNnreBgZMeAERK-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, it’s more intuitive to take selfies with the main camera on the Duo. You just flip the phone around with the camera on and swipe on the cover display. With the Fold 8 you have to press a button on the main screen first.</p><h4 id="is-smart-take-worth-it-and-what-about-the-other-camera-modes">Is Smart Take worth it and what about the other camera modes?</h4><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="QrgQhftsxATgLMSAL65Pk4" name="Apple iPhone Duo-34" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/QrgQhftsxATgLMSAL65Pk4-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>I had the most fun testing the Smart Take feature on the iPhone Duo. I propped the foldable up, activated the Smart Take mode and then the Duo was smart enough to snap photos automatically as I struck different poses. It’s ideal for group shots where you want everyone in the frame — and don’t want to have to deal with a timer.</p><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="Eg3WDFXwfgzdUCfrtYYGnK" name="Apple iPhone Duo-23" alt="iPhone Duo shown held in hand" src="https://cdn.mos.cms.futurecdn.net/Eg3WDFXwfgzdUCfrtYYGnK-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>There’s also Duo Preview, which lets subjects see themselves on the cover display as you snap pics, and Kid Cue, which takes a page from Google’s Pixel Fold by displaying a cute Snoopy animation on the outer display, giving you a better chance of a smile.</p><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><h3 class="article-body__section" id="section-performance"><span>Performance</span></h3><h4 id="is-there-a-foldable-power-penalty-for-the-duo">Is there a foldable power penalty for the Duo?</h4><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 best thing I can say about the iPhone Duo is that it’s just about as fast as the iPhone 18 Pro Max, even though it has a larger screen to power and less thermal headroom.</p><p>When playing the UnGodly game on the Duo’s 7.6-inch display, the action was immersive and the graphics top-notch, complete with reflections and captivating special attacks like lightning strikes. I noticed a hint of slowdown at times, but not enough to ruin the fun.</p><p>The iPhone Duo also didn’t lag when running two apps side by side. I loaded several stories on <a href="http://espn.com"><u>ESPN.com</u></a> on the left while playing Spotify on the right and pages still loaded quickly.</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>iPhone Duo </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>Galaxy Z Fold 8</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>iPhone 18 Pro</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>iPhone 18 Pro Max</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><h4 id="how-much-does-the-vapor-chamber-help-with-sustained-performance">How much does the vapor chamber help with sustained performance?</h4><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="7Cn9qroJxminynrPqXfiqk" name="Apple iPhone Duo thermal" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/7Cn9qroJxminynrPqXfiqk-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 made a big deal about offering vapor chamber cooling in the iPhone Duo, something the Galaxy Z Fold 8 lacks. But how does that translate to sustained performance?</p><p>To find out, we ran the 3D Mark Wild Life Extreme tests, which loops the same graphics benchmark 20 times before returning a stability score. The iPhone Duo hit 75.9%, compared to 72% for the Fold 8. The iPhone 18 Pro Max notched 79%, which makes sense because it has a thicker design and more room to dissipate heat.</p><p>We then geeked out with a thermal camera to see how well each foldable performed, and the iPhone Duo did a better job spreading out the heat evenly across the design. The Fold 8 had a hot spot to the right of the camera.</p><p>To be fair, though, the iPhone Duo hit a few degrees higher when measured with our laser thermometer on the back than the Fold 8.</p><h3 class="article-body__section" id="section-battery-life-and-charging"><span>Battery life and charging</span></h3><p>Full disclosure: We had to redesign our battery test so that it filled the whole screen on the iPhone Duo. The Tom’s Guide Battery test surfs the web at 150 nits of brightness over 5G until the battery dies.</p><p>The iPhone Duo turned in a solid result, lasting 13 hours and 20 minutes. That’s over 3 hours longer than the Galaxy Fold 8, which we tested in the same room at the same time. But keep in mind that the iPhone 18 Pro Max lasted 17.5 hours under the same conditions.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Hrs:Mins</strong></p></td></tr><tr><td class="firstcol " ><p><strong>iPhone Duo</strong></p></td><td  ><p>13:20 </p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8</strong></p></td><td  ><p>10:06 (12:19 on original test)</p></td></tr><tr><td class="firstcol " ><p><strong>Razr Fold </strong></p></td><td  ><p>14:44</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 18 Pro Max </strong></p></td><td  ><p>17:31</p></td></tr></tbody></table></div><p>The Galaxy Z Fold 8 did last over 12 hours when we first received the device, so I’d say fresh out of the box the iPhone Duo is at worst an hour better. But since our test uses the live web, that’s not an apples-to-apples comparison.</p><p>Note that we ran this test with the iPhone Duo’s larger display.</p><p>In my anecdotal testing, which involved using the iPhone Duo for most of the day in mixed usage — including taking photos, gaming, downloading apps, playing music and checking Slack — the phone was down to 40% at the end of my day. That’s pretty solid endurance. </p><p>The iPhone Duo charges fairly quickly with Apple’s 40W charger (sold separately). It got to 42% in 15 minutes and 66% in 30 minutes. That’s good but not quite as good as the Fold 8’s 70% in half an hour.</p><h3 class="article-body__section" id="section-verdict"><span>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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="XvxwnrgkcgqgDyvXVN5J73" name="Apple iPhone Duo-15" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/XvxwnrgkcgqgDyvXVN5J73-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><h4 id="is-the-iphone-duo-worth-2-000">Is the iPhone Duo worth $2,000?</h4><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="vBwqfA2ssezXqWnPua6d83" name="Apple iPhone Duo-13" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/vBwqfA2ssezXqWnPua6d83-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>Do I think the iPhone Duo is worth two grand? Yes, as it’s only $100 more than the Galaxy Z Fold 8. And you get a more durable design, faster performance, longer battery life and smarter software. However, the Fold 8 is thinner and lighter, and it lets you run three or more apps compared to just two for the Duo.</p><p>I like the iPhone Duo’s nano texture display in that it greatly reduces glare outdoors and minimizes the crease better than any foldable I’ve tested. But you give up perfect blacks with this matte panel and more saturated colors versus the iPhone 18 Pro Max. You also sacrifice a telephoto lens and Face ID. I can live with those trade-offs, but that doesn’t mean I like them.</p><p>In a way it’s a good thing that the iPhone Duo is backordered for many until December or January. That will give developers plenty of time to update their offerings for this foldable. I don’t think it will take that long, though, based on the high demand.</p><p>Overall, though, I think the iPhone Duo is the best designed foldable yet with the most polished, intuitive and fun software experience. </p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/apple-iphone-duo-review</link>
                                                                            <description>
                            <![CDATA[ The iPhone Duo is the best foldable phone yet based on my testing, with a sturdy and premium design, smart software and fully optimized apps. But it’s a bit heavy and the multitasking could be better. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">PhGChuzBuhXtiMiu8yCfJa</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/xPQBBNAo4kTsxUQpsDZDNL-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 21 Oct 2026 12:00:00 +0000</pubDate>                                                                                                                                <updated>Thu, 22 Oct 2026 21:09:04 +0000</updated>
                                                                                                                                            <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[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/xPQBBNAo4kTsxUQpsDZDNL-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPhone Duo shown held in hand]]></media:description>                                                            <media:text><![CDATA[iPhone Duo shown held in hand]]></media:text>
                                <media:title type="plain"><![CDATA[iPhone Duo shown held in hand]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/xPQBBNAo4kTsxUQpsDZDNL-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I honestly haven’t been this excited about a new iPhone since the <a href="https://www.tomsguide.com/us/iphone-x,review-4800.html"><u>iPhone X</u></a> nearly a decade ago. The iPhone Duo finally gives Apple fans a foldable phone, and there’s something really cool about having a 5.4-inch iPhone that transforms into a 7.6-inch mini tablet in your pocket, complete with dual-app multitasking. Finally! </p><p>Apple’s first <a href="https://www.tomsguide.com/best-picks/best-foldable-phones"><u>foldable phone</u></a> doesn’t look or feel like a first attempt, either, because of the sheer attention to detail. The way the friction hinge holds nearly any angle. The seamless switching between the cover and main display with the same aspect ratio. And the nano-texture coating, which minimizes glare and the dreaded crease. I also like how the hardware and software play together, giving you several different modes. It feels like I’m playing with a $2,000 Transformer. </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>On the other hand, the Duo name is apt because I’m of two minds about it. While the first wave of iPhone Duo apps look great, many third-party apps aren’t optimized for this form factor (yet).</p><p>And then there’s the trade-offs versus the iPhone 18 Pro Max, such as the lack of a telephoto zoom and Face ID. I’ve spent the past week living with this $2,000 device as my daily driver. From the nano-texture display and battery life to real-world performance and software quirks, I’m going to answer all your most pressing questions in my full iPhone Duo review. <strong>And I'll keep adding questions and answers to my Duo review based on your feedback, so feel free to drop into the comments!</strong></p><h4 class="article-body__section" id="section-who-is-the-iphone-duo-for"><span>Who is the iPhone Duo for?</span></h4><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="ZhFuJYhmVGtqxQkRvR5EwU" name="Apple iPhone Duo-30" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/ZhFuJYhmVGtqxQkRvR5EwU-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 iPhone Duo is for people who want a big screen on the go for watching videos and playing games, as well as for heavy multitaskers who want to run two apps at once. It’s for people who want a compact phone and tablet in a single device — and are willing to pay a hefty premium to get it.</p><p>For example, I used the iPhone Duo a lot during my commute to get caught up on Slack while watching “First Take” on YouTube TV in another window. And I could open spreadsheets without having to endlessly scroll. I think business travelers in particular are going to love this foldable.</p><h3 class="article-body__section" id="section-design"><span>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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="JbqwCsepn38yRyvgKjsK7L" name="Apple iPhone Duo-LIST3" alt="iPhone Duo shown held in hand" src="https://cdn.mos.cms.futurecdn.net/JbqwCsepn38yRyvgKjsK7L-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><h4 id="how-does-it-feel-and-how-is-the-weight">How does it feel and how is the weight?</h4><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="zBHjJoz6DppuWEk7mW4eSL" name="Apple iPhone Duo-20" alt="iPhone Duo shown held in hand" src="https://cdn.mos.cms.futurecdn.net/zBHjJoz6DppuWEk7mW4eSL-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>My colleague Tony Polanco may have said it best when he picked up the iPhone Duo for the first time. He said “It feels like an iPhone.” And that’s a good way to sum up the build quality of this foldable.</p><p>The passport design has already been done by Samsung with the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-review-wide-for-the-win" target="_blank">Galaxy Z Fold 8</a>, but to me, Apple’s Duo feels a notch above. The asymmetrical design looks a bit weird at first, with the flat left side and rounded corners on the right, but it allowed Apple to offer identical 1.4:1 aspect ratios on both the cover and main display. And I think this makes the Duo feel more polished.</p><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" 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>Speaking of which, the iPhone Duo’s polished titanium frame looks premium while being tougher than aluminum. This might sound minor but I also like that the Duo doesn’t wobble as much when placed on a table.</p><p>And I really dig the reassuring and satisfying clasping sound the Duo makes when you close it, thanks to the help of magnets.</p><div ><table><tbody><tr><td class="firstcol " ><p><strong>Device</strong></p></td><td  ><p><strong>Folded Dimensions</strong></p></td><td  ><p><strong>Unfolded Dimensions</strong></p></td><td  ><p><strong>Weight</strong></p></td></tr><tr><td class="firstcol " ><p><strong>iPhone Duo</strong></p></td><td  ><p>4.64 × 3.31 × 0.44 in (117.8 × 84.1 × 11.3 mm)<br></p></td><td  ><p>4.64 × 6.48 × 0.21 in (117.8 × 164.6 × 5.2 mm)</p></td><td  ><p>8.96 oz (254 g)</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8</strong></p></td><td  ><p>4.88 × 3.22 × 0.38 in (123.9 × 81.9 × 9.7 mm)<br></p></td><td  ><p>4.88 × 6.35 × 0.18 in (123.9 × 161.4 × 4.5 mm)</p></td><td  ><p>7.09 oz (201 g)</p></td></tr></tbody></table></div><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="NLi9LYkBth5kk4ZSxAMiKj" name="Apple iPhone Duo-6" alt="iPhone Duo vs Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/NLi9LYkBth5kk4ZSxAMiKj-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>On the other hand, the Duo is pretty chunky compared to the Fold 8. The iPhone Duo is the world’s thinnest iPhone when opened at 5.2mm thin, but it’s thicker than Samsung’s 4.5mm. And when closed the Duo is 16.5% thicker than the Fold 8.</p><p>I also felt the additional heft of the Duo when picking up both foldables. Still, the Duo slipped easily into my front jeans pocket without weighing me down.</p><h4 id="what-can-you-do-with-the-hinge-what-are-all-the-modes">What can you do with the hinge? What are all the modes?</h4><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="MBwuXQM2EUxLEPZgrhYYXL" name="Apple iPhone Duo-15" alt="iPhone Duo shown held in hand" src="https://cdn.mos.cms.futurecdn.net/MBwuXQM2EUxLEPZgrhYYXL-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 iPhone Duo’s hinge is super flexible yet rigid, thanks to a variable torque profile. There’s just the right amount of friction. And you can position the hinge at almost any angle you like for optimal viewing.</p><p>Even better, the iPhone Duo is smart enough to know how you’ve positioned the device and the software adapts (if the app is optimized). For example, when watching “Man of Steel” for the hundredth time on the Apple TV app, I could put the Duo in tabletop mode like a laptop, and it showed the video up top and the playback controls down below. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="vnLnHCXkHaw8KxMHPAAQvB" name="Apple iPhone Duo-28" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/vnLnHCXkHaw8KxMHPAAQvB-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>And when watching Ohio State vs Indiana on YouTube TV while writing this review, I put the Duo in tent mode on my desk so I could keep one eye on the action.</p><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>Apple also gives you a couple of Standby modes with the Duo. I turned this phone into an alarm clock at night in tent mode. And while I was working I half folded the phone in portrait mode to transform the Duo into a clock and digital photo frame.</p><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="2suhj2e7UrM4tHMBEJRPpk" name="Apple iPhone Duo-2" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/2suhj2e7UrM4tHMBEJRPpk-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>You can even literally use the iPhone Duo as a mini laptop in apps like Notes where the keyboard takes up the bottom half of the display. And if you’re in Safari and half fold the screen in landscape mode the keyboard will automatically split, though I don’t find typing this way comfy.</p><h4 id="how-durable-is-it">How durable is it?</h4><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="442uz43hHtDty9c2jmsNw" name="Apple iPhone Duo-8" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/442uz43hHtDty9c2jmsNw-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 iPhone Duo makes up for some of its girth with the fact that it has an IP68 rating. That means it's resistant to both dust and water. That’s better than the Fold 8’s water-only IP48 rating. </p><p>In addition to the Grade 5 Titanium frame, you also get a titanium hinge cover. And Ceramic Shield 2 protects the outer display while regular Ceramic Shield protects the back on the phone. </p><p>Apple employed a nano-texture cover layer on the main display using an advanced polymer that’s up to 40% stiffer than what competing foldables use, which is designed to prevent scratches and dents. This will come in handy for the Apple Pencil, whose support is coming with a software update.</p><h3 class="article-body__section" id="section-display"><span>Display</span></h3><h4 id="how-good-is-the-matte-nano-texture-display-and-does-it-mute-the-colors">How good is the matte nano-texture display? And does it mute the colors?</h4><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="pvaRXhmcDUjqMo3wuVfVfK" name="Apple iPhone Duo-10" alt="iPhone Duo shown held in hand" src="https://cdn.mos.cms.futurecdn.net/pvaRXhmcDUjqMo3wuVfVfK-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’m going to be honest. I’m torn about the iPhone Duo’s nano-texture display. Yes, I like this matte panel seriously reduces glare. And the paper-like texture feels especially nice when you’re reading ebooks. It almost feels like you’re flipping a real page.</p><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="wAz484va9KcSempYnMD2yk" name="Apple iPhone Duo" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/wAz484va9KcSempYnMD2yk-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>But while the iPhone Duo’s main display gets plenty bright, it doesn’t offer the perfect blacks or vibrant hues I normally associate with OLED. When I played the “Avengers: Doomsday” trailer on the Duo and Fold 8, I preferred Samsung’s screen because of those inky blacks and richer colors, even though I could make out more details in the shadows on the Duo. Sometimes, glossy is better.</p><p>However, when I watched the same trailer outside, the Duo exhibited much less glare and the crease was a lot less prominent. Check it out in this video.</p>                    <div class= "tiktok-wrapper" style="min-height: 750px;"><blockquote class="tiktok-embed" cite="https://www.tiktok.com/@mspoonyg/video/7699091190553038093" data-video-id="7699091190553038093" 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="♬ original sound - mspoonyg" href="https://www.tiktok.com/music/original-sound-7699091201709902605">♬ original sound - mspoonyg</a></section>                    </blockquote></div>                <p>The front 5.4-inch display on the Duo is a more traditional glossy OLED panel, and I prefer the color saturation there. But it’s too small for me to watch a movie.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>iPhone Duo </strong></p></td><td  ><p><strong>Galaxy Z Fold 8</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Brightness Nits (SDR)</strong></p></td><td  ><p>1,986 </p></td><td  ><p>1,328</p></td></tr><tr><td class="firstcol " ><p><strong>Brightness Nits (HDR)</strong></p></td><td  ><p>2,558</p></td><td  ><p>2,649 </p></td></tr><tr><td class="firstcol " ><p><strong>Color Gamut (DCI-P3)</strong></p></td><td  ><p>83.5%</p></td><td  ><p>82% (Natural) / 95.4% (Vivid)</p></td></tr><tr><td class="firstcol " ><p><strong>Delta-E Color Accuracy (Lower is better)</strong></p></td><td  ><p>0.27</p></td><td  ><p>0.25</p></td></tr></tbody></table></div><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="sujLhqTd9qT2dA5iw276HC" name="Apple iPhone Duo-26" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/sujLhqTd9qT2dA5iw276HC-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 do have to give a shout-out to the iPhone Duo’s designers for the under-display camera. They did a fantastic job hiding it when not in use. That’s thanks in part to the A20 Pro’s new display engine that blends the pixels around the area.</p><p>The iPhone Duo’s display fared well in our lab testing, reaching nearly 2,600 nits of brightness with HDR content. That’s slightly behind the Fold 8. The Fold 8’s panel offered comparable color reproduction and color accuracy.</p><h4 id="is-there-a-visible-crease">Is there a visible crease?</h4><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="5wVT8JefxympkCCHESK5PL" name="Apple iPhone Duo-LIST4" alt="iPhone Duo shown held in hand" src="https://cdn.mos.cms.futurecdn.net/5wVT8JefxympkCCHESK5PL-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>This is where the nano-texture finish shines. I had a hard time making out the crease on the iPhone Duo while viewing content even when outside. It’s there, but you have to angle the display just right to see it.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:53.75%;"><img id="mvrfSVVZTktfFQmrkz2Cm4" name="Apple iPhone Duo-36" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/mvrfSVVZTktfFQmrkz2Cm4-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1376" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>On the Fold 8, Samsung Flex Titanium tech also does a great job minimizing the crease, but it’s more prominent. Though, to be fair, we’ve been opening and closing this foldable for over three months while the Duo is still fresh.</p><h4 id="is-the-front-screen-big-enough-for-running-apps-and-how-about-typing">Is the front screen big enough for running apps? And how about typing?</h4><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="ZfAzN3CpqFSr4QwyRADNmk" name="Apple iPhone Duo-4" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/ZfAzN3CpqFSr4QwyRADNmk-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 5.4-inch cover display on the iPhone Duo is plenty bright, colorful and sharp, but its squatter dimensions means I could see less info at once in Gmail and Safari.</p><p>Still, the aspect ratio is great for scrolling through TikTok and Instagram. I easily got lost when watching a student in a Spider-Man outfit kick a $3 million field goal before the Notre Dame game.</p><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:54.77%;"><img id="CcFGaWKVmd5WPUBEfFrBk4" name="Apple iPhone Duo-37" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/CcFGaWKVmd5WPUBEfFrBk4-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1402" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>And when it comes to cranking out quick replies to Slack messages or emails, the cover display is plenty wide for typing with two thumbs. </p><p>However, reaching the left side of the front screen can be a challenge. I had to stretch my thumb to reach those app icons.</p><h3 class="article-body__section" id="section-audio"><span>Audio</span></h3><h4 id="how-good-are-the-speakers">How good are the speakers?</h4><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="rknMLwrtvLe3AQZ64qwRDC" name="Apple iPhone Duo-21" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/rknMLwrtvLe3AQZ64qwRDC-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>Surprisingly good! Apple positioned the speakers on the iPhone Duo so that when open they’re on the top left and bottom right. That means you get more balanced sound versus the Galaxy Fold 8, whose speakers are on the top and bottom left when open.</p><p>I played Batille’s “Save My Soul” on the iPhone Duo via Spotify and then switched to the Fold 8, and Apple’s foldable provided better bass and more well-round audio. Samsung’s sound was loud but tinny by comparison.</p><h3 class="article-body__section" id="section-touch-id"><span>Touch ID</span></h3><h4 id="is-it-a-big-deal-that-face-id-is-gone">Is it a big deal that Face ID is gone?</h4><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" 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>I’ve already engaged some commenters in a debate on this and I haven’t changed my mind. Replacing Face ID with Touch ID on the iPhone Duo is a downgrade. The Touch ID sensor works perfectly fine, which is embedded in the oversized side button.</p><div class="looped-video"><video class="lazyload-in-view lazyloading" data-src="https://cdn.mos.cms.futurecdn.net/kRif3feX2N5YvpqjpcoBAN/iPhone%20Duo%20Touch%20ID.mp4" autoplay loop muted playsinline src="https://cdn.mos.cms.futurecdn.net/kRif3feX2N5YvpqjpcoBAN/iPhone%20Duo%20Touch%20ID.mp4"></video></div><p>However, Touch ID introduces lag versus Face ID when unlocking your phone. Not a lot, just enough to be annoying. If you own an Apple Watch, you can unlock your iPhone Duo just by swiping up, but even that’s slower than Face ID. Come at me, bruh.</p><h3 class="article-body__section" id="section-software-and-multitasking"><span>Software and Multitasking</span></h3><h4 id="did-apple-make-the-right-call-with-redesigning-ios-27-and-are-lefties-screwed">Did Apple make the right call with redesigning iOS 27, and are lefties screwed?</h4><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="DZMT6KETAxKUecqBLJ4gkk" name="Apple iPhone Duo-5" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/DZMT6KETAxKUecqBLJ4gkk-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 iPhone Duo runs a custom version of iOS 27 as opposed to iPadOS. This includes combining key status bar elements like battery life and signal strength into a circle in the top right corner. And the Dynamic Island pops out of the top right corner on both the cover display and big screen.</p><p>It took me time getting used to the dock on the right side of the display. The controls and menu items in your apps move to the right, too.</p><p>The bad news is that you can’t move the dock or app controls to the left side, which is a bummer if you’re lefty. And it’s clear Apple could do this if they wanted to. When you’re multitasking I noticed that the dock moves to the left on the left home screen view.</p><p>Apple is going to be rolling out a software update that improves reachability overall, but southpaws are generally still out of luck.</p><h4 id="what-is-split-view-multitasking-like-any-downsides">What is Split View multitasking like? Any downsides?</h4><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>The iPhone Duo introduces dual-app multitasking for the first time on an iPhone, and it’s super intuitive. I just swiped up on an app I was using, like Messages, and then you see that you can dock it to the left or right side of the display.</p><p>From there, the iPhone home screen automatically appears on the other side of the screen. It’s like having two distinct desktops. As you’d expect, dragging and dropping items like photos works seamlessly. </p><p>I also like how easy Apple makes it to create app pairs. Simply tap the center of the bar in the middle of the main display. When you go back to the app switcher it will automatically show up. </p><p>However, I was annoyed to discover that turning the iPhone Duo to portrait mode temporarily breaks the Split View, leaving you with just a single app. The Galaxy Z Fold 8 gives you two skinny versions of the same app, which is better than nothing. At least when you turn the Duo back to landscape the app pair returns.</p><p>You can do a form of multitasking on the iPhone Duo in portrait mode. You can park a video player up top while running another app down below. But entering this mode requires hitting a tiny button rather than dragging and dropping the window. It’s a weird UI inconsistency.</p><h3 class="article-body__section" id="section-apps"><span>Apps</span></h3><h4 id="what-are-the-best-iphone-duo-apps-so-far">What are the best iPhone Duo apps so far?</h4><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="ZVt26nY5LUzSijUdLr3do6" name="Apple iPhone Duo-31" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/ZVt26nY5LUzSijUdLr3do6-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 you might expect, Apple’s own apps look fantastic on the Duo. For example, I love being able to quickly move between multiple tabs in Safari, and Notes and Messages have handy two-column layouts. Apple Music looks slick, too, with Liquid Glass menu items that persist on the right as you scroll.</p><p>But I was more intrigued to try third-party apps optimized for the iPhone Duo, and there are plenty of standouts so far. For example, the new Slack app gives you a dual-pane layout on the 7.6-inch display with your contacts and rooms on the left and messages on the right. The Fold 8’s version is a stretched out phone app with wasted 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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="akmQeVPdgx69uVZyYneQaL" name="Apple iPhone Duo-13" alt="iPhone Duo shown held in hand" src="https://cdn.mos.cms.futurecdn.net/akmQeVPdgx69uVZyYneQaL-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>Netflix lets you scroll through mobile clips on the cover display. But the cooler effect is in the tabletop mode. The content in the top screen reflects on the bottom portion, complete with touch controls.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/SqnDKA6GGKNfdmZVzNWaFC-1920-80.jpg" alt="iPhone Duo" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/GkekestwUzwcBHtU776KEC-1920-80.jpg" alt="iPhone Duo" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/EZTdmCG3cKD6ggjUsDjKEC-1920-80.jpg" alt="iPhone Duo" /><figcaption><small role="credit">Tom's Guide</small></figcaption></figure></figure><p>Instagram and TikTok have also been updated for the iPhone Duo. Scrolling videos in portrait mode on the main display is supper immersive, and if you flip the phone sideways you can load comments on the right.</p><p>Other iPhone Duo apps that take full advantage of the 7.6-inch display include Carrot Weather, Sonos, Gemini and OpenTable.</p><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="CCBxNpZpcxGV4h8k7uPBHC" name="Apple iPhone Duo-18" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/CCBxNpZpcxGV4h8k7uPBHC-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>Another standout is Battlefleet. It’s just like playing Battleship, where you put the Duo in tabletop mode and launch missiles at the enemy on the top part of the display and position your own ships on the bottom half.</p><p>The Deck-Man app is nostalgic fun. It turns the Duo into a 80's-style Walkman, complete with all the buttons on the cover display. For more, check out my roundup of the <a href="https://www.tomsguide.com/phones/iphones/ive-been-testing-dozens-of-iphone-duo-apps-heres-my-top-15-picks-so-far#mrfhud=true">best iPhone Duo apps</a> so far. </p><h4 id="how-bad-do-non-optimized-apps-look">How bad do non-optimized apps look?</h4><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="qgQPZ4N2mQWFTqfTwXEGPC" name="Disney Plus iPhone Duo" alt="Disney Plus on iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/qgQPZ4N2mQWFTqfTwXEGPC-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Non-optimized apps for the iPhone Duo can range from looking a bit off to horrible.</p><p>Keeping in mind that many top apps will be updated by the Duo’s release date, I noticed that certain apps had huge black bars on the left and right side of the display, like Disney Plus and The Weather Channel.</p><p>Unoptimized games look pretty terrible, too, filling up only three quarters of the screen.</p><p>Other apps have been updated for iOS 27 but not for the Duo. So they will go close to full screen but still have a narrow black bar on the right side. This includes YouTube, though I appreciate that comments pop up on the right side during playback.</p><p>Gemini has a sleek dual-pane layout, as does Spotify, so you can see the player on the right and your stations on the left. </p><p>I just hope developers update their wares. Quickly. And I expect they will out of fear of sheer embarrassment.</p><h3 class="article-body__section" id="section-cameras"><span>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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="fmAu96RLMpGDsLfJCkCsQK" name="Apple iPhone Duo-21" alt="iPhone Duo shown held in hand" src="https://cdn.mos.cms.futurecdn.net/fmAu96RLMpGDsLfJCkCsQK-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><h4 id="do-you-really-miss-not-having-a-telephoto-zoom">Do you really miss not having a telephoto zoom?</h4><p>I think it’s a big deal that the iPhone Duo doesn’t have a telephoto lens. You get just a 48MP main and 48MP Ultrawide, which take great shots. But if you’re zooming in you’re going to miss the level of detail a dedicated optical can provide.</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=603c4eb1-ccd1-11f1-ba1b-0e6f42328d7d"></iframe><p>Check out this photo of a hot dog stand. The Sabrett sign is much sharper through the iPhone 18 Pro Max at 10x zoom, while the iPhone Duo’s image looks like a blurry water color. Same thing goes for this No Smoking sign at the same 10x. You can’t even make out smaller text on the Duo.</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=79d946de-ccd1-11f1-ba1b-0e6f42328d7d"></iframe><p>I also took a series of photos between the iPhone Duo and iPhone 18 Pro Max of this dock at 2x, 4x, 8x and 10x. The Duo holds its own up until 8x and then things start to get fuzzy, like the text on the boat and engine.</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><h4 id="is-the-image-quality-good-enough-from-the-dual-48mp-cameras">Is the image quality good enough from the dual 48MP cameras?</h4><p>The iPhone Duo’s main camera is quite capable, capturing bright and vibrant flowers in this shot. The Galaxy Fold 8’s image is brighter but looks a bit washed out and less crisp when I zoom in.</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>The Duo also does a good job with this shot of fruit inside Whole Foods. The oranges pop more on the iPhone versus the Fold 8’s image, but Samsung’s image has better focus on the lemons to the left.</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=569adc1a-cccb-11f1-ba1b-0e6f42328d7d"></iframe><p>I’m kind of torn on this portrait, as my face is brighter through the Fold 8. But I prefer the bokeh effect through the Duo, and my shirt and jacket have a lot more detail. It gets pretty fuzzy on Samsung zoomed in.</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=9b8866ee-cccb-11f1-ba1b-0e6f42328d7d"></iframe><p>The 48MP ultrawide on the iPhone Duo impressed in my testing, too. It struggles a bit with the darkness of the fountain in the foreground, but the Fold 8 pumps up the brightness so much it blows out the buildings, and the trees look more natural through the iPhone.</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>I give the edge to the Fold 8 in this macro shot of a bright orange Zinnia. There’s more contrast and the Duo looks a bit flat.</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=dbfb2194-cccb-11f1-ba1b-0e6f42328d7d"></iframe><p>In low light, the iPhone Duo wins hands-down. Check out this shot of Halloween decorations. The mystical hand and the fuzzy eyes and plant all look sharper versus the Fold 8.</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><h4 id="how-is-the-under-display-facetime-camera-for-selfies-and-video-calls">How is the under-display FaceTime camera for selfies and video calls?</h4><p>Lots of people have been asking me if the under-display FaceTime camera on the iPhone Duo is trash. And I’m happy to report that it’s not. It wouldn’t be my first pick for selfies, but it captures reasonably sharp images as you can see in this comparison with the Fold 8.</p><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>I calculated the resolution, since Apple doesn’t tell you the megapixels, and it’s 4.4MP. The Fold 8’s shot was 5.7MP. </p><p>I also used the FaceTime camera to have a call with my daughter. She said I looked fine but a bit grainy. I did like that I could prop up the Duo like a laptop so I didn’t have to hold the phone.</p><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="d2MHCtvqA3JHYicVM4qECC" name="Apple iPhone Duo-23" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/d2MHCtvqA3JHYicVM4qECC-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>Just as with portraits, I found the iPhone Duo produced more detailed selfies with its 12MP Center Stage camera. But when taking selfies with the main 48MP camera I thought the Duo was neck and neck with Samsung.</p><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="ZzS3iFc9ZNnreBgZMeAERK" name="Apple iPhone Duo-24" alt="iPhone Duo shown held in hand" src="https://cdn.mos.cms.futurecdn.net/ZzS3iFc9ZNnreBgZMeAERK-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, it’s more intuitive to take selfies with the main camera on the Duo. You just flip the phone around with the camera on and swipe on the cover display. With the Fold 8 you have to press a button on the main screen first.</p><h4 id="is-smart-take-worth-it-and-what-about-the-other-camera-modes">Is Smart Take worth it and what about the other camera modes?</h4><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="QrgQhftsxATgLMSAL65Pk4" name="Apple iPhone Duo-34" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/QrgQhftsxATgLMSAL65Pk4-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>I had the most fun testing the Smart Take feature on the iPhone Duo. I propped the foldable up, activated the Smart Take mode and then the Duo was smart enough to snap photos automatically as I struck different poses. It’s ideal for group shots where you want everyone in the frame — and don’t want to have to deal with a timer.</p><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="Eg3WDFXwfgzdUCfrtYYGnK" name="Apple iPhone Duo-23" alt="iPhone Duo shown held in hand" src="https://cdn.mos.cms.futurecdn.net/Eg3WDFXwfgzdUCfrtYYGnK-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>There’s also Duo Preview, which lets subjects see themselves on the cover display as you snap pics, and Kid Cue, which takes a page from Google’s Pixel Fold by displaying a cute Snoopy animation on the outer display, giving you a better chance of a smile.</p><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><h3 class="article-body__section" id="section-performance"><span>Performance</span></h3><h4 id="is-there-a-foldable-power-penalty-for-the-duo">Is there a foldable power penalty for the Duo?</h4><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 best thing I can say about the iPhone Duo is that it’s just about as fast as the iPhone 18 Pro Max, even though it has a larger screen to power and less thermal headroom.</p><p>When playing the UnGodly game on the Duo’s 7.6-inch display, the action was immersive and the graphics top-notch, complete with reflections and captivating special attacks like lightning strikes. I noticed a hint of slowdown at times, but not enough to ruin the fun.</p><p>The iPhone Duo also didn’t lag when running two apps side by side. I loaded several stories on <a href="http://espn.com"><u>ESPN.com</u></a> on the left while playing Spotify on the right and pages still loaded quickly.</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>iPhone Duo </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>Galaxy Z Fold 8</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>iPhone 18 Pro</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>iPhone 18 Pro Max</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><h4 id="how-much-does-the-vapor-chamber-help-with-sustained-performance">How much does the vapor chamber help with sustained performance?</h4><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="7Cn9qroJxminynrPqXfiqk" name="Apple iPhone Duo thermal" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/7Cn9qroJxminynrPqXfiqk-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 made a big deal about offering vapor chamber cooling in the iPhone Duo, something the Galaxy Z Fold 8 lacks. But how does that translate to sustained performance?</p><p>To find out, we ran the 3D Mark Wild Life Extreme tests, which loops the same graphics benchmark 20 times before returning a stability score. The iPhone Duo hit 75.9%, compared to 72% for the Fold 8. The iPhone 18 Pro Max notched 79%, which makes sense because it has a thicker design and more room to dissipate heat.</p><p>We then geeked out with a thermal camera to see how well each foldable performed, and the iPhone Duo did a better job spreading out the heat evenly across the design. The Fold 8 had a hot spot to the right of the camera.</p><p>To be fair, though, the iPhone Duo hit a few degrees higher when measured with our laser thermometer on the back than the Fold 8.</p><h3 class="article-body__section" id="section-battery-life-and-charging"><span>Battery life and charging</span></h3><p>Full disclosure: We had to redesign our battery test so that it filled the whole screen on the iPhone Duo. The Tom’s Guide Battery test surfs the web at 150 nits of brightness over 5G until the battery dies.</p><p>The iPhone Duo turned in a solid result, lasting 13 hours and 20 minutes. That’s over 3 hours longer than the Galaxy Fold 8, which we tested in the same room at the same time. But keep in mind that the iPhone 18 Pro Max lasted 17.5 hours under the same conditions.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Hrs:Mins</strong></p></td></tr><tr><td class="firstcol " ><p><strong>iPhone Duo</strong></p></td><td  ><p>13:20 </p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8</strong></p></td><td  ><p>10:06 (12:19 on original test)</p></td></tr><tr><td class="firstcol " ><p><strong>Razr Fold </strong></p></td><td  ><p>14:44</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 18 Pro Max </strong></p></td><td  ><p>17:31</p></td></tr></tbody></table></div><p>The Galaxy Z Fold 8 did last over 12 hours when we first received the device, so I’d say fresh out of the box the iPhone Duo is at worst an hour better. But since our test uses the live web, that’s not an apples-to-apples comparison.</p><p>Note that we ran this test with the iPhone Duo’s larger display.</p><p>In my anecdotal testing, which involved using the iPhone Duo for most of the day in mixed usage — including taking photos, gaming, downloading apps, playing music and checking Slack — the phone was down to 40% at the end of my day. That’s pretty solid endurance. </p><p>The iPhone Duo charges fairly quickly with Apple’s 40W charger (sold separately). It got to 42% in 15 minutes and 66% in 30 minutes. That’s good but not quite as good as the Fold 8’s 70% in half an hour.</p><h3 class="article-body__section" id="section-verdict"><span>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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="XvxwnrgkcgqgDyvXVN5J73" name="Apple iPhone Duo-15" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/XvxwnrgkcgqgDyvXVN5J73-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><h4 id="is-the-iphone-duo-worth-2-000">Is the iPhone Duo worth $2,000?</h4><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="vBwqfA2ssezXqWnPua6d83" name="Apple iPhone Duo-13" alt="iPhone Duo" src="https://cdn.mos.cms.futurecdn.net/vBwqfA2ssezXqWnPua6d83-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>Do I think the iPhone Duo is worth two grand? Yes, as it’s only $100 more than the Galaxy Z Fold 8. And you get a more durable design, faster performance, longer battery life and smarter software. However, the Fold 8 is thinner and lighter, and it lets you run three or more apps compared to just two for the Duo.</p><p>I like the iPhone Duo’s nano texture display in that it greatly reduces glare outdoors and minimizes the crease better than any foldable I’ve tested. But you give up perfect blacks with this matte panel and more saturated colors versus the iPhone 18 Pro Max. You also sacrifice a telephoto lens and Face ID. I can live with those trade-offs, but that doesn’t mean I like them.</p><p>In a way it’s a good thing that the iPhone Duo is backordered for many until December or January. That will give developers plenty of time to update their offerings for this foldable. I don’t think it will take that long, though, based on the high demand.</p><p>Overall, though, I think the iPhone Duo is the best designed foldable yet with the most polished, intuitive and fun software experience. </p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ MacBook Pro OLED rumors: Everything to know about the first touchscreen MacBook ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Apple is holding a <a href="https://www.tomsguide.com/computing/macbooks/pro-and-tell-we-just-got-apples-oct-28-event-invite-heres-what-to-expect">“Pro and Tell” event on October 28</a> that, not-so-subtly, signals a new MacBook Pro. That’s not too surprising, given that the company tends to release updated versions of its flagship laptop in late October or early November. However, this time it’s different: rumors suggest we’ll see the first ever touchscreen MacBook Pro unveiled, complete with an OLED display.</p><p>According to Bloomberg reporter and Apple tipster <a href="https://x.com/markgurman/status/2110584725983396061" target="_blank">Mark Gurman</a>, this MacBook Pro—or <a href="https://www.tomsguide.com/computing/macbooks/macbook-ultra-could-release-on-november-6-but-dont-expect-an-m6-chip-to-appear">MacBook Ultra</a>, as it has also been known — will also be slimmer and lighter than the existing models. It’s expected to come in 14- and 16-inch variants, and, interestingly enough, the laptops are rumored to have M5 Pro and M5 Max chips instead of an M6 chip.</p><p>If these rumors are true, this would be the biggest upgrade to the MacBook line since its redesign in October 2021. Of course, these upgrades will likely come with a steep price. That said, and understanding that none of these reports are official, here’s everything we’ve heard and expect from the MacBook Pro OLED.</p><h3 class="article-body__section" id="section-macbook-pro-oled-rumored-price-and-availability"><span>MacBook Pro OLED: Rumored price and 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="x5FQk9rDMUm4gFJ7dmPaaC" name="MacBook Pro 14 2024 M4-20.jpg" alt="MacBook Pro 14-inch (2024, M4) shown open on a table" src="https://cdn.mos.cms.futurecdn.net/x5FQk9rDMUm4gFJ7dmPaaC-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>There is no official release date for the MacBook Pro OLED, but we can make a reasonable guess about when we can expect it. Apple usually releases devices a week after they’re officially announced. To that end, we could see the MacBook Pro OLED sometime during the week of November 2.</p><p>Price-wise, previous estimates from <a href="https://www.macworld.com/article/3124481/apples-ultra-roadmap-confirmed-iphone-macbook-and-more-on-the-way.html" target="_blank">MacWorld</a> suggested that the MacBook Pro OLED could cost roughly 20% more than the current MacBook Pros, thanks to the OLED touchscreen and high-end chips. That would translate to a starting price of around $2,399 for the 14-inch model and $3,599 for the 16-inch variant — up from the $1,999 and $2,999 baselines of today’s M5 Pro models.</p><h3 class="article-body__section" id="section-macbook-pro-oled-design-and-display"><span>MacBook Pro OLED: 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="SdeLwCg7jxNHkEX2q8tqia" name="MacBook Pro M5--02" alt="MacBook Pro M5" src="https://cdn.mos.cms.futurecdn.net/SdeLwCg7jxNHkEX2q8tqia-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Instead of the existing mini-LED LCDs (or Liquid Retina displays), this rumored MacBook Pro will feature an OLED panel — which would be a first for MacBooks. This will deliver higher contrast between light and dark elements, more vivid colors, and stronger HDR. In addition, this MacBook Pro is expected to include a touchscreen, another first for MacBooks.</p><p>One interesting thing is that Apple is apparently ditching the display’s notch in favor of an iPhone-style Dynamic Island. Some folks have never liked the notch, so they’ll likely celebrate this rumored design change.</p><p>OLED panels are thinner and lighter than LCDs. This is why the <a href="https://www.tomsguide.com/computing/ipads/ipad-pro-m5-review">iPad Pro M5</a> is slimmer and weighs less than an <a href="https://www.tomsguide.com/computing/ipads/apple-ipad-air-m4-review-small-tweaks-to-the-gold-standard">iPad Air M4</a>. As a result, rumors suggest the OLED MacBook Pro should be noticeably more portable. We can’t say whether these laptops will be as featherweight as MacBook Airs, but it will be interesting to see the size and weight differences.</p><p>Besides being thinner and lighter, the rest of the OLED MacBook Pro’s design should remain the same. That means a similar keyboard, touchpad, and port selection.</p><h3 class="article-body__section" id="section-macbook-pro-led-performance"><span>MacBook Pro LED: 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="7sihnbDHhcPr4yJ8oHbPeA" name="macbook-pro-2023-image.jpg" alt="A 2023 MacBook Pro 14-inch" src="https://cdn.mos.cms.futurecdn.net/7sihnbDHhcPr4yJ8oHbPeA-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Reports originally said the OLED MacBook Pro would pack the then-unannounced <a href="https://www.tomsguide.com/computing/cpus/i-analyzed-apples-new-2nm-m6-chip-here-is-why-m1-holdouts-finally-need-to-upgrade">Apple M6 chip</a>. That processor is now real and powers the new <a href="https://www.tomsguide.com/computing/apple-desktops/mac-mini-m6-review">Mac mini M6</a>. However, despite being the most recent M-series chip, it appears the OLED MacBook Pro will use a different processor.</p><p>According to Mark Gurman, the 14- and 16-inch <a href="https://www.tomsguide.com/computing/macbooks/apple-macbook-ultra-may-arrive-running-on-some-of-the-same-chips-as-macbook-pro-heres-why">OLED MacBooks will run on M5 Pro and M5 Max chips</a> from the existing MacBook Pros. Though these are last-gen chips, they are more powerful than the M6 chip.</p><p>Why won’t this laptop have higher-end versions of the M6 chip? Gurman claims that Apple isn’t developing M6 Pro, M6 Max, or even M6 Ultra processors. The reason is that the company wants to focus more on AI and better graphics performance. As a result, Apple plans to focus its resources on developing M7 chips sooner — which means skipping higher-end M6 processors.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Xj2LYX"></div>                            </div>                            <script src="https://kwizly.com/embed/Xj2LYX.js" async></script><h3 class="article-body__section" id="section-macbook-pro-oled-outlook"><span>MacBook Pro OLED: Outlook</span></h3><p>With the Apple “Pro and Tell” event on October 28, it won’t be long before we find out whether the rumored MacBook Pro OLED is real. Given the event’s title, we’ll undoubtedly see something MacBook Pro-related. Regardless, stay tuned for updates as we hear them!</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/iphone-duo-wait-times-latest-updates-and-how-to-beat-apples-january-delay"><strong>iPhone Duo wait times — the latest updates</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/computing/cpus/ive-been-living-with-nvidias-rtx-spark-for-a-week-on-surface-laptop-ultra-its-not-a-macbook-pro-killer-but-something-much-weirder-and-wildly-powerful"><strong>I’ve been living with Nvidia’s RTX Spark for a week</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/home/smart-home/apples-rumored-usd1-000-homeview-max-is-either-a-smart-home-revolution-or-a-terrifying-black-mirror-prop"><strong>At $1,000, Apple's rumored HomeView Max better do the dishes, too</strong></a><strong></strong></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/macbooks/macbook-pro-oled-all-the-expected-features</link>
                                                                            <description>
                            <![CDATA[ Apple is expected to unveil the long-rumored touchscreen MacBook Pro OLED during its "Pro and Tell" event. Here's what we can expect, based on the latest rumors. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">rgmxUX92RPpDXC7AuN6t5g</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/hP8bX9FrAUHv2JdHLVGvCA-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 21 Oct 2026 09:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[MacBooks]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Laptops]]></category>
                                                                                                <author><![CDATA[ tony.polanco@futurenet.com (Tony Polanco) ]]></author>                    <dc:creator><![CDATA[ Tony Polanco ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/atzRNqFt5wYgEUPBDahWsD-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/hP8bX9FrAUHv2JdHLVGvCA-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[MacBook Pro M3 Pro on bench]]></media:description>                                                            <media:text><![CDATA[MacBook Pro M3 Pro on bench]]></media:text>
                                <media:title type="plain"><![CDATA[MacBook Pro M3 Pro on bench]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/hP8bX9FrAUHv2JdHLVGvCA-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Apple is holding a <a href="https://www.tomsguide.com/computing/macbooks/pro-and-tell-we-just-got-apples-oct-28-event-invite-heres-what-to-expect">“Pro and Tell” event on October 28</a> that, not-so-subtly, signals a new MacBook Pro. That’s not too surprising, given that the company tends to release updated versions of its flagship laptop in late October or early November. However, this time it’s different: rumors suggest we’ll see the first ever touchscreen MacBook Pro unveiled, complete with an OLED display.</p><p>According to Bloomberg reporter and Apple tipster <a href="https://x.com/markgurman/status/2110584725983396061" target="_blank">Mark Gurman</a>, this MacBook Pro—or <a href="https://www.tomsguide.com/computing/macbooks/macbook-ultra-could-release-on-november-6-but-dont-expect-an-m6-chip-to-appear">MacBook Ultra</a>, as it has also been known — will also be slimmer and lighter than the existing models. It’s expected to come in 14- and 16-inch variants, and, interestingly enough, the laptops are rumored to have M5 Pro and M5 Max chips instead of an M6 chip.</p><p>If these rumors are true, this would be the biggest upgrade to the MacBook line since its redesign in October 2021. Of course, these upgrades will likely come with a steep price. That said, and understanding that none of these reports are official, here’s everything we’ve heard and expect from the MacBook Pro OLED.</p><h3 class="article-body__section" id="section-macbook-pro-oled-rumored-price-and-availability"><span>MacBook Pro OLED: Rumored price and 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="x5FQk9rDMUm4gFJ7dmPaaC" name="MacBook Pro 14 2024 M4-20.jpg" alt="MacBook Pro 14-inch (2024, M4) shown open on a table" src="https://cdn.mos.cms.futurecdn.net/x5FQk9rDMUm4gFJ7dmPaaC-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>There is no official release date for the MacBook Pro OLED, but we can make a reasonable guess about when we can expect it. Apple usually releases devices a week after they’re officially announced. To that end, we could see the MacBook Pro OLED sometime during the week of November 2.</p><p>Price-wise, previous estimates from <a href="https://www.macworld.com/article/3124481/apples-ultra-roadmap-confirmed-iphone-macbook-and-more-on-the-way.html" target="_blank">MacWorld</a> suggested that the MacBook Pro OLED could cost roughly 20% more than the current MacBook Pros, thanks to the OLED touchscreen and high-end chips. That would translate to a starting price of around $2,399 for the 14-inch model and $3,599 for the 16-inch variant — up from the $1,999 and $2,999 baselines of today’s M5 Pro models.</p><h3 class="article-body__section" id="section-macbook-pro-oled-design-and-display"><span>MacBook Pro OLED: 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="SdeLwCg7jxNHkEX2q8tqia" name="MacBook Pro M5--02" alt="MacBook Pro M5" src="https://cdn.mos.cms.futurecdn.net/SdeLwCg7jxNHkEX2q8tqia-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Instead of the existing mini-LED LCDs (or Liquid Retina displays), this rumored MacBook Pro will feature an OLED panel — which would be a first for MacBooks. This will deliver higher contrast between light and dark elements, more vivid colors, and stronger HDR. In addition, this MacBook Pro is expected to include a touchscreen, another first for MacBooks.</p><p>One interesting thing is that Apple is apparently ditching the display’s notch in favor of an iPhone-style Dynamic Island. Some folks have never liked the notch, so they’ll likely celebrate this rumored design change.</p><p>OLED panels are thinner and lighter than LCDs. This is why the <a href="https://www.tomsguide.com/computing/ipads/ipad-pro-m5-review">iPad Pro M5</a> is slimmer and weighs less than an <a href="https://www.tomsguide.com/computing/ipads/apple-ipad-air-m4-review-small-tweaks-to-the-gold-standard">iPad Air M4</a>. As a result, rumors suggest the OLED MacBook Pro should be noticeably more portable. We can’t say whether these laptops will be as featherweight as MacBook Airs, but it will be interesting to see the size and weight differences.</p><p>Besides being thinner and lighter, the rest of the OLED MacBook Pro’s design should remain the same. That means a similar keyboard, touchpad, and port selection.</p><h3 class="article-body__section" id="section-macbook-pro-led-performance"><span>MacBook Pro LED: 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="7sihnbDHhcPr4yJ8oHbPeA" name="macbook-pro-2023-image.jpg" alt="A 2023 MacBook Pro 14-inch" src="https://cdn.mos.cms.futurecdn.net/7sihnbDHhcPr4yJ8oHbPeA-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Reports originally said the OLED MacBook Pro would pack the then-unannounced <a href="https://www.tomsguide.com/computing/cpus/i-analyzed-apples-new-2nm-m6-chip-here-is-why-m1-holdouts-finally-need-to-upgrade">Apple M6 chip</a>. That processor is now real and powers the new <a href="https://www.tomsguide.com/computing/apple-desktops/mac-mini-m6-review">Mac mini M6</a>. However, despite being the most recent M-series chip, it appears the OLED MacBook Pro will use a different processor.</p><p>According to Mark Gurman, the 14- and 16-inch <a href="https://www.tomsguide.com/computing/macbooks/apple-macbook-ultra-may-arrive-running-on-some-of-the-same-chips-as-macbook-pro-heres-why">OLED MacBooks will run on M5 Pro and M5 Max chips</a> from the existing MacBook Pros. Though these are last-gen chips, they are more powerful than the M6 chip.</p><p>Why won’t this laptop have higher-end versions of the M6 chip? Gurman claims that Apple isn’t developing M6 Pro, M6 Max, or even M6 Ultra processors. The reason is that the company wants to focus more on AI and better graphics performance. As a result, Apple plans to focus its resources on developing M7 chips sooner — which means skipping higher-end M6 processors.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Xj2LYX"></div>                            </div>                            <script src="https://kwizly.com/embed/Xj2LYX.js" async></script><h3 class="article-body__section" id="section-macbook-pro-oled-outlook"><span>MacBook Pro OLED: Outlook</span></h3><p>With the Apple “Pro and Tell” event on October 28, it won’t be long before we find out whether the rumored MacBook Pro OLED is real. Given the event’s title, we’ll undoubtedly see something MacBook Pro-related. Regardless, stay tuned for updates as we hear them!</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/iphone-duo-wait-times-latest-updates-and-how-to-beat-apples-january-delay"><strong>iPhone Duo wait times — the latest updates</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/computing/cpus/ive-been-living-with-nvidias-rtx-spark-for-a-week-on-surface-laptop-ultra-its-not-a-macbook-pro-killer-but-something-much-weirder-and-wildly-powerful"><strong>I’ve been living with Nvidia’s RTX Spark for a week</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/home/smart-home/apples-rumored-usd1-000-homeview-max-is-either-a-smart-home-revolution-or-a-terrifying-black-mirror-prop"><strong>At $1,000, Apple's rumored HomeView Max better do the dishes, too</strong></a><strong></strong></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I disabled these iOS 27 features and my iPhone finally feels responsive again ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Ever since updating to iOS 27, my iPhone has been acting up in ways that drive me completely nuts. Beyond the general sluggishness, my screen randomly stops responding to touch, and I’ve been hit with weird, glitchy quirks — like my go-to laughing emoji suddenly sending as a giant image file instead of a normal inline symbol. </p><p>If your phone feels warm to the touch or has started glitching since the update, you don't have to wait around for Apple to push out a bug fix to get your device back to normal.</p><p>While a lot of post-update lag comes from background indexing, which usually settles down after a couple of days, taking control of a few heavy system features made an immediate difference for me. </p><p>Tweak these demanding settings to instantly cut out the lag. </p><section class="howto-block">                    <h3>The performance cost of Liquid Glass </h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/9h7vWBdf8jy3VjVEpSkpKS.jpg"                                        alt="How to toggle on Reduce Transparency on iPhone"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/9h7vWBdf8jy3VjVEpSkpKS.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>One of the biggest design shifts in recent iPhone history is Liquid Glass — that fancy, translucent UI look Apple introduced in iOS 26 that reflects ambient light and your background wallpaper. It looks great, but rendering all that real-time transparency forces your graphics chip to work overtime. </p><p><a href="https://www.tomsguide.com/phones/iphones/ios-26-4-finally-adds-the-hidden-controls-to-tone-down-liquid-glass-heres-how">Apple did add a way in iOS 27 to adjust the interface intensity</a> by going to <strong>Settings, Appearance, Liquid Glass</strong> <strong>and using the slider to bump up the tint and opacity</strong>. But while that slider helps with text legibility by flattening out distracting reflections, it doesn't actually stop it churning away in the background. </p><p>To kill the lag completely, you need to turn off the glass effects at the system level. Go to <strong>Settings, Accessibility, Display & Text Size and toggle on</strong> <strong>Reduce Transparency</strong>. </p></p>                </section><section class="howto-block">                    <h3>Stop using Low Power Mode all day </h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/DWvN6bfjXgu5MosYHpHwsJ.jpg"                                        alt="How to toggle off power mode on iPhone"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/DWvN6bfjXgu5MosYHpHwsJ.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>I used to leave Low Power Mode turned on full-time thinking it would save my battery, but it actually causes more harm than good when you are trying to use your phone. </p><p>Even with iOS 27’s recent improvements, which try to manage background tasks a bit smarter when the battery is low, the feature still works by intentionally cutting your iPhone’s processing speed in half. That extra throttling leads to constant lagging, slow app loading, and delayed web browsing while you are actively using the device. </p><p><a href="https://www.tomsguide.com/phones/the-4-emergency-phone-tweaks-that-keep-your-battery-alive-in-a-power-outage">It is really meant as a safety net when your battery hits 20%</a> and your phone is sitting idle, so keeping it toggled on all day just slows down your device for very little payoff. You can turn it off by heading to <strong>Settings, Battery, Power Mode, and toggling Low Power Mode off</strong>.</p></p>                </section><h3 class="article-body__section" id="section-what-to-do-if-your-iphone-is-completely-unresponsive"><span>What to do if your iPhone is completely unresponsive?</span></h3><p>If your screen is completely locking up after a few quick swipes, you are likely hitting a known iOS 27 bug that freezes the display when pulling down the Control Center or Notification Center too fast. </p><p>When this happens, the torch and camera icons get stuck at the top of the display and your screen stops registering touches altogether. Because a frozen screen prevents you from using the normal power-off slider, the best way to unstick your phone is to trigger a hard reset using the side buttons.</p><h2 id="perform-a-hard-reset-to-clear-the-swipe-freeze-bug">Perform a hard reset to clear the swipe-freeze bug</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="P3exSTAwSAdDQgncjQAYY7" name="Force restart 4.jpg" alt="iPhone restarting" src="https://cdn.mos.cms.futurecdn.net/P3exSTAwSAdDQgncjQAYY7-1920-80.jpg" mos="" align="middle" fullscreen="" width="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><strong>To force a restart, press and quickly release the Volume Up button, press and quickly release the Volume Down button, and then press and hold the Power button</strong> until the screen goes dark and the Apple logo appears.</p><p>This hard reboot clears out the frozen memory state, unfreezes your screen, and resets the glitchy touch response without erasing any of your data.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-X7D1Ke"></div>                            </div>                            <script src="https://kwizly.com/embed/X7D1Ke.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/the-iphone-battery-myth-almost-everyone-believes-and-why-you-can-stop-swiping-away-apps"><strong>The iPhone battery myth almost everyone believes, and why you can stop swiping away apps</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/i-turned-off-this-hidden-ios-27-setting-and-instantly-fixed-my-iphones-battery-drain"><strong>I turned off this hidden iOS 27 setting and instantly fixed my iPhone’s battery drain</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/ios-27-quietly-fixes-the-most-annoying-iphone-workaround-we-all-use"><strong>iOS 27 finally fixes the most annoying iPhone workaround we all use</strong></a><strong></strong></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/i-disabled-these-ios-27-features-and-my-iphone-feels-responsive-again</link>
                                                                            <description>
                            <![CDATA[ If you're dealing with iOS 27 glitches, here's how adjusting a few key display and battery settings can make your iPhone run noticeably smoother. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">crQvqBsthLvizArqSZnWeA</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/2efmfduZmfn9mvEuZQsgQe-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 21 Oct 2026 07:30:00 +0000</pubDate>                                                                                                                                <updated>Wed, 21 Oct 2026 18:51:43 +0000</updated>
                                                                                                                                            <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ kaycee.hill@futurenet.com (Kaycee Hill) ]]></author>                    <dc:creator><![CDATA[ Kaycee Hill ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/xHn6RmpEqg87cvtLwrBu9G-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/2efmfduZmfn9mvEuZQsgQe-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide / John Velasco]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Apple iPhone 17 review.]]></media:description>                                                            <media:text><![CDATA[Apple iPhone 17 review.]]></media:text>
                                <media:title type="plain"><![CDATA[Apple iPhone 17 review.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/2efmfduZmfn9mvEuZQsgQe-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Ever since updating to iOS 27, my iPhone has been acting up in ways that drive me completely nuts. Beyond the general sluggishness, my screen randomly stops responding to touch, and I’ve been hit with weird, glitchy quirks — like my go-to laughing emoji suddenly sending as a giant image file instead of a normal inline symbol. </p><p>If your phone feels warm to the touch or has started glitching since the update, you don't have to wait around for Apple to push out a bug fix to get your device back to normal.</p><p>While a lot of post-update lag comes from background indexing, which usually settles down after a couple of days, taking control of a few heavy system features made an immediate difference for me. </p><p>Tweak these demanding settings to instantly cut out the lag. </p><section class="howto-block">                    <h3>The performance cost of Liquid Glass </h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/9h7vWBdf8jy3VjVEpSkpKS.jpg"                                        alt="How to toggle on Reduce Transparency on iPhone"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/9h7vWBdf8jy3VjVEpSkpKS.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>One of the biggest design shifts in recent iPhone history is Liquid Glass — that fancy, translucent UI look Apple introduced in iOS 26 that reflects ambient light and your background wallpaper. It looks great, but rendering all that real-time transparency forces your graphics chip to work overtime. </p><p><a href="https://www.tomsguide.com/phones/iphones/ios-26-4-finally-adds-the-hidden-controls-to-tone-down-liquid-glass-heres-how">Apple did add a way in iOS 27 to adjust the interface intensity</a> by going to <strong>Settings, Appearance, Liquid Glass</strong> <strong>and using the slider to bump up the tint and opacity</strong>. But while that slider helps with text legibility by flattening out distracting reflections, it doesn't actually stop it churning away in the background. </p><p>To kill the lag completely, you need to turn off the glass effects at the system level. Go to <strong>Settings, Accessibility, Display & Text Size and toggle on</strong> <strong>Reduce Transparency</strong>. </p></p>                </section><section class="howto-block">                    <h3>Stop using Low Power Mode all day </h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/DWvN6bfjXgu5MosYHpHwsJ.jpg"                                        alt="How to toggle off power mode on iPhone"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/DWvN6bfjXgu5MosYHpHwsJ.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>I used to leave Low Power Mode turned on full-time thinking it would save my battery, but it actually causes more harm than good when you are trying to use your phone. </p><p>Even with iOS 27’s recent improvements, which try to manage background tasks a bit smarter when the battery is low, the feature still works by intentionally cutting your iPhone’s processing speed in half. That extra throttling leads to constant lagging, slow app loading, and delayed web browsing while you are actively using the device. </p><p><a href="https://www.tomsguide.com/phones/the-4-emergency-phone-tweaks-that-keep-your-battery-alive-in-a-power-outage">It is really meant as a safety net when your battery hits 20%</a> and your phone is sitting idle, so keeping it toggled on all day just slows down your device for very little payoff. You can turn it off by heading to <strong>Settings, Battery, Power Mode, and toggling Low Power Mode off</strong>.</p></p>                </section><h3 class="article-body__section" id="section-what-to-do-if-your-iphone-is-completely-unresponsive"><span>What to do if your iPhone is completely unresponsive?</span></h3><p>If your screen is completely locking up after a few quick swipes, you are likely hitting a known iOS 27 bug that freezes the display when pulling down the Control Center or Notification Center too fast. </p><p>When this happens, the torch and camera icons get stuck at the top of the display and your screen stops registering touches altogether. Because a frozen screen prevents you from using the normal power-off slider, the best way to unstick your phone is to trigger a hard reset using the side buttons.</p><h2 id="perform-a-hard-reset-to-clear-the-swipe-freeze-bug">Perform a hard reset to clear the swipe-freeze bug</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="P3exSTAwSAdDQgncjQAYY7" name="Force restart 4.jpg" alt="iPhone restarting" src="https://cdn.mos.cms.futurecdn.net/P3exSTAwSAdDQgncjQAYY7-1920-80.jpg" mos="" align="middle" fullscreen="" width="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><strong>To force a restart, press and quickly release the Volume Up button, press and quickly release the Volume Down button, and then press and hold the Power button</strong> until the screen goes dark and the Apple logo appears.</p><p>This hard reboot clears out the frozen memory state, unfreezes your screen, and resets the glitchy touch response without erasing any of your data.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-X7D1Ke"></div>                            </div>                            <script src="https://kwizly.com/embed/X7D1Ke.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/the-iphone-battery-myth-almost-everyone-believes-and-why-you-can-stop-swiping-away-apps"><strong>The iPhone battery myth almost everyone believes, and why you can stop swiping away apps</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/i-turned-off-this-hidden-ios-27-setting-and-instantly-fixed-my-iphones-battery-drain"><strong>I turned off this hidden iOS 27 setting and instantly fixed my iPhone’s battery drain</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/ios-27-quietly-fixes-the-most-annoying-iphone-workaround-we-all-use"><strong>iOS 27 finally fixes the most annoying iPhone workaround we all use</strong></a><strong></strong></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ iPad mini 8 rumors — OLED and all the biggest upgrades ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The iPad mini 8 could be here soon. <a href="https://www.tomsguide.com/computing/macbooks/pro-and-tell-we-just-got-apples-oct-28-event-invite-heres-what-to-expect">Invitations for Apple’s "Pro and Tell" event started going out</a>, and it will likely unveil the long-rumored <a href="https://www.tomsguide.com/computing/macbooks/macbook-pro-oled-coming-in-2026-claims-new-report">OLED MacBook Pro</a>. But if Bloomberg reporter and Apple tipster <a href="https://www.tomsguide.com/computing/macbooks/macbook-pro-oled-coming-in-2026-claims-new-report">Mark Gurman</a> is correct, we’ll also see a brand-new iPad mini, or the iPad mini 8.</p><p>Like the <a href="https://www.tomsguide.com/computing/ipads/ipad-pro-m5-review">iPad Pro M5</a>, the iPad mini 8 will reportedly get an OLED panel, making it the second iPad with that display technology. In addition, the diminutive tablet will also get a repositioned front-facing camera and redesigned speaker system.</p><p>The <a href="https://www.tomsguide.com/tablets/ipads/ipad-mini-7-review">iPad mini 7</a> is currently among the <a href="https://www.tomsguide.com/best-picks/best-ipad">best iPads</a>. If what we’ve heard about its successor is true, that tablet could make that list, too. Here are all the rumored upgrades for the iPad mini 8.</p><h3 class="article-body__section" id="section-ipad-mini-8-rumored-launch-date-potential-price"><span>iPad mini 8: Rumored launch date & potential 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="FFvt6WRhhQWvHKtffpdzDX" name="iPad mini 7-LIST4.jpg" alt="iPad mini 7" src="https://cdn.mos.cms.futurecdn.net/FFvt6WRhhQWvHKtffpdzDX-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Reports haven’t provided a definitive launch date or price for the iPad mini 8, but we can indulge in a few educated guesses.</p><p>Based on my experience, Apple typically launches devices around a week after they’re unveiled at events. If that holds here, the iPad mini 8 could arrive the week of November 2. Previous iPads have arrived in that timeframe, so this is a relatively safe bet.</p><p>Price is where things get nebulous. The iPad mini 7 originally started at $499 for a 128GB Wi-Fi model. However, thanks to <a href="https://www.tomsguide.com/computing/macbooks/apple-price-hikes-are-official-heres-how-much-more-youll-pay-for-macbooks-and-ipads-now">Apple price hikes</a>, this small tablet now starts at $599. Given the rumored upgrades, I'd be surprised if Apple keeps the $599 price, so I think this tablet will likely cost $50 to $100 more.</p><p>And on the subject of upgrades…</p><h3 class="article-body__section" id="section-ipad-mini-8-design-display"><span>iPad mini 8: Design & display</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="mgc3GANfokZsPt2Vfz4vgT" name="iPad mini 7--2-LEDE" alt="An iPad mini 7 on a desk with a finger resting over its power button with Touch ID" src="https://cdn.mos.cms.futurecdn.net/mgc3GANfokZsPt2Vfz4vgT-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>If rumors hold, the iPad mini 8 won’t be just a simple spec bump over the 2024 model.</p><p>Rumors claim the iPad mini 8 will have an OLED panel. Now, whether this is an optional upgrade or built-in is anyone’s guess. We also haven’t heard whether Apple will use the same tandem OLED tech as the iPad Pro, or opt for a different kind of OLED.</p><p>There is also no concrete reporting about the iPad mini’s refresh rate. The iPad mini 7 tops out at 60Hz, but some believe the new model will bump that up to 120Hz. While Mark Gurman says Apple has tested 60Hz and 120Hz versions, the company hasn’t decided which to go with.</p><p>The latest iPad Air and iPad Pro tablets all have landscape-oriented front-facing cameras, and the iPad mini 8 is expected to finally get its own. That’s a smart upgrade, as it makes video calls and selfies feel more natural in landscape.</p><p>If the OLED rumors are true, then the iPad mini 8 should be thinner and lighter than the last model. After all, that’s why the iPad Pro is even slimmer and lighter than an iPad Air, which lacks an OLED. That, along with rumored thinner bezels, could make for a more pleasing experience.</p><h3 class="article-body__section" id="section-ipad-mini-8-performance"><span>iPad mini 8: Performance</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3393px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="dvGFaUsE3VEw85mkxRXAL8" name="IMG_3871.JPG" alt="Lake coloring app on iPad" src="https://cdn.mos.cms.futurecdn.net/dvGFaUsE3VEw85mkxRXAL8-1920-80.jpg" mos="" align="middle" fullscreen="" width="3393" height="1909" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p><a href="https://www.macrumors.com/2026/10/07/ipad-mini-8-to-offer-these-10-new-features/" target="_blank">MacRumors</a> reports that the iPad mini 8 will use an A20 Pro chip, the same processor powering 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>. Built on TSMC’s 2mn process, the chip can deliver up to 1.5x faster CPU performance and 2.5x faster GPU performance than the A17 Pro chip in the iPad mini 7.</p><p>Memory-wise, the iPad mini 8 will allegedly have 12GB of RAM, a big bump from the iPad mini 7's 8 GB. This, along with the A20 Pro chip, should deliver noticeably better performance in games and with AI features.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Xj2LYX"></div>                            </div>                            <script src="https://kwizly.com/embed/Xj2LYX.js" async></script><h3 class="article-body__section" id="section-ipad-mini-8-outlook"><span>iPad mini 8: Outlook</span></h3><p>Apple hasn’t officially announced the iPad mini 8, so take all the reports I’ve detailed above with a healthy dose of skepticism. If these reports and rumors are true, we could be looking at a pretty significant upgrade for Apple’s small wonder tablet.</p><p>Of course, these upgrades likely won’t come cheap, so brace yourself for a steeper-priced iPad mini 8 when Apple eventually announces it. In the meantime, 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><strong></strong><a href="https://www.tomsguide.com/home/smart-home/apples-rumored-usd1-000-homeview-max-is-either-a-smart-home-revolution-or-a-terrifying-black-mirror-prop"><strong>At $1,000, Apple's rumored HomeView Max better do the dishes, too</strong></a><strong></strong></li><li><strong></strong><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"><strong>My iPhone 18 Pro Max just arrived and I immediately regret the purchase</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/20-smart-ios-27-features-that-will-make-your-life-easier-and-how-to-use-them"><strong>20 smart iOS 27 features that will make your life easier</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/ipads/ipad-mini-8-latest-rumors</link>
                                                                            <description>
                            <![CDATA[ Apple could unveil the iPad mini 8 at its upcoming "Pro and Tell" event. Here are the latest rumored upgrades coming to the company's smallest tablet. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">CLYfxDscnLZJ7KYEcyvTkn</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/Wjr8UhurfobfV7ZGKwck4i-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 20 Oct 2026 10:30:00 +0000</pubDate>                                                                                                                                <updated>Tue, 20 Oct 2026 11:18:21 +0000</updated>
                                                                                                                                            <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Tablets]]></category>
                                                                                                <author><![CDATA[ tony.polanco@futurenet.com (Tony Polanco) ]]></author>                    <dc:creator><![CDATA[ Tony Polanco ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/atzRNqFt5wYgEUPBDahWsD-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/Wjr8UhurfobfV7ZGKwck4i-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPad mini 7]]></media:description>                                                            <media:text><![CDATA[iPad mini 7]]></media:text>
                                <media:title type="plain"><![CDATA[iPad mini 7]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/Wjr8UhurfobfV7ZGKwck4i-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The iPad mini 8 could be here soon. <a href="https://www.tomsguide.com/computing/macbooks/pro-and-tell-we-just-got-apples-oct-28-event-invite-heres-what-to-expect">Invitations for Apple’s "Pro and Tell" event started going out</a>, and it will likely unveil the long-rumored <a href="https://www.tomsguide.com/computing/macbooks/macbook-pro-oled-coming-in-2026-claims-new-report">OLED MacBook Pro</a>. But if Bloomberg reporter and Apple tipster <a href="https://www.tomsguide.com/computing/macbooks/macbook-pro-oled-coming-in-2026-claims-new-report">Mark Gurman</a> is correct, we’ll also see a brand-new iPad mini, or the iPad mini 8.</p><p>Like the <a href="https://www.tomsguide.com/computing/ipads/ipad-pro-m5-review">iPad Pro M5</a>, the iPad mini 8 will reportedly get an OLED panel, making it the second iPad with that display technology. In addition, the diminutive tablet will also get a repositioned front-facing camera and redesigned speaker system.</p><p>The <a href="https://www.tomsguide.com/tablets/ipads/ipad-mini-7-review">iPad mini 7</a> is currently among the <a href="https://www.tomsguide.com/best-picks/best-ipad">best iPads</a>. If what we’ve heard about its successor is true, that tablet could make that list, too. Here are all the rumored upgrades for the iPad mini 8.</p><h3 class="article-body__section" id="section-ipad-mini-8-rumored-launch-date-potential-price"><span>iPad mini 8: Rumored launch date & potential 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="FFvt6WRhhQWvHKtffpdzDX" name="iPad mini 7-LIST4.jpg" alt="iPad mini 7" src="https://cdn.mos.cms.futurecdn.net/FFvt6WRhhQWvHKtffpdzDX-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Reports haven’t provided a definitive launch date or price for the iPad mini 8, but we can indulge in a few educated guesses.</p><p>Based on my experience, Apple typically launches devices around a week after they’re unveiled at events. If that holds here, the iPad mini 8 could arrive the week of November 2. Previous iPads have arrived in that timeframe, so this is a relatively safe bet.</p><p>Price is where things get nebulous. The iPad mini 7 originally started at $499 for a 128GB Wi-Fi model. However, thanks to <a href="https://www.tomsguide.com/computing/macbooks/apple-price-hikes-are-official-heres-how-much-more-youll-pay-for-macbooks-and-ipads-now">Apple price hikes</a>, this small tablet now starts at $599. Given the rumored upgrades, I'd be surprised if Apple keeps the $599 price, so I think this tablet will likely cost $50 to $100 more.</p><p>And on the subject of upgrades…</p><h3 class="article-body__section" id="section-ipad-mini-8-design-display"><span>iPad mini 8: Design & display</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="mgc3GANfokZsPt2Vfz4vgT" name="iPad mini 7--2-LEDE" alt="An iPad mini 7 on a desk with a finger resting over its power button with Touch ID" src="https://cdn.mos.cms.futurecdn.net/mgc3GANfokZsPt2Vfz4vgT-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>If rumors hold, the iPad mini 8 won’t be just a simple spec bump over the 2024 model.</p><p>Rumors claim the iPad mini 8 will have an OLED panel. Now, whether this is an optional upgrade or built-in is anyone’s guess. We also haven’t heard whether Apple will use the same tandem OLED tech as the iPad Pro, or opt for a different kind of OLED.</p><p>There is also no concrete reporting about the iPad mini’s refresh rate. The iPad mini 7 tops out at 60Hz, but some believe the new model will bump that up to 120Hz. While Mark Gurman says Apple has tested 60Hz and 120Hz versions, the company hasn’t decided which to go with.</p><p>The latest iPad Air and iPad Pro tablets all have landscape-oriented front-facing cameras, and the iPad mini 8 is expected to finally get its own. That’s a smart upgrade, as it makes video calls and selfies feel more natural in landscape.</p><p>If the OLED rumors are true, then the iPad mini 8 should be thinner and lighter than the last model. After all, that’s why the iPad Pro is even slimmer and lighter than an iPad Air, which lacks an OLED. That, along with rumored thinner bezels, could make for a more pleasing experience.</p><h3 class="article-body__section" id="section-ipad-mini-8-performance"><span>iPad mini 8: Performance</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3393px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="dvGFaUsE3VEw85mkxRXAL8" name="IMG_3871.JPG" alt="Lake coloring app on iPad" src="https://cdn.mos.cms.futurecdn.net/dvGFaUsE3VEw85mkxRXAL8-1920-80.jpg" mos="" align="middle" fullscreen="" width="3393" height="1909" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p><a href="https://www.macrumors.com/2026/10/07/ipad-mini-8-to-offer-these-10-new-features/" target="_blank">MacRumors</a> reports that the iPad mini 8 will use an A20 Pro chip, the same processor powering 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>. Built on TSMC’s 2mn process, the chip can deliver up to 1.5x faster CPU performance and 2.5x faster GPU performance than the A17 Pro chip in the iPad mini 7.</p><p>Memory-wise, the iPad mini 8 will allegedly have 12GB of RAM, a big bump from the iPad mini 7's 8 GB. This, along with the A20 Pro chip, should deliver noticeably better performance in games and with AI features.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Xj2LYX"></div>                            </div>                            <script src="https://kwizly.com/embed/Xj2LYX.js" async></script><h3 class="article-body__section" id="section-ipad-mini-8-outlook"><span>iPad mini 8: Outlook</span></h3><p>Apple hasn’t officially announced the iPad mini 8, so take all the reports I’ve detailed above with a healthy dose of skepticism. If these reports and rumors are true, we could be looking at a pretty significant upgrade for Apple’s small wonder tablet.</p><p>Of course, these upgrades likely won’t come cheap, so brace yourself for a steeper-priced iPad mini 8 when Apple eventually announces it. In the meantime, 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><strong></strong><a href="https://www.tomsguide.com/home/smart-home/apples-rumored-usd1-000-homeview-max-is-either-a-smart-home-revolution-or-a-terrifying-black-mirror-prop"><strong>At $1,000, Apple's rumored HomeView Max better do the dishes, too</strong></a><strong></strong></li><li><strong></strong><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"><strong>My iPhone 18 Pro Max just arrived and I immediately regret the purchase</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/20-smart-ios-27-features-that-will-make-your-life-easier-and-how-to-use-them"><strong>20 smart iOS 27 features that will make your life easier</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple 'Pro and Tell' event rumors: OLED MacBooks, M6 chips, and why you shouldn't buy anything today ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Apple cannot wait to <a href="https://www.tomsguide.com/computing/macbooks/pro-and-tell-we-just-got-apples-oct-28-event-invite-heres-what-to-expect">“pro and tell”</a> all next week, which if you’ve been following the rumor mill, is marketing speak for <em>we’re announcing new Macs and we’re going to enjoy the pun.</em></p><p>A deluge of leaks point to an <a href="https://www.tomsguide.com/computing/macbooks/apple-holding-event-oct-28-for-first-touchscreen-macbook-pro-what-we-knowhttps://www.tomsguide.com/computing/laptops/macbook-ultra-everything-we-know-so-far">OLED touchscreen MacBook Pro</a>, a new entry-level M6 MacBook Pro, M6 iMac and an <a href="https://www.tomsguide.com/computing/ipads/ipad-mini-8-latest-rumors">OLED iPad mini 8</a> — with announcements expected at an in-person media “experience” on Wednesday, October 28, and sales starting as soon as Friday, November 6.</p><p>Translation for anyone with a shopping cart open right now: <strong>close the tab</strong>.</p><h2 id="first-the-thing-you-actually-came-here-to-do">First, the thing you actually came here to do</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ViRGq3HUPCWmC4Nb9gGEhY" name="MacBook Pro 16-inch M5 Pro review-9" alt="MacBook Pro 16-inch M5 Pro on a desk" src="https://cdn.mos.cms.futurecdn.net/ViRGq3HUPCWmC4Nb9gGEhY-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>If you are considering buying a MacBook Pro, iMac or iPad mini in the next 30 days, stop. </p><p>You are standing in the exact spot where people have handed Apple full price for hardware that becomes last year’s model in literal days. Three separate outcomes favor you being patient:</p><ul><li><strong>You want the latest? Wait two weeks </strong>— the new machines are about to exist, and the OLED MacBook Pro is the biggest notebook upgrade Apple’s shipped in years.</li><li><strong>You want a bargain? Wait slightly longer </strong>— when Apple refreshes, the outgoing machines don’t vanish. They get discounted, and retailers will start clearing stock at genuine discounts within weeks.</li><li><strong>You need a laptop today? </strong>That’s fine, this advice has an escape hatch, and it’s at the bottom of this piece.</li></ul><p>Now, the fun part — what have you been waiting for.</p><h2 id="what-october-28-is-probably-going-to-bring">What October 28 is (probably) going to bring</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="qfCMo3LDQknqKEW8HHxsWK" name="MacBook Pro 14 2024 M4-16.jpg" alt="MacBook Pro 14-inch (2024, M4) shown open on a table" src="https://cdn.mos.cms.futurecdn.net/qfCMo3LDQknqKEW8HHxsWK-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Let’s start with the big one: the <strong>OLED touchscreen MacBook Pro. </strong>This redesigned prosumer notebook has been rumored for years, and it’s going to be the biggest change to Apple’s notebook lineup in years. </p><p>Outside of all that vivid OLED goodness, gorgeous contrast and easy-on-the-eyes HDR, this is a tectonic shift in the way you can actually interact with your Mac — taking notes from the iPad to bring touch to the conversation. If you’ve faithfully owned an M1 MacBook Pro, this is the upgrade you’ve been waiting for.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2735px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="wu5ytH8AAeBB4EP6xgad9C" name="MacBook Pro 14-inch M3 2023-19.jpg" alt="MacBook Pro 14-inch M3 on table" src="https://cdn.mos.cms.futurecdn.net/wu5ytH8AAeBB4EP6xgad9C-1920-80.jpg" mos="" align="middle" fullscreen="" width="2735" height="1538" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Then, there’s the new <strong>entry-level M6 MacBook Pro. </strong>The rumors seem to be aligning around this sharing the exact same 14-inch shell of the MacBook Pros you’ve seen over the past few years, but with that all-important silicon upgrade. </p><p>As we’ve found out from testing this base model over the past few years, it’s become clear that the “cheapest MacBook Pro” has always been the best-value Mac nobody noticed.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="oDjJMzuW4PS5kL9V72TCfL" name="iMac M4 (2024)-6.jpg" alt="Apple iMac M4 review unit on desk" src="https://cdn.mos.cms.futurecdn.net/oDjJMzuW4PS5kL9V72TCfL-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Next, the all-in-one looks set to get the silicon bump. The <strong>M6 iMac </strong>is less revolution, more the annual injection of “newer is faster,” to keep the all-in-one up-to-date for folks who would rather not think about towers, monitors or cable management.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="YtTeZBFoAfcadDoWMiJefJ" name="iPad mini 7-LIST1.jpg" alt="iPad mini 7" src="https://cdn.mos.cms.futurecdn.net/YtTeZBFoAfcadDoWMiJefJ-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>And finally, there’s the <strong>OLED iPad mini</strong> — which is, low key, the one I’m most excited for. I’ve loved the iPad mini for a while now, but that LCD display has always been the thorn in its side. Clearly, the mini’s been on borrowed time for two years; this is Apple saying it isn’t dead, it’s just been saving its energy.</p><h2 id="who-s-actually-safe-to-buy-now">Who’s actually safe to buy 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="4jDqEAp7SRsuScatLShMiH" name="MacBook-Pro-14-M2-Pro-LIST-2.jpg" alt="MacBook Pro 14-inch" src="https://cdn.mos.cms.futurecdn.net/4jDqEAp7SRsuScatLShMiH-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Playing both sides of the wallet is my job, so here’s the honest carve-out. <strong>If your laptop just died, your classes start this month, or you’re about to spend your rent money </strong>— buy what you need, today. </p><p>Any Mac on Apple’s current shelves is absurdly fast; your productivity is worth more than a speculative OLED panel, and the M4 MacBook Pro is still a monster.</p><p>What you should <em>not </em>do in a panic: buy the current MacBook Pro at full price as a “just in case” machine while your old one still works, which is how a lot of folks look when refresh cycles hit.</p><p>And if you’re holding a trade-in-eligible Mac: lock in your trade-in quote now or wait for the dust to settle, because trade-in allowances on older generations typically drop once new silicon is officially on the table.</p><h2 id="what-to-do-while-we-wait">What to do while we wait</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2247px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="AWm9bdpgxxSBL6VZbUNjQi" name="Apple-MBP-Event-Oct-26_LIST" alt="Apple Pro and Tell event" src="https://cdn.mos.cms.futurecdn.net/AWm9bdpgxxSBL6VZbUNjQi-1920-80.jpg" mos="" align="middle" fullscreen="" width="2247" height="1264" 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>Stay locked in on Tom’s Guide — we’ll update the moment Apple confirms or changes anything. We've received our invite to the October 28 event, and we can’t wait to see everything the Cupertino crew’s been working on!</p><p>On top of that, we’ll keep an eye on the prices of outgoing models the day they’re discounted, so you’ll know exactly when the discount is real. If the November 6 sale date is true, Black Friday collides with fresh discontinuations, and that is going to be the single best fortnight of the year for buying Macs.</p><p>The “Pro and Tell” pun may be a bit cringe, but the buying window is not.</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-wait-times-latest-updates-and-how-to-beat-apples-january-delay">iPhone Duo wait times — latest updates and how to beat Apple's January delay</a></li><li><a href="https://www.tomsguide.com/computing/cpus/ive-been-living-with-nvidias-rtx-spark-for-a-week-on-surface-laptop-ultra-its-not-a-macbook-pro-killer-but-something-much-weirder-and-wildly-powerful">I’ve been living with Nvidia’s RTX Spark for a week — it’s not a MacBook Pro killer but something much weirder and wildly powerful</a></li><li><a href="https://www.tomsguide.com/home/smart-home/apples-rumored-usd1-000-homeview-max-is-either-a-smart-home-revolution-or-a-terrifying-black-mirror-prop">At $1,000, Apple's rumored HomeView Max better do the dishes, too</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/macbooks/apple-pro-and-tell-event-rumors-oled-macbooks-m6-chips-and-why-you-shouldnt-buy-anything-today</link>
                                                                            <description>
                            <![CDATA[ Apple’s ‘Pro and Tell’ event is coming October 28. From OLED touch MacBook Pros to M6 iMacs, here is why you shouldn't buy any Apple gear today. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">74xdTTaDC3xq7ygNQgzZBM</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/Hsjk8j7e455GM6LaXcQai7-1920-80.png" type="image/png" length="0"></enclosure>
                                                                        <pubDate>Tue, 20 Oct 2026 10:06:09 +0000</pubDate>                                                                                                                                <updated>Tue, 20 Oct 2026 10:06:46 +0000</updated>
                                                                                                                                            <category><![CDATA[MacBooks]]></category>
                                                    <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Laptops]]></category>
                                                    <category><![CDATA[Tablets]]></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/png" url="https://cdn.mos.cms.futurecdn.net/Hsjk8j7e455GM6LaXcQai7-1920-80.png">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[apple pro and tell]]></media:description>                                                            <media:text><![CDATA[apple pro and tell]]></media:text>
                                <media:title type="plain"><![CDATA[apple pro and tell]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/Hsjk8j7e455GM6LaXcQai7-1920-80.png" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Apple cannot wait to <a href="https://www.tomsguide.com/computing/macbooks/pro-and-tell-we-just-got-apples-oct-28-event-invite-heres-what-to-expect">“pro and tell”</a> all next week, which if you’ve been following the rumor mill, is marketing speak for <em>we’re announcing new Macs and we’re going to enjoy the pun.</em></p><p>A deluge of leaks point to an <a href="https://www.tomsguide.com/computing/macbooks/apple-holding-event-oct-28-for-first-touchscreen-macbook-pro-what-we-knowhttps://www.tomsguide.com/computing/laptops/macbook-ultra-everything-we-know-so-far">OLED touchscreen MacBook Pro</a>, a new entry-level M6 MacBook Pro, M6 iMac and an <a href="https://www.tomsguide.com/computing/ipads/ipad-mini-8-latest-rumors">OLED iPad mini 8</a> — with announcements expected at an in-person media “experience” on Wednesday, October 28, and sales starting as soon as Friday, November 6.</p><p>Translation for anyone with a shopping cart open right now: <strong>close the tab</strong>.</p><h2 id="first-the-thing-you-actually-came-here-to-do">First, the thing you actually came here to do</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ViRGq3HUPCWmC4Nb9gGEhY" name="MacBook Pro 16-inch M5 Pro review-9" alt="MacBook Pro 16-inch M5 Pro on a desk" src="https://cdn.mos.cms.futurecdn.net/ViRGq3HUPCWmC4Nb9gGEhY-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>If you are considering buying a MacBook Pro, iMac or iPad mini in the next 30 days, stop. </p><p>You are standing in the exact spot where people have handed Apple full price for hardware that becomes last year’s model in literal days. Three separate outcomes favor you being patient:</p><ul><li><strong>You want the latest? Wait two weeks </strong>— the new machines are about to exist, and the OLED MacBook Pro is the biggest notebook upgrade Apple’s shipped in years.</li><li><strong>You want a bargain? Wait slightly longer </strong>— when Apple refreshes, the outgoing machines don’t vanish. They get discounted, and retailers will start clearing stock at genuine discounts within weeks.</li><li><strong>You need a laptop today? </strong>That’s fine, this advice has an escape hatch, and it’s at the bottom of this piece.</li></ul><p>Now, the fun part — what have you been waiting for.</p><h2 id="what-october-28-is-probably-going-to-bring">What October 28 is (probably) going to bring</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="qfCMo3LDQknqKEW8HHxsWK" name="MacBook Pro 14 2024 M4-16.jpg" alt="MacBook Pro 14-inch (2024, M4) shown open on a table" src="https://cdn.mos.cms.futurecdn.net/qfCMo3LDQknqKEW8HHxsWK-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Let’s start with the big one: the <strong>OLED touchscreen MacBook Pro. </strong>This redesigned prosumer notebook has been rumored for years, and it’s going to be the biggest change to Apple’s notebook lineup in years. </p><p>Outside of all that vivid OLED goodness, gorgeous contrast and easy-on-the-eyes HDR, this is a tectonic shift in the way you can actually interact with your Mac — taking notes from the iPad to bring touch to the conversation. If you’ve faithfully owned an M1 MacBook Pro, this is the upgrade you’ve been waiting for.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2735px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="wu5ytH8AAeBB4EP6xgad9C" name="MacBook Pro 14-inch M3 2023-19.jpg" alt="MacBook Pro 14-inch M3 on table" src="https://cdn.mos.cms.futurecdn.net/wu5ytH8AAeBB4EP6xgad9C-1920-80.jpg" mos="" align="middle" fullscreen="" width="2735" height="1538" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Then, there’s the new <strong>entry-level M6 MacBook Pro. </strong>The rumors seem to be aligning around this sharing the exact same 14-inch shell of the MacBook Pros you’ve seen over the past few years, but with that all-important silicon upgrade. </p><p>As we’ve found out from testing this base model over the past few years, it’s become clear that the “cheapest MacBook Pro” has always been the best-value Mac nobody noticed.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="oDjJMzuW4PS5kL9V72TCfL" name="iMac M4 (2024)-6.jpg" alt="Apple iMac M4 review unit on desk" src="https://cdn.mos.cms.futurecdn.net/oDjJMzuW4PS5kL9V72TCfL-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Next, the all-in-one looks set to get the silicon bump. The <strong>M6 iMac </strong>is less revolution, more the annual injection of “newer is faster,” to keep the all-in-one up-to-date for folks who would rather not think about towers, monitors or cable management.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="YtTeZBFoAfcadDoWMiJefJ" name="iPad mini 7-LIST1.jpg" alt="iPad mini 7" src="https://cdn.mos.cms.futurecdn.net/YtTeZBFoAfcadDoWMiJefJ-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>And finally, there’s the <strong>OLED iPad mini</strong> — which is, low key, the one I’m most excited for. I’ve loved the iPad mini for a while now, but that LCD display has always been the thorn in its side. Clearly, the mini’s been on borrowed time for two years; this is Apple saying it isn’t dead, it’s just been saving its energy.</p><h2 id="who-s-actually-safe-to-buy-now">Who’s actually safe to buy 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="4jDqEAp7SRsuScatLShMiH" name="MacBook-Pro-14-M2-Pro-LIST-2.jpg" alt="MacBook Pro 14-inch" src="https://cdn.mos.cms.futurecdn.net/4jDqEAp7SRsuScatLShMiH-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Playing both sides of the wallet is my job, so here’s the honest carve-out. <strong>If your laptop just died, your classes start this month, or you’re about to spend your rent money </strong>— buy what you need, today. </p><p>Any Mac on Apple’s current shelves is absurdly fast; your productivity is worth more than a speculative OLED panel, and the M4 MacBook Pro is still a monster.</p><p>What you should <em>not </em>do in a panic: buy the current MacBook Pro at full price as a “just in case” machine while your old one still works, which is how a lot of folks look when refresh cycles hit.</p><p>And if you’re holding a trade-in-eligible Mac: lock in your trade-in quote now or wait for the dust to settle, because trade-in allowances on older generations typically drop once new silicon is officially on the table.</p><h2 id="what-to-do-while-we-wait">What to do while we wait</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2247px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="AWm9bdpgxxSBL6VZbUNjQi" name="Apple-MBP-Event-Oct-26_LIST" alt="Apple Pro and Tell event" src="https://cdn.mos.cms.futurecdn.net/AWm9bdpgxxSBL6VZbUNjQi-1920-80.jpg" mos="" align="middle" fullscreen="" width="2247" height="1264" 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>Stay locked in on Tom’s Guide — we’ll update the moment Apple confirms or changes anything. We've received our invite to the October 28 event, and we can’t wait to see everything the Cupertino crew’s been working on!</p><p>On top of that, we’ll keep an eye on the prices of outgoing models the day they’re discounted, so you’ll know exactly when the discount is real. If the November 6 sale date is true, Black Friday collides with fresh discontinuations, and that is going to be the single best fortnight of the year for buying Macs.</p><p>The “Pro and Tell” pun may be a bit cringe, but the buying window is not.</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-wait-times-latest-updates-and-how-to-beat-apples-january-delay">iPhone Duo wait times — latest updates and how to beat Apple's January delay</a></li><li><a href="https://www.tomsguide.com/computing/cpus/ive-been-living-with-nvidias-rtx-spark-for-a-week-on-surface-laptop-ultra-its-not-a-macbook-pro-killer-but-something-much-weirder-and-wildly-powerful">I’ve been living with Nvidia’s RTX Spark for a week — it’s not a MacBook Pro killer but something much weirder and wildly powerful</a></li><li><a href="https://www.tomsguide.com/home/smart-home/apples-rumored-usd1-000-homeview-max-is-either-a-smart-home-revolution-or-a-terrifying-black-mirror-prop">At $1,000, Apple's rumored HomeView Max better do the dishes, too</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ The iPhone battery myth almost everyone believes, and why you can stop swiping away apps ]]></title>
                                                                                                <dc:content><![CDATA[ <p>You do it without thinking: swipe up, then flick, flick, flick until every app card is gone. It feels productive, like wiping down a counter, and you’re sure your battery will thank you.</p><p>It won’t. Force-closing your apps doesn’t save power. Done constantly, it makes your iPhone work harder and can drain your battery faster. I’ll admit I did this for years. But the habit millions of us swear by is based on a misunderstanding of how iOS actually works.</p><p>Here’s what’s really happening when you swipe an app away, and what to do instead if you want your battery to last. </p><h2 id="what-really-happens-when-you-leave-an-app">What really happens when you leave an app</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="sG3gmsP3Kq4fhmEr5wRTX4" name="iPhone 16-1.jpg" alt="Apple iPhone 16 held in the hand." src="https://cdn.mos.cms.futurecdn.net/sG3gmsP3Kq4fhmEr5wRTX4-1920-80.jpg" mos="" align="middle" fullscreen="" width="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 easy to picture your open apps like programs on a laptop: all running at once, all eating power. That’s not how an iPhone works.</p><p>When you go home or switch to another app, iOS gives the app a few seconds to finish what it was doing, then suspends it. The app stays in memory, paused where you left it, but it isn’t using the processor. That’s why it reopens instantly.</p><p>You don’t need to clear any of this yourself. When your phone needs more memory, iOS closes suspended apps on its own. The App Switcher is really just a list of apps you’ve used recently.</p><p>There are exceptions. Apps playing music, giving directions, handling a call or finishing an upload can keep running in the background. Some apps can also wake briefly to refresh their content, which you can switch off — more on that below. </p><h2 id="why-swiping-them-away-backfires">Why swiping them away backfires</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="6qCo5PvYBnpsT6keCZkVa5" name="iPhone 16-22.jpg" alt="Apple iPhone 16 held in the hand." src="https://cdn.mos.cms.futurecdn.net/6qCo5PvYBnpsT6keCZkVa5-1920-80.jpg" mos="" align="middle" fullscreen="" width="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 swipe an app away, you remove it from memory entirely. The next time you tap it, your iPhone has to start it from scratch: load it from storage, rebuild its screens and fetch fresh content.</p><p>That fresh start, called a cold launch, takes more work than resuming a suspended app. Once, you’d never notice. But, if you operate like how I used to and clear out Messages, Safari and Mail several times a day, your phone repeats that work over and over for no benefit.<strong> </strong></p><p><a href="https://support.apple.com/en-gb/109359"><strong>Apple’s own advice</strong></a><strong> is to force-close an app only if it has stopped responding</strong>.</p><h2 id="when-you-should-swipe-an-app-away">When you should swipe an app away</h2><p><strong>Force-closing is useful for troubleshooting</strong>. If an app freezes or stops loading, swiping it away and reopening it gives it a clean restart.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="vHjAd45PgPFbRr5LGNRDR4" name="iPhone 16.jpg" alt="Apple iPhone 16 held in the hand." src="https://cdn.mos.cms.futurecdn.net/vHjAd45PgPFbRr5LGNRDR4-1920-80.jpg" mos="" align="middle" fullscreen="" width="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 rest of the time, leave the App Switcher alone. If you want to cut background battery use, these steps help more.</p><ul><li>Turn off Background App Refresh for apps that don’t need it. <strong>Go to Settings, General, Background App Refresh and switch this off completely,</strong> or any apps you don’t need updating in the background.</li><li>Check which apps use your location. <strong>In Settings, Privacy & Security, and Location Services, set apps to "While Using the App" </strong>unless they need your location all the time.</li><li>See what’s actually using your battery.<strong> Head to Settings and Battery, then "View All Battery Usage"</strong> to see which apps are consuming the most power.</li></ul><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-X7D1Ke"></div>                            </div>                            <script src="https://kwizly.com/embed/X7D1Ke.js" async></script><p>Tethered to a charger by 2 PM? If you voted no, <strong>drop your iPhone model in the comments and tell us which app is eating through your battery the fastest</strong>.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide </span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/i-turned-off-this-hidden-ios-27-setting-and-instantly-fixed-my-iphones-battery-drain">I turned off this hidden iOS 27 setting and instantly fixed my iPhone’s battery drain</a></li><li><a href="https://www.tomsguide.com/phones/the-4-emergency-phone-tweaks-that-keep-your-battery-alive-in-a-power-outage">The 4 emergency phone tweaks that keep your battery alive in a power outage</a></li><li><a href="https://www.tomsguide.com/phones/ios-27-has-a-hidden-anti-scam-setting-heres-why-every-iphone-user-should-turn-it-on">iOS 27 has a hidden anti-scam setting — here’s why every iPhone user should turn it on</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/the-iphone-battery-myth-almost-everyone-believes-and-why-you-can-stop-swiping-away-apps</link>
                                                                            <description>
                            <![CDATA[ Think closing your iPhone apps saves battery? It doesn’t, and it can make your phone work harder. Here’s why, plus the settings that really help. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">ugit9qnF5wMSbancqZVcpX</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/tw24BitsDjrXLUcqMSKmf5-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 20 Oct 2026 07:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ kaycee.hill@futurenet.com (Kaycee Hill) ]]></author>                    <dc:creator><![CDATA[ Kaycee Hill ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/xHn6RmpEqg87cvtLwrBu9G-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/tw24BitsDjrXLUcqMSKmf5-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Apple iPhone 16 held in the hand.]]></media:description>                                                            <media:text><![CDATA[Apple iPhone 16 held in the hand.]]></media:text>
                                <media:title type="plain"><![CDATA[Apple iPhone 16 held in the hand.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/tw24BitsDjrXLUcqMSKmf5-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>You do it without thinking: swipe up, then flick, flick, flick until every app card is gone. It feels productive, like wiping down a counter, and you’re sure your battery will thank you.</p><p>It won’t. Force-closing your apps doesn’t save power. Done constantly, it makes your iPhone work harder and can drain your battery faster. I’ll admit I did this for years. But the habit millions of us swear by is based on a misunderstanding of how iOS actually works.</p><p>Here’s what’s really happening when you swipe an app away, and what to do instead if you want your battery to last. </p><h2 id="what-really-happens-when-you-leave-an-app">What really happens when you leave an app</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="sG3gmsP3Kq4fhmEr5wRTX4" name="iPhone 16-1.jpg" alt="Apple iPhone 16 held in the hand." src="https://cdn.mos.cms.futurecdn.net/sG3gmsP3Kq4fhmEr5wRTX4-1920-80.jpg" mos="" align="middle" fullscreen="" width="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 easy to picture your open apps like programs on a laptop: all running at once, all eating power. That’s not how an iPhone works.</p><p>When you go home or switch to another app, iOS gives the app a few seconds to finish what it was doing, then suspends it. The app stays in memory, paused where you left it, but it isn’t using the processor. That’s why it reopens instantly.</p><p>You don’t need to clear any of this yourself. When your phone needs more memory, iOS closes suspended apps on its own. The App Switcher is really just a list of apps you’ve used recently.</p><p>There are exceptions. Apps playing music, giving directions, handling a call or finishing an upload can keep running in the background. Some apps can also wake briefly to refresh their content, which you can switch off — more on that below. </p><h2 id="why-swiping-them-away-backfires">Why swiping them away backfires</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="6qCo5PvYBnpsT6keCZkVa5" name="iPhone 16-22.jpg" alt="Apple iPhone 16 held in the hand." src="https://cdn.mos.cms.futurecdn.net/6qCo5PvYBnpsT6keCZkVa5-1920-80.jpg" mos="" align="middle" fullscreen="" width="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 swipe an app away, you remove it from memory entirely. The next time you tap it, your iPhone has to start it from scratch: load it from storage, rebuild its screens and fetch fresh content.</p><p>That fresh start, called a cold launch, takes more work than resuming a suspended app. Once, you’d never notice. But, if you operate like how I used to and clear out Messages, Safari and Mail several times a day, your phone repeats that work over and over for no benefit.<strong> </strong></p><p><a href="https://support.apple.com/en-gb/109359"><strong>Apple’s own advice</strong></a><strong> is to force-close an app only if it has stopped responding</strong>.</p><h2 id="when-you-should-swipe-an-app-away">When you should swipe an app away</h2><p><strong>Force-closing is useful for troubleshooting</strong>. If an app freezes or stops loading, swiping it away and reopening it gives it a clean restart.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="vHjAd45PgPFbRr5LGNRDR4" name="iPhone 16.jpg" alt="Apple iPhone 16 held in the hand." src="https://cdn.mos.cms.futurecdn.net/vHjAd45PgPFbRr5LGNRDR4-1920-80.jpg" mos="" align="middle" fullscreen="" width="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 rest of the time, leave the App Switcher alone. If you want to cut background battery use, these steps help more.</p><ul><li>Turn off Background App Refresh for apps that don’t need it. <strong>Go to Settings, General, Background App Refresh and switch this off completely,</strong> or any apps you don’t need updating in the background.</li><li>Check which apps use your location. <strong>In Settings, Privacy & Security, and Location Services, set apps to "While Using the App" </strong>unless they need your location all the time.</li><li>See what’s actually using your battery.<strong> Head to Settings and Battery, then "View All Battery Usage"</strong> to see which apps are consuming the most power.</li></ul><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-X7D1Ke"></div>                            </div>                            <script src="https://kwizly.com/embed/X7D1Ke.js" async></script><p>Tethered to a charger by 2 PM? If you voted no, <strong>drop your iPhone model in the comments and tell us which app is eating through your battery the fastest</strong>.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide </span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/i-turned-off-this-hidden-ios-27-setting-and-instantly-fixed-my-iphones-battery-drain">I turned off this hidden iOS 27 setting and instantly fixed my iPhone’s battery drain</a></li><li><a href="https://www.tomsguide.com/phones/the-4-emergency-phone-tweaks-that-keep-your-battery-alive-in-a-power-outage">The 4 emergency phone tweaks that keep your battery alive in a power outage</a></li><li><a href="https://www.tomsguide.com/phones/ios-27-has-a-hidden-anti-scam-setting-heres-why-every-iphone-user-should-turn-it-on">iOS 27 has a hidden anti-scam setting — here’s why every iPhone user should turn it on</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ iPhone Duo wait times — latest updates and how to beat Apple's January delay ]]></title>
                                                                                                <dc:content><![CDATA[ <p>If you're hoping to pick up an <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> of your very own, you're going to have to wait. The foldable is technically on sale, but unless you managed to score a pre-order right away then you could be looking at a months-long wait before your unit actually arrives.</p><p> At the time of writing, it doesn't actually matter which iPhone Duo variant you want — they're all equally (albeit temporarily) sold out. That's the bad news, but the slightly better news is that you don't necessarily have to wait until 2027 to pick up one of your own. I don't mean getting gouged for a scalped unit, that's a complete waste of money. I mean shopping around at different retailers and carriers to see what options are available.</p><p>You won't be able to magically pick up an iPhone Duo tomorrow, but at the time of writing some units will be available before the end of the year — or several weeks before Apple expects to be able to fulfil new orders.</p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links</span></h3><ul><li><strong>T-Mobile: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/4089177/38171?subId1=hawk-custom-tracking&subId3=iPhoneDuo" target="_blank" rel="nofollow"><strong>up to $1,000 off w/ new line + unlimited </strong></a></li><li><strong>Verizon: </strong><a href="https://www.verizon.com/smartphones/apple-iphone-duo/?isMyPlanFlow=true" target="_blank" rel="nofollow"><strong>up to $1,000 off w/ trade-in + unlimited</strong></a><strong></strong></li><li><strong>AT&T: </strong><a href="https://www.att.com/buy/phones/apple-iphone-duo.html" target="_blank" rel="nofollow"><strong>up to $1,200 off w/ new line + trade-in</strong></a></li><li><strong>Xfinity Mobile: </strong><a href="https://www.xfinity.com/learn/deals/mobile" target="_blank" rel="nofollow"><strong>up to $1,000 off w/ trade + unlimited</strong></a></li><li><strong>Red Pocket: </strong><a href="https://www.redpocket.com/shop/iphone/apple-iphone-duo-unlocked" target="_blank" rel="nofollow"><strong>$100 off + data from $10/month</strong></a></li></ul><h3 class="article-body__section" id="section-iphone-duo-availability-updated-october-23"><span>iPhone Duo Availability (Updated October 23)</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4656px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Q9CmG4bSftigAEdPtH3Qqd" name="iPhone Duo-LIST1" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/Q9CmG4bSftigAEdPtH3Qqd-1920-80.jpg" mos="" align="middle" fullscreen="" width="4656" height="2619" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Apple</strong></p></td><td  ><p><strong>AT&T</strong></p></td><td  ><p><strong>T-Mobile</strong></p></td><td  ><p><strong>Verizon</strong></p></td><td  ><p><strong>Best Buy</strong></p></td><td  ><p><strong>Walmart</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Star White (256GB)</strong></p></td><td  ><p>Jan 22</p></td><td  ><p>Dec 22</p></td><td  ><p>Dec 31 - Jan 6</p></td><td  ><p>Nov 30 - Dec 18</p></td><td  ><p>Dec 22</p></td><td  ><p>Out of Stock</p></td></tr><tr><td class="firstcol " ><p><strong>Star White (512GB)</strong></p></td><td  ><p>Jan 22</p></td><td  ><p>Dec 22</p></td><td  ><p>Dec 16 - Dec 22</p></td><td  ><p>Nov 30 - Dec 18</p></td><td  ><p>Dec 22</p></td><td  ><p>Out of Stock</p></td></tr><tr><td class="firstcol " ><p><strong>Star White (1TB)</strong></p></td><td  ><p>Jan 22</p></td><td  ><p>Dec 22</p></td><td  ><p>Dec 16 - Dec 22</p></td><td  ><p>Nov 30 - Dec 18</p></td><td  ><p>Dec 22</p></td><td  ><p>Out of Stock</p></td></tr><tr><td class="firstcol " ><p><strong>Star White (2TB)</strong></p></td><td  ><p>Jan 22</p></td><td  ><p>Dec 22</p></td><td  ><p>Dec 16 - Dec 22</p></td><td  ><p>Nov 30 - Dec 18</p></td><td  ><p>Dec 22</p></td><td  ><p>Out of Stock</p></td></tr><tr><td class="firstcol " ><p><strong>Night Sky (256GB)</strong></p></td><td  ><p>Jan 22</p></td><td  ><p>Dec 22</p></td><td  ><p>Dec 16 - Dec 22</p></td><td  ><p>Nov 30 - Dec 18</p></td><td  ><p>Dec 22</p></td><td  ><p>Out of Stock</p></td></tr><tr><td class="firstcol " ><p><strong>Night Sky (512GB)</strong></p></td><td  ><p>Jan 22</p></td><td  ><p>Dec 22</p></td><td  ><p>Dec 16 - Dec 22</p></td><td  ><p>Nov 30 - Dec 18</p></td><td  ><p>Dec 22</p></td><td  ><p>Out of Stock</p></td></tr><tr><td class="firstcol " ><p><strong>Night Sky (1TB)</strong></p></td><td  ><p>Jan 22</p></td><td  ><p>Dec 22</p></td><td  ><p>Dec 16 - Dec 22</p></td><td  ><p>Nov 30 - Dec 18</p></td><td  ><p>Dec 22</p></td><td  ><p>Out of Stock</p></td></tr><tr><td class="firstcol " ><p><strong>Night Sky (2TB)</strong></p></td><td  ><p>Jan 22</p></td><td  ><p>Dec 22</p></td><td  ><p>Dec 16 - Dec 22</p></td><td  ><p>Nov 30 - Dec 18</p></td><td  ><p>Dec 22</p></td><td  ><p>Out of Stock</p></td></tr></tbody></table></div><p>As you can see, <a href="https://www.apple.com/shop/buy-iphone/iphone-duo" target="_blank" rel="nofollow">Apple</a> is completely out of iPhone Duo units and isn't expecting to start shipping more until late January — though delivery estimates have been reduced by a few days across the board and <a href="https://www.tomsguide.com/phones/iphones/apple-just-bumped-up-some-iphone-duo-delivery-dates-here-is-how-to-check-yours">some pre-orders will be arriving sooner.</a></p><p>It's also been confirmed that Apple has implemented a <a href="https://www.macrumors.com/2026/10/19/iphone-duo-order-limit-us/" target="_blank">two device limit</a> on all Duo pre-orders. It's not  entirely clear whether this has always been the case, or if Apple realized this was necessary after the fact. Which should help avoid pre-order waits getting too extreme.</p><p>Apple is pretty much your only option when it comes to buying an unlocked iPhone Duos for the time being. However, if you are willing to lock your device down to a specific carrier, you can pick one up a lot earlier.</p><p>Both <a href="https://www.att.com/buy/phones/apple-iphone-duo-2tb-night-sky.html" target="_blank" rel="nofollow">AT&T</a> and <a href="https://www.verizon.com/smartphones/apple-iphone-duo/?sku=sku6053346" target="_blank" rel="nofollow">Verizon</a> currently promise some iPhone Duo units will be available in mid-December, while <a href="https://www.t-mobile.com/cell-phone/apple-iphone-duo?sku=195951405513" target="_blank" rel="nofollow">T-Mobile</a> is expected to have stock available from late December and into January depending on the storage configuration. </p><p><a href="https://www.bestbuy.com/product/apple-iphone-duo-256gb-night-sky-verizon/JCQ6HQT436" target="_blank" rel="nofollow">Best Buy</a> is also expecting to deliver all storage variants in late December, and you will be forced to lock your phone to either AT&T or Verizon. Sadly it doesn't matter which carrier you choose, they're all due no earlier than December 22.</p><p>Sadly, <a href="https://www.walmart.com/ip/Verizon-iPhone-Duo-256GB-Star-White/21018956668?classType=VARIANT&from=/search" target="_blank" rel="nofollow">Walmart</a> is totally out of stock at the time of writing, with no mention of when iPhone Duo units might be available to ship.</p><div class="product"><a data-dimension112="b99614a0-cbff-11f1-a975-05784c087858" data-action="Deal Block" data-label="iPhone Duo: up to $1,000 off w/ trade-in + unlimited @ T-Mobile" data-dimension48="iPhone Duo: up to $1,000 off w/ trade-in + unlimited @ T-Mobile" href="https://tmobilepostpaid.pxf.io/c/1943169/4089177/38171?subId1=hawk-custom-tracking&subId3=iPhoneDuo" 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:50.00%;"><img id="Y26QJd7Ff7aeQmTHuW8nCP" name="NEW T-Mobile Logo" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/Y26QJd7Ff7aeQmTHuW8nCP-1920-80.png" mos="" align="middle" fullscreen="" width="600" height="300" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>iPhone Duo: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/4089177/38171?subId1=hawk-custom-tracking&subId3=iPhoneDuo" target="_blank" rel="nofollow" data-dimension112="b99614a0-cbff-11f1-a975-05784c087858" data-action="Deal Block" data-label="iPhone Duo: up to $1,000 off w/ trade-in + unlimited @ T-Mobile" data-dimension48="iPhone Duo: up to $1,000 off w/ trade-in + unlimited @ T-Mobile" data-dimension25=""><strong>up to $1,000 off w/ trade-in + unlimited @ T-Mobile</strong></a><br>T-Mobile is knocking up to $1,000 off the iPhone Duo when you switch and bring your number or when you trade-in an eligible phone and sign up a qualifying plan. Most models will shop sometime in December, but select Night Sky models are expected to ship in November. <a class="view-deal button" href="https://tmobilepostpaid.pxf.io/c/1943169/4089177/38171?subId1=hawk-custom-tracking&subId3=iPhoneDuo" target="_blank" rel="nofollow" data-dimension112="b99614a0-cbff-11f1-a975-05784c087858" data-action="Deal Block" data-label="iPhone Duo: up to $1,000 off w/ trade-in + unlimited @ T-Mobile" data-dimension48="iPhone Duo: up to $1,000 off w/ trade-in + unlimited @ T-Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="b9961554-cbff-11f1-84a8-636462b2e9d7" data-action="Deal Block" data-label="iPhone Duo: up to $1,000 off w/ new line + trade-in @ Verizon" data-dimension48="iPhone Duo: up to $1,000 off w/ new line + trade-in @ Verizon" href="https://www.verizon.com/smartphones/apple-iphone-duo/?isMyPlanFlow=true" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:400px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="bhuNLVbkmhJxHuYhoz9cuY" name="verizon-redesign-thumb.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/bhuNLVbkmhJxHuYhoz9cuY-1920-80.jpg" mos="" align="middle" fullscreen="" width="400" height="400" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>iPhone Duo: </strong><a href="https://www.verizon.com/smartphones/apple-iphone-duo/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="b9961554-cbff-11f1-84a8-636462b2e9d7" data-action="Deal Block" data-label="iPhone Duo: up to $1,000 off w/ new line + trade-in @ Verizon" data-dimension48="iPhone Duo: up to $1,000 off w/ new line + trade-in @ Verizon" data-dimension25=""><strong>up to $1,000 off w/ new line + trade-in @ Verizon</strong></a><br>Verizon will take up to $1,000 off your iPhone Duo purchase when you open a new line, trade-in an old phone, and open an eligible unlimited data plan. Most models are slated to ship in early December. <a class="view-deal button" href="https://www.verizon.com/smartphones/apple-iphone-duo/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="b9961554-cbff-11f1-84a8-636462b2e9d7" data-action="Deal Block" data-label="iPhone Duo: up to $1,000 off w/ new line + trade-in @ Verizon" data-dimension48="iPhone Duo: up to $1,000 off w/ new line + trade-in @ Verizon" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="b99615cc-cbff-11f1-8938-c91ab9210b6e" data-action="Deal Block" data-label="iPhone Duo: up to $1,200 off w/ trade-in @ AT&amp;T" data-dimension48="iPhone Duo: up to $1,200 off w/ trade-in @ AT&amp;T" href="https://www.att.com/buy/phones/apple-iphone-duo.html" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:225px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="o9PdShQsgAk95AN7C5UMNR" name="AT&T Logo.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/o9PdShQsgAk95AN7C5UMNR-1920-80.jpeg" mos="" align="middle" fullscreen="" width="225" height="225" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>iPhone Duo: </strong><a href="https://www.att.com/buy/phones/apple-iphone-duo.html" target="_blank" rel="nofollow" data-dimension112="b99615cc-cbff-11f1-8938-c91ab9210b6e" data-action="Deal Block" data-label="iPhone Duo: up to $1,200 off w/ trade-in @ AT&amp;T" data-dimension48="iPhone Duo: up to $1,200 off w/ trade-in @ AT&amp;T" data-dimension25=""><strong>up to $1,200 off w/ trade-in @ AT&T</strong></a><br>New and existing AT&T customers can get up to $1,200 off the iPhone Duo with an eligible trade-in. You'll also need to sign up to an eligible unlimited data plan to get this deal. Plus, customers who switch to AT&T get up to $800 to pay off their current device. AT&T's iPhones are slated to ship the first week of December. <a class="view-deal button" href="https://www.att.com/buy/phones/apple-iphone-duo.html" target="_blank" rel="nofollow" data-dimension112="b99615cc-cbff-11f1-8938-c91ab9210b6e" data-action="Deal Block" data-label="iPhone Duo: up to $1,200 off w/ trade-in @ AT&amp;T" data-dimension48="iPhone Duo: up to $1,200 off w/ trade-in @ AT&amp;T" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="b9961644-cbff-11f1-9103-e7dc4771ed59" data-action="Deal Block" data-label="iPhone Duo: up to $1,000 off w/ trade-in @ Xfinity Mobile" data-dimension48="iPhone Duo: up to $1,000 off w/ trade-in @ Xfinity Mobile" href="https://www.xfinity.com/learn/deals/mobile" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:960px;"><p class="vanilla-image-block" style="padding-top:56.15%;"><img id="ukXfYk4wgducEMDS2iCCjY" name="Xfinity Mobile Logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ukXfYk4wgducEMDS2iCCjY-1920-80.jpg" mos="" align="middle" fullscreen="" width="960" height="539" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>iPhone Duo: </strong><a href="https://www.xfinity.com/learn/deals/mobile" target="_blank" rel="nofollow" data-dimension112="b9961644-cbff-11f1-9103-e7dc4771ed59" data-action="Deal Block" data-label="iPhone Duo: up to $1,000 off w/ trade-in @ Xfinity Mobile" data-dimension48="iPhone Duo: 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>New Xfinity Mobile Plus customers and existing Diamond members with Mobile Plus will get up to $1,000 off their iPhone Duo purchase. Customers on legacy Premium Unlimited plans will also be able to take advantage of this offer. Select iPhone Duo models will arrive as early as November 6. <a class="view-deal button" href="https://www.xfinity.com/learn/deals/mobile" target="_blank" rel="nofollow" data-dimension112="b9961644-cbff-11f1-9103-e7dc4771ed59" data-action="Deal Block" data-label="iPhone Duo: up to $1,000 off w/ trade-in @ Xfinity Mobile" data-dimension48="iPhone Duo: up to $1,000 off w/ trade-in @ Xfinity Mobile" data-dimension25="">View Deal</a></p></div><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-O6y7AW"></div>                            </div>                            <script src="https://kwizly.com/embed/O6y7AW.js" async></script><h3 class="article-body__section" id="section-iphone-duo-uk-availability-updated-october-23"><span>iPhone Duo UK Availability (Updated October 23)</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4356px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="xTigbirKk6eHPbe3d35Nod" name="iPhone Duo-LIST2" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/xTigbirKk6eHPbe3d35Nod-1920-80.jpg" mos="" align="middle" fullscreen="" width="4356" height="2450" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Apple</strong></p></td><td  ><p><strong>EE</strong></p></td><td  ><p><strong>O2</strong></p></td><td  ><p><strong>Three</strong></p></td><td  ><p><strong>Vodafone</strong></p></td><td  ><p><strong>Carphone Warehouse</strong></p></td><td  ><p><strong>Argos</strong></p></td><td  ><p><strong>Currys</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Star White (256GB)</strong></p></td><td  ><p>Jan 22</p></td><td  ><p>"More than 28 days"</p></td><td  ><p>"More than 4 weeks"</p></td><td  ><p>Jan 20</p></td><td  ><p>13-14 weeks</p></td><td  ><p>Jan 7</p></td><td  ><p>Out of Stock</p></td><td  ><p>Out of Stock</p></td></tr><tr><td class="firstcol " ><p><strong>Star White (512GB)</strong></p></td><td  ><p>Jan 22</p></td><td  ><p>"More than 28 days"</p></td><td  ><p>"More than 4 weeks"</p></td><td  ><p>Jan 20</p></td><td  ><p>13-14 weeks</p></td><td  ><p>Jan 7</p></td><td  ><p>Out of Stock</p></td><td  ><p>Out of Stock</p></td></tr><tr><td class="firstcol " ><p><strong>Star White (1TB)</strong></p></td><td  ><p>Jan 22</p></td><td  ><p>"More than 28 days"</p></td><td  ><p>"More than 4 weeks"</p></td><td  ><p>Jan 20</p></td><td  ><p>13-14 weeks</p></td><td  ><p>Jan 7</p></td><td  ><p>Out of Stock</p></td><td  ><p>Out of Stock</p></td></tr><tr><td class="firstcol " ><p><strong>Star White (2TB)</strong></p></td><td  ><p>Jan 22</p></td><td  ><p>"More than 28 days"</p></td><td  ><p>"More than 4 weeks"</p></td><td  ><p>Jan 20</p></td><td  ><p>13-14 weeks</p></td><td  ><p>Jan 7</p></td><td  ><p>Out of Stock</p></td><td  ><p>Out of Stock</p></td></tr><tr><td class="firstcol " ><p><strong>Night Sky (256GB)</strong></p></td><td  ><p>Jan 22</p></td><td  ><p>"More than 28 days"</p></td><td  ><p>"More than 4 weeks"</p></td><td  ><p>Jan 20</p></td><td  ><p>13-14 weeks</p></td><td  ><p>Jan 7</p></td><td  ><p>Out of Stock</p></td><td  ><p>Out of Stock</p></td></tr><tr><td class="firstcol " ><p><strong>Night Sky (512GB)</strong></p></td><td  ><p>Jan 22</p></td><td  ><p>"More than 28 days"</p></td><td  ><p>"More than 4 weeks"</p></td><td  ><p>Jan 20</p></td><td  ><p>13-14 weeks</p></td><td  ><p>Jan 7</p></td><td  ><p>Out of Stock</p></td><td  ><p>Out of Stock</p></td></tr><tr><td class="firstcol " ><p><strong>Night Sky (1TB)</strong></p></td><td  ><p>Jan 22</p></td><td  ><p>"More than 28 days"</p></td><td  ><p>"More than 4 weeks"</p></td><td  ><p>Jan 20</p></td><td  ><p>13-14 weeks</p></td><td  ><p>Jan 7</p></td><td  ><p>Out of Stock</p></td><td  ><p>Out of Stock</p></td></tr><tr><td class="firstcol " ><p><strong>Night Sky (2TB)</strong></p></td><td  ><p>Jan 22</p></td><td  ><p>"More than 28 days"</p></td><td  ><p>"More than 4 weeks"</p></td><td  ><p>Jan 20</p></td><td  ><p>13-14 weeks</p></td><td  ><p>Jan 7</p></td><td  ><p>Out of Stock</p></td><td  ><p>Out of Stock</p></td></tr></tbody></table></div><p><a href="https://www.apple.com/uk/shop/buy-iphone/iphone-duo" target="_blank" rel="nofollow">iPhone Duo availability in the U.K.</a> is pretty dire, and it's not looking good for those of you that will want to get your hands on one. A pre-Christmas delivery is going to be borderline impossible, especially since Apple is out of units until January 22, while both <a href="https://www.argos.co.uk/product/9843055" target="_blank" rel="nofollow">Argos </a>and <a href="https://www.currys.co.uk/products/apple-iphone-duo-256-gb-star-white-10310338.html" target="_blank" rel="nofollow">Currys</a> are completely sold out. <a href="https://www.carphonewarehouse.com/apple-iphone-duo-1tb-night-sky?" target="_blank" rel="nofollow">Carphone Warehouse</a> is out of stock until January 7.</p><p>When it comes to mobile networks, <a href="https://www.three.co.uk/shop/phones/apple-iphone-duo" target="_blank" rel="nofollow">Three </a>has made it clear it won't be getting more iPhone Duos until January 20. <a href="https://www.vodafone.co.uk/mobile/pay-monthly-contracts/apple/iphone-duo" target="_blank" rel="nofollow">Vodafone </a> promises a 13-14 week delivery window, which takes us to January 20. </p><p>Meanwhile <a href="https://ee.co.uk/mobile/pay-monthly-phones-gallery/iphone-duo-details?" target="_blank" rel="nofollow">EE </a>and <a href="https://www.o2.co.uk/shop/apple/iphone-duo/mk2e4qn-a" target="_blank" rel="nofollow">O2</a> have been far less helpful, giving very vague details about how deliveries will happen more than 4 weeks into the future. This could mean anything from late November to this time next year for all we know.</p><h3 class="article-body__section" id="section-can-i-just-go-to-the-apple-store"><span>Can I just go to the Apple Store?</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="UfsgdagGx97Tu2BSXw2yy7" name="GettyImages-2226561632" alt="apple store" src="https://cdn.mos.cms.futurecdn.net/UfsgdagGx97Tu2BSXw2yy7-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Agoes Rudianto/NurPhoto via Getty Images)</span></figcaption></figure><p>Apple confirmed that <a href="https://www.tomsguide.com/phones/iphones/couldnt-get-an-iphone-duo-for-launch-day-your-local-apple-store-may-have-some-in-stock-tomorrow-but-only-in-limited-numbers">Apple Stores would have a "limited" amount of iPhone Duo stock on launch day</a>, but we didn't expect that would last very long. At the moment we don't know if and when Apple Stores will get hold of more iPhone Suos, but given the extreme demand online we don't expect them to be available for in-person purchase anytime soon.</p><p>Apple has confirmed that the in-store pickup option will be returning to the Apple website on October 24. Not only does that mean you should be able to see if any Apple Store in your vicinity have iPhone Duos in stock, it's likely this will give you the opportunity to reserve a unit to save any disappointment when you actually get there.</p><p>However, it's unclear how effective this will be at getting you an unlocked iPhone before January.</p><h3 class="article-body__section" id="section-what-to-do-if-you-can-t-grab-an-iphone-duo-this-year"><span>What to do if you can't grab an iPhone Duo this year?</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5236px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="DdfZBhuhYSV4kGWEe54Wvd" name="iPhone Duo-1" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/DdfZBhuhYSV4kGWEe54Wvd-1920-80.jpg" mos="" align="middle" fullscreen="" width="5236" height="2945" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The good news is that those of you that have picked up iPhone Duo pre-orders from Apple may have noticed that your <a href="https://www.tomsguide.com/phones/iphones/apple-just-bumped-up-some-iphone-duo-delivery-dates-here-is-how-to-check-yours">delivery estimate has actually decreased</a> over the past few days. It's unclear whether is happening everywhere, but the fact that Apple is adjusting its delivery estimates does bode well.</p><p>One thing you should also note is that Apple operates a two-week return policy. It's possible that some of the Duo units that are shipped to customers on October 23 will be returned, either because someone decided they didn't want it anymore or because they were purchased by resellers who couldn't sell their stock. </p><p>That could lead to a trickle of Duo units being recirculated from the returns department and back out to other customers — especially if they're unopened. We can't predict how much of an impact this will have on wait times, though, and it will likely differ from region to region.</p><p>The last thing you should do is resort to <a href="https://www.tomsguide.com/phones/iphones/apple-increases-iphone-duo-production-by-30-percent-heres-what-that-means-for-you">buying from scalpers and resellers,</a> regardless of where they may be selling. You'll end up paying an overinflated price for a phone that will be back in stock in the near future, and all you'll gain is a few extra months of time. Apple wants to get these to you as soon as possible, so don't waste your money.</p><p>Finally, if you just want a foldable and don't have your heart set on an iPhone Duo, <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-is-impossible-to-buy-right-now-but-these-6-alternatives-are-available-right-now">you can always try out one of these six alternatives</a>. They're Android phones, but given how many brands love to mimic iOS, you may not notice much difference.</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/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/iphone-duo-wait-times-latest-updates-and-how-to-beat-apples-january-delay</link>
                                                                            <description>
                            <![CDATA[ You're not getting an iPhone Duo tomorrow, but you may not have to wait until January either. Here are the current wait times at major retailers and carriers. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">T96M7CtXs8YpHmy8zWCGt8</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/JvujTtKZVT9EXJzzqh9FHV-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 20 Oct 2026 04:30:00 +0000</pubDate>                                                                                                                                <updated>Fri, 23 Oct 2026 13:48:40 +0000</updated>
                                                                                                                                            <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f-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/JvujTtKZVT9EXJzzqh9FHV-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&amp;#39;s Guide / Jeff Parsons]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPhone Duo hands-on pictures]]></media:description>                                                            <media:text><![CDATA[iPhone Duo hands-on pictures]]></media:text>
                                <media:title type="plain"><![CDATA[iPhone Duo hands-on pictures]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/JvujTtKZVT9EXJzzqh9FHV-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>If you're hoping to pick up an <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> of your very own, you're going to have to wait. The foldable is technically on sale, but unless you managed to score a pre-order right away then you could be looking at a months-long wait before your unit actually arrives.</p><p> At the time of writing, it doesn't actually matter which iPhone Duo variant you want — they're all equally (albeit temporarily) sold out. That's the bad news, but the slightly better news is that you don't necessarily have to wait until 2027 to pick up one of your own. I don't mean getting gouged for a scalped unit, that's a complete waste of money. I mean shopping around at different retailers and carriers to see what options are available.</p><p>You won't be able to magically pick up an iPhone Duo tomorrow, but at the time of writing some units will be available before the end of the year — or several weeks before Apple expects to be able to fulfil new orders.</p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links</span></h3><ul><li><strong>T-Mobile: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/4089177/38171?subId1=hawk-custom-tracking&subId3=iPhoneDuo" target="_blank" rel="nofollow"><strong>up to $1,000 off w/ new line + unlimited </strong></a></li><li><strong>Verizon: </strong><a href="https://www.verizon.com/smartphones/apple-iphone-duo/?isMyPlanFlow=true" target="_blank" rel="nofollow"><strong>up to $1,000 off w/ trade-in + unlimited</strong></a><strong></strong></li><li><strong>AT&T: </strong><a href="https://www.att.com/buy/phones/apple-iphone-duo.html" target="_blank" rel="nofollow"><strong>up to $1,200 off w/ new line + trade-in</strong></a></li><li><strong>Xfinity Mobile: </strong><a href="https://www.xfinity.com/learn/deals/mobile" target="_blank" rel="nofollow"><strong>up to $1,000 off w/ trade + unlimited</strong></a></li><li><strong>Red Pocket: </strong><a href="https://www.redpocket.com/shop/iphone/apple-iphone-duo-unlocked" target="_blank" rel="nofollow"><strong>$100 off + data from $10/month</strong></a></li></ul><h3 class="article-body__section" id="section-iphone-duo-availability-updated-october-23"><span>iPhone Duo Availability (Updated October 23)</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4656px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Q9CmG4bSftigAEdPtH3Qqd" name="iPhone Duo-LIST1" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/Q9CmG4bSftigAEdPtH3Qqd-1920-80.jpg" mos="" align="middle" fullscreen="" width="4656" height="2619" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Apple</strong></p></td><td  ><p><strong>AT&T</strong></p></td><td  ><p><strong>T-Mobile</strong></p></td><td  ><p><strong>Verizon</strong></p></td><td  ><p><strong>Best Buy</strong></p></td><td  ><p><strong>Walmart</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Star White (256GB)</strong></p></td><td  ><p>Jan 22</p></td><td  ><p>Dec 22</p></td><td  ><p>Dec 31 - Jan 6</p></td><td  ><p>Nov 30 - Dec 18</p></td><td  ><p>Dec 22</p></td><td  ><p>Out of Stock</p></td></tr><tr><td class="firstcol " ><p><strong>Star White (512GB)</strong></p></td><td  ><p>Jan 22</p></td><td  ><p>Dec 22</p></td><td  ><p>Dec 16 - Dec 22</p></td><td  ><p>Nov 30 - Dec 18</p></td><td  ><p>Dec 22</p></td><td  ><p>Out of Stock</p></td></tr><tr><td class="firstcol " ><p><strong>Star White (1TB)</strong></p></td><td  ><p>Jan 22</p></td><td  ><p>Dec 22</p></td><td  ><p>Dec 16 - Dec 22</p></td><td  ><p>Nov 30 - Dec 18</p></td><td  ><p>Dec 22</p></td><td  ><p>Out of Stock</p></td></tr><tr><td class="firstcol " ><p><strong>Star White (2TB)</strong></p></td><td  ><p>Jan 22</p></td><td  ><p>Dec 22</p></td><td  ><p>Dec 16 - Dec 22</p></td><td  ><p>Nov 30 - Dec 18</p></td><td  ><p>Dec 22</p></td><td  ><p>Out of Stock</p></td></tr><tr><td class="firstcol " ><p><strong>Night Sky (256GB)</strong></p></td><td  ><p>Jan 22</p></td><td  ><p>Dec 22</p></td><td  ><p>Dec 16 - Dec 22</p></td><td  ><p>Nov 30 - Dec 18</p></td><td  ><p>Dec 22</p></td><td  ><p>Out of Stock</p></td></tr><tr><td class="firstcol " ><p><strong>Night Sky (512GB)</strong></p></td><td  ><p>Jan 22</p></td><td  ><p>Dec 22</p></td><td  ><p>Dec 16 - Dec 22</p></td><td  ><p>Nov 30 - Dec 18</p></td><td  ><p>Dec 22</p></td><td  ><p>Out of Stock</p></td></tr><tr><td class="firstcol " ><p><strong>Night Sky (1TB)</strong></p></td><td  ><p>Jan 22</p></td><td  ><p>Dec 22</p></td><td  ><p>Dec 16 - Dec 22</p></td><td  ><p>Nov 30 - Dec 18</p></td><td  ><p>Dec 22</p></td><td  ><p>Out of Stock</p></td></tr><tr><td class="firstcol " ><p><strong>Night Sky (2TB)</strong></p></td><td  ><p>Jan 22</p></td><td  ><p>Dec 22</p></td><td  ><p>Dec 16 - Dec 22</p></td><td  ><p>Nov 30 - Dec 18</p></td><td  ><p>Dec 22</p></td><td  ><p>Out of Stock</p></td></tr></tbody></table></div><p>As you can see, <a href="https://www.apple.com/shop/buy-iphone/iphone-duo" target="_blank" rel="nofollow">Apple</a> is completely out of iPhone Duo units and isn't expecting to start shipping more until late January — though delivery estimates have been reduced by a few days across the board and <a href="https://www.tomsguide.com/phones/iphones/apple-just-bumped-up-some-iphone-duo-delivery-dates-here-is-how-to-check-yours">some pre-orders will be arriving sooner.</a></p><p>It's also been confirmed that Apple has implemented a <a href="https://www.macrumors.com/2026/10/19/iphone-duo-order-limit-us/" target="_blank">two device limit</a> on all Duo pre-orders. It's not  entirely clear whether this has always been the case, or if Apple realized this was necessary after the fact. Which should help avoid pre-order waits getting too extreme.</p><p>Apple is pretty much your only option when it comes to buying an unlocked iPhone Duos for the time being. However, if you are willing to lock your device down to a specific carrier, you can pick one up a lot earlier.</p><p>Both <a href="https://www.att.com/buy/phones/apple-iphone-duo-2tb-night-sky.html" target="_blank" rel="nofollow">AT&T</a> and <a href="https://www.verizon.com/smartphones/apple-iphone-duo/?sku=sku6053346" target="_blank" rel="nofollow">Verizon</a> currently promise some iPhone Duo units will be available in mid-December, while <a href="https://www.t-mobile.com/cell-phone/apple-iphone-duo?sku=195951405513" target="_blank" rel="nofollow">T-Mobile</a> is expected to have stock available from late December and into January depending on the storage configuration. </p><p><a href="https://www.bestbuy.com/product/apple-iphone-duo-256gb-night-sky-verizon/JCQ6HQT436" target="_blank" rel="nofollow">Best Buy</a> is also expecting to deliver all storage variants in late December, and you will be forced to lock your phone to either AT&T or Verizon. Sadly it doesn't matter which carrier you choose, they're all due no earlier than December 22.</p><p>Sadly, <a href="https://www.walmart.com/ip/Verizon-iPhone-Duo-256GB-Star-White/21018956668?classType=VARIANT&from=/search" target="_blank" rel="nofollow">Walmart</a> is totally out of stock at the time of writing, with no mention of when iPhone Duo units might be available to ship.</p><div class="product"><a data-dimension112="b99614a0-cbff-11f1-a975-05784c087858" data-action="Deal Block" data-label="iPhone Duo: up to $1,000 off w/ trade-in + unlimited @ T-Mobile" data-dimension48="iPhone Duo: up to $1,000 off w/ trade-in + unlimited @ T-Mobile" href="https://tmobilepostpaid.pxf.io/c/1943169/4089177/38171?subId1=hawk-custom-tracking&subId3=iPhoneDuo" 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:50.00%;"><img id="Y26QJd7Ff7aeQmTHuW8nCP" name="NEW T-Mobile Logo" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/Y26QJd7Ff7aeQmTHuW8nCP-1920-80.png" mos="" align="middle" fullscreen="" width="600" height="300" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>iPhone Duo: </strong><a href="https://tmobilepostpaid.pxf.io/c/1943169/4089177/38171?subId1=hawk-custom-tracking&subId3=iPhoneDuo" target="_blank" rel="nofollow" data-dimension112="b99614a0-cbff-11f1-a975-05784c087858" data-action="Deal Block" data-label="iPhone Duo: up to $1,000 off w/ trade-in + unlimited @ T-Mobile" data-dimension48="iPhone Duo: up to $1,000 off w/ trade-in + unlimited @ T-Mobile" data-dimension25=""><strong>up to $1,000 off w/ trade-in + unlimited @ T-Mobile</strong></a><br>T-Mobile is knocking up to $1,000 off the iPhone Duo when you switch and bring your number or when you trade-in an eligible phone and sign up a qualifying plan. Most models will shop sometime in December, but select Night Sky models are expected to ship in November. <a class="view-deal button" href="https://tmobilepostpaid.pxf.io/c/1943169/4089177/38171?subId1=hawk-custom-tracking&subId3=iPhoneDuo" target="_blank" rel="nofollow" data-dimension112="b99614a0-cbff-11f1-a975-05784c087858" data-action="Deal Block" data-label="iPhone Duo: up to $1,000 off w/ trade-in + unlimited @ T-Mobile" data-dimension48="iPhone Duo: up to $1,000 off w/ trade-in + unlimited @ T-Mobile" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="b9961554-cbff-11f1-84a8-636462b2e9d7" data-action="Deal Block" data-label="iPhone Duo: up to $1,000 off w/ new line + trade-in @ Verizon" data-dimension48="iPhone Duo: up to $1,000 off w/ new line + trade-in @ Verizon" href="https://www.verizon.com/smartphones/apple-iphone-duo/?isMyPlanFlow=true" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:400px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="bhuNLVbkmhJxHuYhoz9cuY" name="verizon-redesign-thumb.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/bhuNLVbkmhJxHuYhoz9cuY-1920-80.jpg" mos="" align="middle" fullscreen="" width="400" height="400" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>iPhone Duo: </strong><a href="https://www.verizon.com/smartphones/apple-iphone-duo/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="b9961554-cbff-11f1-84a8-636462b2e9d7" data-action="Deal Block" data-label="iPhone Duo: up to $1,000 off w/ new line + trade-in @ Verizon" data-dimension48="iPhone Duo: up to $1,000 off w/ new line + trade-in @ Verizon" data-dimension25=""><strong>up to $1,000 off w/ new line + trade-in @ Verizon</strong></a><br>Verizon will take up to $1,000 off your iPhone Duo purchase when you open a new line, trade-in an old phone, and open an eligible unlimited data plan. Most models are slated to ship in early December. <a class="view-deal button" href="https://www.verizon.com/smartphones/apple-iphone-duo/?isMyPlanFlow=true" target="_blank" rel="nofollow" data-dimension112="b9961554-cbff-11f1-84a8-636462b2e9d7" data-action="Deal Block" data-label="iPhone Duo: up to $1,000 off w/ new line + trade-in @ Verizon" data-dimension48="iPhone Duo: up to $1,000 off w/ new line + trade-in @ Verizon" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="b99615cc-cbff-11f1-8938-c91ab9210b6e" data-action="Deal Block" data-label="iPhone Duo: up to $1,200 off w/ trade-in @ AT&amp;T" data-dimension48="iPhone Duo: up to $1,200 off w/ trade-in @ AT&amp;T" href="https://www.att.com/buy/phones/apple-iphone-duo.html" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:225px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="o9PdShQsgAk95AN7C5UMNR" name="AT&T Logo.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/o9PdShQsgAk95AN7C5UMNR-1920-80.jpeg" mos="" align="middle" fullscreen="" width="225" height="225" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>iPhone Duo: </strong><a href="https://www.att.com/buy/phones/apple-iphone-duo.html" target="_blank" rel="nofollow" data-dimension112="b99615cc-cbff-11f1-8938-c91ab9210b6e" data-action="Deal Block" data-label="iPhone Duo: up to $1,200 off w/ trade-in @ AT&amp;T" data-dimension48="iPhone Duo: up to $1,200 off w/ trade-in @ AT&amp;T" data-dimension25=""><strong>up to $1,200 off w/ trade-in @ AT&T</strong></a><br>New and existing AT&T customers can get up to $1,200 off the iPhone Duo with an eligible trade-in. You'll also need to sign up to an eligible unlimited data plan to get this deal. Plus, customers who switch to AT&T get up to $800 to pay off their current device. AT&T's iPhones are slated to ship the first week of December. <a class="view-deal button" href="https://www.att.com/buy/phones/apple-iphone-duo.html" target="_blank" rel="nofollow" data-dimension112="b99615cc-cbff-11f1-8938-c91ab9210b6e" data-action="Deal Block" data-label="iPhone Duo: up to $1,200 off w/ trade-in @ AT&amp;T" data-dimension48="iPhone Duo: up to $1,200 off w/ trade-in @ AT&amp;T" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="b9961644-cbff-11f1-9103-e7dc4771ed59" data-action="Deal Block" data-label="iPhone Duo: up to $1,000 off w/ trade-in @ Xfinity Mobile" data-dimension48="iPhone Duo: up to $1,000 off w/ trade-in @ Xfinity Mobile" href="https://www.xfinity.com/learn/deals/mobile" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:960px;"><p class="vanilla-image-block" style="padding-top:56.15%;"><img id="ukXfYk4wgducEMDS2iCCjY" name="Xfinity Mobile Logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ukXfYk4wgducEMDS2iCCjY-1920-80.jpg" mos="" align="middle" fullscreen="" width="960" height="539" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>iPhone Duo: </strong><a href="https://www.xfinity.com/learn/deals/mobile" target="_blank" rel="nofollow" data-dimension112="b9961644-cbff-11f1-9103-e7dc4771ed59" data-action="Deal Block" data-label="iPhone Duo: up to $1,000 off w/ trade-in @ Xfinity Mobile" data-dimension48="iPhone Duo: 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>New Xfinity Mobile Plus customers and existing Diamond members with Mobile Plus will get up to $1,000 off their iPhone Duo purchase. Customers on legacy Premium Unlimited plans will also be able to take advantage of this offer. Select iPhone Duo models will arrive as early as November 6. <a class="view-deal button" href="https://www.xfinity.com/learn/deals/mobile" target="_blank" rel="nofollow" data-dimension112="b9961644-cbff-11f1-9103-e7dc4771ed59" data-action="Deal Block" data-label="iPhone Duo: up to $1,000 off w/ trade-in @ Xfinity Mobile" data-dimension48="iPhone Duo: up to $1,000 off w/ trade-in @ Xfinity Mobile" data-dimension25="">View Deal</a></p></div><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-O6y7AW"></div>                            </div>                            <script src="https://kwizly.com/embed/O6y7AW.js" async></script><h3 class="article-body__section" id="section-iphone-duo-uk-availability-updated-october-23"><span>iPhone Duo UK Availability (Updated October 23)</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4356px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="xTigbirKk6eHPbe3d35Nod" name="iPhone Duo-LIST2" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/xTigbirKk6eHPbe3d35Nod-1920-80.jpg" mos="" align="middle" fullscreen="" width="4356" height="2450" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Apple</strong></p></td><td  ><p><strong>EE</strong></p></td><td  ><p><strong>O2</strong></p></td><td  ><p><strong>Three</strong></p></td><td  ><p><strong>Vodafone</strong></p></td><td  ><p><strong>Carphone Warehouse</strong></p></td><td  ><p><strong>Argos</strong></p></td><td  ><p><strong>Currys</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Star White (256GB)</strong></p></td><td  ><p>Jan 22</p></td><td  ><p>"More than 28 days"</p></td><td  ><p>"More than 4 weeks"</p></td><td  ><p>Jan 20</p></td><td  ><p>13-14 weeks</p></td><td  ><p>Jan 7</p></td><td  ><p>Out of Stock</p></td><td  ><p>Out of Stock</p></td></tr><tr><td class="firstcol " ><p><strong>Star White (512GB)</strong></p></td><td  ><p>Jan 22</p></td><td  ><p>"More than 28 days"</p></td><td  ><p>"More than 4 weeks"</p></td><td  ><p>Jan 20</p></td><td  ><p>13-14 weeks</p></td><td  ><p>Jan 7</p></td><td  ><p>Out of Stock</p></td><td  ><p>Out of Stock</p></td></tr><tr><td class="firstcol " ><p><strong>Star White (1TB)</strong></p></td><td  ><p>Jan 22</p></td><td  ><p>"More than 28 days"</p></td><td  ><p>"More than 4 weeks"</p></td><td  ><p>Jan 20</p></td><td  ><p>13-14 weeks</p></td><td  ><p>Jan 7</p></td><td  ><p>Out of Stock</p></td><td  ><p>Out of Stock</p></td></tr><tr><td class="firstcol " ><p><strong>Star White (2TB)</strong></p></td><td  ><p>Jan 22</p></td><td  ><p>"More than 28 days"</p></td><td  ><p>"More than 4 weeks"</p></td><td  ><p>Jan 20</p></td><td  ><p>13-14 weeks</p></td><td  ><p>Jan 7</p></td><td  ><p>Out of Stock</p></td><td  ><p>Out of Stock</p></td></tr><tr><td class="firstcol " ><p><strong>Night Sky (256GB)</strong></p></td><td  ><p>Jan 22</p></td><td  ><p>"More than 28 days"</p></td><td  ><p>"More than 4 weeks"</p></td><td  ><p>Jan 20</p></td><td  ><p>13-14 weeks</p></td><td  ><p>Jan 7</p></td><td  ><p>Out of Stock</p></td><td  ><p>Out of Stock</p></td></tr><tr><td class="firstcol " ><p><strong>Night Sky (512GB)</strong></p></td><td  ><p>Jan 22</p></td><td  ><p>"More than 28 days"</p></td><td  ><p>"More than 4 weeks"</p></td><td  ><p>Jan 20</p></td><td  ><p>13-14 weeks</p></td><td  ><p>Jan 7</p></td><td  ><p>Out of Stock</p></td><td  ><p>Out of Stock</p></td></tr><tr><td class="firstcol " ><p><strong>Night Sky (1TB)</strong></p></td><td  ><p>Jan 22</p></td><td  ><p>"More than 28 days"</p></td><td  ><p>"More than 4 weeks"</p></td><td  ><p>Jan 20</p></td><td  ><p>13-14 weeks</p></td><td  ><p>Jan 7</p></td><td  ><p>Out of Stock</p></td><td  ><p>Out of Stock</p></td></tr><tr><td class="firstcol " ><p><strong>Night Sky (2TB)</strong></p></td><td  ><p>Jan 22</p></td><td  ><p>"More than 28 days"</p></td><td  ><p>"More than 4 weeks"</p></td><td  ><p>Jan 20</p></td><td  ><p>13-14 weeks</p></td><td  ><p>Jan 7</p></td><td  ><p>Out of Stock</p></td><td  ><p>Out of Stock</p></td></tr></tbody></table></div><p><a href="https://www.apple.com/uk/shop/buy-iphone/iphone-duo" target="_blank" rel="nofollow">iPhone Duo availability in the U.K.</a> is pretty dire, and it's not looking good for those of you that will want to get your hands on one. A pre-Christmas delivery is going to be borderline impossible, especially since Apple is out of units until January 22, while both <a href="https://www.argos.co.uk/product/9843055" target="_blank" rel="nofollow">Argos </a>and <a href="https://www.currys.co.uk/products/apple-iphone-duo-256-gb-star-white-10310338.html" target="_blank" rel="nofollow">Currys</a> are completely sold out. <a href="https://www.carphonewarehouse.com/apple-iphone-duo-1tb-night-sky?" target="_blank" rel="nofollow">Carphone Warehouse</a> is out of stock until January 7.</p><p>When it comes to mobile networks, <a href="https://www.three.co.uk/shop/phones/apple-iphone-duo" target="_blank" rel="nofollow">Three </a>has made it clear it won't be getting more iPhone Duos until January 20. <a href="https://www.vodafone.co.uk/mobile/pay-monthly-contracts/apple/iphone-duo" target="_blank" rel="nofollow">Vodafone </a> promises a 13-14 week delivery window, which takes us to January 20. </p><p>Meanwhile <a href="https://ee.co.uk/mobile/pay-monthly-phones-gallery/iphone-duo-details?" target="_blank" rel="nofollow">EE </a>and <a href="https://www.o2.co.uk/shop/apple/iphone-duo/mk2e4qn-a" target="_blank" rel="nofollow">O2</a> have been far less helpful, giving very vague details about how deliveries will happen more than 4 weeks into the future. This could mean anything from late November to this time next year for all we know.</p><h3 class="article-body__section" id="section-can-i-just-go-to-the-apple-store"><span>Can I just go to the Apple Store?</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="UfsgdagGx97Tu2BSXw2yy7" name="GettyImages-2226561632" alt="apple store" src="https://cdn.mos.cms.futurecdn.net/UfsgdagGx97Tu2BSXw2yy7-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Agoes Rudianto/NurPhoto via Getty Images)</span></figcaption></figure><p>Apple confirmed that <a href="https://www.tomsguide.com/phones/iphones/couldnt-get-an-iphone-duo-for-launch-day-your-local-apple-store-may-have-some-in-stock-tomorrow-but-only-in-limited-numbers">Apple Stores would have a "limited" amount of iPhone Duo stock on launch day</a>, but we didn't expect that would last very long. At the moment we don't know if and when Apple Stores will get hold of more iPhone Suos, but given the extreme demand online we don't expect them to be available for in-person purchase anytime soon.</p><p>Apple has confirmed that the in-store pickup option will be returning to the Apple website on October 24. Not only does that mean you should be able to see if any Apple Store in your vicinity have iPhone Duos in stock, it's likely this will give you the opportunity to reserve a unit to save any disappointment when you actually get there.</p><p>However, it's unclear how effective this will be at getting you an unlocked iPhone before January.</p><h3 class="article-body__section" id="section-what-to-do-if-you-can-t-grab-an-iphone-duo-this-year"><span>What to do if you can't grab an iPhone Duo this year?</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5236px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="DdfZBhuhYSV4kGWEe54Wvd" name="iPhone Duo-1" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/DdfZBhuhYSV4kGWEe54Wvd-1920-80.jpg" mos="" align="middle" fullscreen="" width="5236" height="2945" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The good news is that those of you that have picked up iPhone Duo pre-orders from Apple may have noticed that your <a href="https://www.tomsguide.com/phones/iphones/apple-just-bumped-up-some-iphone-duo-delivery-dates-here-is-how-to-check-yours">delivery estimate has actually decreased</a> over the past few days. It's unclear whether is happening everywhere, but the fact that Apple is adjusting its delivery estimates does bode well.</p><p>One thing you should also note is that Apple operates a two-week return policy. It's possible that some of the Duo units that are shipped to customers on October 23 will be returned, either because someone decided they didn't want it anymore or because they were purchased by resellers who couldn't sell their stock. </p><p>That could lead to a trickle of Duo units being recirculated from the returns department and back out to other customers — especially if they're unopened. We can't predict how much of an impact this will have on wait times, though, and it will likely differ from region to region.</p><p>The last thing you should do is resort to <a href="https://www.tomsguide.com/phones/iphones/apple-increases-iphone-duo-production-by-30-percent-heres-what-that-means-for-you">buying from scalpers and resellers,</a> regardless of where they may be selling. You'll end up paying an overinflated price for a phone that will be back in stock in the near future, and all you'll gain is a few extra months of time. Apple wants to get these to you as soon as possible, so don't waste your money.</p><p>Finally, if you just want a foldable and don't have your heart set on an iPhone Duo, <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-is-impossible-to-buy-right-now-but-these-6-alternatives-are-available-right-now">you can always try out one of these six alternatives</a>. They're Android phones, but given how many brands love to mimic iOS, you may not notice much difference.</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/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[ 'Pro and Tell': We just got Apple's Oct. 28 event invite — here's what to expect ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Apple's next product launch event is taking place on October 28 in Los Angeles, where we expect the company to launch a touchscreen MacBook Pro, an OLED iPad mini and more. </p><p>Invitations for the event, dubbed "Pro and Tell," started going out this week and Tom's Guide received one. It's pretty clear the from the teaser that the next MacBook Pro will be a prominent part of the event.</p><p>Here's everything you need to know about the Pro and Tell event.</p><h2 id="when-is-pro-and-tell">When is Pro and Tell?</h2><p>The Apple Pro and Tell event takes place on October 28, 2026 starting at 10 a.m. PT/1 p.m. ET in Los Angeles. </p><h2 id="what-we-expect-to-see">What we expect to see</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="dWB37Y64jYdTkgxi7hXWXN" name="macbook-pro-feature.jpg" alt="MacBook Pro 2021" src="https://cdn.mos.cms.futurecdn.net/dWB37Y64jYdTkgxi7hXWXN-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>We expect at least three new devices to launch next week, including a new MacBook.</p><p>The touchscreen MacBook Pro is supposed to feature an OLED panel, a first for an Apple laptop. The rumored <a href="https://www.tomsguide.com/computing/laptops/macbook-ultra-everything-we-know-so-far">MacBook Ultra</a>, could also get a name change and slight redesign, mostly making it thinner and lighter.</p><p>Additionally, Apple may abandon the webcam notch in favor of an iPhone-esque <a href="https://www.tomsguide.com/news/iphone-15-dynamic-island-what-you-need-to-know">Dynamic Island</a>. It's not clear what chipset it will feature; rumors have suggested both the current M5 Pro and M5 Max silicon or the newer <a href="https://www.tomsguide.com/computing/cpus/i-analyzed-apples-new-2nm-m6-chip-here-is-why-m1-holdouts-finally-need-to-upgrade">M6 chip</a> which first launched in the <a href="https://www.tomsguide.com/computing/apple-desktops/mac-mini-m6-reasons-to-buy-and-skip">latest Mac mini</a>.</p><p>The updated iPad mini similarly should feature an OLED panel, following the iPad Air and iPad Pro from the last two years. It may also get a repositioned front-facing camera to support landscape video calls. </p><p>Finally, we should see an M6-powered version of the iMac. We aren't expecting a redesign or any other new features based on current rumors. If the new Mac mini is any indication, an M6 iMac will be significantly faster and more efficient.</p><h2 id="outlook">Outlook</h2><p>Apple has been rumored to be working on an OLED touchscreen MacBook Pro for years, so it will be interesting to see how the company finally implements the new display. </p><p>The iPad mini is one of the<a href="https://www.tomsguide.com/best-picks/best-tablet"> best tablets </a>available, and adding an OLED screen should make it even better. </p><p>Tom's Guide will be on hand to get all the latest news and hands-on with Apple's newest devices. Keep us in your tabs to stay up to date.</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/home/smart-home/apples-rumored-usd1-000-homeview-max-is-either-a-smart-home-revolution-or-a-terrifying-black-mirror-prop"><strong>At $1,000, Apple's rumored HomeView Max better do the dishes, too</strong></a></li><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"><strong>My iPhone 18 Pro Max just got delivered and I immediately regret the purchase — and I think iPhone Duo is to blame</strong></a></li><li><a href="https://www.tomsguide.com/phones/iphones/20-smart-ios-27-features-that-will-make-your-life-easier-and-how-to-use-them"><strong>20 smart iOS 27 features that will make your life easier — and how to use them</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/macbooks/pro-and-tell-we-just-got-apples-oct-28-event-invite-heres-what-to-expect</link>
                                                                            <description>
                            <![CDATA[ Apple is sending out invites to its Oct. 28 event in Los Angeles, where a new MacBook Pro should be among several announced devices. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">jJa6T9t6sNZHEHEE5r6bk5</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/AWm9bdpgxxSBL6VZbUNjQi-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 19 Oct 2026 17:36:48 +0000</pubDate>                                                                                                                                <updated>Mon, 19 Oct 2026 23:22:02 +0000</updated>
                                                                                                                                            <category><![CDATA[MacBooks]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Laptops]]></category>
                                                                                                <author><![CDATA[ scott.younker@futurenet.com (Scott Younker) ]]></author>                    <dc:creator><![CDATA[ Scott Younker ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/RZsUpqcJ6Uj2q83oCUwNhQ-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/AWm9bdpgxxSBL6VZbUNjQi-1920-80.jpg">
                                                            <media:credit><![CDATA[Apple]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Apple Pro and Tell event]]></media:description>                                                            <media:text><![CDATA[Apple Pro and Tell event]]></media:text>
                                <media:title type="plain"><![CDATA[Apple Pro and Tell event]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/AWm9bdpgxxSBL6VZbUNjQi-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Apple's next product launch event is taking place on October 28 in Los Angeles, where we expect the company to launch a touchscreen MacBook Pro, an OLED iPad mini and more. </p><p>Invitations for the event, dubbed "Pro and Tell," started going out this week and Tom's Guide received one. It's pretty clear the from the teaser that the next MacBook Pro will be a prominent part of the event.</p><p>Here's everything you need to know about the Pro and Tell event.</p><h2 id="when-is-pro-and-tell">When is Pro and Tell?</h2><p>The Apple Pro and Tell event takes place on October 28, 2026 starting at 10 a.m. PT/1 p.m. ET in Los Angeles. </p><h2 id="what-we-expect-to-see">What we expect to see</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="dWB37Y64jYdTkgxi7hXWXN" name="macbook-pro-feature.jpg" alt="MacBook Pro 2021" src="https://cdn.mos.cms.futurecdn.net/dWB37Y64jYdTkgxi7hXWXN-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>We expect at least three new devices to launch next week, including a new MacBook.</p><p>The touchscreen MacBook Pro is supposed to feature an OLED panel, a first for an Apple laptop. The rumored <a href="https://www.tomsguide.com/computing/laptops/macbook-ultra-everything-we-know-so-far">MacBook Ultra</a>, could also get a name change and slight redesign, mostly making it thinner and lighter.</p><p>Additionally, Apple may abandon the webcam notch in favor of an iPhone-esque <a href="https://www.tomsguide.com/news/iphone-15-dynamic-island-what-you-need-to-know">Dynamic Island</a>. It's not clear what chipset it will feature; rumors have suggested both the current M5 Pro and M5 Max silicon or the newer <a href="https://www.tomsguide.com/computing/cpus/i-analyzed-apples-new-2nm-m6-chip-here-is-why-m1-holdouts-finally-need-to-upgrade">M6 chip</a> which first launched in the <a href="https://www.tomsguide.com/computing/apple-desktops/mac-mini-m6-reasons-to-buy-and-skip">latest Mac mini</a>.</p><p>The updated iPad mini similarly should feature an OLED panel, following the iPad Air and iPad Pro from the last two years. It may also get a repositioned front-facing camera to support landscape video calls. </p><p>Finally, we should see an M6-powered version of the iMac. We aren't expecting a redesign or any other new features based on current rumors. If the new Mac mini is any indication, an M6 iMac will be significantly faster and more efficient.</p><h2 id="outlook">Outlook</h2><p>Apple has been rumored to be working on an OLED touchscreen MacBook Pro for years, so it will be interesting to see how the company finally implements the new display. </p><p>The iPad mini is one of the<a href="https://www.tomsguide.com/best-picks/best-tablet"> best tablets </a>available, and adding an OLED screen should make it even better. </p><p>Tom's Guide will be on hand to get all the latest news and hands-on with Apple's newest devices. Keep us in your tabs to stay up to date.</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/home/smart-home/apples-rumored-usd1-000-homeview-max-is-either-a-smart-home-revolution-or-a-terrifying-black-mirror-prop"><strong>At $1,000, Apple's rumored HomeView Max better do the dishes, too</strong></a></li><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"><strong>My iPhone 18 Pro Max just got delivered and I immediately regret the purchase — and I think iPhone Duo is to blame</strong></a></li><li><a href="https://www.tomsguide.com/phones/iphones/20-smart-ios-27-features-that-will-make-your-life-easier-and-how-to-use-them"><strong>20 smart iOS 27 features that will make your life easier — and how to use them</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ At $1,000, Apple's rumored HomeView Max better do the dishes, too ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Apple is reportedly developing a premium HomeView built around a motorized arm that spins 360 degrees and turns the display toward whoever's speaking, per <a href="https://www.bloomberg.com/news/newsletters/2026-10-18/apple-homeview-with-robotic-arm-new-mac-ipad-mini-nov-6-release-iphone-duo" target="_blank">Bloomberg's Mark Gurman</a>. A larger 9-inch screen, a 2027-2028 target, and an identity crisis about whether it's a "Max," an "Ultra," or something with its own name.</p><p>We’ve only just got the <a href="https://www.tomsguide.com/home/smart-home/i-saw-apples-homeview-early-7-things-you-need-to-know-about-the-smart-home-display">first HomeView</a>, but the Cupertino crew is thinking about the long-game here, and it expands into a companion era I’m not sure we’re ready for — with a fascinating backstory.</p><h2 id="what-s-actually-rumored">What’s actually rumored</h2><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.21%;"><img id="WrAQq4miYm7crJrNTRgoFf" name="dji_mimo_20261013_093244_20261013093244_1791900497483_photo" alt="Apple HomeView" src="https://cdn.mos.cms.futurecdn.net/WrAQq4miYm7crJrNTRgoFf-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1439" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Per Gurman, the arm-equipped device pairs the motorized base with a bigger 9-inch display — up from the 7-inch panel on the standard HomeView just announced. But what’s key to note is that this is <strong>not </strong>HomeView 2.</p><p>It’s a more premium experience, and a companion that is actually able to rotate on its base and look at you as you walk around a room. Less of a passive device on your kitchen countertop and one that can actively engage with you — with a rumored $1,000 price tag penciled in for a 2027 launch.</p><h2 id="apple-already-showed-you-this-future">Apple already showed you this future</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1427px;"><p class="vanilla-image-block" style="padding-top:61.81%;"><img id="pkG8Sz7K8Cw2YpqRKeW5e5" name="Apple Elegnt" alt="Apple Elegnt" src="https://cdn.mos.cms.futurecdn.net/pkG8Sz7K8Cw2YpqRKeW5e5-1920-80.png" mos="" align="middle" fullscreen="" width="1427" height="882" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Apple Machine Learning Research)</span></figcaption></figure><p>In <a href="https://machinelearning.apple.com/research/elegnt-expressive-functional-movement" target="_blank">February 2025</a>, Apple Machine Learning Research published a video of a robot lamp research demo — a little articulated Pixar-looking lamp that watched a person move around a room, and responded with something uncomfortably close to <em>personality. </em>Head tilts. Leaning in. The unmistakable energy of Pixar’s mascot coming to life with a machine learning degree.</p><p>Nobody treated it as a serious thing at the time. But here we are in October 2026, watching how things can come full circle. The more I watch it, the more I realize this wasn’t just a lamp demo. It was Apple workshopping the idea of making your furniture behave like it notices you.</p><p>And soon, we may see what that looks like in a real product. But that’s not the only place where Apple may have already been unintentionally working on the HomeView Max.</p><h2 id="the-car-is-dead-long-live-the-car-s-robot-arm">The car is dead. Long live the car’s robot arm</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:53.87%;"><img id="arSWoJksQufkEXmtwQ9Fe9" name="1946c46a51e6c13a9286261261fef3a4.jpg" alt="ugly apple car concept" src="https://cdn.mos.cms.futurecdn.net/arSWoJksQufkEXmtwQ9Fe9-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="808" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Vanarama)</span></figcaption></figure><p>Here’s the story underneath the story: the <a href="https://www.tomsguide.com/vehicle-tech/apple-reportedly-kills-apple-car-after-spending-billions-will-double-down-on-ai-instead">$10 billion electric car</a> is the most expensive graveyard in Apple history. When it was gutted, we all thought that everything was scattered into the wind.</p><p>Gurman’s reporting suggests something more deliberate — the robotics lived on, moving the arm from the driveway to the living room. And all that gesture recognition, smooth motion and spatial awareness of that car arm is reportedly being repackaged as this screen that turns its head when you walk in mid-Siri.</p><p>As a tech nerd, this is an absurdly cool use of some serious engineering.</p><h2 id="the-reality-check-this-is-a-pet-and-pets-are-expensive">The reality check: this is a pet, and pets are expensive</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3196px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="xVAUsrx8xvqSBa9d2C8r3N" name="Netflix.jpg" alt="Jon Hamm in Black Mirror "White Christmas"" src="https://cdn.mos.cms.futurecdn.net/xVAUsrx8xvqSBa9d2C8r3N-1920-80.jpg" mos="" align="middle" fullscreen="" width="3196" height="1798" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Netflix)</span></figcaption></figure><p>So, it’s time to put the tin hat on, together.</p><p><strong>First, the swivel is the whole thing — and the entire privacy conversation. </strong>Apple’s pitch has always been privacy-centered, and for good reason when you see what other companies are doing.</p><p>And while that may well be the case with this arm version of HomeView, I think there’s a creep factor to a screen following you around the room that will cause some spirited discussions around the Thanksgiving table.</p><p><strong>Second, that rumored price is going to turn some heads. </strong>Compared to other smart home hubs, the current HomeView is already pretty pricey and kind of limited in functionality. Now we have a premium robot sibling option set for launch next year? That’s a big test of household budgets.</p><p><strong>Third, Siri has to be good. </strong>A robot arm that turns toward you only matters if there’s something worth saying to it once it’s looking. The HomeView ad does show how it can fit into a chaotic family household, but if my iPhone’s Siri response time is anything to go by, those pauses between people asking questions and getting answers would actually leave some awkward silences.</p><p>When it’s just a screen on your countertop, that can be forgiven. But when you make it a companion, it has to be near-instantaneous. The arm, ironically, is probably the least important component of this device when it comes to actually using it.</p><h2 id="who-should-care">Who should care?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1613px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="Y95uGJ8hKSYNMgWZiVdCba" name="Tezza-5018" alt="Apple HomeView" src="https://cdn.mos.cms.futurecdn.net/Y95uGJ8hKSYNMgWZiVdCba-1920-80.jpg" mos="" align="middle" fullscreen="" width="1613" height="907" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Gurman’s report uses the word “companion,” and I couldn’t agree more. For the past decade, smart home devices have been appliances — helpful, static and furniture-adjacent.</p><p>This robot arm is the moment the real hub is elevated above being just a screen with a speaker, but a feeling that something in your house <em>knows you walked in.</em></p><p>Are people going to be comfortable with this? That’s something we’ll find out. Apple’s $299 HomeView is a slightly high, but rational price for a smart display, and it’ll get the software updates the robot needs anyway.</p><p>This rumored arm version is for a different person entirely: the smart-home early adopter with a spouse who’s stopped asking where the money went, and the Apple watcher reading the tea leaves.</p><p>So to figure this out, I turn to you, dear reader!</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ON952W"></div>                            </div>                            <script src="https://kwizly.com/embed/ON952W.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/home/smart-home/apple-home-view-buy-or-skip">Should you buy the Apple HomeView? 5 reasons to pick one up (and 2 reasons why you might want to hold off)</a></li><li><a href="https://www.tomsguide.com/computing/cpus/ive-been-living-with-nvidias-rtx-spark-for-a-week-on-surface-laptop-ultra-its-not-a-macbook-pro-killer-but-something-much-weirder-and-wildly-powerful">I’ve been living with Nvidia’s RTX Spark for a week — it’s not a MacBook Pro killer but something much weirder and wildly powerful</a></li><li><a href="https://www.tomsguide.com/vehicle-tech/evs/elon-musk-just-unveiled-a-flying-car-watch-the-tesla-roadsters-incredible-launch-as-it-happened">Elon Musk just unveiled a flying car — watch the Tesla Roadster's incredible launch</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/home/smart-home/apples-rumored-usd1-000-homeview-max-is-either-a-smart-home-revolution-or-a-terrifying-black-mirror-prop</link>
                                                                            <description>
                            <![CDATA[ Apple is reportedly developing a premium HomeView built around a motorized arm that spins 360 degrees and turns the display toward whoever's speaking, per Bloomberg's Mark Gurman. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">83NjeU4tn2pRgEiLypS3m</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/dUHoMCee2gXRwXjViQGJSJ-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 19 Oct 2026 10:34:41 +0000</pubDate>                                                                                                                                <updated>Mon, 19 Oct 2026 14:44:46 +0000</updated>
                                                                                                                                            <category><![CDATA[Smart Home]]></category>
                                                    <category><![CDATA[Home]]></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/dUHoMCee2gXRwXjViQGJSJ-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Apple HomeView hands-on]]></media:description>                                                            <media:text><![CDATA[Apple HomeView hands-on]]></media:text>
                                <media:title type="plain"><![CDATA[Apple HomeView hands-on]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/dUHoMCee2gXRwXjViQGJSJ-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Apple is reportedly developing a premium HomeView built around a motorized arm that spins 360 degrees and turns the display toward whoever's speaking, per <a href="https://www.bloomberg.com/news/newsletters/2026-10-18/apple-homeview-with-robotic-arm-new-mac-ipad-mini-nov-6-release-iphone-duo" target="_blank">Bloomberg's Mark Gurman</a>. A larger 9-inch screen, a 2027-2028 target, and an identity crisis about whether it's a "Max," an "Ultra," or something with its own name.</p><p>We’ve only just got the <a href="https://www.tomsguide.com/home/smart-home/i-saw-apples-homeview-early-7-things-you-need-to-know-about-the-smart-home-display">first HomeView</a>, but the Cupertino crew is thinking about the long-game here, and it expands into a companion era I’m not sure we’re ready for — with a fascinating backstory.</p><h2 id="what-s-actually-rumored">What’s actually rumored</h2><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.21%;"><img id="WrAQq4miYm7crJrNTRgoFf" name="dji_mimo_20261013_093244_20261013093244_1791900497483_photo" alt="Apple HomeView" src="https://cdn.mos.cms.futurecdn.net/WrAQq4miYm7crJrNTRgoFf-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1439" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Per Gurman, the arm-equipped device pairs the motorized base with a bigger 9-inch display — up from the 7-inch panel on the standard HomeView just announced. But what’s key to note is that this is <strong>not </strong>HomeView 2.</p><p>It’s a more premium experience, and a companion that is actually able to rotate on its base and look at you as you walk around a room. Less of a passive device on your kitchen countertop and one that can actively engage with you — with a rumored $1,000 price tag penciled in for a 2027 launch.</p><h2 id="apple-already-showed-you-this-future">Apple already showed you this future</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1427px;"><p class="vanilla-image-block" style="padding-top:61.81%;"><img id="pkG8Sz7K8Cw2YpqRKeW5e5" name="Apple Elegnt" alt="Apple Elegnt" src="https://cdn.mos.cms.futurecdn.net/pkG8Sz7K8Cw2YpqRKeW5e5-1920-80.png" mos="" align="middle" fullscreen="" width="1427" height="882" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Apple Machine Learning Research)</span></figcaption></figure><p>In <a href="https://machinelearning.apple.com/research/elegnt-expressive-functional-movement" target="_blank">February 2025</a>, Apple Machine Learning Research published a video of a robot lamp research demo — a little articulated Pixar-looking lamp that watched a person move around a room, and responded with something uncomfortably close to <em>personality. </em>Head tilts. Leaning in. The unmistakable energy of Pixar’s mascot coming to life with a machine learning degree.</p><p>Nobody treated it as a serious thing at the time. But here we are in October 2026, watching how things can come full circle. The more I watch it, the more I realize this wasn’t just a lamp demo. It was Apple workshopping the idea of making your furniture behave like it notices you.</p><p>And soon, we may see what that looks like in a real product. But that’s not the only place where Apple may have already been unintentionally working on the HomeView Max.</p><h2 id="the-car-is-dead-long-live-the-car-s-robot-arm">The car is dead. Long live the car’s robot arm</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:53.87%;"><img id="arSWoJksQufkEXmtwQ9Fe9" name="1946c46a51e6c13a9286261261fef3a4.jpg" alt="ugly apple car concept" src="https://cdn.mos.cms.futurecdn.net/arSWoJksQufkEXmtwQ9Fe9-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="808" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Vanarama)</span></figcaption></figure><p>Here’s the story underneath the story: the <a href="https://www.tomsguide.com/vehicle-tech/apple-reportedly-kills-apple-car-after-spending-billions-will-double-down-on-ai-instead">$10 billion electric car</a> is the most expensive graveyard in Apple history. When it was gutted, we all thought that everything was scattered into the wind.</p><p>Gurman’s reporting suggests something more deliberate — the robotics lived on, moving the arm from the driveway to the living room. And all that gesture recognition, smooth motion and spatial awareness of that car arm is reportedly being repackaged as this screen that turns its head when you walk in mid-Siri.</p><p>As a tech nerd, this is an absurdly cool use of some serious engineering.</p><h2 id="the-reality-check-this-is-a-pet-and-pets-are-expensive">The reality check: this is a pet, and pets are expensive</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3196px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="xVAUsrx8xvqSBa9d2C8r3N" name="Netflix.jpg" alt="Jon Hamm in Black Mirror "White Christmas"" src="https://cdn.mos.cms.futurecdn.net/xVAUsrx8xvqSBa9d2C8r3N-1920-80.jpg" mos="" align="middle" fullscreen="" width="3196" height="1798" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Netflix)</span></figcaption></figure><p>So, it’s time to put the tin hat on, together.</p><p><strong>First, the swivel is the whole thing — and the entire privacy conversation. </strong>Apple’s pitch has always been privacy-centered, and for good reason when you see what other companies are doing.</p><p>And while that may well be the case with this arm version of HomeView, I think there’s a creep factor to a screen following you around the room that will cause some spirited discussions around the Thanksgiving table.</p><p><strong>Second, that rumored price is going to turn some heads. </strong>Compared to other smart home hubs, the current HomeView is already pretty pricey and kind of limited in functionality. Now we have a premium robot sibling option set for launch next year? That’s a big test of household budgets.</p><p><strong>Third, Siri has to be good. </strong>A robot arm that turns toward you only matters if there’s something worth saying to it once it’s looking. The HomeView ad does show how it can fit into a chaotic family household, but if my iPhone’s Siri response time is anything to go by, those pauses between people asking questions and getting answers would actually leave some awkward silences.</p><p>When it’s just a screen on your countertop, that can be forgiven. But when you make it a companion, it has to be near-instantaneous. The arm, ironically, is probably the least important component of this device when it comes to actually using it.</p><h2 id="who-should-care">Who should care?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1613px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="Y95uGJ8hKSYNMgWZiVdCba" name="Tezza-5018" alt="Apple HomeView" src="https://cdn.mos.cms.futurecdn.net/Y95uGJ8hKSYNMgWZiVdCba-1920-80.jpg" mos="" align="middle" fullscreen="" width="1613" height="907" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Gurman’s report uses the word “companion,” and I couldn’t agree more. For the past decade, smart home devices have been appliances — helpful, static and furniture-adjacent.</p><p>This robot arm is the moment the real hub is elevated above being just a screen with a speaker, but a feeling that something in your house <em>knows you walked in.</em></p><p>Are people going to be comfortable with this? That’s something we’ll find out. Apple’s $299 HomeView is a slightly high, but rational price for a smart display, and it’ll get the software updates the robot needs anyway.</p><p>This rumored arm version is for a different person entirely: the smart-home early adopter with a spouse who’s stopped asking where the money went, and the Apple watcher reading the tea leaves.</p><p>So to figure this out, I turn to you, dear reader!</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ON952W"></div>                            </div>                            <script src="https://kwizly.com/embed/ON952W.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/home/smart-home/apple-home-view-buy-or-skip">Should you buy the Apple HomeView? 5 reasons to pick one up (and 2 reasons why you might want to hold off)</a></li><li><a href="https://www.tomsguide.com/computing/cpus/ive-been-living-with-nvidias-rtx-spark-for-a-week-on-surface-laptop-ultra-its-not-a-macbook-pro-killer-but-something-much-weirder-and-wildly-powerful">I’ve been living with Nvidia’s RTX Spark for a week — it’s not a MacBook Pro killer but something much weirder and wildly powerful</a></li><li><a href="https://www.tomsguide.com/vehicle-tech/evs/elon-musk-just-unveiled-a-flying-car-watch-the-tesla-roadsters-incredible-launch-as-it-happened">Elon Musk just unveiled a flying car — watch the Tesla Roadster's incredible launch</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ iPhone Duo's battery is officially bigger than Galaxy Z Fold 8 — here's how it compares to other foldables ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The first <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-hands-on-apple-nailed-it-and-just-put-everyone-else-on-notice">iPhone Duos </a>will be landing in users' hands by the end of this week, and it means we finally get a chance to find out <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-pre-orders-open-this-week-but-there-are-still-7-things-we-dont-know">all the things we still don't know about the phone</a>. One thing we can cross off the list is the phone's total battery capacity, thanks to the <a href="https://eprel.ec.europa.eu/screen/product/smartphonestablets20231669/compare/list" target="_blank">newly published EU energy label.</a></p><p>According to EU law, all phones that go on sale in the region also need a publicly accessible Energy Label, which offers key details about the device in question. Alongside information like IP rating, drop test performance and repairability, the labels also lists the phone's energy performance and battery specs. In the case of the iPhone Duo, it confirms the long-standing rumor that the phone packs in a 4,883 mAh battery pack.</p><p>For reference the eSIM-only variants of 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>both have respective 4,288 mAh and 5,567 mAh batteries. Which means the iPhone Duo falls somewhere in the middle of the two. </p><p>However, considering this is a dual screen phone, one of which is almost 8-inches in size, it's not entirely clear whether the actual battery life will do the same. We'll have to wait and see how the Duo fairs in our own battery life testing.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-W5E4RW"></div>                            </div>                            <script src="https://kwizly.com/embed/W5E4RW.js" async></script><h2 id="how-iphone-duo-39-s-battery-compares-to-other-foldables">How iPhone Duo's battery compares to other foldables</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4356px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="xTigbirKk6eHPbe3d35Nod" name="iPhone Duo-LIST2" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/xTigbirKk6eHPbe3d35Nod-1920-80.jpg" mos="" align="middle" fullscreen="" width="4356" height="2450" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Battery Capacity (mAh)</strong></p></td><td  ><p><strong>Battery Life (Hrs:Mins)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>iPhone Duo</strong></p></td><td  ><p>4,883</p></td><td  ><p>N/A</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 18 Pro</strong></p></td><td  ><p>4,288</p></td><td  ><p>16:17</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 18 Pro Max</strong></p></td><td  ><p>5,567</p></td><td  ><p>18:27</p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy Z Fold 8</strong></p></td><td  ><p>4,800</p></td><td  ><p>12:50</p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy Z Fold 8 Ultra</strong></p></td><td  ><p>5,000</p></td><td  ><p>14:33</p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 11 Pro Fold</strong></p></td><td  ><p>4,806</p></td><td  ><p>12:31</p></td></tr><tr><td class="firstcol " ><p><strong>Motorola Razr Fold</strong></p></td><td  ><p>6,000</p></td><td  ><p>14:44</p></td></tr></tbody></table></div><p>As you can see, the iPhone Duo's battery life isn't dissimilar to that of other foldables out there. It's slightly below the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Z Fold 8 Ultra</a>, and slightly higher than the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-fold-review">Pixel 11 Pro Fold</a>, though both of them are full size book-shaped foldables with a little more space for larger batteries. As is the<a href="https://www.tomsguide.com/phones/motorola-phones/motorola-razr-fold-review"> Motorola Razr Fold</a>, which has a hefty 6,000 mAh battery hiding inside.</p><p>The closest we have to Apple's passport-shaped design is 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>, which has a slightly smaller 4,800 mAh battery. </p><p>This phone lasted just shy of 13 hours during testing, which may give us a benchmark of what to expect from the Duo. Not only is Apple's battery store an extra 83 mAh of power, it also features the same energy-saving features as the 18 Pro series — including the A20 Pro chipset and C2 modem.</p><p>I'd expect the iPhone Duo to last a little longer than the Z Fold 8 based on those two factors, but we can't know for sure until we actually get it into the Tom's Guide lab.</p><h2 id="everything-else-the-eu-just-revealed-about-iphone-duo">Everything else the EU just revealed about iPhone Duo</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4656px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Q9CmG4bSftigAEdPtH3Qqd" name="iPhone Duo-LIST1" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/Q9CmG4bSftigAEdPtH3Qqd-1920-80.jpg" mos="" align="middle" fullscreen="" width="4656" height="2619" attribution="" endorsement="" class="inline"></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 EU Energy Label also confirmed some other details. One of which is that the Duo's battery is rated for 1,000 full recharge cycles (zero to 100% and back), which means it should keep at least 80% of its total capacity for that duration.</p><p>The Duo also lasted 140 free falls without causing problems, though this number dropped to 35 when it was dropped with the screen fully open. </p><p>So as durable as it may be, the iPhone Duo is still a lot more fragile if you leave the inner screen open and exposed. For comparison the Z Fold 8 and Z Fold 8 Ultra both lasted 210 drops, which dropped to 45 when opened, while the iPhone 18 Pro Max lasted 180.</p><p>As for water, the phone is IP68 rated (as expected) and is capable of being immersed in up to six meters of water. The screen is also listed as scratch-resistant up to 5 Mohs on the hardness scale, compared to just one on the Z Fold 8 series. Since this is the same as the iPhone 18 Pro Max, which has a Ceramic Shield 2 display, my guess is that only the Duo's outer display was tested.</p><p>The Duo's repairability index score of 2.65 is also lower than that of the other three phones. The 18 Pro Max hit 3.14, while the Z Fold 8 and 8 Ultra score 2.79 and 2.78, respectively. </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/7-ways-the-iphone-duo-could-change-foldables-for-the-better">7 ways the iPhone Duo could change foldables for the better</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/iphone-duos-battery-is-officially-bigger-than-galaxy-z-fold-8-heres-how-it-compares-to-other-foldables</link>
                                                                            <description>
                            <![CDATA[ EU regulatory paperwork just confirmed that the iPhone Duo has a 4,883 mAh battery — here's how that compares to the competition. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">khFJrkVyzpZZEc9FLnfswJ</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/DDcGvYcqQtgaTHXB9oD9Gc-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 19 Oct 2026 10:30:21 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f-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/DDcGvYcqQtgaTHXB9oD9Gc-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPhone Duo hands on]]></media:description>                                                            <media:text><![CDATA[iPhone Duo hands on]]></media:text>
                                <media:title type="plain"><![CDATA[iPhone Duo hands on]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/DDcGvYcqQtgaTHXB9oD9Gc-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The first <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-hands-on-apple-nailed-it-and-just-put-everyone-else-on-notice">iPhone Duos </a>will be landing in users' hands by the end of this week, and it means we finally get a chance to find out <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-pre-orders-open-this-week-but-there-are-still-7-things-we-dont-know">all the things we still don't know about the phone</a>. One thing we can cross off the list is the phone's total battery capacity, thanks to the <a href="https://eprel.ec.europa.eu/screen/product/smartphonestablets20231669/compare/list" target="_blank">newly published EU energy label.</a></p><p>According to EU law, all phones that go on sale in the region also need a publicly accessible Energy Label, which offers key details about the device in question. Alongside information like IP rating, drop test performance and repairability, the labels also lists the phone's energy performance and battery specs. In the case of the iPhone Duo, it confirms the long-standing rumor that the phone packs in a 4,883 mAh battery pack.</p><p>For reference the eSIM-only variants of 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>both have respective 4,288 mAh and 5,567 mAh batteries. Which means the iPhone Duo falls somewhere in the middle of the two. </p><p>However, considering this is a dual screen phone, one of which is almost 8-inches in size, it's not entirely clear whether the actual battery life will do the same. We'll have to wait and see how the Duo fairs in our own battery life testing.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-W5E4RW"></div>                            </div>                            <script src="https://kwizly.com/embed/W5E4RW.js" async></script><h2 id="how-iphone-duo-39-s-battery-compares-to-other-foldables">How iPhone Duo's battery compares to other foldables</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4356px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="xTigbirKk6eHPbe3d35Nod" name="iPhone Duo-LIST2" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/xTigbirKk6eHPbe3d35Nod-1920-80.jpg" mos="" align="middle" fullscreen="" width="4356" height="2450" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Battery Capacity (mAh)</strong></p></td><td  ><p><strong>Battery Life (Hrs:Mins)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>iPhone Duo</strong></p></td><td  ><p>4,883</p></td><td  ><p>N/A</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 18 Pro</strong></p></td><td  ><p>4,288</p></td><td  ><p>16:17</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 18 Pro Max</strong></p></td><td  ><p>5,567</p></td><td  ><p>18:27</p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy Z Fold 8</strong></p></td><td  ><p>4,800</p></td><td  ><p>12:50</p></td></tr><tr><td class="firstcol " ><p><strong>Samsung Galaxy Z Fold 8 Ultra</strong></p></td><td  ><p>5,000</p></td><td  ><p>14:33</p></td></tr><tr><td class="firstcol " ><p><strong>Google Pixel 11 Pro Fold</strong></p></td><td  ><p>4,806</p></td><td  ><p>12:31</p></td></tr><tr><td class="firstcol " ><p><strong>Motorola Razr Fold</strong></p></td><td  ><p>6,000</p></td><td  ><p>14:44</p></td></tr></tbody></table></div><p>As you can see, the iPhone Duo's battery life isn't dissimilar to that of other foldables out there. It's slightly below the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Z Fold 8 Ultra</a>, and slightly higher than the <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-fold-review">Pixel 11 Pro Fold</a>, though both of them are full size book-shaped foldables with a little more space for larger batteries. As is the<a href="https://www.tomsguide.com/phones/motorola-phones/motorola-razr-fold-review"> Motorola Razr Fold</a>, which has a hefty 6,000 mAh battery hiding inside.</p><p>The closest we have to Apple's passport-shaped design is 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>, which has a slightly smaller 4,800 mAh battery. </p><p>This phone lasted just shy of 13 hours during testing, which may give us a benchmark of what to expect from the Duo. Not only is Apple's battery store an extra 83 mAh of power, it also features the same energy-saving features as the 18 Pro series — including the A20 Pro chipset and C2 modem.</p><p>I'd expect the iPhone Duo to last a little longer than the Z Fold 8 based on those two factors, but we can't know for sure until we actually get it into the Tom's Guide lab.</p><h2 id="everything-else-the-eu-just-revealed-about-iphone-duo">Everything else the EU just revealed about iPhone Duo</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4656px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Q9CmG4bSftigAEdPtH3Qqd" name="iPhone Duo-LIST1" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/Q9CmG4bSftigAEdPtH3Qqd-1920-80.jpg" mos="" align="middle" fullscreen="" width="4656" height="2619" attribution="" endorsement="" class="inline"></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 EU Energy Label also confirmed some other details. One of which is that the Duo's battery is rated for 1,000 full recharge cycles (zero to 100% and back), which means it should keep at least 80% of its total capacity for that duration.</p><p>The Duo also lasted 140 free falls without causing problems, though this number dropped to 35 when it was dropped with the screen fully open. </p><p>So as durable as it may be, the iPhone Duo is still a lot more fragile if you leave the inner screen open and exposed. For comparison the Z Fold 8 and Z Fold 8 Ultra both lasted 210 drops, which dropped to 45 when opened, while the iPhone 18 Pro Max lasted 180.</p><p>As for water, the phone is IP68 rated (as expected) and is capable of being immersed in up to six meters of water. The screen is also listed as scratch-resistant up to 5 Mohs on the hardness scale, compared to just one on the Z Fold 8 series. Since this is the same as the iPhone 18 Pro Max, which has a Ceramic Shield 2 display, my guess is that only the Duo's outer display was tested.</p><p>The Duo's repairability index score of 2.65 is also lower than that of the other three phones. The 18 Pro Max hit 3.14, while the Z Fold 8 and 8 Ultra score 2.79 and 2.78, respectively. </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/7-ways-the-iphone-duo-could-change-foldables-for-the-better">7 ways the iPhone Duo could change foldables for the better</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[ 7 best iPhone Duo accessories to buy while you wait for your pre-order ]]></title>
                                                                                                <dc:content><![CDATA[ <p>There’s tremendous anticipation for 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>, and current <a href="https://www.tomsguide.com/phones/live/iphone-duo-pre-orders-live-latest-updates-on-stock-and-shipping-delays">delivery dates for pre-orders</a> indicate you might have to wait until next year to get it in your hands. Three months is a long time, but if you’ve already committed to that $1,999 investment, you’ll have plenty of runway to pick up some of the best gear to complement it.</p><p>Considering this is Apple’s first foray into the foldable space, it unlocks a whole new category of add-ons tailored to the dual-screen form factor. Having spent the last year testing the <a href="https://www.tomsguide.com/best-picks/best-phones">best phones</a> on both sides of the aisle — from standard flagships to rival foldables — I have a good idea of which gadgets are actually worth splurging on.</p><p>From obvious essentials like cases designed to protect that delicate hinge to less obvious productivity tools, here are the best iPhone Duo accessories to buy right now.</p><h2 id="best-iphone-duo-accessories-you-can-buy-right-now">Best iPhone Duo accessories you can buy right now</h2><div class="product"><a data-dimension112="16bab1fa-c99d-11f1-8dc5-17318a25a4f7" data-action="Deal Block" data-label="Duo 5000mAh Power Bank" data-dimension48="Duo 5000mAh Power Bank" data-dimension25="$79.99" href="https://www.amazon.com/dp/B0HCRSGRPL" 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="Djs8v2DTtukRnqVu42UKjH" name="BMX Duo 5000mAh Semi-Solid State Power Bank deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/Djs8v2DTtukRnqVu42UKjH-1920-80.jpg" mos="" align="middle" fullscreen="" width="600" height="600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0HCRSGRPL" target="_blank" rel="nofollow" data-dimension112="16bab1fa-c99d-11f1-8dc5-17318a25a4f7" data-action="Deal Block" data-label="Duo 5000mAh Power Bank" data-dimension48="Duo 5000mAh Power Bank" data-dimension25="$79.99">Duo 5000mAh Power Bank: $79.99</a></strong><br>You can’t just snap any ordinary MagSafe power bank onto the back of the iPhone Duo. That’s why BMX’s Duo 5,000 mAh power bank is such a smart pickup: it's tailored to the foldable's squat footprint without hanging over the bottom edge. What makes it even more compelling is its semi-solid-state battery cell, which significantly improves thermal efficiency and safety over standard lithium-ion packs. Paired with 15W wireless charging, 20W wired top-offs via USB-C, and a built-in kickstand to keep the Duo propped upright, it's one of the most practical everyday carry companions you can buy ahead of delivery day.<a class="view-deal button" href="https://www.amazon.com/dp/B0HCRSGRPL" target="_blank" rel="nofollow" data-dimension112="16bab1fa-c99d-11f1-8dc5-17318a25a4f7" data-action="Deal Block" data-label="Duo 5000mAh Power Bank" data-dimension48="Duo 5000mAh Power Bank" data-dimension25="$79.99">View Deal</a></p></div><div class="product"><a data-dimension112="4715170e-c99e-11f1-a6d4-9bb9b5191c8d" data-action="Deal Block" data-label="Pencil" data-dimension48="Pencil" data-dimension25="$69" href="https://www.amazon.com/Apple-MUWA3AM-A-Pencil-USB-C/dp/B0CL7J12YK/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1080px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="KvnFQiFWXqK8iVhZhkSEoP" name="Apple Pencil USB-C" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/KvnFQiFWXqK8iVhZhkSEoP-1920-80.jpg" mos="" align="middle" fullscreen="" width="1080" height="1080" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Apple has already confirmed that the iPhone Duo supports the <a href="https://www.tomsguide.com/opinion/apple-pencil-usb-c-3-things-i-like-and-3-i-dont" data-dimension112="4715170e-c99e-11f1-a6d4-9bb9b5191c8d" data-action="Deal Block" data-label="Pencil" data-dimension48="Pencil" data-dimension25="$69">Apple Pencil</a>, making it a natural addition if you want to take full advantage of that expansive 7.8-inch inner display. It’s an essential companion for anyone who prefers an authentic pen-to-paper feel over pecking at a virtual keyboard. Beyond note-taking, it excels at detailed sketching and markups, and it recharges quickly by plugging directly into the Duo’s USB-C port for quick top-offs on the go.<a class="view-deal button" href="https://www.amazon.com/Apple-MUWA3AM-A-Pencil-USB-C/dp/B0CL7J12YK/" target="_blank" rel="nofollow" data-dimension112="4715170e-c99e-11f1-a6d4-9bb9b5191c8d" data-action="Deal Block" data-label="Pencil" data-dimension48="Pencil" data-dimension25="$69">View Deal</a></p></div><div class="product"><a data-dimension112="3995ffba-c9a0-11f1-895b-d9f1c39fe39f" data-action="Deal Block" data-label="OntheGo 7-in-1 Multiport Adapter" data-dimension48="OntheGo 7-in-1 Multiport Adapter" data-dimension25="$56.99" href="https://www.amazon.com/Satechi-OntheGoTM-Magnetic-Multiport-Ethernet/dp/B0FWR19DW7" 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="gHXNSHpAqKyWmGns84LQfK" name="Satechi OntheGo 7-in-1 Multiport Adapter deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/gHXNSHpAqKyWmGns84LQfK-1920-80.jpg" mos="" align="middle" fullscreen="" width="600" height="600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Satechi-OntheGoTM-Magnetic-Multiport-Ethernet/dp/B0FWR19DW7" target="_blank" rel="nofollow" data-dimension112="3995ffba-c9a0-11f1-895b-d9f1c39fe39f" data-action="Deal Block" data-label="OntheGo 7-in-1 Multiport Adapter" data-dimension48="OntheGo 7-in-1 Multiport Adapter" data-dimension25="$56.99">OntheGo 7-in-1 Multiport Adapter: was $59.99 now $56.99</a></strong><br>Since it's a foldable phone, it's expected to be a productivity powerhouse thanks to its multitasking and expansive display. Personally, I'd love to transform it into a workstation and the <a href="https://www.tomsguide.com/phones/i-gave-my-iphone-the-same-ports-as-my-laptop-with-this-magsafe-accessory-and-now-i-bring-it-with-me-everywhere">Satechi OntheGo MagSafe adapter</a> is perfectly suited for it. That's because this puck-sized dongle snaps securely to the back via MagSafe and includes an HDMI port, a full-size USB-A port, SD and microSD card slots, USB-C pass-through charging, and a 1Gbps Ethernet port.<br><strong>Price check: </strong><a href="https://satechi.com/products/onthego-7-in-1-multiport-adapter" target="_blank" rel="nofollow"><strong>$60 @ Satechi</strong></a><a class="view-deal button" href="https://www.amazon.com/Satechi-OntheGoTM-Magnetic-Multiport-Ethernet/dp/B0FWR19DW7" target="_blank" rel="nofollow" data-dimension112="3995ffba-c9a0-11f1-895b-d9f1c39fe39f" data-action="Deal Block" data-label="OntheGo 7-in-1 Multiport Adapter" data-dimension48="OntheGo 7-in-1 Multiport Adapter" data-dimension25="$56.99">View Deal</a></p></div><div class="product"><a data-dimension112="ad772ebc-c9a1-11f1-ac79-ffb0f157db60" data-action="Deal Block" data-label="Bluetooth Controller" data-dimension48="Bluetooth Controller" data-dimension25="$149.99" href="https://www.bestbuy.com/product/mcon-bluetooth-controller/J3GW23L8SF/sku/6664808" 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="36Eh7Vr5AXpUNPfmvWQz5R" name="MCON Bluetooth Controller deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/36Eh7Vr5AXpUNPfmvWQz5R-1920-80.jpg" mos="" align="middle" fullscreen="" width="600" height="600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>If you're a gamer, you’ll definitely want to pick up <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" data-dimension112="ad772ebc-c9a1-11f1-ac79-ffb0f157db60" data-action="Deal Block" data-label="Bluetooth Controller" data-dimension48="Bluetooth Controller" data-dimension25="$149.99">Ohsnap’s MCON Bluetooth controller</a>. Having tested it extensively with the Pixel 11 Pro Fold, I can confirm it's practically tailor-made for foldables. Because it attaches via MagSafe rather than clumsy side clamps, it keeps the iPhone Duo perfectly balanced whether you're gaming on the compact cover display or unfolded across that massive 7.8-inch inner canvas. It essentially turns Apple’s foldable into a modern Nintendo Switch, complete with tactile analog sticks, responsive shoulder triggers, and a proper D-pad. Best of all, you can detach the controller entirely and use its magnetic base as an impromptu kickstand for tabletop play.<a class="view-deal button" href="https://www.bestbuy.com/product/mcon-bluetooth-controller/J3GW23L8SF/sku/6664808" target="_blank" rel="nofollow" data-dimension112="ad772ebc-c9a1-11f1-ac79-ffb0f157db60" data-action="Deal Block" data-label="Bluetooth Controller" data-dimension48="Bluetooth Controller" data-dimension25="$149.99">View Deal</a></p></div><div class="product"><a data-dimension112="39dfba08-c9a3-11f1-839d-15ad1adfa6f0" data-action="Deal Block" data-label="Privacy XTR Screen Protector" data-dimension48="Privacy XTR Screen Protector" data-dimension25="$59.99" href="https://www.amazon.com/ZAGG-Privacy-Screen-Protector-iPhone/dp/B0HBZNBDCG/" 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="eidWo4E6yLff5wQZx4mAN6" name="ZAGG Privacy XTR Screen Protector for iPhone Duo deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/eidWo4E6yLff5wQZx4mAN6-1920-80.jpg" mos="" align="middle" fullscreen="" width="600" height="600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>If there’s one piece of hardware I’d love to see Apple borrow for the iPhone Duo, it’s the Galaxy S26 Ultra’s 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" data-dimension112="39dfba08-c9a3-11f1-839d-15ad1adfa6f0" data-action="Deal Block" data-label="Privacy XTR Screen Protector" data-dimension48="Privacy XTR Screen Protector" data-dimension25="$59.99">Privacy Display</a>. Until that happens, the next best thing is <a href="https://www.tomsguide.com/phones/iphones/i-finally-put-one-of-those-privacy-screen-protectors-with-my-iphone-17-pro-heres-what-happened">ZAGG’s Glass 4-Way Privacy XTR screen protector</a>. It’s an essential add-on to keep prying eyes off your screen during crowded train commutes. Keep in mind that this covers only the 5.5-inch outer cover screen, which is precisely where you’ll handle quick one-handed tasks anyway. What makes it worth the pickup over standard protectors is that it blacks out viewing angles from the left, right, top, and bottom — in both portrait and landscape — giving you complete privacy no matter how you hold it.<a class="view-deal button" href="https://www.amazon.com/ZAGG-Privacy-Screen-Protector-iPhone/dp/B0HBZNBDCG/" target="_blank" rel="nofollow" data-dimension112="39dfba08-c9a3-11f1-839d-15ad1adfa6f0" data-action="Deal Block" data-label="Privacy XTR Screen Protector" data-dimension48="Privacy XTR Screen Protector" data-dimension25="$59.99">View Deal</a></p></div><div class="product"><a data-dimension112="8663d6f0-c9a5-11f1-a9a2-9d5410eb9afa" data-action="Deal Block" data-label="Slim Armor Pro S MagFit" data-dimension48="Slim Armor Pro S MagFit" data-dimension25="$99.99" href="https://www.amazon.com/Spigen-Rotating-Kickstand-Protection-Compatible/dp/B0GYQ5HLHG" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1151px;"><p class="vanilla-image-block" style="padding-top:96.70%;"><img id="DVGmmXNHMvjBfDDxFp2k7i" name="Spigen Slim Armor Pro S MagFit for iPhone Duo Case" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/DVGmmXNHMvjBfDDxFp2k7i-1920-80.jpg" mos="" align="middle" fullscreen="" width="1151" height="1113" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Spigen-Rotating-Kickstand-Protection-Compatible/dp/B0GYQ5HLHG" target="_blank" rel="nofollow" data-dimension112="8663d6f0-c9a5-11f1-a9a2-9d5410eb9afa" data-action="Deal Block" data-label="Slim Armor Pro S MagFit" data-dimension48="Slim Armor Pro S MagFit" data-dimension25="$99.99">Slim Armor Pro S MagFit: $99.99</a></strong><br>Don’t get me wrong: the iPhone Duo is an impressive engineering feat. But because it’s a foldable phone, its dual-screen chassis and exposed spine make it far more vulnerable to drop damage than a typical slab. That’s why I recommend Spigen’s Tough Armor Pro S MagFit, engineered to absorb heavy impacts without compromising everyday usability. The dual-layer build pairs a shock-absorbing TPU interior and Air Cushion corners with a rigid polycarbonate shell that easily clears military-grade drop-test standards. Best of all, Spigen packs a built-in kickstand while maintaining full MagSafe pass-through compatibility for hassle-free charging.<a class="view-deal button" href="https://www.amazon.com/Spigen-Rotating-Kickstand-Protection-Compatible/dp/B0GYQ5HLHG" target="_blank" rel="nofollow" data-dimension112="8663d6f0-c9a5-11f1-a9a2-9d5410eb9afa" data-action="Deal Block" data-label="Slim Armor Pro S MagFit" data-dimension48="Slim Armor Pro S MagFit" data-dimension25="$99.99">View Deal</a></p></div><div class="product"><a data-dimension112="7f3f0eb6-c9a6-11f1-8c46-8566aa098bc3" data-action="Deal Block" data-label="Low-Pro Grip" data-dimension48="Low-Pro Grip" data-dimension25="$35.77" href="https://www.amazon.com/PopSockets-Low-Pro-Profile-Ultra-Slim-Pocketable/dp/B0H74PY2DB/" 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="cngHTVfuMJgseBpsxAu2ib" name="Popsockets Low-Pro Grip deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/cngHTVfuMJgseBpsxAu2ib-1920-80.jpg" mos="" align="middle" fullscreen="" width="600" height="600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>PopSockets has been around for ages, but I recently tested the thinnest phone grip the company has ever produced: the <a href="https://www.tomsguide.com/phones/i-just-tried-the-thinnest-phone-grip-popsockets-has-created-and-now-theres-no-reason-to-not-get-a-grip-for-your-phone" data-dimension112="7f3f0eb6-c9a6-11f1-8c46-8566aa098bc3" data-action="Deal Block" data-label="Low-Pro Grip" data-dimension48="Low-Pro Grip" data-dimension25="$35.77">PopSockets Low-Pro Grip</a>. It takes everything you'd expect from a standard grip and slims it down so dramatically that it barely protrudes from the phone. At just 2.6mm thick, it remains remarkably sturdy thanks to an aluminum base and a stainless-steel kick-out hinge. It’s an ideal way to hold the wider iPhone Duo securely without adding annoying bulk to your pocket. Best of all, that low-profile hinge is robust enough to prop up Apple's hefty foldable in both orientations — whether you're taking a FaceTime call or watching videos hands-free.<a class="view-deal button" href="https://www.amazon.com/PopSockets-Low-Pro-Profile-Ultra-Slim-Pocketable/dp/B0H74PY2DB/" target="_blank" rel="nofollow" data-dimension112="7f3f0eb6-c9a6-11f1-8c46-8566aa098bc3" data-action="Deal Block" data-label="Low-Pro Grip" data-dimension48="Low-Pro Grip" data-dimension25="$35.77">View Deal</a></p></div><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-benchmark-leaks-and-apples-foldable-is-about-to-leave-android-rivals-in-the-dust">iPhone Duo Geekbench scores leak, and Apple's foldable is about to leave Android rivals in the dust</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-heres-why-an-iphone-18-pro-max-and-macbook-neo-combo-is-the-better-buy">iPhone Duo: Here’s why an iPhone 18 Pro Max and MacBook Neo combo is the better buy</a></li><li><a href="https://www.tomsguide.com/phones/iphones/apple-increases-iphone-duo-production-by-30-percent-heres-what-that-means-for-you">Apple increases iPhone Duo production by 30% — here's what that means for you</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/7-best-iphone-duo-accessories-to-buy-while-you-wait-for-your-pre-order</link>
                                                                            <description>
                            <![CDATA[ If you're lucky enough to secure an iPhone Duo pre-order without a long delivery wait, check out the best iPhone Duo accessories we've tested to get more out of the foldable. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">PLH5YMebXDqchPCtgbnkoB</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/Tsf5iGPc5JZA9ZuaPZqcvL-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 19 Oct 2026 04:30:00 +0000</pubDate>                                                                                                                                <updated>Mon, 19 Oct 2026 08:12:42 +0000</updated>
                                                                                                                                            <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ john.velasco@futurenet.com (John Velasco) ]]></author>                    <dc:creator><![CDATA[ John Velasco ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/TSj224oX8d5ERXaDs8pDGd-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/Tsf5iGPc5JZA9ZuaPZqcvL-1920-80.jpg">
                                                            <media:credit><![CDATA[BMX]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[BMX SolidSafe Duo 5K Power Bank on iPhone Duo.]]></media:description>                                                            <media:text><![CDATA[BMX SolidSafe Duo 5K Power Bank on iPhone Duo.]]></media:text>
                                <media:title type="plain"><![CDATA[BMX SolidSafe Duo 5K Power Bank on iPhone Duo.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/Tsf5iGPc5JZA9ZuaPZqcvL-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>There’s tremendous anticipation for 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>, and current <a href="https://www.tomsguide.com/phones/live/iphone-duo-pre-orders-live-latest-updates-on-stock-and-shipping-delays">delivery dates for pre-orders</a> indicate you might have to wait until next year to get it in your hands. Three months is a long time, but if you’ve already committed to that $1,999 investment, you’ll have plenty of runway to pick up some of the best gear to complement it.</p><p>Considering this is Apple’s first foray into the foldable space, it unlocks a whole new category of add-ons tailored to the dual-screen form factor. Having spent the last year testing the <a href="https://www.tomsguide.com/best-picks/best-phones">best phones</a> on both sides of the aisle — from standard flagships to rival foldables — I have a good idea of which gadgets are actually worth splurging on.</p><p>From obvious essentials like cases designed to protect that delicate hinge to less obvious productivity tools, here are the best iPhone Duo accessories to buy right now.</p><h2 id="best-iphone-duo-accessories-you-can-buy-right-now">Best iPhone Duo accessories you can buy right now</h2><div class="product"><a data-dimension112="16bab1fa-c99d-11f1-8dc5-17318a25a4f7" data-action="Deal Block" data-label="Duo 5000mAh Power Bank" data-dimension48="Duo 5000mAh Power Bank" data-dimension25="$79.99" href="https://www.amazon.com/dp/B0HCRSGRPL" 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="Djs8v2DTtukRnqVu42UKjH" name="BMX Duo 5000mAh Semi-Solid State Power Bank deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/Djs8v2DTtukRnqVu42UKjH-1920-80.jpg" mos="" align="middle" fullscreen="" width="600" height="600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0HCRSGRPL" target="_blank" rel="nofollow" data-dimension112="16bab1fa-c99d-11f1-8dc5-17318a25a4f7" data-action="Deal Block" data-label="Duo 5000mAh Power Bank" data-dimension48="Duo 5000mAh Power Bank" data-dimension25="$79.99">Duo 5000mAh Power Bank: $79.99</a></strong><br>You can’t just snap any ordinary MagSafe power bank onto the back of the iPhone Duo. That’s why BMX’s Duo 5,000 mAh power bank is such a smart pickup: it's tailored to the foldable's squat footprint without hanging over the bottom edge. What makes it even more compelling is its semi-solid-state battery cell, which significantly improves thermal efficiency and safety over standard lithium-ion packs. Paired with 15W wireless charging, 20W wired top-offs via USB-C, and a built-in kickstand to keep the Duo propped upright, it's one of the most practical everyday carry companions you can buy ahead of delivery day.<a class="view-deal button" href="https://www.amazon.com/dp/B0HCRSGRPL" target="_blank" rel="nofollow" data-dimension112="16bab1fa-c99d-11f1-8dc5-17318a25a4f7" data-action="Deal Block" data-label="Duo 5000mAh Power Bank" data-dimension48="Duo 5000mAh Power Bank" data-dimension25="$79.99">View Deal</a></p></div><div class="product"><a data-dimension112="4715170e-c99e-11f1-a6d4-9bb9b5191c8d" data-action="Deal Block" data-label="Pencil" data-dimension48="Pencil" data-dimension25="$69" href="https://www.amazon.com/Apple-MUWA3AM-A-Pencil-USB-C/dp/B0CL7J12YK/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1080px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="KvnFQiFWXqK8iVhZhkSEoP" name="Apple Pencil USB-C" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/KvnFQiFWXqK8iVhZhkSEoP-1920-80.jpg" mos="" align="middle" fullscreen="" width="1080" height="1080" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Apple has already confirmed that the iPhone Duo supports the <a href="https://www.tomsguide.com/opinion/apple-pencil-usb-c-3-things-i-like-and-3-i-dont" data-dimension112="4715170e-c99e-11f1-a6d4-9bb9b5191c8d" data-action="Deal Block" data-label="Pencil" data-dimension48="Pencil" data-dimension25="$69">Apple Pencil</a>, making it a natural addition if you want to take full advantage of that expansive 7.8-inch inner display. It’s an essential companion for anyone who prefers an authentic pen-to-paper feel over pecking at a virtual keyboard. Beyond note-taking, it excels at detailed sketching and markups, and it recharges quickly by plugging directly into the Duo’s USB-C port for quick top-offs on the go.<a class="view-deal button" href="https://www.amazon.com/Apple-MUWA3AM-A-Pencil-USB-C/dp/B0CL7J12YK/" target="_blank" rel="nofollow" data-dimension112="4715170e-c99e-11f1-a6d4-9bb9b5191c8d" data-action="Deal Block" data-label="Pencil" data-dimension48="Pencil" data-dimension25="$69">View Deal</a></p></div><div class="product"><a data-dimension112="3995ffba-c9a0-11f1-895b-d9f1c39fe39f" data-action="Deal Block" data-label="OntheGo 7-in-1 Multiport Adapter" data-dimension48="OntheGo 7-in-1 Multiport Adapter" data-dimension25="$56.99" href="https://www.amazon.com/Satechi-OntheGoTM-Magnetic-Multiport-Ethernet/dp/B0FWR19DW7" 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="gHXNSHpAqKyWmGns84LQfK" name="Satechi OntheGo 7-in-1 Multiport Adapter deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/gHXNSHpAqKyWmGns84LQfK-1920-80.jpg" mos="" align="middle" fullscreen="" width="600" height="600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Satechi-OntheGoTM-Magnetic-Multiport-Ethernet/dp/B0FWR19DW7" target="_blank" rel="nofollow" data-dimension112="3995ffba-c9a0-11f1-895b-d9f1c39fe39f" data-action="Deal Block" data-label="OntheGo 7-in-1 Multiport Adapter" data-dimension48="OntheGo 7-in-1 Multiport Adapter" data-dimension25="$56.99">OntheGo 7-in-1 Multiport Adapter: was $59.99 now $56.99</a></strong><br>Since it's a foldable phone, it's expected to be a productivity powerhouse thanks to its multitasking and expansive display. Personally, I'd love to transform it into a workstation and the <a href="https://www.tomsguide.com/phones/i-gave-my-iphone-the-same-ports-as-my-laptop-with-this-magsafe-accessory-and-now-i-bring-it-with-me-everywhere">Satechi OntheGo MagSafe adapter</a> is perfectly suited for it. That's because this puck-sized dongle snaps securely to the back via MagSafe and includes an HDMI port, a full-size USB-A port, SD and microSD card slots, USB-C pass-through charging, and a 1Gbps Ethernet port.<br><strong>Price check: </strong><a href="https://satechi.com/products/onthego-7-in-1-multiport-adapter" target="_blank" rel="nofollow"><strong>$60 @ Satechi</strong></a><a class="view-deal button" href="https://www.amazon.com/Satechi-OntheGoTM-Magnetic-Multiport-Ethernet/dp/B0FWR19DW7" target="_blank" rel="nofollow" data-dimension112="3995ffba-c9a0-11f1-895b-d9f1c39fe39f" data-action="Deal Block" data-label="OntheGo 7-in-1 Multiport Adapter" data-dimension48="OntheGo 7-in-1 Multiport Adapter" data-dimension25="$56.99">View Deal</a></p></div><div class="product"><a data-dimension112="ad772ebc-c9a1-11f1-ac79-ffb0f157db60" data-action="Deal Block" data-label="Bluetooth Controller" data-dimension48="Bluetooth Controller" data-dimension25="$149.99" href="https://www.bestbuy.com/product/mcon-bluetooth-controller/J3GW23L8SF/sku/6664808" 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="36Eh7Vr5AXpUNPfmvWQz5R" name="MCON Bluetooth Controller deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/36Eh7Vr5AXpUNPfmvWQz5R-1920-80.jpg" mos="" align="middle" fullscreen="" width="600" height="600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>If you're a gamer, you’ll definitely want to pick up <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" data-dimension112="ad772ebc-c9a1-11f1-ac79-ffb0f157db60" data-action="Deal Block" data-label="Bluetooth Controller" data-dimension48="Bluetooth Controller" data-dimension25="$149.99">Ohsnap’s MCON Bluetooth controller</a>. Having tested it extensively with the Pixel 11 Pro Fold, I can confirm it's practically tailor-made for foldables. Because it attaches via MagSafe rather than clumsy side clamps, it keeps the iPhone Duo perfectly balanced whether you're gaming on the compact cover display or unfolded across that massive 7.8-inch inner canvas. It essentially turns Apple’s foldable into a modern Nintendo Switch, complete with tactile analog sticks, responsive shoulder triggers, and a proper D-pad. Best of all, you can detach the controller entirely and use its magnetic base as an impromptu kickstand for tabletop play.<a class="view-deal button" href="https://www.bestbuy.com/product/mcon-bluetooth-controller/J3GW23L8SF/sku/6664808" target="_blank" rel="nofollow" data-dimension112="ad772ebc-c9a1-11f1-ac79-ffb0f157db60" data-action="Deal Block" data-label="Bluetooth Controller" data-dimension48="Bluetooth Controller" data-dimension25="$149.99">View Deal</a></p></div><div class="product"><a data-dimension112="39dfba08-c9a3-11f1-839d-15ad1adfa6f0" data-action="Deal Block" data-label="Privacy XTR Screen Protector" data-dimension48="Privacy XTR Screen Protector" data-dimension25="$59.99" href="https://www.amazon.com/ZAGG-Privacy-Screen-Protector-iPhone/dp/B0HBZNBDCG/" 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="eidWo4E6yLff5wQZx4mAN6" name="ZAGG Privacy XTR Screen Protector for iPhone Duo deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/eidWo4E6yLff5wQZx4mAN6-1920-80.jpg" mos="" align="middle" fullscreen="" width="600" height="600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>If there’s one piece of hardware I’d love to see Apple borrow for the iPhone Duo, it’s the Galaxy S26 Ultra’s 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" data-dimension112="39dfba08-c9a3-11f1-839d-15ad1adfa6f0" data-action="Deal Block" data-label="Privacy XTR Screen Protector" data-dimension48="Privacy XTR Screen Protector" data-dimension25="$59.99">Privacy Display</a>. Until that happens, the next best thing is <a href="https://www.tomsguide.com/phones/iphones/i-finally-put-one-of-those-privacy-screen-protectors-with-my-iphone-17-pro-heres-what-happened">ZAGG’s Glass 4-Way Privacy XTR screen protector</a>. It’s an essential add-on to keep prying eyes off your screen during crowded train commutes. Keep in mind that this covers only the 5.5-inch outer cover screen, which is precisely where you’ll handle quick one-handed tasks anyway. What makes it worth the pickup over standard protectors is that it blacks out viewing angles from the left, right, top, and bottom — in both portrait and landscape — giving you complete privacy no matter how you hold it.<a class="view-deal button" href="https://www.amazon.com/ZAGG-Privacy-Screen-Protector-iPhone/dp/B0HBZNBDCG/" target="_blank" rel="nofollow" data-dimension112="39dfba08-c9a3-11f1-839d-15ad1adfa6f0" data-action="Deal Block" data-label="Privacy XTR Screen Protector" data-dimension48="Privacy XTR Screen Protector" data-dimension25="$59.99">View Deal</a></p></div><div class="product"><a data-dimension112="8663d6f0-c9a5-11f1-a9a2-9d5410eb9afa" data-action="Deal Block" data-label="Slim Armor Pro S MagFit" data-dimension48="Slim Armor Pro S MagFit" data-dimension25="$99.99" href="https://www.amazon.com/Spigen-Rotating-Kickstand-Protection-Compatible/dp/B0GYQ5HLHG" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1151px;"><p class="vanilla-image-block" style="padding-top:96.70%;"><img id="DVGmmXNHMvjBfDDxFp2k7i" name="Spigen Slim Armor Pro S MagFit for iPhone Duo Case" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/DVGmmXNHMvjBfDDxFp2k7i-1920-80.jpg" mos="" align="middle" fullscreen="" width="1151" height="1113" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Spigen-Rotating-Kickstand-Protection-Compatible/dp/B0GYQ5HLHG" target="_blank" rel="nofollow" data-dimension112="8663d6f0-c9a5-11f1-a9a2-9d5410eb9afa" data-action="Deal Block" data-label="Slim Armor Pro S MagFit" data-dimension48="Slim Armor Pro S MagFit" data-dimension25="$99.99">Slim Armor Pro S MagFit: $99.99</a></strong><br>Don’t get me wrong: the iPhone Duo is an impressive engineering feat. But because it’s a foldable phone, its dual-screen chassis and exposed spine make it far more vulnerable to drop damage than a typical slab. That’s why I recommend Spigen’s Tough Armor Pro S MagFit, engineered to absorb heavy impacts without compromising everyday usability. The dual-layer build pairs a shock-absorbing TPU interior and Air Cushion corners with a rigid polycarbonate shell that easily clears military-grade drop-test standards. Best of all, Spigen packs a built-in kickstand while maintaining full MagSafe pass-through compatibility for hassle-free charging.<a class="view-deal button" href="https://www.amazon.com/Spigen-Rotating-Kickstand-Protection-Compatible/dp/B0GYQ5HLHG" target="_blank" rel="nofollow" data-dimension112="8663d6f0-c9a5-11f1-a9a2-9d5410eb9afa" data-action="Deal Block" data-label="Slim Armor Pro S MagFit" data-dimension48="Slim Armor Pro S MagFit" data-dimension25="$99.99">View Deal</a></p></div><div class="product"><a data-dimension112="7f3f0eb6-c9a6-11f1-8c46-8566aa098bc3" data-action="Deal Block" data-label="Low-Pro Grip" data-dimension48="Low-Pro Grip" data-dimension25="$35.77" href="https://www.amazon.com/PopSockets-Low-Pro-Profile-Ultra-Slim-Pocketable/dp/B0H74PY2DB/" 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="cngHTVfuMJgseBpsxAu2ib" name="Popsockets Low-Pro Grip deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/cngHTVfuMJgseBpsxAu2ib-1920-80.jpg" mos="" align="middle" fullscreen="" width="600" height="600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>PopSockets has been around for ages, but I recently tested the thinnest phone grip the company has ever produced: the <a href="https://www.tomsguide.com/phones/i-just-tried-the-thinnest-phone-grip-popsockets-has-created-and-now-theres-no-reason-to-not-get-a-grip-for-your-phone" data-dimension112="7f3f0eb6-c9a6-11f1-8c46-8566aa098bc3" data-action="Deal Block" data-label="Low-Pro Grip" data-dimension48="Low-Pro Grip" data-dimension25="$35.77">PopSockets Low-Pro Grip</a>. It takes everything you'd expect from a standard grip and slims it down so dramatically that it barely protrudes from the phone. At just 2.6mm thick, it remains remarkably sturdy thanks to an aluminum base and a stainless-steel kick-out hinge. It’s an ideal way to hold the wider iPhone Duo securely without adding annoying bulk to your pocket. Best of all, that low-profile hinge is robust enough to prop up Apple's hefty foldable in both orientations — whether you're taking a FaceTime call or watching videos hands-free.<a class="view-deal button" href="https://www.amazon.com/PopSockets-Low-Pro-Profile-Ultra-Slim-Pocketable/dp/B0H74PY2DB/" target="_blank" rel="nofollow" data-dimension112="7f3f0eb6-c9a6-11f1-8c46-8566aa098bc3" data-action="Deal Block" data-label="Low-Pro Grip" data-dimension48="Low-Pro Grip" data-dimension25="$35.77">View Deal</a></p></div><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-benchmark-leaks-and-apples-foldable-is-about-to-leave-android-rivals-in-the-dust">iPhone Duo Geekbench scores leak, and Apple's foldable is about to leave Android rivals in the dust</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-heres-why-an-iphone-18-pro-max-and-macbook-neo-combo-is-the-better-buy">iPhone Duo: Here’s why an iPhone 18 Pro Max and MacBook Neo combo is the better buy</a></li><li><a href="https://www.tomsguide.com/phones/iphones/apple-increases-iphone-duo-production-by-30-percent-heres-what-that-means-for-you">Apple increases iPhone Duo production by 30% — here's what that means for you</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple October 28 event — OLED MacBook Pro, new iPad mini, and other rumored devices ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Apple will reportedly unveil the long-rumored <a href="https://www.tomsguide.com/computing/macbooks/macbook-pro-m6-oled-rumors-everything-we-know-so-far">OLED MacBooks</a> at an <a href="https://www.tomsguide.com/computing/macbooks/apple-holding-event-oct-28-for-first-touchscreen-macbook-pro-what-we-know">upcoming event on October 28</a>. Bloomberg reporter and Apple tipster <a href="https://x.com/markgurman/status/2110584725983396061" target="_blank">Mark Gurman</a> (via <a href="https://www.macrumors.com/2026/10/15/apple-inviting-media-to-october-28-experience/" target="_blank">MacRumors</a>) shared details on X about the devices we can expect.</p><p>In addition to touchscreen OLED MacBooks, we might see new M6-powered Macs and a <a href="https://www.tomsguide.com/computing/ipads/ipad-mini-8-rumors-everything-we-know-so-far">new iPad mini</a> with an OLED panel and a repositioned front camera. These devices would complement the other Apple computers released this year, including the MacBook Neo, Mac Studio, and Mac mini.</p><p>Apple hasn’t officially announced an event or which devices it might unveil, so take all of this with a healthy dose of skepticism. That said, here are the rumors and reports we’ve heard about the devices Gurman claims we’ll see on October 28.</p><h2 id="touchscreen-oled-macbook-pro-models">Touchscreen OLED MacBook Pro models</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Q8mnPsZYmMFyyKZf5hxX2C" name="MacBook Pro vs MacBook Neo" alt="MacBook Pro vs MacBook Neo" src="https://cdn.mos.cms.futurecdn.net/Q8mnPsZYmMFyyKZf5hxX2C-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>I’ve previously reported on the rumored <a href="https://www.tomsguide.com/computing/laptops/macbook-ultra-everything-we-know-so-far">MacBook Ultra</a>, which will reportedly feature an OLED touchscreen and a new design. While MacBooks that fit that description should still launch, Mark Gurman says they'll be part of the MacBook Pro line.</p><p>Aside from the name, the OLED MacBook Pros are expected to be the thinnest and lightest MacBooks ever, which would be quite a feat if they outdo the MacBook Air in that regard. OLED panels are thinner and lighter than traditional displays, so that may be a factor—just as the <a href="https://www.tomsguide.com/computing/ipads/ipad-pro-m5-review">iPad Pro M5</a> is thinner and lighter than a similarly sized iPad Air thanks to its OLED panel.</p><p>Rumors suggest Apple may abandon the notch in favor of an iPhone-style <a href="https://www.tomsguide.com/news/iphone-15-dynamic-island-what-you-need-to-know">Dynamic Island</a>. Some folks have never liked the notch on current MacBooks, so this upgrade would be welcome news if it’s true.</p><p>We don’t yet know which chips these 14- and 16-inch OLED MacBooks will use, but reports suggest they will use the M5 Pro and M5 Max chips from the existing MacBook Pros. Even if these are technically last-gen chips, they are more powerful than the M6 processor in the current Mac mini, so these machines won’t be compromised in that regard. That said, I expect these MacBook Pros will command a very steep price.</p><h2 id="new-ipad-mini">New iPad mini</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="FFvt6WRhhQWvHKtffpdzDX" name="iPad mini 7-LIST4.jpg" alt="iPad mini 7" src="https://cdn.mos.cms.futurecdn.net/FFvt6WRhhQWvHKtffpdzDX-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Apple is also reportedly launching a new iPad mini model. The main upgrade expected for the company’s smallest tablet is an OLED display, making it the second iPad to feature that technology after the iPad Pro.</p><p>Rumors about the iPad mini’s refresh rate have been inconsistent. The current model tops out at 60Hz, but some believe an OLED panel could bump it to 120Hz, like the iPad Pro. While Mark Gurman says Apple has tested 60Hz and 120Hz versions, it hasn’t decided which to use.</p><p>Like the current iPad Air and iPad Pro models, the iPad mini is expected to receive a repositioned front-facing camera to support landscape video calls. The diminutive tablet is also rumored to get a redesigned speaker system. We also don’t know whether this model will be thinner and lighter or have smaller bezels than previous iterations.</p><h2 id="m6-macs">M6 Macs</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="iMDyjUuCMJ7nvTzWVKvneU" name="iMac M4 (2024)-11-LIST.jpg" alt="Apple iMac M4 review unit on desk" src="https://cdn.mos.cms.futurecdn.net/iMDyjUuCMJ7nvTzWVKvneU-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Apple debuted the <a href="https://www.tomsguide.com/computing/cpus/i-analyzed-apples-new-2nm-m6-chip-here-is-why-m1-holdouts-finally-need-to-upgrade">M6 chip</a> with the new <a href="https://www.tomsguide.com/computing/apple-desktops/mac-mini-m6-review">Mac mini M6</a>, but it’s safe to assume the company will also bring this processor to its MacBooks. If Gurman’s report is accurate, we could see an entry-level 14-inch MacBook Pro with M6 at this October 28 event. We’re not sure if this will keep the same design as existing MacBook Pros.</p><p>Similarly, Apple could unveil a new M6-powered iMac. That’s all the report says, so it’s anyone’s guess if this all-in-one will feature an updated design or other new features beyond a spec bump.</p><p>While on the topic of the M6 chip, <a href="https://www.tomsguide.com/computing/macbooks/macbook-ultra-could-release-on-november-6-but-dont-expect-an-m6-chip-to-appear">Gurman says Apple won’t develop any M6 Pro, M6 Max, or even M6 Ultra processors</a>. Apple reportedly wants to pivot more toward AI and better graphics performance. To that end, the company plans to focus its efforts and resources on developing M7 chips sooner—which means skipping higher-end M6 processors.</p><h2 id="outlook-2">Outlook</h2><p>With this Apple event reportedly happening on October 28, we won’t have to wait long to see whether any of these rumored new devices are real. That said, Apple tends to release new Macs and iPads around that time of year, so don’t be surprised if it launches new devices. Stay tuned for more updates as we hear 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/live/iphone-duo-pre-orders-live-latest-updates-on-stock-and-shipping-delays"><strong>iPhone Duo pre-orders LIVE — latest stock updates and shortest wait times</strong></a></li><li><a href="https://www.tomsguide.com/news/live/apple-homeview-event-october-13-live-updates"><strong>Apple 'Welcome home' event RECAP</strong></a></li><li><a href="https://www.tomsguide.com/computing/apple-desktops/apple-mac-studio-m5-ultra-review"><strong>I tested the Mac Studio M5 Ultra — and it’s the best kind of overkill</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/apple-october-28-event-oled-macbook-pro-new-ipad-mini-and-other-rumored-devices</link>
                                                                            <description>
                            <![CDATA[ Apple is expected to announce a host of new Macs during an October 28 event. Here's what we expect to see at the big unveiling. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">nzz4wWghYaoDus5B93kKai</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/hP8bX9FrAUHv2JdHLVGvCA-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 17 Oct 2026 10:00:00 +0000</pubDate>                                                                                                                                <updated>Sun, 18 Oct 2026 21:59:20 +0000</updated>
                                                                                                                                            <category><![CDATA[Computing]]></category>
                                                                                                <author><![CDATA[ tony.polanco@futurenet.com (Tony Polanco) ]]></author>                    <dc:creator><![CDATA[ Tony Polanco ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/atzRNqFt5wYgEUPBDahWsD-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/hP8bX9FrAUHv2JdHLVGvCA-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[MacBook Pro M3 Pro on bench]]></media:description>                                                            <media:text><![CDATA[MacBook Pro M3 Pro on bench]]></media:text>
                                <media:title type="plain"><![CDATA[MacBook Pro M3 Pro on bench]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/hP8bX9FrAUHv2JdHLVGvCA-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Apple will reportedly unveil the long-rumored <a href="https://www.tomsguide.com/computing/macbooks/macbook-pro-m6-oled-rumors-everything-we-know-so-far">OLED MacBooks</a> at an <a href="https://www.tomsguide.com/computing/macbooks/apple-holding-event-oct-28-for-first-touchscreen-macbook-pro-what-we-know">upcoming event on October 28</a>. Bloomberg reporter and Apple tipster <a href="https://x.com/markgurman/status/2110584725983396061" target="_blank">Mark Gurman</a> (via <a href="https://www.macrumors.com/2026/10/15/apple-inviting-media-to-october-28-experience/" target="_blank">MacRumors</a>) shared details on X about the devices we can expect.</p><p>In addition to touchscreen OLED MacBooks, we might see new M6-powered Macs and a <a href="https://www.tomsguide.com/computing/ipads/ipad-mini-8-rumors-everything-we-know-so-far">new iPad mini</a> with an OLED panel and a repositioned front camera. These devices would complement the other Apple computers released this year, including the MacBook Neo, Mac Studio, and Mac mini.</p><p>Apple hasn’t officially announced an event or which devices it might unveil, so take all of this with a healthy dose of skepticism. That said, here are the rumors and reports we’ve heard about the devices Gurman claims we’ll see on October 28.</p><h2 id="touchscreen-oled-macbook-pro-models">Touchscreen OLED MacBook Pro models</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Q8mnPsZYmMFyyKZf5hxX2C" name="MacBook Pro vs MacBook Neo" alt="MacBook Pro vs MacBook Neo" src="https://cdn.mos.cms.futurecdn.net/Q8mnPsZYmMFyyKZf5hxX2C-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>I’ve previously reported on the rumored <a href="https://www.tomsguide.com/computing/laptops/macbook-ultra-everything-we-know-so-far">MacBook Ultra</a>, which will reportedly feature an OLED touchscreen and a new design. While MacBooks that fit that description should still launch, Mark Gurman says they'll be part of the MacBook Pro line.</p><p>Aside from the name, the OLED MacBook Pros are expected to be the thinnest and lightest MacBooks ever, which would be quite a feat if they outdo the MacBook Air in that regard. OLED panels are thinner and lighter than traditional displays, so that may be a factor—just as the <a href="https://www.tomsguide.com/computing/ipads/ipad-pro-m5-review">iPad Pro M5</a> is thinner and lighter than a similarly sized iPad Air thanks to its OLED panel.</p><p>Rumors suggest Apple may abandon the notch in favor of an iPhone-style <a href="https://www.tomsguide.com/news/iphone-15-dynamic-island-what-you-need-to-know">Dynamic Island</a>. Some folks have never liked the notch on current MacBooks, so this upgrade would be welcome news if it’s true.</p><p>We don’t yet know which chips these 14- and 16-inch OLED MacBooks will use, but reports suggest they will use the M5 Pro and M5 Max chips from the existing MacBook Pros. Even if these are technically last-gen chips, they are more powerful than the M6 processor in the current Mac mini, so these machines won’t be compromised in that regard. That said, I expect these MacBook Pros will command a very steep price.</p><h2 id="new-ipad-mini">New iPad mini</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="FFvt6WRhhQWvHKtffpdzDX" name="iPad mini 7-LIST4.jpg" alt="iPad mini 7" src="https://cdn.mos.cms.futurecdn.net/FFvt6WRhhQWvHKtffpdzDX-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Apple is also reportedly launching a new iPad mini model. The main upgrade expected for the company’s smallest tablet is an OLED display, making it the second iPad to feature that technology after the iPad Pro.</p><p>Rumors about the iPad mini’s refresh rate have been inconsistent. The current model tops out at 60Hz, but some believe an OLED panel could bump it to 120Hz, like the iPad Pro. While Mark Gurman says Apple has tested 60Hz and 120Hz versions, it hasn’t decided which to use.</p><p>Like the current iPad Air and iPad Pro models, the iPad mini is expected to receive a repositioned front-facing camera to support landscape video calls. The diminutive tablet is also rumored to get a redesigned speaker system. We also don’t know whether this model will be thinner and lighter or have smaller bezels than previous iterations.</p><h2 id="m6-macs">M6 Macs</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="iMDyjUuCMJ7nvTzWVKvneU" name="iMac M4 (2024)-11-LIST.jpg" alt="Apple iMac M4 review unit on desk" src="https://cdn.mos.cms.futurecdn.net/iMDyjUuCMJ7nvTzWVKvneU-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Apple debuted the <a href="https://www.tomsguide.com/computing/cpus/i-analyzed-apples-new-2nm-m6-chip-here-is-why-m1-holdouts-finally-need-to-upgrade">M6 chip</a> with the new <a href="https://www.tomsguide.com/computing/apple-desktops/mac-mini-m6-review">Mac mini M6</a>, but it’s safe to assume the company will also bring this processor to its MacBooks. If Gurman’s report is accurate, we could see an entry-level 14-inch MacBook Pro with M6 at this October 28 event. We’re not sure if this will keep the same design as existing MacBook Pros.</p><p>Similarly, Apple could unveil a new M6-powered iMac. That’s all the report says, so it’s anyone’s guess if this all-in-one will feature an updated design or other new features beyond a spec bump.</p><p>While on the topic of the M6 chip, <a href="https://www.tomsguide.com/computing/macbooks/macbook-ultra-could-release-on-november-6-but-dont-expect-an-m6-chip-to-appear">Gurman says Apple won’t develop any M6 Pro, M6 Max, or even M6 Ultra processors</a>. Apple reportedly wants to pivot more toward AI and better graphics performance. To that end, the company plans to focus its efforts and resources on developing M7 chips sooner—which means skipping higher-end M6 processors.</p><h2 id="outlook-2">Outlook</h2><p>With this Apple event reportedly happening on October 28, we won’t have to wait long to see whether any of these rumored new devices are real. That said, Apple tends to release new Macs and iPads around that time of year, so don’t be surprised if it launches new devices. Stay tuned for more updates as we hear 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/live/iphone-duo-pre-orders-live-latest-updates-on-stock-and-shipping-delays"><strong>iPhone Duo pre-orders LIVE — latest stock updates and shortest wait times</strong></a></li><li><a href="https://www.tomsguide.com/news/live/apple-homeview-event-october-13-live-updates"><strong>Apple 'Welcome home' event RECAP</strong></a></li><li><a href="https://www.tomsguide.com/computing/apple-desktops/apple-mac-studio-m5-ultra-review"><strong>I tested the Mac Studio M5 Ultra — and it’s the best kind of overkill</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Should you buy the Apple HomeView? 5 reasons to pick one up (and 2 reasons why you might want to hold off) ]]></title>
                                                                                                <dc:content><![CDATA[ <p>If you’ve been eagerly eyeing Amazon’s Echo Show or Google’s Nest Hub smart displays but wanted to wait and see what Apple had up its sleeve, you’re in luck: the wait is finally over. Unveiled earlier this week, the <a href="https://www.tomsguide.com/home/smart-home/i-saw-apples-homeview-early-7-things-you-need-to-know-about-the-smart-home-display">Apple HomeView</a> officially launches on Friday, November 13.</p><p>Rumors of a smart speaker with a built-in display from Cupertino have been making the rounds online for years. Mark Gurman first reported all the way back in 2021 that Apple planned to expand its smart home lineup with a display-equipped device.</p><div class="product"><a data-dimension112="e9dbb518-c991-11f1-a258-370908033b67" data-action="Deal Block" data-label="HomeView" data-dimension48="HomeView" data-dimension25="$290" href="https://www.amazon.com/dp/B0HMXG5T64" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1266px;"><p class="vanilla-image-block" style="padding-top:118.48%;"><img id="JWMqwRebshquiRevipUgM" name="HomeView" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/JWMqwRebshquiRevipUgM-1920-80.png" mos="" align="middle" fullscreen="" width="1266" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0HMXG5T64" target="_blank" rel="nofollow" data-dimension112="e9dbb518-c991-11f1-a258-370908033b67" data-action="Deal Block" data-label="HomeView" data-dimension48="HomeView" data-dimension25="$290">HomeView: was $299 now $290</a></strong><br>Apple's smart home display is finally coming, offering direct access to all the smart home and Apple devices you have throughout your house. Complete with FaceTime support, a built-in digital photo frame, access to Siri AI and more. And you can save $9 off the usual price if you pre-order through Amazon.<a class="view-deal button" href="https://www.amazon.com/dp/B0HMXG5T64" target="_blank" rel="nofollow" data-dimension112="e9dbb518-c991-11f1-a258-370908033b67" data-action="Deal Block" data-label="HomeView" data-dimension48="HomeView" data-dimension25="$290">View Deal</a></p></div><p>Then came reports of a <a href="https://www.tomsguide.com/home/smart-home/apples-next-big-thing-could-be-a-dollar1000-home-robot-ipad-combo">smart display attached to a robotic arm</a> that could swivel to follow you around the room, much like the now-discontinued <a href="https://www.tomsguide.com/reviews/amazon-echo-show-10-3rd-gen">Echo Show 10</a>. Later, in 2023, Apple analyst Ming-Chi Kuo predicted the new device would <a href="https://www.tomsguide.com/home/smart-home/apples-new-homepod-with-ipad-like-display-reportedly-launching-this-year">feature a 7-inch display</a>.</p><p>Now, after five years of speculation, the Apple HomeView is real and could be in your house in time for the holidays. But is it actually worth buying? Here are five reasons to pick up the HomeView to control your existing smart home devices — or make it the starting point for your setup — along with two reasons you might want to skip it for one of the <a href="https://www.tomsguide.com/best-picks/best-smart-displays">best smart displays</a> instead. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-X75mQW"></div>                            </div>                            <script src="https://kwizly.com/embed/X75mQW.js" async></script><h3 class="article-body__section" id="section-apple-homeview-reasons-to-buy"><span>Apple HomeView: Reasons to buy</span></h3><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.21%;"><img id="WrAQq4miYm7crJrNTRgoFf" name="dji_mimo_20261013_093244_20261013093244_1791900497483_photo" alt="Apple HomeView" src="https://cdn.mos.cms.futurecdn.net/WrAQq4miYm7crJrNTRgoFf-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1439" attribution="" endorsement="" class="inline"></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’s first smart display brings a lot to the table, especially if you’ve already bought into the company’s ecosystem. From its dual dashboard system and hands-free recipe navigation to deeper Siri AI integration and seamless FaceTime calls, here are the top features that make the HomeView worth adding to your smart home.</p><h2 id="smart-home-dashboard">Smart home dashboard</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1613px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="Y95uGJ8hKSYNMgWZiVdCba" name="Tezza-5018" alt="Apple HomeView" src="https://cdn.mos.cms.futurecdn.net/Y95uGJ8hKSYNMgWZiVdCba-1920-80.jpg" mos="" align="middle" fullscreen="" width="1613" height="907" attribution="" endorsement="" class="inline"></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 hardest things about living in a smart home is having to juggle between multiple apps on your phone. If you have one of the <a href="https://www.tomsguide.com/us/best-apple-iphone,review-6348.html">best iPhones</a>, the <a href="https://www.tomsguide.com/us/apple-homekit-faq,review-4195.html">Apple Home app</a> helps simplify this, but the Apple HomeView takes things a step further.</p><p>The HomeView actually features two distinct dashboards: a shared household view and a personal one. When no specific person is in front of the screen, the device defaults to a shared layout displaying universal widgets for controlling smart lights and thermostats or viewing live security camera feeds. This is a great addition for guests, who can easily adjust a room’s lighting without having to guess the exact names of your individual smart lights.</p>                    <div class= "tiktok-wrapper" style="min-height: 750px;"><blockquote class="tiktok-embed" cite="https://www.tiktok.com/@tomsguide/video/7696148891518946590" data-video-id="7696148891518946590" style="max-width: 605px; min-width: 325px;">                        <section>                            <a target="_blank" title="@tomsguide" href="https://www.tiktok.com/@tomsguide">@tomsguide</a>                            <p></p><a target="_blank" title="♬ Boom Bap Cruise - Linda Dryer" href="https://www.tiktok.com/music/Boom-Bap-Cruise-7662821788184021046">♬ Boom Bap Cruise - Linda Dryer</a></section>                    </blockquote></div>                <p>Then, when one of up to six household members approaches the HomeView, the display switches to a personalized home screen using facial recognition. This second dashboard surfaces your private reminders, personal calendar events, and favorite accessory shortcuts pulled directly from your iPhone.</p><h2 id="siri-ai">Siri 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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="yejJTJrHR6UwZnNJUcjEo4" name="Siri AI on Apple HomeView" alt="Apple HomeView" src="https://cdn.mos.cms.futurecdn.net/yejJTJrHR6UwZnNJUcjEo4-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: Apple)</span></figcaption></figure><p>Just like how Amazon’s Echo Show smart displays got an upgrade to the AI-powered <a href="https://www.tomsguide.com/home/smart-home/alexa-plus-supported-devices">Alexa Plus</a> earlier this year, HomeView relies heavily on <a href="https://www.tomsguide.com/ai/siri-just-got-a-major-ai-upgrade-here-are-5-things-to-try-first">Siri AI</a>. Powered by Apple Intelligence and the built-in A18 chip inside HomeView, this new version of Siri is tailored to handle natural follow-up questions, mid-sentence corrections, and complex, multi-part commands without you having to repeat the wake word.</p><p>When paired with your iPhone or iPad, Siri AI can pull personal context from Apple’s first-party apps like Messages, Mail, Calendar, and Reminders. At the same time, Siri AI on HomeView uses broad world knowledge to deliver conversational answers instead of just redirecting you to a web link on your other devices.</p><p>When it comes to HomeView’s 7-inch display, Siri AI acts directly on what’s currently on screen. For instance, you can look at a live camera feed and ask it to unlock the front door — provided you have a compatible smart lock installed. Likewise, when looking at a recipe on your HomeView, you can ask Siri AI to add those ingredients straight to your shopping list.</p><h2 id="hands-free-facetime-messages-and-calls">Hands-free FaceTime, messages and calls</h2><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="V2BJc7XjFKB44aDXWbdPqH" name="FaceTime on Apple HomeView" alt="Apple HomeView" src="https://cdn.mos.cms.futurecdn.net/V2BJc7XjFKB44aDXWbdPqH-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: Apple)</span></figcaption></figure><p>Having to prop your iPhone up every time you want to FaceTime with your grandparents gets old fast. Fortunately, Apple’s HomeView handles video calls with ease thanks to its 12MP camera equipped with <a href="https://www.tomsguide.com/phones/iphones/i-tested-the-iphone-17-vs-iphone-16-selfie-camera-heres-what-i-found">Center Stage</a> auto-framing. You can also start a FaceTime call completely hands-free just by asking Siri, which is especially handy if you’re mid-recipe and need to quickly check an ingredient with your parents.</p><p>Just like on a Mac, you can send iMessages directly from the HomeView. While you can type them out using the on-screen keyboard, you can also dictate them — and have incoming replies read back to you — using Siri AI. Phone calls work seamlessly, too; if your iPhone rings in another room, you can simply answer the incoming call directly on the smart display’s screen. Plus, HomeView doubles as an in-home intercom, letting you blast quick voice announcements like “dinner is ready” across every Apple device in the house.</p><h2 id="multi-person-recognition">Multi-person recognition</h2><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="Lh6SwNK5kyUkXcScvf4PvY" name="Apple-HomeView-user-recognition" alt="Apple HomeView user recognition" src="https://cdn.mos.cms.futurecdn.net/Lh6SwNK5kyUkXcScvf4PvY-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: Apple)</span></figcaption></figure><p>That 12MP camera on the front of HomeView isn’t just for video calls. While the new device lacks <a href="https://www.tomsguide.com/us/face-id-faq,news-25910.html">Face ID</a>, it uses the camera to scan the faces of up to six people in your household. This is what allows your personal dashboard to automatically pop up when you walk up to the screen.</p><p>In a way, HomeView’s multi-person recognition feels like having separate user accounts on the shared family computer back in the day. Once the device recognizes you and verifies your unlocked iPhone or iPad is nearby on the same network, you can securely access your personal iMessages, calendar, and reminders. HomeView’s far-field microphones also support multi-user voice matching, allowing Siri AI to differentiate between family members and respond with personalized answers when different people talk to it across the room.</p><h2 id="step-by-step-recipes">Step-by-step recipes</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1847px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="LGtw8akM5747RWmG7nPeeN" name="dji_mimo_20261013_091948_20261013091902_1791901604549_video_still" alt="Apple HomeView" src="https://cdn.mos.cms.futurecdn.net/LGtw8akM5747RWmG7nPeeN-1920-80.jpg" mos="" align="middle" fullscreen="" width="1847" height="1039" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>There’s no better place for a smart display than the kitchen, and Apple definitely considered this when designing HomeView. One of its best features is how you can take any online recipe you’ve opened in Safari and send it straight to the device. From there, HomeView strips away all the clutter and reformats the page into clean, step-by-step instructions with large text that’s easy to read across the room. It even uses proximity sensing to automatically scale the text size up or down based on how far away you're standing.</p>                    <div class= "tiktok-wrapper" style="min-height: 750px;"><blockquote class="tiktok-embed" cite="https://www.tiktok.com/@tomsguide/video/7696174677827341581" data-video-id="7696174677827341581" style="max-width: 605px; min-width: 325px;">                        <section>                            <a target="_blank" title="@tomsguide" href="https://www.tiktok.com/@tomsguide">@tomsguide</a>                            <p></p><a target="_blank" title="♬ original sound - Tom’s Guide" href="https://www.tiktok.com/music/original-sound-7696174764578097934">♬ original sound - Tom’s Guide</a></section>                    </blockquote></div>                <p>Since you don’t want to be touching a glass screen with messy hands, you can navigate the entire process using voice commands. Saying phrases like “Siri, next step” lets you advance the recipe without leaving greasy fingerprints on the display. HomeView’s recipes also feature embedded step timers, allowing you to set, label, and manage multiple concurrent timers hands-free while you cook.</p><h3 class="article-body__section" id="section-apple-homeview-reasons-to-skip"><span>Apple HomeView: Reasons to skip</span></h3><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="dUHoMCee2gXRwXjViQGJSJ" name="dji_mimo_20261013_093238_20261013093237_1791900497627_photo.JPG" alt="Apple HomeView hands-on" src="https://cdn.mos.cms.futurecdn.net/dUHoMCee2gXRwXjViQGJSJ-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 impressive as the HomeView is on paper, it isn't going to be the right fit for every home. Between its strict reliance on the iPhone and the steep additional costs required just to get a clean wall-mounted install, here are two major drawbacks you should keep in mind before picking one up.</p><h2 id="iphone-required">iPhone required</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="84KiXHo2xbPhfxDsNyDoVn" name="iPhone 18 Pro - Pro Controls" alt="iPhone 18 Pro showing Pro Controls." src="https://cdn.mos.cms.futurecdn.net/84KiXHo2xbPhfxDsNyDoVn-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>Unlike Amazon’s Echo Show or Google’s Nest Hub devices which are platform agnostic, for the best experience with Apple’s HomeView, you’re going to need an iPhone or at least an iPad. In fact, without one, you can’t even set up a HomeView since you need a device running <a href="https://www.tomsguide.com/phones/iphones/ios-27-2-beta-is-here-5-biggest-upgrades-for-your-iphone-including-a-revamped-health-app">iOS 27.2</a> or later just to register it.</p><p>While there are households where iOS and Android co-exist, non-iPhone users won’t get anywhere close to the full HomeView experience. Without an iPhone or iPad, you don’t get access to the device’s personal dashboard since facial recognition won’t work — it only matches faces to active Apple IDs. Essentially, without an iPhone, you're stuck feeling like a guest in your own home.</p><h2 id="a-clean-install-costs-even-more">A clean install costs even more</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1337px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="nmGa5q8gvcgCQ87UF8txvH" name="Apple HomeView on wall" alt="Apple HomeView on wall" src="https://cdn.mos.cms.futurecdn.net/nmGa5q8gvcgCQ87UF8txvH-1920-80.png" mos="" align="middle" fullscreen="" width="1337" height="752" 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>At $299, the standard Apple HomeView is already one of the most expensive smart displays on the market, sharing a price point with Amazon’s much larger <a href="https://www.tomsguide.com/home/smart-home/i-bought-this-dollar30-accessory-and-it-completely-transformed-how-i-use-the-echo-show-15">Echo Show 15</a>. However, if you want to wall-mount it — especially if you’re aiming for a sleek, wire-free installation — that $299 base price quickly balloons.</p><p>Unlike the tabletop model, the wall-mounted HomeView doesn't include a mount or a power supply in the box. Choosing the DIY route with Apple’s entry-level Power Mount USB-C adds $59 to your tab, pushing the total to $358. If you want a hardwired, flush-to-the-wall setup without visible cables dangling down to an outlet, the Power Mount AC Wired costs $79 extra — plus the additional cost of hiring a licensed electrician to wire it safely, which Apple recommends through a partnership with ADT. </p><p>Finally, if you want to run power and data over a single network cable, the Power Mount PoE costs an eye-watering $129 on top of the display, and that's before factoring in the cost of a PoE switch or professional installation.</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/home/smart-home/apple-homeview-is-already-discounted-ahead-of-next-months-release-heres-how-much-you-could-save-by-pre-ordering"><strong>Apple HomeView is already discounted ahead of next month's release — here's how much you could save by pre-ordering</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/home/smart-home/echo-show-15-vs-echo-show-21"><strong>Amazon Echo Show 15 vs Echo Show 21: which wall-mountable smart display should you buy?</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/home/smart-home/apples-homeview-isnt-reinventing-smart-displays-its-fixing-what-made-me-abandon-my-amazon-echo-shows"><strong>Apple's HomeView isn't reinventing smart displays — it's fixing what made me abandon my Amazon Echo Shows</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/home/smart-home/apple-home-view-buy-or-skip</link>
                                                                            <description>
                            <![CDATA[ The Apple HomeView is the ultimate smart home hub for iPhone power users, but lock-in and hidden setup costs hold it back. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">mccQ4qmRvQEUBYQnh97NaN</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/9jdQyCrXyJPXrezZehJ53j-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 17 Oct 2026 07:45:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Smart Home]]></category>
                                                    <category><![CDATA[Home]]></category>
                                                                                                <author><![CDATA[ anthony.spadafora@futurenet.com (Anthony Spadafora) ]]></author>                    <dc:creator><![CDATA[ Anthony Spadafora ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/z73LEoj7FkUjNG85GcWHtH-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Anthony Spadafora is the managing editor for security and home office furniture at Tom’s Guide where he covers everything from data breaches and malware to password managers and the best way to cover your whole home or business with a strong Wi-Fi signal.&lt;/p&gt;&lt;p&gt;Before joining the team, he spent three years covering cybersecurity and B2B tech for ITProPortal while living in South Korea. After moving back to the US. Anthony joined the TechRadar Pro team where he covered these topics along with VPNs, web hosting, online collaboration software and video conferencing for four years. Anthony also has his ears to the ground and is on the lookout for the next major cyberattack or data breach.&lt;/p&gt;&lt;p&gt;Based in Houston, Texas, Anthony also handles VPN testing for both Tom’s Guide and TechRadar. As someone who has worked from home exclusively since 2018, he has reviewed dozens of standing desks as well as office chairs and has taken a closer look at other essential remote working accessories. As part of these reviews, Anthony frequently builds intricate desk setups which is why he’s such a big advocate for cable management and keeping things organized. When he’s not writing, he can be found tinkering with PCs and game consoles, managing cables and making upgrades to his smart home.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/9jdQyCrXyJPXrezZehJ53j-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A person interacting with Apple&#039;s HomeView smart display with a thumbs up and thumbs down for buy or skip]]></media:description>                                                            <media:text><![CDATA[A person interacting with Apple&#039;s HomeView smart display with a thumbs up and thumbs down for buy or skip]]></media:text>
                                <media:title type="plain"><![CDATA[A person interacting with Apple&#039;s HomeView smart display with a thumbs up and thumbs down for buy or skip]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/9jdQyCrXyJPXrezZehJ53j-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>If you’ve been eagerly eyeing Amazon’s Echo Show or Google’s Nest Hub smart displays but wanted to wait and see what Apple had up its sleeve, you’re in luck: the wait is finally over. Unveiled earlier this week, the <a href="https://www.tomsguide.com/home/smart-home/i-saw-apples-homeview-early-7-things-you-need-to-know-about-the-smart-home-display">Apple HomeView</a> officially launches on Friday, November 13.</p><p>Rumors of a smart speaker with a built-in display from Cupertino have been making the rounds online for years. Mark Gurman first reported all the way back in 2021 that Apple planned to expand its smart home lineup with a display-equipped device.</p><div class="product"><a data-dimension112="e9dbb518-c991-11f1-a258-370908033b67" data-action="Deal Block" data-label="HomeView" data-dimension48="HomeView" data-dimension25="$290" href="https://www.amazon.com/dp/B0HMXG5T64" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1266px;"><p class="vanilla-image-block" style="padding-top:118.48%;"><img id="JWMqwRebshquiRevipUgM" name="HomeView" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/JWMqwRebshquiRevipUgM-1920-80.png" mos="" align="middle" fullscreen="" width="1266" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0HMXG5T64" target="_blank" rel="nofollow" data-dimension112="e9dbb518-c991-11f1-a258-370908033b67" data-action="Deal Block" data-label="HomeView" data-dimension48="HomeView" data-dimension25="$290">HomeView: was $299 now $290</a></strong><br>Apple's smart home display is finally coming, offering direct access to all the smart home and Apple devices you have throughout your house. Complete with FaceTime support, a built-in digital photo frame, access to Siri AI and more. And you can save $9 off the usual price if you pre-order through Amazon.<a class="view-deal button" href="https://www.amazon.com/dp/B0HMXG5T64" target="_blank" rel="nofollow" data-dimension112="e9dbb518-c991-11f1-a258-370908033b67" data-action="Deal Block" data-label="HomeView" data-dimension48="HomeView" data-dimension25="$290">View Deal</a></p></div><p>Then came reports of a <a href="https://www.tomsguide.com/home/smart-home/apples-next-big-thing-could-be-a-dollar1000-home-robot-ipad-combo">smart display attached to a robotic arm</a> that could swivel to follow you around the room, much like the now-discontinued <a href="https://www.tomsguide.com/reviews/amazon-echo-show-10-3rd-gen">Echo Show 10</a>. Later, in 2023, Apple analyst Ming-Chi Kuo predicted the new device would <a href="https://www.tomsguide.com/home/smart-home/apples-new-homepod-with-ipad-like-display-reportedly-launching-this-year">feature a 7-inch display</a>.</p><p>Now, after five years of speculation, the Apple HomeView is real and could be in your house in time for the holidays. But is it actually worth buying? Here are five reasons to pick up the HomeView to control your existing smart home devices — or make it the starting point for your setup — along with two reasons you might want to skip it for one of the <a href="https://www.tomsguide.com/best-picks/best-smart-displays">best smart displays</a> instead. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-X75mQW"></div>                            </div>                            <script src="https://kwizly.com/embed/X75mQW.js" async></script><h3 class="article-body__section" id="section-apple-homeview-reasons-to-buy"><span>Apple HomeView: Reasons to buy</span></h3><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.21%;"><img id="WrAQq4miYm7crJrNTRgoFf" name="dji_mimo_20261013_093244_20261013093244_1791900497483_photo" alt="Apple HomeView" src="https://cdn.mos.cms.futurecdn.net/WrAQq4miYm7crJrNTRgoFf-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1439" attribution="" endorsement="" class="inline"></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’s first smart display brings a lot to the table, especially if you’ve already bought into the company’s ecosystem. From its dual dashboard system and hands-free recipe navigation to deeper Siri AI integration and seamless FaceTime calls, here are the top features that make the HomeView worth adding to your smart home.</p><h2 id="smart-home-dashboard">Smart home dashboard</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1613px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="Y95uGJ8hKSYNMgWZiVdCba" name="Tezza-5018" alt="Apple HomeView" src="https://cdn.mos.cms.futurecdn.net/Y95uGJ8hKSYNMgWZiVdCba-1920-80.jpg" mos="" align="middle" fullscreen="" width="1613" height="907" attribution="" endorsement="" class="inline"></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 hardest things about living in a smart home is having to juggle between multiple apps on your phone. If you have one of the <a href="https://www.tomsguide.com/us/best-apple-iphone,review-6348.html">best iPhones</a>, the <a href="https://www.tomsguide.com/us/apple-homekit-faq,review-4195.html">Apple Home app</a> helps simplify this, but the Apple HomeView takes things a step further.</p><p>The HomeView actually features two distinct dashboards: a shared household view and a personal one. When no specific person is in front of the screen, the device defaults to a shared layout displaying universal widgets for controlling smart lights and thermostats or viewing live security camera feeds. This is a great addition for guests, who can easily adjust a room’s lighting without having to guess the exact names of your individual smart lights.</p>                    <div class= "tiktok-wrapper" style="min-height: 750px;"><blockquote class="tiktok-embed" cite="https://www.tiktok.com/@tomsguide/video/7696148891518946590" data-video-id="7696148891518946590" style="max-width: 605px; min-width: 325px;">                        <section>                            <a target="_blank" title="@tomsguide" href="https://www.tiktok.com/@tomsguide">@tomsguide</a>                            <p></p><a target="_blank" title="♬ Boom Bap Cruise - Linda Dryer" href="https://www.tiktok.com/music/Boom-Bap-Cruise-7662821788184021046">♬ Boom Bap Cruise - Linda Dryer</a></section>                    </blockquote></div>                <p>Then, when one of up to six household members approaches the HomeView, the display switches to a personalized home screen using facial recognition. This second dashboard surfaces your private reminders, personal calendar events, and favorite accessory shortcuts pulled directly from your iPhone.</p><h2 id="siri-ai">Siri 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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="yejJTJrHR6UwZnNJUcjEo4" name="Siri AI on Apple HomeView" alt="Apple HomeView" src="https://cdn.mos.cms.futurecdn.net/yejJTJrHR6UwZnNJUcjEo4-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: Apple)</span></figcaption></figure><p>Just like how Amazon’s Echo Show smart displays got an upgrade to the AI-powered <a href="https://www.tomsguide.com/home/smart-home/alexa-plus-supported-devices">Alexa Plus</a> earlier this year, HomeView relies heavily on <a href="https://www.tomsguide.com/ai/siri-just-got-a-major-ai-upgrade-here-are-5-things-to-try-first">Siri AI</a>. Powered by Apple Intelligence and the built-in A18 chip inside HomeView, this new version of Siri is tailored to handle natural follow-up questions, mid-sentence corrections, and complex, multi-part commands without you having to repeat the wake word.</p><p>When paired with your iPhone or iPad, Siri AI can pull personal context from Apple’s first-party apps like Messages, Mail, Calendar, and Reminders. At the same time, Siri AI on HomeView uses broad world knowledge to deliver conversational answers instead of just redirecting you to a web link on your other devices.</p><p>When it comes to HomeView’s 7-inch display, Siri AI acts directly on what’s currently on screen. For instance, you can look at a live camera feed and ask it to unlock the front door — provided you have a compatible smart lock installed. Likewise, when looking at a recipe on your HomeView, you can ask Siri AI to add those ingredients straight to your shopping list.</p><h2 id="hands-free-facetime-messages-and-calls">Hands-free FaceTime, messages and calls</h2><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="V2BJc7XjFKB44aDXWbdPqH" name="FaceTime on Apple HomeView" alt="Apple HomeView" src="https://cdn.mos.cms.futurecdn.net/V2BJc7XjFKB44aDXWbdPqH-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: Apple)</span></figcaption></figure><p>Having to prop your iPhone up every time you want to FaceTime with your grandparents gets old fast. Fortunately, Apple’s HomeView handles video calls with ease thanks to its 12MP camera equipped with <a href="https://www.tomsguide.com/phones/iphones/i-tested-the-iphone-17-vs-iphone-16-selfie-camera-heres-what-i-found">Center Stage</a> auto-framing. You can also start a FaceTime call completely hands-free just by asking Siri, which is especially handy if you’re mid-recipe and need to quickly check an ingredient with your parents.</p><p>Just like on a Mac, you can send iMessages directly from the HomeView. While you can type them out using the on-screen keyboard, you can also dictate them — and have incoming replies read back to you — using Siri AI. Phone calls work seamlessly, too; if your iPhone rings in another room, you can simply answer the incoming call directly on the smart display’s screen. Plus, HomeView doubles as an in-home intercom, letting you blast quick voice announcements like “dinner is ready” across every Apple device in the house.</p><h2 id="multi-person-recognition">Multi-person recognition</h2><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="Lh6SwNK5kyUkXcScvf4PvY" name="Apple-HomeView-user-recognition" alt="Apple HomeView user recognition" src="https://cdn.mos.cms.futurecdn.net/Lh6SwNK5kyUkXcScvf4PvY-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: Apple)</span></figcaption></figure><p>That 12MP camera on the front of HomeView isn’t just for video calls. While the new device lacks <a href="https://www.tomsguide.com/us/face-id-faq,news-25910.html">Face ID</a>, it uses the camera to scan the faces of up to six people in your household. This is what allows your personal dashboard to automatically pop up when you walk up to the screen.</p><p>In a way, HomeView’s multi-person recognition feels like having separate user accounts on the shared family computer back in the day. Once the device recognizes you and verifies your unlocked iPhone or iPad is nearby on the same network, you can securely access your personal iMessages, calendar, and reminders. HomeView’s far-field microphones also support multi-user voice matching, allowing Siri AI to differentiate between family members and respond with personalized answers when different people talk to it across the room.</p><h2 id="step-by-step-recipes">Step-by-step recipes</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1847px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="LGtw8akM5747RWmG7nPeeN" name="dji_mimo_20261013_091948_20261013091902_1791901604549_video_still" alt="Apple HomeView" src="https://cdn.mos.cms.futurecdn.net/LGtw8akM5747RWmG7nPeeN-1920-80.jpg" mos="" align="middle" fullscreen="" width="1847" height="1039" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>There’s no better place for a smart display than the kitchen, and Apple definitely considered this when designing HomeView. One of its best features is how you can take any online recipe you’ve opened in Safari and send it straight to the device. From there, HomeView strips away all the clutter and reformats the page into clean, step-by-step instructions with large text that’s easy to read across the room. It even uses proximity sensing to automatically scale the text size up or down based on how far away you're standing.</p>                    <div class= "tiktok-wrapper" style="min-height: 750px;"><blockquote class="tiktok-embed" cite="https://www.tiktok.com/@tomsguide/video/7696174677827341581" data-video-id="7696174677827341581" style="max-width: 605px; min-width: 325px;">                        <section>                            <a target="_blank" title="@tomsguide" href="https://www.tiktok.com/@tomsguide">@tomsguide</a>                            <p></p><a target="_blank" title="♬ original sound - Tom’s Guide" href="https://www.tiktok.com/music/original-sound-7696174764578097934">♬ original sound - Tom’s Guide</a></section>                    </blockquote></div>                <p>Since you don’t want to be touching a glass screen with messy hands, you can navigate the entire process using voice commands. Saying phrases like “Siri, next step” lets you advance the recipe without leaving greasy fingerprints on the display. HomeView’s recipes also feature embedded step timers, allowing you to set, label, and manage multiple concurrent timers hands-free while you cook.</p><h3 class="article-body__section" id="section-apple-homeview-reasons-to-skip"><span>Apple HomeView: Reasons to skip</span></h3><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="dUHoMCee2gXRwXjViQGJSJ" name="dji_mimo_20261013_093238_20261013093237_1791900497627_photo.JPG" alt="Apple HomeView hands-on" src="https://cdn.mos.cms.futurecdn.net/dUHoMCee2gXRwXjViQGJSJ-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 impressive as the HomeView is on paper, it isn't going to be the right fit for every home. Between its strict reliance on the iPhone and the steep additional costs required just to get a clean wall-mounted install, here are two major drawbacks you should keep in mind before picking one up.</p><h2 id="iphone-required">iPhone required</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="84KiXHo2xbPhfxDsNyDoVn" name="iPhone 18 Pro - Pro Controls" alt="iPhone 18 Pro showing Pro Controls." src="https://cdn.mos.cms.futurecdn.net/84KiXHo2xbPhfxDsNyDoVn-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>Unlike Amazon’s Echo Show or Google’s Nest Hub devices which are platform agnostic, for the best experience with Apple’s HomeView, you’re going to need an iPhone or at least an iPad. In fact, without one, you can’t even set up a HomeView since you need a device running <a href="https://www.tomsguide.com/phones/iphones/ios-27-2-beta-is-here-5-biggest-upgrades-for-your-iphone-including-a-revamped-health-app">iOS 27.2</a> or later just to register it.</p><p>While there are households where iOS and Android co-exist, non-iPhone users won’t get anywhere close to the full HomeView experience. Without an iPhone or iPad, you don’t get access to the device’s personal dashboard since facial recognition won’t work — it only matches faces to active Apple IDs. Essentially, without an iPhone, you're stuck feeling like a guest in your own home.</p><h2 id="a-clean-install-costs-even-more">A clean install costs even more</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1337px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="nmGa5q8gvcgCQ87UF8txvH" name="Apple HomeView on wall" alt="Apple HomeView on wall" src="https://cdn.mos.cms.futurecdn.net/nmGa5q8gvcgCQ87UF8txvH-1920-80.png" mos="" align="middle" fullscreen="" width="1337" height="752" 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>At $299, the standard Apple HomeView is already one of the most expensive smart displays on the market, sharing a price point with Amazon’s much larger <a href="https://www.tomsguide.com/home/smart-home/i-bought-this-dollar30-accessory-and-it-completely-transformed-how-i-use-the-echo-show-15">Echo Show 15</a>. However, if you want to wall-mount it — especially if you’re aiming for a sleek, wire-free installation — that $299 base price quickly balloons.</p><p>Unlike the tabletop model, the wall-mounted HomeView doesn't include a mount or a power supply in the box. Choosing the DIY route with Apple’s entry-level Power Mount USB-C adds $59 to your tab, pushing the total to $358. If you want a hardwired, flush-to-the-wall setup without visible cables dangling down to an outlet, the Power Mount AC Wired costs $79 extra — plus the additional cost of hiring a licensed electrician to wire it safely, which Apple recommends through a partnership with ADT. </p><p>Finally, if you want to run power and data over a single network cable, the Power Mount PoE costs an eye-watering $129 on top of the display, and that's before factoring in the cost of a PoE switch or professional installation.</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/home/smart-home/apple-homeview-is-already-discounted-ahead-of-next-months-release-heres-how-much-you-could-save-by-pre-ordering"><strong>Apple HomeView is already discounted ahead of next month's release — here's how much you could save by pre-ordering</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/home/smart-home/echo-show-15-vs-echo-show-21"><strong>Amazon Echo Show 15 vs Echo Show 21: which wall-mountable smart display should you buy?</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/home/smart-home/apples-homeview-isnt-reinventing-smart-displays-its-fixing-what-made-me-abandon-my-amazon-echo-shows"><strong>Apple's HomeView isn't reinventing smart displays — it's fixing what made me abandon my Amazon Echo Shows</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 7 ways the iPhone Duo could change foldables for the better ]]></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 officially available to pre-order, and that means we're one step closer to experiencing Apple's first foldable for ourselves. The fact that Apple is jumping into the world of <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">foldable phones</a> is a big deal, and it's practically guaranteed that other foldable phone makers will be watching the iPhone Duo with great interest. </p><p>By which I mean they're going to be looking for ways they can copy Apple and enhance their own foldable offerings. Phone development often seems like a cycle of companies constantly taking existing ideas and adapting them for their own devices. Apple does it, and in turn the iPhone's popularity means it's a popular target for plagiarists. Which has led to a shocking number of Android phones that feel like <a href="https://www.tomsguide.com/phones/android-phones/ios-26s-liquid-glass-has-already-been-copied-for-an-android-phone-and-the-differences-arent-even-subtle">they're running a bootleg copy of iOS.</a> </p><p>Needless to say, there are definitely some aspects of the iPhone Duo that will make their way to the foldables of the future. That's not necessarily a bad thing either, and here are the seven ways iPhone Duo could end up changing foldable phones for the better.</p><h3 class="article-body__section" id="section-more-wider-foldables"><span>More wider foldables</span></h3><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="VGUHEv7t6SSUdQpiN4xMkf" name="iPhone Duo vs Galaxy Z Fold 8 LIST2" alt="iPhone Duo and Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/VGUHEv7t6SSUdQpiN4xMkf-1920-80.png" 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: Apple/Tom's Guide)</span></figcaption></figure><p>We've already seen an influx of wider foldables ahead of the iPhone Duo's launch, and at least one wider non-folding phone, and that trend is likely to continue going forward. The last several years have seen phone companies tell us that bigger is better, but when it comes to foldables that might not necessarily be the case.</p><p>As we discovered 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>, the passport-like design feels a lot better than the taller, book-ish shape of the Z Fold 8 Ultra. The slightly more compact nature of the phone also makes it more portable, and simpler to pull out and use — which has always been a point of contention with previous foldables. So, if foldable phone makers double down on using a similar design to iPhone Duo, I certainly won't be complaining.</p><h3 class="article-body__section" id="section-stylus-support"><span>Stylus 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:3258px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="ajMJSzuWMimLz89vjNx9xm" name="Apple Pencil USB-C-6.jpg" alt="Apple Pencil USB-C" src="https://cdn.mos.cms.futurecdn.net/ajMJSzuWMimLz89vjNx9xm-1920-80.jpg" mos="" align="middle" fullscreen="" width="3258" height="1833" attribution="" endorsement="" 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 loss of stylus support on the Galaxy Z Fold 7 is something that Samsung foldable fans have been complaining about ever since — and I'm on their side. I'm a big proponent of the fact that tablets work best when you're able to use some sort of stylus alongside the touchscreen. Apple clearly recognized that with the iPhone Duo, and I suspect that Samsung (and others) will figure that out pretty quickly.</p><p>So far the only other foldables that offer stylus support are the <a href="https://www.tomsguide.com/phones/motorola-phones/motorola-razr-fold-review">Motorola Razr Fold</a> and the <a href="https://www.tomsguide.com/reviews/oppo-find-n">Oppo Find N series</a> — both of which have their own specialized foldable-friendly stylii. But since iPhone Duo supports the same <a href="https://www.tomsguide.com/hands-on/apple-pencil-usb-c-hands-on-is-this-pen-mightier">Apple Pencil (USB-C)</a> as most recent iPads, I wouldn't be surprised if future foldables supported a stylus that also works with other devices.</p><h3 class="article-body__section" id="section-more-under-display-cameras"><span>More under display 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:4573px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="tszeKHQnfPPM5b6CnmnYvd" name="iPhone Duo-3" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/tszeKHQnfPPM5b6CnmnYvd-1920-80.jpg" mos="" align="middle" fullscreen="" width="4573" height="2572" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Again, this is something that Samsung pulled with the<a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-7-review"> Galaxy Z Fold 7</a>, though in this instance I wasn't really mad about it. Under-display cameras don't have a good reputation for quality, and the fact Apple has emphasized that its own option is strictly for use with FaceTime and video calling apps suggests it hasn't found a way to deal with that yet.</p><p>If Apple keeps the camera limited to video calls, where quality is less of an issue compared to taking photos, then it might not be such a bad feature to have. It certainly doesn't take much away from the inner screen after all. And considering other phone companies have dabbled with under-display cameras in the past, this may well prompt them to try again — though there may be some guardrails. </p><p>After all, having video calls on a larger screen makes sense, but there's only so many ways you need to be able to take photos with your phone.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-W5E4RW"></div>                            </div>                            <script src="https://kwizly.com/embed/W5E4RW.js" async></script><h3 class="article-body__section" id="section-new-foldable-screen-designs"><span>New foldable screen designs</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5236px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="DdfZBhuhYSV4kGWEe54Wvd" name="iPhone Duo-1" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/DdfZBhuhYSV4kGWEe54Wvd-1920-80.jpg" mos="" align="middle" fullscreen="" width="5236" height="2945" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>There have been no shortage of attempts to eliminate the crease running down the center of a foldable phone's display, and that work will no doubt continue regardless of Apple's thoughts on the topic. However, the way Apple has designed its screens could lead to some changes elsewhere.</p><p>Most notably, Apple has utilized a <a href="https://www.tomsguide.com/phones/iphones/i-was-skeptical-about-the-iphone-duo-nano-texture-display-but-heres-why-ive-changed-my-mind">"nano-texture" coating on the Duo's large display</a>, which is designed to minimise glare, and offers a matte surface in contrast to the typical glossy phone screens we're used to. That screen is also built to be more durable and scratch-resistant, which is always a fear I have with foldable screens. It's different to the point that this could be something we see adopted elsewhere, even if non-folding phones retain the same designs they always do.</p><h3 class="article-body__section" id="section-better-durability"><span>Better 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="46Wveg5fLymtBobG52Ttvb" name="iPhone Duo edit 3" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/46Wveg5fLymtBobG52Ttvb-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Apple didn't invent the IP68-rated foldable, but there are too many companies like Samsung that still disregard dust resistance. On top of that, Apple seems to have done a lot to bolster the durability of its first foldable, offering materials and design choices that we don't see on ordinary iPhones anymore.</p><p>The nano-texture coating on the foldable display is one prominent example, since it's designed to improve scratch resistance and ensure the normally fragile screen is as well-protected as it can be. The frame is likewise made of titanium, a material that phone companies have dabbled with in the past but quickly dropped — likely over cost concerns. </p><p>I have a suspicion that we will be seeing an influx of titanium designs and other durability enhancements in the near future. Which I definitely will not complain about.</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="7K7XnKoKb6aD7gkxuBUW5c" name="iPhone duo gaming" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/7K7XnKoKb6aD7gkxuBUW5c-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Vapor chambers have been showing up more and more in recent years, especially in high performance phones like Samsung's Galaxy S series and Apple's iPhones. Performance makes heat, and vapor chambers help disperse that heat to keep the phones performing better for longer.</p><p>Sadly foldable phones didn't get that memo, so phones like the Z Fold 8 have the same performance capabilities and no way to move the generated heat around. iPhone Duo does not fall into that trap, and Apple even added hardware to help heat traverse the central hinge and radiate away more safely. That means the <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-benchmark-leaks-and-apples-foldable-is-about-to-leave-android-rivals-in-the-dust">performance benchmarks could be a lot better than we're used to</a> on other dual-screen devices.</p><p>It's not all down to the vapor chamber, and the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-benchmarks-apple-just-built-the-most-powerful-phones-weve-ever-seen">sheer power of the A20 Pro</a> will be doing a lot of heavy lifting. But since every little helps, it's likely that Apple's rivals will be considering throwing in their own vapor chambers on future models.</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="P3tEYZC3x2BZsheo9XqbWc" name="Apple iPhone Duo hands on-6" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/P3tEYZC3x2BZsheo9XqbWc-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Apple popularized magnetic wireless charging with <a href="https://www.tomsguide.com/phones/iphones/what-is-apple-magsafe-and-which-iphones-support-it">MagSafe</a>, but even when a standardized option became available for Android phone makers, very few of them actually bothered to sign on. Instead they pointed customers to special magnetic cases. </p><p>There was speculation as to whether the iPhone Duo would support MagSafe or not, but now we know it does even if the size of the Duo makes certain accessories attach a little awkwardly. Google, obviously, already supports <a href="https://www.tomsguide.com/phones/what-is-qi2-wireless-charging">Qi2 magnetic charging</a>, but the other foldables out there? Not so much, and we've never really had a good excuse as to why. </p><p>Here's hoping that changes, though I will admit this might be more wishful thinking. After all, magnetic wireless charging has struggled to gain traction in recent years, despite the previous years of Apple support. So phone makers aren't always willing to copy everything.</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-heres-why-an-iphone-18-pro-max-and-macbook-neo-combo-is-the-better-buy">iPhone Duo: Here’s why an iPhone 18 Pro Max and MacBook Neo combo is the better buy</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><li><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-benchmark-leaks-and-apples-foldable-is-about-to-leave-android-rivals-in-the-dust">iPhone Duo Geekbench scores leak, and Apple's foldable is about to leave Android rivals in the dust</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/7-ways-the-iphone-duo-could-change-foldables-for-the-better</link>
                                                                            <description>
                            <![CDATA[ Phone companies love to copy each other, and especially Apple. This means the iPhone Duo's best features will likely make their way to other phones very soon. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">LyEooEgixFzRPaQ7B86qq6</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/63iaLY97dKUc3YvQrnFTLc-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 17 Oct 2026 06:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f-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/63iaLY97dKUc3YvQrnFTLc-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPhone Duo hands on]]></media:description>                                                            <media:text><![CDATA[iPhone Duo hands on]]></media:text>
                                <media:title type="plain"><![CDATA[iPhone Duo hands on]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/63iaLY97dKUc3YvQrnFTLc-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 officially available to pre-order, and that means we're one step closer to experiencing Apple's first foldable for ourselves. The fact that Apple is jumping into the world of <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">foldable phones</a> is a big deal, and it's practically guaranteed that other foldable phone makers will be watching the iPhone Duo with great interest. </p><p>By which I mean they're going to be looking for ways they can copy Apple and enhance their own foldable offerings. Phone development often seems like a cycle of companies constantly taking existing ideas and adapting them for their own devices. Apple does it, and in turn the iPhone's popularity means it's a popular target for plagiarists. Which has led to a shocking number of Android phones that feel like <a href="https://www.tomsguide.com/phones/android-phones/ios-26s-liquid-glass-has-already-been-copied-for-an-android-phone-and-the-differences-arent-even-subtle">they're running a bootleg copy of iOS.</a> </p><p>Needless to say, there are definitely some aspects of the iPhone Duo that will make their way to the foldables of the future. That's not necessarily a bad thing either, and here are the seven ways iPhone Duo could end up changing foldable phones for the better.</p><h3 class="article-body__section" id="section-more-wider-foldables"><span>More wider foldables</span></h3><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="VGUHEv7t6SSUdQpiN4xMkf" name="iPhone Duo vs Galaxy Z Fold 8 LIST2" alt="iPhone Duo and Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/VGUHEv7t6SSUdQpiN4xMkf-1920-80.png" 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: Apple/Tom's Guide)</span></figcaption></figure><p>We've already seen an influx of wider foldables ahead of the iPhone Duo's launch, and at least one wider non-folding phone, and that trend is likely to continue going forward. The last several years have seen phone companies tell us that bigger is better, but when it comes to foldables that might not necessarily be the case.</p><p>As we discovered 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>, the passport-like design feels a lot better than the taller, book-ish shape of the Z Fold 8 Ultra. The slightly more compact nature of the phone also makes it more portable, and simpler to pull out and use — which has always been a point of contention with previous foldables. So, if foldable phone makers double down on using a similar design to iPhone Duo, I certainly won't be complaining.</p><h3 class="article-body__section" id="section-stylus-support"><span>Stylus 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:3258px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="ajMJSzuWMimLz89vjNx9xm" name="Apple Pencil USB-C-6.jpg" alt="Apple Pencil USB-C" src="https://cdn.mos.cms.futurecdn.net/ajMJSzuWMimLz89vjNx9xm-1920-80.jpg" mos="" align="middle" fullscreen="" width="3258" height="1833" attribution="" endorsement="" 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 loss of stylus support on the Galaxy Z Fold 7 is something that Samsung foldable fans have been complaining about ever since — and I'm on their side. I'm a big proponent of the fact that tablets work best when you're able to use some sort of stylus alongside the touchscreen. Apple clearly recognized that with the iPhone Duo, and I suspect that Samsung (and others) will figure that out pretty quickly.</p><p>So far the only other foldables that offer stylus support are the <a href="https://www.tomsguide.com/phones/motorola-phones/motorola-razr-fold-review">Motorola Razr Fold</a> and the <a href="https://www.tomsguide.com/reviews/oppo-find-n">Oppo Find N series</a> — both of which have their own specialized foldable-friendly stylii. But since iPhone Duo supports the same <a href="https://www.tomsguide.com/hands-on/apple-pencil-usb-c-hands-on-is-this-pen-mightier">Apple Pencil (USB-C)</a> as most recent iPads, I wouldn't be surprised if future foldables supported a stylus that also works with other devices.</p><h3 class="article-body__section" id="section-more-under-display-cameras"><span>More under display 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:4573px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="tszeKHQnfPPM5b6CnmnYvd" name="iPhone Duo-3" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/tszeKHQnfPPM5b6CnmnYvd-1920-80.jpg" mos="" align="middle" fullscreen="" width="4573" height="2572" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Again, this is something that Samsung pulled with the<a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-7-review"> Galaxy Z Fold 7</a>, though in this instance I wasn't really mad about it. Under-display cameras don't have a good reputation for quality, and the fact Apple has emphasized that its own option is strictly for use with FaceTime and video calling apps suggests it hasn't found a way to deal with that yet.</p><p>If Apple keeps the camera limited to video calls, where quality is less of an issue compared to taking photos, then it might not be such a bad feature to have. It certainly doesn't take much away from the inner screen after all. And considering other phone companies have dabbled with under-display cameras in the past, this may well prompt them to try again — though there may be some guardrails. </p><p>After all, having video calls on a larger screen makes sense, but there's only so many ways you need to be able to take photos with your phone.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-W5E4RW"></div>                            </div>                            <script src="https://kwizly.com/embed/W5E4RW.js" async></script><h3 class="article-body__section" id="section-new-foldable-screen-designs"><span>New foldable screen designs</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5236px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="DdfZBhuhYSV4kGWEe54Wvd" name="iPhone Duo-1" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/DdfZBhuhYSV4kGWEe54Wvd-1920-80.jpg" mos="" align="middle" fullscreen="" width="5236" height="2945" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>There have been no shortage of attempts to eliminate the crease running down the center of a foldable phone's display, and that work will no doubt continue regardless of Apple's thoughts on the topic. However, the way Apple has designed its screens could lead to some changes elsewhere.</p><p>Most notably, Apple has utilized a <a href="https://www.tomsguide.com/phones/iphones/i-was-skeptical-about-the-iphone-duo-nano-texture-display-but-heres-why-ive-changed-my-mind">"nano-texture" coating on the Duo's large display</a>, which is designed to minimise glare, and offers a matte surface in contrast to the typical glossy phone screens we're used to. That screen is also built to be more durable and scratch-resistant, which is always a fear I have with foldable screens. It's different to the point that this could be something we see adopted elsewhere, even if non-folding phones retain the same designs they always do.</p><h3 class="article-body__section" id="section-better-durability"><span>Better 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="46Wveg5fLymtBobG52Ttvb" name="iPhone Duo edit 3" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/46Wveg5fLymtBobG52Ttvb-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Apple didn't invent the IP68-rated foldable, but there are too many companies like Samsung that still disregard dust resistance. On top of that, Apple seems to have done a lot to bolster the durability of its first foldable, offering materials and design choices that we don't see on ordinary iPhones anymore.</p><p>The nano-texture coating on the foldable display is one prominent example, since it's designed to improve scratch resistance and ensure the normally fragile screen is as well-protected as it can be. The frame is likewise made of titanium, a material that phone companies have dabbled with in the past but quickly dropped — likely over cost concerns. </p><p>I have a suspicion that we will be seeing an influx of titanium designs and other durability enhancements in the near future. Which I definitely will not complain about.</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="7K7XnKoKb6aD7gkxuBUW5c" name="iPhone duo gaming" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/7K7XnKoKb6aD7gkxuBUW5c-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Vapor chambers have been showing up more and more in recent years, especially in high performance phones like Samsung's Galaxy S series and Apple's iPhones. Performance makes heat, and vapor chambers help disperse that heat to keep the phones performing better for longer.</p><p>Sadly foldable phones didn't get that memo, so phones like the Z Fold 8 have the same performance capabilities and no way to move the generated heat around. iPhone Duo does not fall into that trap, and Apple even added hardware to help heat traverse the central hinge and radiate away more safely. That means the <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-benchmark-leaks-and-apples-foldable-is-about-to-leave-android-rivals-in-the-dust">performance benchmarks could be a lot better than we're used to</a> on other dual-screen devices.</p><p>It's not all down to the vapor chamber, and the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-benchmarks-apple-just-built-the-most-powerful-phones-weve-ever-seen">sheer power of the A20 Pro</a> will be doing a lot of heavy lifting. But since every little helps, it's likely that Apple's rivals will be considering throwing in their own vapor chambers on future models.</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="P3tEYZC3x2BZsheo9XqbWc" name="Apple iPhone Duo hands on-6" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/P3tEYZC3x2BZsheo9XqbWc-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Apple popularized magnetic wireless charging with <a href="https://www.tomsguide.com/phones/iphones/what-is-apple-magsafe-and-which-iphones-support-it">MagSafe</a>, but even when a standardized option became available for Android phone makers, very few of them actually bothered to sign on. Instead they pointed customers to special magnetic cases. </p><p>There was speculation as to whether the iPhone Duo would support MagSafe or not, but now we know it does even if the size of the Duo makes certain accessories attach a little awkwardly. Google, obviously, already supports <a href="https://www.tomsguide.com/phones/what-is-qi2-wireless-charging">Qi2 magnetic charging</a>, but the other foldables out there? Not so much, and we've never really had a good excuse as to why. </p><p>Here's hoping that changes, though I will admit this might be more wishful thinking. After all, magnetic wireless charging has struggled to gain traction in recent years, despite the previous years of Apple support. So phone makers aren't always willing to copy everything.</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-heres-why-an-iphone-18-pro-max-and-macbook-neo-combo-is-the-better-buy">iPhone Duo: Here’s why an iPhone 18 Pro Max and MacBook Neo combo is the better buy</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><li><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-benchmark-leaks-and-apples-foldable-is-about-to-leave-android-rivals-in-the-dust">iPhone Duo Geekbench scores leak, and Apple's foldable is about to leave Android rivals in the dust</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ My iPhone 18 Pro Max just got delivered and I immediately regret the purchase — and I think iPhone Duo is to blame ]]></title>
                                                                                                <dc:content><![CDATA[ <p>It's safe to say that the<a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-and-pro-max-review"> iPhone 18 Pro Max</a> is proving quite popular. At the time of writing, delivery estimates for the cheapest model are two to three weeks away — compared to one to two weeks for the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-and-pro-max-review">iPhone 18 Pro</a>. However the popularity seems to pale in comparison to <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>, whose delivery estimates were pushed into next year after only an hour of pre-orders being open.</p><p>My iPhone 18 Pro Max arrived yesterday, after almost a month of waiting for Apple to actually dispatch the thing. The problem was that as soon as it was set up, my mind was immediately stumped on what I should be doing with it. More so after I'd played with the variable aperture, and watched the blades move over the camera lens.</p><p>In contrast the iPhone Duo is something that a lot of people are eagerly anticipating, even if <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-trade-offs">you're accepting some compromises in the process</a>. Why? Because it's something brand new that Apple has never done before, even if the first foldable phones are now old enough to be in second grade. </p><h2 id="what-does-the-iphone-18-pro-max-actually-have-to-offer">What does the iPhone 18 Pro Max actually have to offer?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width: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>I know that on a technical level the iPhone 18 Pro Max is a better phone than the <a href="https://www.tomsguide.com/phones/iphones/iphone-17-pro-max-review">iPhone 17 Pro Max</a>. Our testing shows that the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-benchmarks-apple-just-built-the-most-powerful-phones-weve-ever-seen">A20 Pro chip makes it significantly more powerful,</a> and the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-max-and-18-pro-battery-life-tested-the-results-are-surprising">battery life is half an hour longer</a> than you'd get on last year's flagship. Charging time is noticeably faster too, aided by the speedier 60W wired charging capabilities.</p><p>But those aren't the kind of upgrades you can consciously feel. They make the overall experience of using the iPhone 18 Pro Max better, even if you don't actually notice what's going on, but they aren't the kind of things that make you physically excited to hold and enjoy the phone for yourself. </p><p>Those gears didn't actually shift into place until I held the iPhone 18 Pro Max in my hand, and I felt like the aquarium fish at the very end of Finding Nemo. I have an iPhone 17 Pro Max already, and aside from some obvious difference in the weight of the two phones (8.78 ounces versus 8.22 ounces) I couldn't really differentiate the two phones. </p><p>I tinkered with the variable aperture camera system, and it was rather fun to watch the blades move across the lens the way that they do. But that is an activity that gets old very quickly, and once you've exhausted what little enjoyment that brings, the reality sets in that upgrading your phone every year is rather a pointless endeavour.</p><p>Apple may have made some significant improvements to the iPhone 18 Pro Max, and added the fancy new camera features, but it doesn't change the fact that this feels more like an iPhone 17S than an iPhone 18 Pro. It makes the 18 Pro Max feel like another iteration of the same old things, and the honest truth is that it's an extremely boring upgrade. To the point that it barely feels like an upgrade at all.</p><p>I'll admit that the software changes do play a big impact in what the 18 Pro Max can do. But when you remember that <a href="https://www.tomsguide.com/phones/iphones/ios-27-is-live-heres-how-to-download-and-install-it-now">iOS 27</a> is not exclusive to the newest iPhones, and has been available on older models for a good few weeks (or months if you downloaded the beta), it isn't really a selling point.</p><p>The iPhone Duo, on the other hand, is a totally new kind of device that Apple has never made before. Sure, it's not going to impress foldable phone enthusiasts for the same reason the iPhone 18 Pro Max isn't impressing me now. But for those people that have never left the Apple ecosystem before, it's a totally novel kind of device.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-W5E4RW"></div>                            </div>                            <script src="https://kwizly.com/embed/W5E4RW.js" async></script><h2 id="iphone-duo-has-change-that-you-can-feel-and-experience-in-your-hands">iPhone Duo has change that you can feel and experience in your hands</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4356px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="xTigbirKk6eHPbe3d35Nod" name="iPhone Duo-LIST2" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/xTigbirKk6eHPbe3d35Nod-1920-80.jpg" mos="" align="middle" fullscreen="" width="4356" height="2450" attribution="" endorsement="" class="inline"></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 only need to look at the iPhone Duo to know that it's going to offer a very different user experience than the iPhone 18 Pro Max. It's a foldable phone that opens up to reveal a large tablet-sized display that is noticeably larger than that on a traditional phone. </p><p>A whole new form factor and method of operation means that the iPhone Duo is something that you're going to have to get to grips with. Even if you have extensively used foldable phones in the past, the fact that this is a foldable iPhone means it's going to offer a slightly different experience to that of an Android model. Both in terms of the software side of things and how Apple actually makes the foldable experience work compared to the likes of Samsung or Google.</p><p>Heck, the fact that Apple has tweaked the UI to put a taskbar on the side of the iPhone Duo means that every user will need to spend some amount of time acclimatizing to the new way of doing things. </p><p>The iPhone Duo goes beyond just being a foldable iPhone too. Apple seems to have put a lot of effort into making it something different and unique compared to its usual yearly releases. The use of titanium means it's more durable than the the last two Pro Max iPhones, and under-display camera is a feature that we don't really see on phones anymore. </p><p>Even if Apple doesn't solve the <a href="https://www.tomsguide.com/news/samsung-galaxy-z-fold-3-under-display-camera-tested-its-amazing-and-flawed">myriad of problems hidden cameras have</a>, it's something different that users can experience. Plus it means you have an uninterrupted display, which is not something you see very much of anymore.</p><p>Apple has made something different with the iPhone Duo, and expensive as it may be, it's offering something that most iPhone owners haven't been able to experience before now. In a world where new phones have been feeling increasingly boring and barely different from what came before, that's a very desirable trait to have.</p><p>Whether Apple can maintain that excitement with future foldable iPhones is unclear, though I suspect that people will lose that sense of excitement very quickly. After all, all other foldables have just become part of the annual release cycle, and there will be a point where the iPhone Duo falls in line with them.</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:4656px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Q9CmG4bSftigAEdPtH3Qqd" name="iPhone Duo-LIST1" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/Q9CmG4bSftigAEdPtH3Qqd-1920-80.jpg" mos="" align="middle" fullscreen="" width="4656" height="2619" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Phone launches have been dull and stale for a long time now. As much as the companies behind them try to drum up excitement and act as though what they're offering is revolutionary, the truth is that 90% of the time they're not. Even new kinds of phone can get old very quickly, especially when you have a release as spectacularly bad as that of the original <a href="https://www.tomsguide.com/reviews/samsung-galaxy-fold">Samsung Galaxy Fold</a>. </p><p>I've never picked up a new phone and struggled to know what to do with it, though. It's not a fun experience to hold a $1,200 phone and wonder what the point of it all is — which makes a very strong argument against upgrading your old handsets too quickly. Though at the same time, I have to wonder whether the impending iPhone Duo release is affecting things. Both in terms of user attitudes, and the resources Apple put into developing its new phone lines.</p><p>You can feel the anticipation for the iPhone Duo right now, and the fact that the delivery estimates were  pushed back to 2027 suggests  that demand is likely much higher than Apple actually anticipated. That's not something you see every year, and it's nice that people can actually be genuinely excited for a brand new phone. It's just a shame that the iPhone 18 Pro Max feels like such a nothingburger.</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/i-track-deals-for-a-living-and-heres-the-best-iphone-duo-preorder-ive-seen"><strong>I track deals for a living and here's the best iPhone Duo preorder I've seen</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-benchmark-leaks-and-apples-foldable-is-about-to-leave-android-rivals-in-the-dust"><strong>iPhone Duo Geekbench scores leak, and Apple's foldable is about to leave Android rivals in the dust</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-modes-explained-6-ways-you-can-use-apples-new-foldable"><strong>iPhone Duo modes explained — 6 ways you can use Apple's new foldable</strong></a><strong></strong></li></ul> ]]></dc:content>
                                                                                                                                            <link>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</link>
                                                                            <description>
                            <![CDATA[ Hype for the iPhone Duo feels pretty unreal, and I was shocked at just how little I cared about my iPhone 18 Pro Max in comparison. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">kkFPz3Bo2zzP6gq6NWtGqh</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/473VNvCMPfhDkYKpe3aJjK-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 17 Oct 2026 04:30:00 +0000</pubDate>                                                                                                                                <updated>Sat, 17 Oct 2026 12:04:17 +0000</updated>
                                                                                                                                            <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f-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/473VNvCMPfhDkYKpe3aJjK-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Apple iPhone 18 Pro and Pro Max shown in hand]]></media:description>                                                            <media:text><![CDATA[Apple iPhone 18 Pro and Pro Max shown in hand]]></media:text>
                                <media:title type="plain"><![CDATA[Apple iPhone 18 Pro and Pro Max shown in hand]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/473VNvCMPfhDkYKpe3aJjK-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>It's safe to say that the<a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-and-pro-max-review"> iPhone 18 Pro Max</a> is proving quite popular. At the time of writing, delivery estimates for the cheapest model are two to three weeks away — compared to one to two weeks for the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-and-pro-max-review">iPhone 18 Pro</a>. However the popularity seems to pale in comparison to <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>, whose delivery estimates were pushed into next year after only an hour of pre-orders being open.</p><p>My iPhone 18 Pro Max arrived yesterday, after almost a month of waiting for Apple to actually dispatch the thing. The problem was that as soon as it was set up, my mind was immediately stumped on what I should be doing with it. More so after I'd played with the variable aperture, and watched the blades move over the camera lens.</p><p>In contrast the iPhone Duo is something that a lot of people are eagerly anticipating, even if <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-trade-offs">you're accepting some compromises in the process</a>. Why? Because it's something brand new that Apple has never done before, even if the first foldable phones are now old enough to be in second grade. </p><h2 id="what-does-the-iphone-18-pro-max-actually-have-to-offer">What does the iPhone 18 Pro Max actually have to offer?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width: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>I know that on a technical level the iPhone 18 Pro Max is a better phone than the <a href="https://www.tomsguide.com/phones/iphones/iphone-17-pro-max-review">iPhone 17 Pro Max</a>. Our testing shows that the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-benchmarks-apple-just-built-the-most-powerful-phones-weve-ever-seen">A20 Pro chip makes it significantly more powerful,</a> and the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-max-and-18-pro-battery-life-tested-the-results-are-surprising">battery life is half an hour longer</a> than you'd get on last year's flagship. Charging time is noticeably faster too, aided by the speedier 60W wired charging capabilities.</p><p>But those aren't the kind of upgrades you can consciously feel. They make the overall experience of using the iPhone 18 Pro Max better, even if you don't actually notice what's going on, but they aren't the kind of things that make you physically excited to hold and enjoy the phone for yourself. </p><p>Those gears didn't actually shift into place until I held the iPhone 18 Pro Max in my hand, and I felt like the aquarium fish at the very end of Finding Nemo. I have an iPhone 17 Pro Max already, and aside from some obvious difference in the weight of the two phones (8.78 ounces versus 8.22 ounces) I couldn't really differentiate the two phones. </p><p>I tinkered with the variable aperture camera system, and it was rather fun to watch the blades move across the lens the way that they do. But that is an activity that gets old very quickly, and once you've exhausted what little enjoyment that brings, the reality sets in that upgrading your phone every year is rather a pointless endeavour.</p><p>Apple may have made some significant improvements to the iPhone 18 Pro Max, and added the fancy new camera features, but it doesn't change the fact that this feels more like an iPhone 17S than an iPhone 18 Pro. It makes the 18 Pro Max feel like another iteration of the same old things, and the honest truth is that it's an extremely boring upgrade. To the point that it barely feels like an upgrade at all.</p><p>I'll admit that the software changes do play a big impact in what the 18 Pro Max can do. But when you remember that <a href="https://www.tomsguide.com/phones/iphones/ios-27-is-live-heres-how-to-download-and-install-it-now">iOS 27</a> is not exclusive to the newest iPhones, and has been available on older models for a good few weeks (or months if you downloaded the beta), it isn't really a selling point.</p><p>The iPhone Duo, on the other hand, is a totally new kind of device that Apple has never made before. Sure, it's not going to impress foldable phone enthusiasts for the same reason the iPhone 18 Pro Max isn't impressing me now. But for those people that have never left the Apple ecosystem before, it's a totally novel kind of device.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-W5E4RW"></div>                            </div>                            <script src="https://kwizly.com/embed/W5E4RW.js" async></script><h2 id="iphone-duo-has-change-that-you-can-feel-and-experience-in-your-hands">iPhone Duo has change that you can feel and experience in your hands</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4356px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="xTigbirKk6eHPbe3d35Nod" name="iPhone Duo-LIST2" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/xTigbirKk6eHPbe3d35Nod-1920-80.jpg" mos="" align="middle" fullscreen="" width="4356" height="2450" attribution="" endorsement="" class="inline"></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 only need to look at the iPhone Duo to know that it's going to offer a very different user experience than the iPhone 18 Pro Max. It's a foldable phone that opens up to reveal a large tablet-sized display that is noticeably larger than that on a traditional phone. </p><p>A whole new form factor and method of operation means that the iPhone Duo is something that you're going to have to get to grips with. Even if you have extensively used foldable phones in the past, the fact that this is a foldable iPhone means it's going to offer a slightly different experience to that of an Android model. Both in terms of the software side of things and how Apple actually makes the foldable experience work compared to the likes of Samsung or Google.</p><p>Heck, the fact that Apple has tweaked the UI to put a taskbar on the side of the iPhone Duo means that every user will need to spend some amount of time acclimatizing to the new way of doing things. </p><p>The iPhone Duo goes beyond just being a foldable iPhone too. Apple seems to have put a lot of effort into making it something different and unique compared to its usual yearly releases. The use of titanium means it's more durable than the the last two Pro Max iPhones, and under-display camera is a feature that we don't really see on phones anymore. </p><p>Even if Apple doesn't solve the <a href="https://www.tomsguide.com/news/samsung-galaxy-z-fold-3-under-display-camera-tested-its-amazing-and-flawed">myriad of problems hidden cameras have</a>, it's something different that users can experience. Plus it means you have an uninterrupted display, which is not something you see very much of anymore.</p><p>Apple has made something different with the iPhone Duo, and expensive as it may be, it's offering something that most iPhone owners haven't been able to experience before now. In a world where new phones have been feeling increasingly boring and barely different from what came before, that's a very desirable trait to have.</p><p>Whether Apple can maintain that excitement with future foldable iPhones is unclear, though I suspect that people will lose that sense of excitement very quickly. After all, all other foldables have just become part of the annual release cycle, and there will be a point where the iPhone Duo falls in line with them.</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:4656px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Q9CmG4bSftigAEdPtH3Qqd" name="iPhone Duo-LIST1" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/Q9CmG4bSftigAEdPtH3Qqd-1920-80.jpg" mos="" align="middle" fullscreen="" width="4656" height="2619" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Phone launches have been dull and stale for a long time now. As much as the companies behind them try to drum up excitement and act as though what they're offering is revolutionary, the truth is that 90% of the time they're not. Even new kinds of phone can get old very quickly, especially when you have a release as spectacularly bad as that of the original <a href="https://www.tomsguide.com/reviews/samsung-galaxy-fold">Samsung Galaxy Fold</a>. </p><p>I've never picked up a new phone and struggled to know what to do with it, though. It's not a fun experience to hold a $1,200 phone and wonder what the point of it all is — which makes a very strong argument against upgrading your old handsets too quickly. Though at the same time, I have to wonder whether the impending iPhone Duo release is affecting things. Both in terms of user attitudes, and the resources Apple put into developing its new phone lines.</p><p>You can feel the anticipation for the iPhone Duo right now, and the fact that the delivery estimates were  pushed back to 2027 suggests  that demand is likely much higher than Apple actually anticipated. That's not something you see every year, and it's nice that people can actually be genuinely excited for a brand new phone. It's just a shame that the iPhone 18 Pro Max feels like such a nothingburger.</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/i-track-deals-for-a-living-and-heres-the-best-iphone-duo-preorder-ive-seen"><strong>I track deals for a living and here's the best iPhone Duo preorder I've seen</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-benchmark-leaks-and-apples-foldable-is-about-to-leave-android-rivals-in-the-dust"><strong>iPhone Duo Geekbench scores leak, and Apple's foldable is about to leave Android rivals in the dust</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-modes-explained-6-ways-you-can-use-apples-new-foldable"><strong>iPhone Duo modes explained — 6 ways you can use Apple's new foldable</strong></a><strong></strong></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I tested the iPhone 18 Pro Max vs iPhone 14 Pro Max side by side: should you upgrade? ]]></title>
                                                                                                <dc:content><![CDATA[ <p>So far, I’ve pitted the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-and-pro-max-review">iPhone 18 Pro Max</a> against some of its fiercest rivals — like the <a href="https://www.tomsguide.com/phones/iphone-18-pro-max-vs-samsung-galaxy-s26-ultra-heres-how-apples-and-samsungs-flagships-could-compare">Galaxy S26 Ultra</a>. But I’ve also put it to the test against its predecessors, like the <a href="https://www.tomsguide.com/phones/iphones/i-tested-the-iphone-18-pro-max-vs-iphone-16-pro-max-side-by-side-should-you-upgrade">iPhone 16 Pro Max</a> and <a href="https://www.tomsguide.com/phones/iphones/i-tested-the-iphone-18-pro-max-vs-iphone-15-pro-max-side-by-side-is-it-time-to-upgrade">iPhone 15 Pro Max</a>, to see what major improvements the latest model actually delivers.</p><p>This time, I’m going further back to pit the iPhone 18 Pro Max against the <a href="https://www.tomsguide.com/reviews/iphone-14-pro-max">iPhone 14 Pro Max</a>. Clearly, a four-year gap gives the 18 Pro Max a major advantage, but if my past face-offs are any indication, there are always surprises that make me <a href="https://www.tomsguide.com/phones/ive-been-reviewing-phones-for-almost-18-years-heres-my-advice-on-when-to-upgrade-your-phone">rethink when it's truly time to upgrade</a>.</p><p>I’ll break down side-by-side camera samples, battery life runtimes, and benchmark scores so you can determine if it’s worth the jump. Because honestly, given the current state of flagship phone prices, I could easily see someone holding onto their phone for five full years.</p><h2 class="article-body__section" id="section-iphone-18-pro-max-vs-iphone-14-pro-max-cameras"><span>iPhone 18 Pro Max vs. iPhone 14 Pro Max: 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="pU7LeHVdh6euikDAQPoSMN" name="iPhone 18 Pro Max vs iPhone 14 Pro Max" alt="iPhone 18 Pro Max vs iPhone 14 Pro Max cameras." src="https://cdn.mos.cms.futurecdn.net/pU7LeHVdh6euikDAQPoSMN-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>To see the biggest impact of that four-year gap, look no further than camera performance. On paper, the iPhone 18 Pro Max clearly packs the superior setup: a 48MP triple-camera system headlined by 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">mechanical variable aperture</a> on the main lens and a 48MP telephoto shooter with 4x optical zoom. Other notable hardware upgrades include a brighter f/1.48 maximum aperture on the primary sensor and a wider field of view from the upgraded 18MP Center Stage selfie camera.</p><p>The upgrades aren't just limited to hardware. The shooting experience on the iPhone 18 Pro Max is significantly elevated by new <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>, offering granular manual control over settings like shutter speed, focus, and white balance. On the video front, the iPhone 18 Pro Max pulls well ahead with native 4K 120fps recording, Log capture, ProRes, Cinematic mode, Audio Mix, and smart focus tracking.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/SFpZRA389YsZE86DHJyF7G-1920-80.jpg" alt="Apple iPhone 18 Pro Max camera sample." /><figcaption>Apple iPhone 18 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/u8VcNG39FKtrRkXwWqrE9h-1920-80.jpg" alt="Apple iPhone 14 Pro Max camera sample." /><figcaption>Apple iPhone 14 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/zdh6Q99HRut7NX4ByFWAq6-1920-80.jpg" alt="Apple iPhone 18 Pro Max camera sample." /><figcaption>Apple iPhone 18 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/KBm3bvFsKiLkdDmVVpio6h-1920-80.jpg" alt="Apple iPhone 14 Pro Max camera sample." /><figcaption>Apple iPhone 14 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/iHniSN8HTN6ivzk8xU8MH6-1920-80.jpg" alt="Apple iPhone 18 Pro Max camera sample." /><figcaption>Apple iPhone 18 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/MKBf9ZUkjxZkVTyG8RZngg-1920-80.jpg" alt="Apple iPhone 14 Pro Max camera sample." /><figcaption>Apple iPhone 14 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/dVSC2pChME6R2qcZhPxTd6-1920-80.jpg" alt="Apple iPhone 18 Pro Max camera sample." /><figcaption>Apple iPhone 18 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/d69NA2epKLFdygUkPqkSdg-1920-80.jpg" alt="Apple iPhone 14 Pro Max camera sample." /><figcaption>Apple iPhone 14 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/JT7j7J8AM8gnDt6HAgXxA6-1920-80.jpg" alt="Apple iPhone 18 Pro Max camera sample." /><figcaption>Apple iPhone 18 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/8Rk3wDJ2fo8qycfVw2VhBg-1920-80.jpg" alt="Apple iPhone 14 Pro Max camera sample." /><figcaption>Apple iPhone 14 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>Look closely at the side-by-side low-light samples above, and a clear pattern emerges. Considering its four-year-old hardware, the iPhone 14 Pro Max still holds up reasonably well.</p><p>However, the iPhone 18 Pro Max’s wider aperture and updated optics clearly give it the edge — delivering sharper detail, better-exposed shadows, and noticeably cleaner results with far less noise.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/QGbHRRLhu2BF3yj2qYjxd6-1920-80.jpg" alt="Apple iPhone 18 Pro Max camera sample." /><figcaption>Apple iPhone 18 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/aczWW4zQKdQ7cKQgBihvgg-1920-80.jpg" alt="Apple iPhone 14 Pro Max camera sample." /><figcaption>Apple iPhone 14 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/ozQuSeyDLHajgSdJey8gY6-1920-80.jpg" alt="Apple iPhone 18 Pro Max camera sample." /><figcaption>Apple iPhone 18 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/wyAGfnfR98mMLvdgcDtSPg-1920-80.jpg" alt="Apple iPhone 14 Pro Max camera sample." /><figcaption>Apple iPhone 14 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/umMHD7fBJ9qzMkKDssetY6-1920-80.jpg" alt="Apple iPhone 18 Pro Max camera sample." /><figcaption>Apple iPhone 18 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/QbyDuiLGFKB4Jk6x4sgwJg-1920-80.jpg" alt="Apple iPhone 14 Pro Max camera sample." /><figcaption>Apple iPhone 14 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>Zoom is another area where the iPhone 18 Pro Max holds an inherent hardware advantage: it packs a 48MP telephoto camera with 4x optical zoom versus the iPhone 14 Pro Max’s older 12MP sensor with 3x optical zoom. For the comparison above, I captured test shots at 4x, 8x, and 15x to highlight the differences across the range.</p><p>At 4x zoom, it’s tough to spot a clear winner from the overall frame, but cropping in reveals sharper edge definition around the statue with the iPhone 18 Pro Max. Pushing to 8x zoom, the textures on the surrounding stone blocks are noticeably crisper on the 18 Pro Max as well. And finally, at 15x zoom, that advantage becomes unmistakable. While the iPhone 18 Pro Max takes the win across the focal range, the zoom gap isn't quite as dramatic as the disparity in low-light performance.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/iVQeh8xEKi7L2o6yXRdqr6-1920-80.jpg" alt="Apple iPhone 18 Pro Max camera sample." /><figcaption>Apple iPhone 18 Pro Max main camera.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/GHwZ9EDQ8JWauJfgL8dZDh-1920-80.jpg" alt="Apple iPhone 14 Pro Max camera sample." /><figcaption>Apple iPhone 14 Pro Max main camera.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/bpGdchdsNfXjJWjcufgZs6-1920-80.jpg" alt="Apple iPhone 18 Pro Max camera sample." /><figcaption>Apple iPhone 18 Pro Max ultrawide.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/PcwdcYbDLG3yVnDJMApvCh-1920-80.jpg" alt="Apple iPhone 14 Pro Max camera sample." /><figcaption>Apple iPhone 14 Pro Max ultrawide.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/YnyYHEJyQcAaEBu7xgafr6-1920-80.jpg" alt="Apple iPhone 18 Pro Max camera sample." /><figcaption>Apple iPhone 18 Pro Max colors.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/nLWX555ULdGCxwCGaTKfBh-1920-80.jpg" alt="Apple iPhone 14 Pro Max camera sample." /><figcaption>Apple iPhone 14 Pro Max colors.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/dhVrcJiXGzHAieuYzpLos6-1920-80.jpg" alt="Apple iPhone 18 Pro Max camera sample." /><figcaption>Apple iPhone 18 Pro Max ultrawide.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/f6GUW3vkzZrgccm9VxBbEh-1920-80.jpg" alt="Apple iPhone 14 Pro Max camera sample." /><figcaption>Apple iPhone 14 Pro Max ultrawide.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/otEWwcqQgWXDYNR5wSHhp6-1920-80.jpg" alt="Apple iPhone 18 Pro Max camera sample." /><figcaption>Apple iPhone 18 Pro Max selfie.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/vvRQLj5jSqTHSkBxAw6R9h-1920-80.jpg" alt="Apple iPhone 14 Pro Max camera sample." /><figcaption>Apple iPhone 14 Pro Max selfie.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/vYJJe7raZwvtjk6pnfy3h6-1920-80.jpg" alt="Apple iPhone 18 Pro Max camera sample." /><figcaption>Apple iPhone 18 Pro Max macro.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/pkEYZnK6L43WuYGMarcptg-1920-80.jpg" alt="Apple iPhone 14 Pro Max camera sample." /><figcaption>Apple iPhone 14 Pro Max macro.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>What about other shooting conditions? The differences are mostly minor, proving that the iPhone 14 Pro Max’s main camera is still a solid performer that consistently delivers excellent results. You can see in several of the side-by-side shots above how closely it matches the iPhone 18 Pro Max in dynamic range and color reproduction.</p><p>That said, here are a few other takeaways worth noting:</p><ul><li><strong>Ultrawide detail:</strong> The iPhone 18 Pro Max captures slightly finer detail and crisper edges with its ultrawide shooter.</li><li><strong>Macro mode: </strong>While close-up shots look sharp on both, the iPhone 14 Pro Max suffers from more visible noise and grain.</li><li><strong>Selfies: </strong>The iPhone 18 Pro Max’s updated 18MP Center Stage camera offers a noticeably wider field of view, making it far better suited for group shots.</li></ul><p>Just like in my previous face-offs against older flagships, the iPhone 14 Pro Max proves it's still a capable everyday shooter. However, there are simply too many compelling reasons to justify jumping to the iPhone 18 Pro Max. I’m not just talking about its massive leap in low-light photography—it’s the mechanical variable aperture, granular Pro Controls, and versatile video suite that ultimately seal the deal.</p><h2 class="article-body__section" id="section-iphone-18-pro-max-vs-iphone-14-pro-max-specifications"><span>iPhone 18 Pro Max vs. iPhone 14 Pro Max: Specifications</span></h2><div ><table><thead><tr><th class="firstcol empty" ></th><th  ><p><strong>iPhone 18 Pro Max</strong></p></th><th  ><p><strong>iPhone 14 Pro Max</strong></p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>From $1,299</p></td><td  ><p>From $1,099</p></td></tr><tr><td class="firstcol " ><p><strong>Main Display</strong></p></td><td  ><p>6.9-inch Super Retina XDR display (2,868 x 1,320)</p></td><td  ><p>6.7-inch Super Retina XDR display (2,796 x 1,290)</p></td></tr><tr><td class="firstcol " ><p><strong>Refresh Rate</strong></p></td><td  ><p>1-120Hz ProMotion</p></td><td  ><p>1-120Hz ProMotion</p></td></tr><tr><td class="firstcol " ><p><strong>Processor</strong></p></td><td  ><p>A20 Pro</p></td><td  ><p>A16 Bionic</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>256GB, 512GB, 1TB, 2TB</p></td><td  ><p>128GB, 256GB, 512GB, 1TB</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>12GB</p></td><td  ><p>6GB</p></td></tr><tr><td class="firstcol " ><p><strong>Front Camera</strong></p></td><td  ><p>18MP Center Stage camera (f/1.9)</p></td><td  ><p>12MP (f/1.9)</p></td></tr><tr><td class="firstcol " ><p><strong>Rear Cameras</strong></p></td><td  ><p>48MP main with variable aperture (f/1.48, f/1.8, f/2.8, f/4), 48MP ultrawide (f/2.2), 48MP telephoto w/4x optical zoom (f/2.8)</p></td><td  ><p>48MP main (f/1.78), 12MP ultrawide (f/2.2), 12MP telephoto w/3x optical zoom (f/2.8)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery Capacity</strong></p></td><td  ><p>5,391 mAh </p></td><td  ><p>4,323 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Charging</strong></p></td><td  ><p>60W wired, 25W wireless</p></td><td  ><p>20W wired, 15W wireless</p></td></tr><tr><td class="firstcol " ><p><strong>Size</strong></p></td><td  ><p>6.43 x 3.07 x 0.34 inches (163.4 x 78.0 x 8.75 mm)</p></td><td  ><p>6.33 x 3.05 x 0.31 inches (160.7 x 77.6 x 7.85 mm)</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>8.78 ounces (249 grams)</p></td><td  ><p>8.47 ounces (240 grams)</p></td></tr><tr><td class="firstcol " ><p><strong>IP Rating</strong></p></td><td  ><p>IP68</p></td><td  ><p>IP68</p></td></tr><tr><td class="firstcol " ><p><strong>Colors</strong></p></td><td  ><p>Black, Silver, Glacier, Burgundy</p></td><td  ><p>Space Black, Silver, Gold, Deep Purple</p></td></tr></tbody></table></div><h2 class="article-body__section" id="section-iphone-18-pro-max-vs-iphone-14-pro-max-battery-and-charging"><span>iPhone 18 Pro Max vs. iPhone 14 Pro Max: Battery and charging</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="89sLqhuSLMdAN8VBh7izVN" name="iPhone 18 Pro Max vs iPhone 14 Pro Max" alt="iPhone 18 Pro Max vs iPhone 14 Pro Max side by side." src="https://cdn.mos.cms.futurecdn.net/89sLqhuSLMdAN8VBh7izVN-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>Due to its larger footprint, the iPhone 18 Pro Max packs a larger 5,391 mAh battery — a massive increase over the 4,323 mAh cell inside the iPhone 14 Pro Max.</p><p>In our battery drain test, the iPhone 18 Pro Max turned in an average <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-max-and-18-pro-battery-life-tested-the-results-are-surprising">endurance time of 18 hours and 27 minutes</a>. By comparison, the iPhone 14 Pro Max fell short at <a href="https://www.tomsguide.com/news/iphone-14-battery-life-results-heres-how-long-all-four-models-last">13 hours and 39 minutes</a>. That’s a difference of 4 hours and 48 minutes, or roughly a <strong>35% improvement in battery life</strong>. Don’t get me wrong: the iPhone 14 Pro Max can still easily clear a normal workday, but the 18 Pro Max’s extra endurance means plenty of gas left in the tank for the commute home and late into the night.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>iPhone 18 Pro Max </strong></p></td><td  ><p><strong>iPhone 14 Pro Max</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Battery Size</strong></p></td><td  ><p>5,391 mAh </p></td><td  ><p>4,323 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Battery Life (hours:minutes)</strong></p></td><td  ><p>18:27 </p></td><td  ><p>13:39</p></td></tr><tr><td class="firstcol " ><p><strong>Charging level in 15 minutes</strong></p></td><td  ><p>53%</p></td><td  ><p>21%</p></td></tr><tr><td class="firstcol " ><p><strong>Charging level in 30 minutes</strong></p></td><td  ><p>80%</p></td><td  ><p>42%</p></td></tr></tbody></table></div><p>Another compelling reason to make the jump is the significantly faster charging. Thanks to upgraded 60W wired charging support, the iPhone 18 Pro Max reaches an impressive 53% in just 15 minutes and hits 80% after 30 minutes. Over the exact same intervals, the iPhone 14 Pro Max crawled to just 21% and 42%.</p><h2 class="article-body__section" id="section-iphone-18-pro-max-vs-iphone-14-pro-max-performance"><span>iPhone 18 Pro Max vs. iPhone 14 Pro Max: 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:2321px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="36uFQPaegizL2WM4jr82pH" name="iPhone 18 Pro and Pro Max-18" alt="Apple iPhone 18 Pro and Pro Max shown in hand" src="https://cdn.mos.cms.futurecdn.net/36uFQPaegizL2WM4jr82pH-1920-80.jpg" mos="" align="middle" fullscreen="" width="2321" height="1306" attribution="" endorsement="" class="inline"></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 almost forgot about Apple’s "Bionic" branding until I pulled up the benchmark results for the iPhone 14 Pro Max, but the numbers offer concrete proof of the massive <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-benchmarks-apple-just-built-the-most-powerful-phones-weve-ever-seen">generational leap you get with the 18 Pro Max</a>. Four years is an eternity in the phone arena, and it definitely shows in this face-off.</p><p>Apple’s bleeding-edge <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> powering the iPhone 18 Pro Max makes daily navigation feel buttery smooth, but our synthetic benchmark tests truly drive home the divide. On Geekbench, the iPhone 18 Pro Max pulled in single-core and multi-core scores of 4,741 and 12,789, respectively — easily eclipsing the 1,887 and 5,374 turned in by the 14 Pro Max. If you thought single-core gains from recent generations were impressive, the massive 151% increase here puts the gap in perspective.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>iPhone 18 Pro Max</strong></p></td><td  ><p><strong>iPhone 14 Pro Max</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Chipset</strong></p></td><td  ><p>A20 Pro</p></td><td  ><p>A16 Bionic</p></td></tr><tr><td class="firstcol " ><p><strong>Geekbench (single / multi-core)</strong></p></td><td  ><p>4,741 / 12,789</p></td><td  ><p>1,887 / 5,374</p></td></tr><tr><td class="firstcol " ><p><strong>3DMark Wild Life Original Unlimited (fps / score)</strong></p></td><td  ><p>230.37 fps / 38,474</p></td><td  ><p>74.1 fps / 12,380</p></td></tr></tbody></table></div><p>If that’s not enough to convince iPhone 14 Pro Max owners, the graphics testing shows an even wider chasm. Running 3DMark Wild Life Original Unlimited, the iPhone 18 Pro Max averaged an astonishing 230.37 fps with an overall score of 38,474. Those results leave the iPhone 14 Pro Max’s 74.1 fps and 12,380 score looking closer to today's budget handsets.</p><p>To be fair, the iPhone 14 Pro Max still handles everyday tasks effortlessly — like browsing the web, scrolling social feeds, and streaming video. But for demanding workflows like rendering 4K video or running graphically intense 3D games, the iPhone 18 Pro Max simply leaves its predecessor in the dust.</p><h2 class="article-body__section" id="section-iphone-18-pro-max-vs-iphone-14-pro-max-software-and-ai"><span>iPhone 18 Pro Max vs. iPhone 14 Pro Max: Software and AI</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="UHFLgbZkizWAuzbea6ATRH" name="iPhone 18 Pro and Pro Max" alt="Siri AI on an iPhone 18 Pro" src="https://cdn.mos.cms.futurecdn.net/UHFLgbZkizWAuzbea6ATRH-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>Even though both phones run <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>, the iPhone 18 Pro Max exclusively delivers Apple's newest and most powerful intelligence features — and alone, they make a compelling case for an upgrade.</p><p>It all boils down to <a href="https://www.tomsguide.com/ai/here-are-the-devices-that-will-support-apple-intelligence-no-older-iphones-allowed">Apple Intelligence</a> and <a href="https://www.tomsguide.com/phones/iphones/your-phone-may-run-ios-27-but-only-these-devices-run-everything-siri-ai-can-do">Siri AI</a>. Because the iPhone 14 Pro Max is limited to the older A16 Bionic chip and 6GB of RAM, it doesn’t make the cut for Apple’s AI-powered suite. That means missing out on everyday features I rely on with the iPhone 18 Pro Max: <a href="https://www.tomsguide.com/phones/iphones/how-to-use-apple-intelligence-writing-tools">Writing Tools</a> to refine drafts, the <a href="https://www.tomsguide.com/phones/iphones/i-tried-apple-intelligences-photos-clean-up-feature-and-it-feels-kind-of-magical">Clean Up tool in Photos</a> to erase photobombers, prioritized <a href="https://www.tomsguide.com/how-to/how-to-set-up-a-notification-summary-in-ios-15">notification summaries</a>, <a href="https://www.tomsguide.com/phones/iphones/i-just-went-hands-on-with-visual-intelligence-on-iphone-16-this-feature-is-actually-upgrade-worthy">Visual Intelligence</a>, and newer ones like <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>.</p><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="gEtj6Knu3kZnoSeCRH6ZnQ" name="iOS 27 beta.GIF" alt="iOS 27 beta showing Reframe tool." src="https://cdn.mos.cms.futurecdn.net/gEtj6Knu3kZnoSeCRH6ZnQ-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>Siri AI represents another massive generational leap. The assistant is far more context-aware and capable of executing complex cross-app actions. In <a href="https://www.tomsguide.com/phones/iphones/i-just-tried-siri-ai-in-the-ios-27-carplay-beta-and-this-assistant-is-way-more-helpful-than-before">CarPlay</a>, for instance, I regularly use Siri AI to dictate new notes on the road and add updates to existing lists all while being hands-free. On the iPhone 14 Pro Max, you’re stuck with legacy Siri, and even a brief conversation highlights just how much more natural and conversational Siri AI has become.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="C95LTRhEgDA5gh2DjWVJbN" name="iPhone 18 Pro Max vs iPhone 14 Pro Max" alt="iPhone 18 Pro Max vs iPhone 14 Pro Max." src="https://cdn.mos.cms.futurecdn.net/C95LTRhEgDA5gh2DjWVJbN-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>On top of that, the iPhone 18 Pro Max takes full advantage of iOS 27’s redesigned, slimmer Dynamic Island, supporting up to three simultaneous Live Activities compared to just two on the iPhone 14 Pro Max.</p><h2 class="article-body__section" id="section-iphone-18-pro-max-vs-iphone-14-pro-max-displays"><span>iPhone 18 Pro Max vs. iPhone 14 Pro Max: Displays</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="fFrmPaTsE7HGgVwdiE6vZN" name="iPhone 18 Pro Max vs iPhone 14 Pro Max" alt="iPhone 18 Pro Max vs iPhone 14 Pro Max." src="https://cdn.mos.cms.futurecdn.net/fFrmPaTsE7HGgVwdiE6vZN-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>There’s only a modest increase in physical footprint between these two flagships, but Apple elevates the screen on the iPhone 18 Pro Max with meaningful upgrades. Not only does it pack a more expansive 6.9-inch Super Retina XDR display — up from the iPhone 14 Pro Max’s 6.7-inch panel — but the bezels around the glass are noticeably slimmer, framing an unobtrusive, smaller Dynamic Island.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>iPhone 18 Pro Max</strong></p></td><td  ><p><strong>iPhone 14 Pro Max</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>6.9-inch Super Retina XDR display (2,868 x 1,320)</p></td><td  ><p>6.7-inch Super Retina XDR display (2,796 x 1,290)</p></td></tr><tr><td class="firstcol " ><p><strong>Peak Brightness</strong></p></td><td  ><p>2,326 nits</p></td><td  ><p>1,565 nits</p></td></tr><tr><td class="firstcol " ><p><strong>sRGB</strong></p></td><td  ><p>115.4%</p></td><td  ><p>117.5%</p></td></tr><tr><td class="firstcol " ><p><strong>DCI-P3</strong></p></td><td  ><p>81.8%</p></td><td  ><p>83.2%</p></td></tr><tr><td class="firstcol " ><p><strong>Delta-E</strong></p></td><td  ><p>0.26</p></td><td  ><p>0.26</p></td></tr></tbody></table></div><p>Personally, I find the iPhone 14 Pro Max plenty capable for everyday use, but it simply can't match the superior outdoor visibility of the iPhone 18 Pro Max. Thanks to a measured peak brightness of 2,326 nits, the newer panel delivers a massive 49% boost over the 1,565-nit peak we recorded on the iPhone 14 Pro Max.</p><p>Coupled with its anti-reflective coating, looking at the iPhone 18 Pro Max’s screen leaves no doubt that it’s a genuine generational leap forward.</p><h2 class="article-body__section" id="section-iphone-18-pro-max-vs-iphone-14-pro-max-verdict"><span>iPhone 18 Pro Max vs. iPhone 14 Pro Max: Verdict</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="x4WExYmwAPHh7RNGzjBVQN" name="iPhone 18 Pro Max vs iPhone 14 Pro Max" alt="iPhone 18 Pro Max vs iPhone 14 Pro Max." src="https://cdn.mos.cms.futurecdn.net/x4WExYmwAPHh7RNGzjBVQN-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>I wasn’t thrilled to see a $100 price hike on this year’s flagship, pushing the iPhone 18 Pro Max to $1,299 for its 256GB base configuration. That means it costs $200 more than what iPhone 14 Pro Max owners shelled out four years ago. Interestingly enough, that older model started with just 128GB of base storage.</p><p>If you’ve held onto the iPhone 14 Pro Max for the past four years, you’ve gotten incredible mileage out of your investment. But there’s a huge incentive to take the leap, even with that steeper barrier to entry. Simply put, the iPhone 18 Pro Max doesn't just edge past the 14 Pro Max — it decisively dominates across every category.</p><p>Is it finally time to upgrade? Absolutely.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-W0EKJO"></div>                            </div>                            <script src="https://kwizly.com/embed/W0EKJO.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="">I tested the iPhone 18 Pro Max vs. iPhone 16 Pro Max side-by-side: Should you upgrade?</a></li><li><a href="https://www.tomsguide.com/entertainment/streaming/9-new-movies-and-shows-to-stream-this-weekend-on-netflix-hbo-max-and-more-oct-2-4">9 new movies and shows to stream this weekend on Netflix, HBO Max and more (Oct. 2-4)</a></li><li><a href="https://www.tomsguide.com/phones/pre-ordering-iphone-duo-3-big-reasons-to-consider-galaxy-z-fold-8-first">4 ways Samsung's Galaxy Z Fold 8 beats Apple iPhone Duo</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/iphone-18-pro-max-vs-iphone-14-pro-max-is-it-finally-time-to-upgrade</link>
                                                                            <description>
                            <![CDATA[ I put the iPhone 18 Pro Max and iPhone 14 Pro Max to the test to find out what you actually gain by upgrading across a four-year gap. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">JvGwuFWDEsGAWoocfza68Y</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/oRErudASF5UaX8BdUBfqHN-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 17 Oct 2026 04:30:00 +0000</pubDate>                                                                                                                                <updated>Sun, 18 Oct 2026 12:34:59 +0000</updated>
                                                                                                                                            <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ john.velasco@futurenet.com (John Velasco) ]]></author>                    <dc:creator><![CDATA[ John Velasco ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/TSj224oX8d5ERXaDs8pDGd-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/oRErudASF5UaX8BdUBfqHN-1920-80.jpg">
                                                            <media:credit><![CDATA[John Velasco / Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPhone 18 Pro Max vs iPhone 14 Pro Max.]]></media:description>                                                            <media:text><![CDATA[iPhone 18 Pro Max vs iPhone 14 Pro Max.]]></media:text>
                                <media:title type="plain"><![CDATA[iPhone 18 Pro Max vs iPhone 14 Pro Max.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/oRErudASF5UaX8BdUBfqHN-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>So far, I’ve pitted the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-and-pro-max-review">iPhone 18 Pro Max</a> against some of its fiercest rivals — like the <a href="https://www.tomsguide.com/phones/iphone-18-pro-max-vs-samsung-galaxy-s26-ultra-heres-how-apples-and-samsungs-flagships-could-compare">Galaxy S26 Ultra</a>. But I’ve also put it to the test against its predecessors, like the <a href="https://www.tomsguide.com/phones/iphones/i-tested-the-iphone-18-pro-max-vs-iphone-16-pro-max-side-by-side-should-you-upgrade">iPhone 16 Pro Max</a> and <a href="https://www.tomsguide.com/phones/iphones/i-tested-the-iphone-18-pro-max-vs-iphone-15-pro-max-side-by-side-is-it-time-to-upgrade">iPhone 15 Pro Max</a>, to see what major improvements the latest model actually delivers.</p><p>This time, I’m going further back to pit the iPhone 18 Pro Max against the <a href="https://www.tomsguide.com/reviews/iphone-14-pro-max">iPhone 14 Pro Max</a>. Clearly, a four-year gap gives the 18 Pro Max a major advantage, but if my past face-offs are any indication, there are always surprises that make me <a href="https://www.tomsguide.com/phones/ive-been-reviewing-phones-for-almost-18-years-heres-my-advice-on-when-to-upgrade-your-phone">rethink when it's truly time to upgrade</a>.</p><p>I’ll break down side-by-side camera samples, battery life runtimes, and benchmark scores so you can determine if it’s worth the jump. Because honestly, given the current state of flagship phone prices, I could easily see someone holding onto their phone for five full years.</p><h2 class="article-body__section" id="section-iphone-18-pro-max-vs-iphone-14-pro-max-cameras"><span>iPhone 18 Pro Max vs. iPhone 14 Pro Max: 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="pU7LeHVdh6euikDAQPoSMN" name="iPhone 18 Pro Max vs iPhone 14 Pro Max" alt="iPhone 18 Pro Max vs iPhone 14 Pro Max cameras." src="https://cdn.mos.cms.futurecdn.net/pU7LeHVdh6euikDAQPoSMN-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>To see the biggest impact of that four-year gap, look no further than camera performance. On paper, the iPhone 18 Pro Max clearly packs the superior setup: a 48MP triple-camera system headlined by 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">mechanical variable aperture</a> on the main lens and a 48MP telephoto shooter with 4x optical zoom. Other notable hardware upgrades include a brighter f/1.48 maximum aperture on the primary sensor and a wider field of view from the upgraded 18MP Center Stage selfie camera.</p><p>The upgrades aren't just limited to hardware. The shooting experience on the iPhone 18 Pro Max is significantly elevated by new <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>, offering granular manual control over settings like shutter speed, focus, and white balance. On the video front, the iPhone 18 Pro Max pulls well ahead with native 4K 120fps recording, Log capture, ProRes, Cinematic mode, Audio Mix, and smart focus tracking.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/SFpZRA389YsZE86DHJyF7G-1920-80.jpg" alt="Apple iPhone 18 Pro Max camera sample." /><figcaption>Apple iPhone 18 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/u8VcNG39FKtrRkXwWqrE9h-1920-80.jpg" alt="Apple iPhone 14 Pro Max camera sample." /><figcaption>Apple iPhone 14 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/zdh6Q99HRut7NX4ByFWAq6-1920-80.jpg" alt="Apple iPhone 18 Pro Max camera sample." /><figcaption>Apple iPhone 18 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/KBm3bvFsKiLkdDmVVpio6h-1920-80.jpg" alt="Apple iPhone 14 Pro Max camera sample." /><figcaption>Apple iPhone 14 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/iHniSN8HTN6ivzk8xU8MH6-1920-80.jpg" alt="Apple iPhone 18 Pro Max camera sample." /><figcaption>Apple iPhone 18 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/MKBf9ZUkjxZkVTyG8RZngg-1920-80.jpg" alt="Apple iPhone 14 Pro Max camera sample." /><figcaption>Apple iPhone 14 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/dVSC2pChME6R2qcZhPxTd6-1920-80.jpg" alt="Apple iPhone 18 Pro Max camera sample." /><figcaption>Apple iPhone 18 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/d69NA2epKLFdygUkPqkSdg-1920-80.jpg" alt="Apple iPhone 14 Pro Max camera sample." /><figcaption>Apple iPhone 14 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/JT7j7J8AM8gnDt6HAgXxA6-1920-80.jpg" alt="Apple iPhone 18 Pro Max camera sample." /><figcaption>Apple iPhone 18 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/8Rk3wDJ2fo8qycfVw2VhBg-1920-80.jpg" alt="Apple iPhone 14 Pro Max camera sample." /><figcaption>Apple iPhone 14 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>Look closely at the side-by-side low-light samples above, and a clear pattern emerges. Considering its four-year-old hardware, the iPhone 14 Pro Max still holds up reasonably well.</p><p>However, the iPhone 18 Pro Max’s wider aperture and updated optics clearly give it the edge — delivering sharper detail, better-exposed shadows, and noticeably cleaner results with far less noise.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/QGbHRRLhu2BF3yj2qYjxd6-1920-80.jpg" alt="Apple iPhone 18 Pro Max camera sample." /><figcaption>Apple iPhone 18 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/aczWW4zQKdQ7cKQgBihvgg-1920-80.jpg" alt="Apple iPhone 14 Pro Max camera sample." /><figcaption>Apple iPhone 14 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/ozQuSeyDLHajgSdJey8gY6-1920-80.jpg" alt="Apple iPhone 18 Pro Max camera sample." /><figcaption>Apple iPhone 18 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/wyAGfnfR98mMLvdgcDtSPg-1920-80.jpg" alt="Apple iPhone 14 Pro Max camera sample." /><figcaption>Apple iPhone 14 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/umMHD7fBJ9qzMkKDssetY6-1920-80.jpg" alt="Apple iPhone 18 Pro Max camera sample." /><figcaption>Apple iPhone 18 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/QbyDuiLGFKB4Jk6x4sgwJg-1920-80.jpg" alt="Apple iPhone 14 Pro Max camera sample." /><figcaption>Apple iPhone 14 Pro Max.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>Zoom is another area where the iPhone 18 Pro Max holds an inherent hardware advantage: it packs a 48MP telephoto camera with 4x optical zoom versus the iPhone 14 Pro Max’s older 12MP sensor with 3x optical zoom. For the comparison above, I captured test shots at 4x, 8x, and 15x to highlight the differences across the range.</p><p>At 4x zoom, it’s tough to spot a clear winner from the overall frame, but cropping in reveals sharper edge definition around the statue with the iPhone 18 Pro Max. Pushing to 8x zoom, the textures on the surrounding stone blocks are noticeably crisper on the 18 Pro Max as well. And finally, at 15x zoom, that advantage becomes unmistakable. While the iPhone 18 Pro Max takes the win across the focal range, the zoom gap isn't quite as dramatic as the disparity in low-light performance.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/iVQeh8xEKi7L2o6yXRdqr6-1920-80.jpg" alt="Apple iPhone 18 Pro Max camera sample." /><figcaption>Apple iPhone 18 Pro Max main camera.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/GHwZ9EDQ8JWauJfgL8dZDh-1920-80.jpg" alt="Apple iPhone 14 Pro Max camera sample." /><figcaption>Apple iPhone 14 Pro Max main camera.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/bpGdchdsNfXjJWjcufgZs6-1920-80.jpg" alt="Apple iPhone 18 Pro Max camera sample." /><figcaption>Apple iPhone 18 Pro Max ultrawide.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/PcwdcYbDLG3yVnDJMApvCh-1920-80.jpg" alt="Apple iPhone 14 Pro Max camera sample." /><figcaption>Apple iPhone 14 Pro Max ultrawide.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/YnyYHEJyQcAaEBu7xgafr6-1920-80.jpg" alt="Apple iPhone 18 Pro Max camera sample." /><figcaption>Apple iPhone 18 Pro Max colors.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/nLWX555ULdGCxwCGaTKfBh-1920-80.jpg" alt="Apple iPhone 14 Pro Max camera sample." /><figcaption>Apple iPhone 14 Pro Max colors.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/dhVrcJiXGzHAieuYzpLos6-1920-80.jpg" alt="Apple iPhone 18 Pro Max camera sample." /><figcaption>Apple iPhone 18 Pro Max ultrawide.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/f6GUW3vkzZrgccm9VxBbEh-1920-80.jpg" alt="Apple iPhone 14 Pro Max camera sample." /><figcaption>Apple iPhone 14 Pro Max ultrawide.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/otEWwcqQgWXDYNR5wSHhp6-1920-80.jpg" alt="Apple iPhone 18 Pro Max camera sample." /><figcaption>Apple iPhone 18 Pro Max selfie.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/vvRQLj5jSqTHSkBxAw6R9h-1920-80.jpg" alt="Apple iPhone 14 Pro Max camera sample." /><figcaption>Apple iPhone 14 Pro Max selfie.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/vYJJe7raZwvtjk6pnfy3h6-1920-80.jpg" alt="Apple iPhone 18 Pro Max camera sample." /><figcaption>Apple iPhone 18 Pro Max macro.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/pkEYZnK6L43WuYGMarcptg-1920-80.jpg" alt="Apple iPhone 14 Pro Max camera sample." /><figcaption>Apple iPhone 14 Pro Max macro.<small role="credit">John Velasco / Tom's Guide</small></figcaption></figure></figure><p>What about other shooting conditions? The differences are mostly minor, proving that the iPhone 14 Pro Max’s main camera is still a solid performer that consistently delivers excellent results. You can see in several of the side-by-side shots above how closely it matches the iPhone 18 Pro Max in dynamic range and color reproduction.</p><p>That said, here are a few other takeaways worth noting:</p><ul><li><strong>Ultrawide detail:</strong> The iPhone 18 Pro Max captures slightly finer detail and crisper edges with its ultrawide shooter.</li><li><strong>Macro mode: </strong>While close-up shots look sharp on both, the iPhone 14 Pro Max suffers from more visible noise and grain.</li><li><strong>Selfies: </strong>The iPhone 18 Pro Max’s updated 18MP Center Stage camera offers a noticeably wider field of view, making it far better suited for group shots.</li></ul><p>Just like in my previous face-offs against older flagships, the iPhone 14 Pro Max proves it's still a capable everyday shooter. However, there are simply too many compelling reasons to justify jumping to the iPhone 18 Pro Max. I’m not just talking about its massive leap in low-light photography—it’s the mechanical variable aperture, granular Pro Controls, and versatile video suite that ultimately seal the deal.</p><h2 class="article-body__section" id="section-iphone-18-pro-max-vs-iphone-14-pro-max-specifications"><span>iPhone 18 Pro Max vs. iPhone 14 Pro Max: Specifications</span></h2><div ><table><thead><tr><th class="firstcol empty" ></th><th  ><p><strong>iPhone 18 Pro Max</strong></p></th><th  ><p><strong>iPhone 14 Pro Max</strong></p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>From $1,299</p></td><td  ><p>From $1,099</p></td></tr><tr><td class="firstcol " ><p><strong>Main Display</strong></p></td><td  ><p>6.9-inch Super Retina XDR display (2,868 x 1,320)</p></td><td  ><p>6.7-inch Super Retina XDR display (2,796 x 1,290)</p></td></tr><tr><td class="firstcol " ><p><strong>Refresh Rate</strong></p></td><td  ><p>1-120Hz ProMotion</p></td><td  ><p>1-120Hz ProMotion</p></td></tr><tr><td class="firstcol " ><p><strong>Processor</strong></p></td><td  ><p>A20 Pro</p></td><td  ><p>A16 Bionic</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>256GB, 512GB, 1TB, 2TB</p></td><td  ><p>128GB, 256GB, 512GB, 1TB</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>12GB</p></td><td  ><p>6GB</p></td></tr><tr><td class="firstcol " ><p><strong>Front Camera</strong></p></td><td  ><p>18MP Center Stage camera (f/1.9)</p></td><td  ><p>12MP (f/1.9)</p></td></tr><tr><td class="firstcol " ><p><strong>Rear Cameras</strong></p></td><td  ><p>48MP main with variable aperture (f/1.48, f/1.8, f/2.8, f/4), 48MP ultrawide (f/2.2), 48MP telephoto w/4x optical zoom (f/2.8)</p></td><td  ><p>48MP main (f/1.78), 12MP ultrawide (f/2.2), 12MP telephoto w/3x optical zoom (f/2.8)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery Capacity</strong></p></td><td  ><p>5,391 mAh </p></td><td  ><p>4,323 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Charging</strong></p></td><td  ><p>60W wired, 25W wireless</p></td><td  ><p>20W wired, 15W wireless</p></td></tr><tr><td class="firstcol " ><p><strong>Size</strong></p></td><td  ><p>6.43 x 3.07 x 0.34 inches (163.4 x 78.0 x 8.75 mm)</p></td><td  ><p>6.33 x 3.05 x 0.31 inches (160.7 x 77.6 x 7.85 mm)</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>8.78 ounces (249 grams)</p></td><td  ><p>8.47 ounces (240 grams)</p></td></tr><tr><td class="firstcol " ><p><strong>IP Rating</strong></p></td><td  ><p>IP68</p></td><td  ><p>IP68</p></td></tr><tr><td class="firstcol " ><p><strong>Colors</strong></p></td><td  ><p>Black, Silver, Glacier, Burgundy</p></td><td  ><p>Space Black, Silver, Gold, Deep Purple</p></td></tr></tbody></table></div><h2 class="article-body__section" id="section-iphone-18-pro-max-vs-iphone-14-pro-max-battery-and-charging"><span>iPhone 18 Pro Max vs. iPhone 14 Pro Max: Battery and charging</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="89sLqhuSLMdAN8VBh7izVN" name="iPhone 18 Pro Max vs iPhone 14 Pro Max" alt="iPhone 18 Pro Max vs iPhone 14 Pro Max side by side." src="https://cdn.mos.cms.futurecdn.net/89sLqhuSLMdAN8VBh7izVN-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>Due to its larger footprint, the iPhone 18 Pro Max packs a larger 5,391 mAh battery — a massive increase over the 4,323 mAh cell inside the iPhone 14 Pro Max.</p><p>In our battery drain test, the iPhone 18 Pro Max turned in an average <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-max-and-18-pro-battery-life-tested-the-results-are-surprising">endurance time of 18 hours and 27 minutes</a>. By comparison, the iPhone 14 Pro Max fell short at <a href="https://www.tomsguide.com/news/iphone-14-battery-life-results-heres-how-long-all-four-models-last">13 hours and 39 minutes</a>. That’s a difference of 4 hours and 48 minutes, or roughly a <strong>35% improvement in battery life</strong>. Don’t get me wrong: the iPhone 14 Pro Max can still easily clear a normal workday, but the 18 Pro Max’s extra endurance means plenty of gas left in the tank for the commute home and late into the night.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>iPhone 18 Pro Max </strong></p></td><td  ><p><strong>iPhone 14 Pro Max</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Battery Size</strong></p></td><td  ><p>5,391 mAh </p></td><td  ><p>4,323 mAh</p></td></tr><tr><td class="firstcol " ><p><strong>Battery Life (hours:minutes)</strong></p></td><td  ><p>18:27 </p></td><td  ><p>13:39</p></td></tr><tr><td class="firstcol " ><p><strong>Charging level in 15 minutes</strong></p></td><td  ><p>53%</p></td><td  ><p>21%</p></td></tr><tr><td class="firstcol " ><p><strong>Charging level in 30 minutes</strong></p></td><td  ><p>80%</p></td><td  ><p>42%</p></td></tr></tbody></table></div><p>Another compelling reason to make the jump is the significantly faster charging. Thanks to upgraded 60W wired charging support, the iPhone 18 Pro Max reaches an impressive 53% in just 15 minutes and hits 80% after 30 minutes. Over the exact same intervals, the iPhone 14 Pro Max crawled to just 21% and 42%.</p><h2 class="article-body__section" id="section-iphone-18-pro-max-vs-iphone-14-pro-max-performance"><span>iPhone 18 Pro Max vs. iPhone 14 Pro Max: 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:2321px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="36uFQPaegizL2WM4jr82pH" name="iPhone 18 Pro and Pro Max-18" alt="Apple iPhone 18 Pro and Pro Max shown in hand" src="https://cdn.mos.cms.futurecdn.net/36uFQPaegizL2WM4jr82pH-1920-80.jpg" mos="" align="middle" fullscreen="" width="2321" height="1306" attribution="" endorsement="" class="inline"></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 almost forgot about Apple’s "Bionic" branding until I pulled up the benchmark results for the iPhone 14 Pro Max, but the numbers offer concrete proof of the massive <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-benchmarks-apple-just-built-the-most-powerful-phones-weve-ever-seen">generational leap you get with the 18 Pro Max</a>. Four years is an eternity in the phone arena, and it definitely shows in this face-off.</p><p>Apple’s bleeding-edge <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> powering the iPhone 18 Pro Max makes daily navigation feel buttery smooth, but our synthetic benchmark tests truly drive home the divide. On Geekbench, the iPhone 18 Pro Max pulled in single-core and multi-core scores of 4,741 and 12,789, respectively — easily eclipsing the 1,887 and 5,374 turned in by the 14 Pro Max. If you thought single-core gains from recent generations were impressive, the massive 151% increase here puts the gap in perspective.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>iPhone 18 Pro Max</strong></p></td><td  ><p><strong>iPhone 14 Pro Max</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Chipset</strong></p></td><td  ><p>A20 Pro</p></td><td  ><p>A16 Bionic</p></td></tr><tr><td class="firstcol " ><p><strong>Geekbench (single / multi-core)</strong></p></td><td  ><p>4,741 / 12,789</p></td><td  ><p>1,887 / 5,374</p></td></tr><tr><td class="firstcol " ><p><strong>3DMark Wild Life Original Unlimited (fps / score)</strong></p></td><td  ><p>230.37 fps / 38,474</p></td><td  ><p>74.1 fps / 12,380</p></td></tr></tbody></table></div><p>If that’s not enough to convince iPhone 14 Pro Max owners, the graphics testing shows an even wider chasm. Running 3DMark Wild Life Original Unlimited, the iPhone 18 Pro Max averaged an astonishing 230.37 fps with an overall score of 38,474. Those results leave the iPhone 14 Pro Max’s 74.1 fps and 12,380 score looking closer to today's budget handsets.</p><p>To be fair, the iPhone 14 Pro Max still handles everyday tasks effortlessly — like browsing the web, scrolling social feeds, and streaming video. But for demanding workflows like rendering 4K video or running graphically intense 3D games, the iPhone 18 Pro Max simply leaves its predecessor in the dust.</p><h2 class="article-body__section" id="section-iphone-18-pro-max-vs-iphone-14-pro-max-software-and-ai"><span>iPhone 18 Pro Max vs. iPhone 14 Pro Max: Software and AI</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="UHFLgbZkizWAuzbea6ATRH" name="iPhone 18 Pro and Pro Max" alt="Siri AI on an iPhone 18 Pro" src="https://cdn.mos.cms.futurecdn.net/UHFLgbZkizWAuzbea6ATRH-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>Even though both phones run <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>, the iPhone 18 Pro Max exclusively delivers Apple's newest and most powerful intelligence features — and alone, they make a compelling case for an upgrade.</p><p>It all boils down to <a href="https://www.tomsguide.com/ai/here-are-the-devices-that-will-support-apple-intelligence-no-older-iphones-allowed">Apple Intelligence</a> and <a href="https://www.tomsguide.com/phones/iphones/your-phone-may-run-ios-27-but-only-these-devices-run-everything-siri-ai-can-do">Siri AI</a>. Because the iPhone 14 Pro Max is limited to the older A16 Bionic chip and 6GB of RAM, it doesn’t make the cut for Apple’s AI-powered suite. That means missing out on everyday features I rely on with the iPhone 18 Pro Max: <a href="https://www.tomsguide.com/phones/iphones/how-to-use-apple-intelligence-writing-tools">Writing Tools</a> to refine drafts, the <a href="https://www.tomsguide.com/phones/iphones/i-tried-apple-intelligences-photos-clean-up-feature-and-it-feels-kind-of-magical">Clean Up tool in Photos</a> to erase photobombers, prioritized <a href="https://www.tomsguide.com/how-to/how-to-set-up-a-notification-summary-in-ios-15">notification summaries</a>, <a href="https://www.tomsguide.com/phones/iphones/i-just-went-hands-on-with-visual-intelligence-on-iphone-16-this-feature-is-actually-upgrade-worthy">Visual Intelligence</a>, and newer ones like <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>.</p><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="gEtj6Knu3kZnoSeCRH6ZnQ" name="iOS 27 beta.GIF" alt="iOS 27 beta showing Reframe tool." src="https://cdn.mos.cms.futurecdn.net/gEtj6Knu3kZnoSeCRH6ZnQ-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>Siri AI represents another massive generational leap. The assistant is far more context-aware and capable of executing complex cross-app actions. In <a href="https://www.tomsguide.com/phones/iphones/i-just-tried-siri-ai-in-the-ios-27-carplay-beta-and-this-assistant-is-way-more-helpful-than-before">CarPlay</a>, for instance, I regularly use Siri AI to dictate new notes on the road and add updates to existing lists all while being hands-free. On the iPhone 14 Pro Max, you’re stuck with legacy Siri, and even a brief conversation highlights just how much more natural and conversational Siri AI has become.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="C95LTRhEgDA5gh2DjWVJbN" name="iPhone 18 Pro Max vs iPhone 14 Pro Max" alt="iPhone 18 Pro Max vs iPhone 14 Pro Max." src="https://cdn.mos.cms.futurecdn.net/C95LTRhEgDA5gh2DjWVJbN-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>On top of that, the iPhone 18 Pro Max takes full advantage of iOS 27’s redesigned, slimmer Dynamic Island, supporting up to three simultaneous Live Activities compared to just two on the iPhone 14 Pro Max.</p><h2 class="article-body__section" id="section-iphone-18-pro-max-vs-iphone-14-pro-max-displays"><span>iPhone 18 Pro Max vs. iPhone 14 Pro Max: Displays</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="fFrmPaTsE7HGgVwdiE6vZN" name="iPhone 18 Pro Max vs iPhone 14 Pro Max" alt="iPhone 18 Pro Max vs iPhone 14 Pro Max." src="https://cdn.mos.cms.futurecdn.net/fFrmPaTsE7HGgVwdiE6vZN-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>There’s only a modest increase in physical footprint between these two flagships, but Apple elevates the screen on the iPhone 18 Pro Max with meaningful upgrades. Not only does it pack a more expansive 6.9-inch Super Retina XDR display — up from the iPhone 14 Pro Max’s 6.7-inch panel — but the bezels around the glass are noticeably slimmer, framing an unobtrusive, smaller Dynamic Island.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>iPhone 18 Pro Max</strong></p></td><td  ><p><strong>iPhone 14 Pro Max</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>6.9-inch Super Retina XDR display (2,868 x 1,320)</p></td><td  ><p>6.7-inch Super Retina XDR display (2,796 x 1,290)</p></td></tr><tr><td class="firstcol " ><p><strong>Peak Brightness</strong></p></td><td  ><p>2,326 nits</p></td><td  ><p>1,565 nits</p></td></tr><tr><td class="firstcol " ><p><strong>sRGB</strong></p></td><td  ><p>115.4%</p></td><td  ><p>117.5%</p></td></tr><tr><td class="firstcol " ><p><strong>DCI-P3</strong></p></td><td  ><p>81.8%</p></td><td  ><p>83.2%</p></td></tr><tr><td class="firstcol " ><p><strong>Delta-E</strong></p></td><td  ><p>0.26</p></td><td  ><p>0.26</p></td></tr></tbody></table></div><p>Personally, I find the iPhone 14 Pro Max plenty capable for everyday use, but it simply can't match the superior outdoor visibility of the iPhone 18 Pro Max. Thanks to a measured peak brightness of 2,326 nits, the newer panel delivers a massive 49% boost over the 1,565-nit peak we recorded on the iPhone 14 Pro Max.</p><p>Coupled with its anti-reflective coating, looking at the iPhone 18 Pro Max’s screen leaves no doubt that it’s a genuine generational leap forward.</p><h2 class="article-body__section" id="section-iphone-18-pro-max-vs-iphone-14-pro-max-verdict"><span>iPhone 18 Pro Max vs. iPhone 14 Pro Max: Verdict</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="x4WExYmwAPHh7RNGzjBVQN" name="iPhone 18 Pro Max vs iPhone 14 Pro Max" alt="iPhone 18 Pro Max vs iPhone 14 Pro Max." src="https://cdn.mos.cms.futurecdn.net/x4WExYmwAPHh7RNGzjBVQN-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>I wasn’t thrilled to see a $100 price hike on this year’s flagship, pushing the iPhone 18 Pro Max to $1,299 for its 256GB base configuration. That means it costs $200 more than what iPhone 14 Pro Max owners shelled out four years ago. Interestingly enough, that older model started with just 128GB of base storage.</p><p>If you’ve held onto the iPhone 14 Pro Max for the past four years, you’ve gotten incredible mileage out of your investment. But there’s a huge incentive to take the leap, even with that steeper barrier to entry. Simply put, the iPhone 18 Pro Max doesn't just edge past the 14 Pro Max — it decisively dominates across every category.</p><p>Is it finally time to upgrade? Absolutely.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-W0EKJO"></div>                            </div>                            <script src="https://kwizly.com/embed/W0EKJO.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="">I tested the iPhone 18 Pro Max vs. iPhone 16 Pro Max side-by-side: Should you upgrade?</a></li><li><a href="https://www.tomsguide.com/entertainment/streaming/9-new-movies-and-shows-to-stream-this-weekend-on-netflix-hbo-max-and-more-oct-2-4">9 new movies and shows to stream this weekend on Netflix, HBO Max and more (Oct. 2-4)</a></li><li><a href="https://www.tomsguide.com/phones/pre-ordering-iphone-duo-3-big-reasons-to-consider-galaxy-z-fold-8-first">4 ways Samsung's Galaxy Z Fold 8 beats Apple iPhone Duo</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ iPhone Duo deals in Australia — top offers and plans from Optus, Vodafone, Amazon and more ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Apple's first foldable, the iPhone Duo, has officially landed in Australia, and if you're keen to get your hands on one, I've got your back.</p><p>The handset is available at major retailers and through payment plans from the Big Three telcos. The iPhone Duo starts at <a href="https://www.apple.com/au/shop/buy-iphone/iphone-duo" target="_blank">AU$3,499 for the 256GB model</a> and caps out at <a href="https://www.apple.com/au/shop/buy-iphone/iphone-duo" target="_blank">AU$5,899 for the 2TB model</a>. The foldable can be purchased outright at the <a href="https://www.apple.com/au/shop/buy-iphone/iphone-duo" target="_blank">Apple Store</a> or via its financing program with Afterpay. It's worth noting that the ship date as of <strong>October 23, 2026, </strong>if ordering from the Apple Store is <strong>mid-January 2027</strong>, due to limited stock. </p><p>In addition to the Apple Store, retailers and telcos such as <a href="https://www.amazon.com.au/dp/B0HJB774XF" target="_blank">Amazon</a>, <a href="https://www.jbhifi.com.au/products/apple-iphone-duo-256gb-night-sky" target="_blank">JB Hi-Fi</a>, <a href="https://www.thegoodguys.com.au/apple-iphone-duo-256gb-star-white-mk2d4xa" target="_blank">The Good Guys</a>, <a href="https://www.vodafone.com.au/mobile/mobile-phones/apple/iphone-duo?capacity=256GB&color=Star%20White&contractTerm=48" target="_blank">Vodafone</a>, <a href="https://www.optus.com.au/mobile/phones/apple/iphone-duo" target="_blank">Optus</a> and Telstra have stocked the new handset.</p><p>Select retailers will accept trade-ins for your old phone and offer up to AU$1,684 credit towards the iPhone Duo. Apple is also offering trade-in credit between AU$70 and AU$1,595, with the higher credit reserved for a newer phone — i.e., an iPhone 17 Pro Max. If you're opting for a trade-in, you can calculate your phone's credit value at <a href="https://trade-in.optus.com.au/" target="_blank">Optus</a>, <a href="https://tradein.vodafone.com.au/" target="_blank">Vodafone</a> or <a href="https://www.jbhifi.com.au/pages/tradein" target="_blank">JB Hi-Fi</a>.</p><p>But enough with the fuss — here are the best iPhone Duo deals available right now. </p><h3 class="article-body__section" id="section-iphone-duo-promo-offers"><span>iPhone Duo promo offers</span></h3><div class="product"><a data-dimension112="e0cec08a-c844-11f1-be48-cdf87d78fda6" data-action="Deal Block" data-label="up to AU$780 off with Optus' Launch Plus Promo Plan" data-dimension48="up to AU$780 off with Optus' Launch Plus Promo Plan" href="https://www.optus.com.au/mobile/phones/apple/iphone-duo" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:500px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="YwvBBB6x3H2wXEEEevoNYC" name="Optus-logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/YwvBBB6x3H2wXEEEevoNYC-1920-80.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.optus.com.au/mobile/phones/apple/iphone-duo" target="_blank" rel="nofollow" data-dimension112="e0cec08a-c844-11f1-be48-cdf87d78fda6" data-action="Deal Block" data-label="up to AU$780 off with Optus' Launch Plus Promo Plan" data-dimension48="up to AU$780 off with Optus' Launch Plus Promo Plan" data-dimension25="">up to AU$780 off with Optus' Launch Plus Promo Plan:</a></strong><br>Save up to AU$780 with Optus' iPhone Duo Launch Plus Promo plan over 36 months. If you choose Optus' iPhone SIM plan, you'll save AU$120 in the first year, bringing the plan price down from AU$79p/m to AU$59p/m.</p><p>If you opt for the <a href="https://www.optus.com.au/mobile/phones/apple/iphone-duo" target="_blank">256GB iPhone Duo model with 36-month repayment</a> and Optus' Launch Plus Promo plan, you'll pay AU$156.18p/m for the first 12 months (then AU$176.18p/m ongoing). </p><p>The plan includes 360GB of data, and Optus Upgrade & Protect at no extra cost. Plus, you'll also receive AU$10p/m of Optus SubHub credit for 12 months, which you can put towards subscriptions within the platform.<a class="view-deal button" href="https://www.optus.com.au/mobile/phones/apple/iphone-duo" target="_blank" rel="nofollow" data-dimension112="e0cec08a-c844-11f1-be48-cdf87d78fda6" data-action="Deal Block" data-label="up to AU$780 off with Optus' Launch Plus Promo Plan" data-dimension48="up to AU$780 off with Optus' Launch Plus Promo Plan" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="e0cec0ee-c844-11f1-8c4f-232bc0b0dc55" data-action="Deal Block" data-label="up to 48-month payment plans + up to AU$1,684 trade-in credit" data-dimension48="up to 48-month payment plans + up to AU$1,684 trade-in credit" href="https://www.vodafone.com.au/mobile/mobile-phones/apple/iphone-duo?capacity=256GB&color=Star%20White&contractTerm=48" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:550px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="QfajE7yyJxPSmrv4c6Jwv7" name="vodafone logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/QfajE7yyJxPSmrv4c6Jwv7-1920-80.jpg" mos="" align="middle" fullscreen="" width="550" height="550" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.vodafone.com.au/mobile/mobile-phones/apple/iphone-duo?capacity=256GB&color=Star%20White&contractTerm=48" target="_blank" rel="nofollow" data-dimension112="e0cec0ee-c844-11f1-8c4f-232bc0b0dc55" data-action="Deal Block" data-label="up to 48-month payment plans + up to AU$1,684 trade-in credit" data-dimension48="up to 48-month payment plans + up to AU$1,684 trade-in credit" data-dimension25="">up to 48-month payment plans + up to AU$1,684 trade-in credit:</a></strong><br>Right now, Vodafone is offering up to AU$300 of trade-in credit for eligible devices and has discounted SIM plans for the iPhone Duo. Vodafone's offer also includes the Upgrade & Protect plans at no extra cost on eligible Vodafone plans with iPhone Duo over 24, 36 or 48 months. Upgrade & Protect Plus offers early upgrade, phone exchange and a AU$0 first screen replacement.</p><p>The iPhone Duo's 256GB model on a 36-month device-only plan costs just AU$97.19p/m. If you include the Medium Upgrade & Protect Plan with 220GB for AU$50p/m, it will cost AU$147.19p/m (for 12 months, then AU$165.19p/m. </p><p>Plus, if you trade in your old phone, you can receive up to AU$1,684 trade-in credit. The maximum amount is reserved for the iPhone 17 Pro Max, with AU$1,384 residual value AND AU$300 bonus credit on top. </p><p>If you buy the phone outright, Vodafone's SIM-only launch offers include the Small Plan with 65GB data for AU$45p/m (for 12 months, then AU$58p/m), the Medium Plan with 220GB data for AU$50p/m (for 12 months, then AU$68p/m) and the Large Plan with 420GB data for AU$55p/m (for 12 months, then AU$78p/m). <a class="view-deal button" href="https://www.vodafone.com.au/mobile/mobile-phones/apple/iphone-duo?capacity=256GB&color=Star%20White&contractTerm=48" target="_blank" rel="nofollow" data-dimension112="e0cec0ee-c844-11f1-8c4f-232bc0b0dc55" data-action="Deal Block" data-label="up to 48-month payment plans + up to AU$1,684 trade-in credit" data-dimension48="up to 48-month payment plans + up to AU$1,684 trade-in credit" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="e0cebfb8-c844-11f1-9808-75bf45620cbe" data-action="Deal Block" data-label="best price for the standalone headset" data-dimension48="best price for the standalone headset" data-dimension25="$3497" href="https://www.amazon.com.au/dp/B0HJB774XF" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:600px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="EaJx7PLL3rAQSY9BEgEGi3" name="Amazon-logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/EaJx7PLL3rAQSY9BEgEGi3-1920-80.jpg" mos="" align="middle" fullscreen="" width="600" height="600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/dp/B0HJB774XF" target="_blank" rel="nofollow" data-dimension112="e0cebfb8-c844-11f1-9808-75bf45620cbe" data-action="Deal Block" data-label="best price for the standalone headset" data-dimension48="best price for the standalone headset" data-dimension25="$3497">best price for the standalone headset: $3497</a></strong><br>Not the best discount by any means, but Amazon is stocking the iPhone Duo for AU$3,497, which is AU$2 cheaper than most retailers.<a class="view-deal button" href="https://www.amazon.com.au/dp/B0HJB774XF" target="_blank" rel="nofollow" data-dimension112="e0cebfb8-c844-11f1-9808-75bf45620cbe" data-action="Deal Block" data-label="best price for the standalone headset" data-dimension48="best price for the standalone headset" data-dimension25="$3497">View Deal</a></p></div><div class="product"><a data-dimension112="e0cec026-c844-11f1-b3c0-69a56c3071a4" data-action="Deal Block" data-label="Score a JB Hi-Fi gift card with old phone trade-in" data-dimension48="Score a JB Hi-Fi gift card with old phone trade-in" data-dimension25="$3499" href="https://www.jbhifi.com.au/products/apple-iphone-duo-256gb-night-sky" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:500px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="dUMxuvDTBa7Tnj2jRqi8ME" name="JB-Hi-Fi-logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/dUMxuvDTBa7Tnj2jRqi8ME-1920-80.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.jbhifi.com.au/products/apple-iphone-duo-256gb-night-sky" target="_blank" rel="nofollow" data-dimension112="e0cec026-c844-11f1-b3c0-69a56c3071a4" data-action="Deal Block" data-label="Score a JB Hi-Fi gift card with old phone trade-in" data-dimension48="Score a JB Hi-Fi gift card with old phone trade-in" data-dimension25="$3499">Score a JB Hi-Fi gift card with old phone trade-in: $3499</a></strong><br>JB Hi-Fi has a seriously good deal right now for those with trade-in-worthy phones. If you have an iPhone 13 to iPhone 17, you can score gift card credit when you pre-order the iPhone Duo. What a win!<a class="view-deal button" href="https://www.jbhifi.com.au/products/apple-iphone-duo-256gb-night-sky" target="_blank" rel="nofollow" data-dimension112="e0cec026-c844-11f1-b3c0-69a56c3071a4" data-action="Deal Block" data-label="Score a JB Hi-Fi gift card with old phone trade-in" data-dimension48="Score a JB Hi-Fi gift card with old phone trade-in" data-dimension25="$3499">View Deal</a></p></div><div class="product"><a data-dimension112="8dcc7d3c-c849-11f1-881e-edb2d75c48c4" data-action="Deal Block" data-label="save AU$1 on the handset" data-dimension48="save AU$1 on the handset" data-dimension25="$3498" href="https://www.thegoodguys.com.au/apple-iphone-duo-256gb-star-white-mk2d4xa" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:349px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="8CUEcroG8iPmB6VtqAjja4" name="The Good Guys_logo" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/8CUEcroG8iPmB6VtqAjja4-1920-80.jpg" mos="" align="middle" fullscreen="" width="349" height="349" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.thegoodguys.com.au/apple-iphone-duo-256gb-star-white-mk2d4xa" target="_blank" rel="nofollow" data-dimension112="8dcc7d3c-c849-11f1-881e-edb2d75c48c4" data-action="Deal Block" data-label="save AU$1 on the handset" data-dimension48="save AU$1 on the handset" data-dimension25="$3498">save AU$1 on the handset: $3498</a></strong><br>Much like the Amazon offer above, The Good Guys is offering a AU$1 discount on the iPhone Duo's price, which isn't that impressive. <a class="view-deal button" href="https://www.thegoodguys.com.au/apple-iphone-duo-256gb-star-white-mk2d4xa" target="_blank" rel="nofollow" data-dimension112="8dcc7d3c-c849-11f1-881e-edb2d75c48c4" data-action="Deal Block" data-label="save AU$1 on the handset" data-dimension48="save AU$1 on the handset" data-dimension25="$3498">View Deal</a></p></div><h3 class="article-body__section" id="section-iphone-duo-handset-deals"><span>iPhone Duo handset deals</span></h3><iframe allow="" height="1000" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://tomsguide.whistleout.com.au/Widgets/MobilePhoneSearch/Load?calls=-1&customer=Personal&data=5000&phone=Apple-iPhone-Duo-256GB&sms=-1&maxresults=5"></iframe> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/iphone-duo-deals-au</link>
                                                                            <description>
                            <![CDATA[ Pre-orders for the iPhone Duo start on October 16 in Australia. Here's how you can get the best deal from top-rated telcos and retailers. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">Z2fwyteW9U4SjcVDT8f92i</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/6RbxqgBQeRcLXmzyc9Sx6d-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 16 Oct 2026 12:00:00 +0000</pubDate>                                                                                                                                <updated>Thu, 22 Oct 2026 21:09:04 +0000</updated>
                                                                                                                                            <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ lucy.scotting@futurenet.com (Lucy Scotting) ]]></author>                    <dc:creator><![CDATA[ Lucy Scotting ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/PQTnAGVHEDNmwJEbWkaqHV-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Lucy Scotting is a staff writer for Tom’s Guide Australia, primarily covering lifestyle, streaming and internet-related news. Lucy started her career writing for HR and staffing industry publications, covering emerging tech, business and finance.&lt;/p&gt;&lt;p&gt;In her spare time, Lucy can be found watching sci-fi movies, working on her dystopian fiction novel (in progress since 2017) or hanging out with her dog, Fletcher. If she’s not found doing any of the above, she’s likely on her next adventure to a new city, country, or continent. &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/6RbxqgBQeRcLXmzyc9Sx6d-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPhone Duo hands on]]></media:description>                                                            <media:text><![CDATA[iPhone Duo hands on]]></media:text>
                                <media:title type="plain"><![CDATA[iPhone Duo hands on]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/6RbxqgBQeRcLXmzyc9Sx6d-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Apple's first foldable, the iPhone Duo, has officially landed in Australia, and if you're keen to get your hands on one, I've got your back.</p><p>The handset is available at major retailers and through payment plans from the Big Three telcos. The iPhone Duo starts at <a href="https://www.apple.com/au/shop/buy-iphone/iphone-duo" target="_blank">AU$3,499 for the 256GB model</a> and caps out at <a href="https://www.apple.com/au/shop/buy-iphone/iphone-duo" target="_blank">AU$5,899 for the 2TB model</a>. The foldable can be purchased outright at the <a href="https://www.apple.com/au/shop/buy-iphone/iphone-duo" target="_blank">Apple Store</a> or via its financing program with Afterpay. It's worth noting that the ship date as of <strong>October 23, 2026, </strong>if ordering from the Apple Store is <strong>mid-January 2027</strong>, due to limited stock. </p><p>In addition to the Apple Store, retailers and telcos such as <a href="https://www.amazon.com.au/dp/B0HJB774XF" target="_blank">Amazon</a>, <a href="https://www.jbhifi.com.au/products/apple-iphone-duo-256gb-night-sky" target="_blank">JB Hi-Fi</a>, <a href="https://www.thegoodguys.com.au/apple-iphone-duo-256gb-star-white-mk2d4xa" target="_blank">The Good Guys</a>, <a href="https://www.vodafone.com.au/mobile/mobile-phones/apple/iphone-duo?capacity=256GB&color=Star%20White&contractTerm=48" target="_blank">Vodafone</a>, <a href="https://www.optus.com.au/mobile/phones/apple/iphone-duo" target="_blank">Optus</a> and Telstra have stocked the new handset.</p><p>Select retailers will accept trade-ins for your old phone and offer up to AU$1,684 credit towards the iPhone Duo. Apple is also offering trade-in credit between AU$70 and AU$1,595, with the higher credit reserved for a newer phone — i.e., an iPhone 17 Pro Max. If you're opting for a trade-in, you can calculate your phone's credit value at <a href="https://trade-in.optus.com.au/" target="_blank">Optus</a>, <a href="https://tradein.vodafone.com.au/" target="_blank">Vodafone</a> or <a href="https://www.jbhifi.com.au/pages/tradein" target="_blank">JB Hi-Fi</a>.</p><p>But enough with the fuss — here are the best iPhone Duo deals available right now. </p><h3 class="article-body__section" id="section-iphone-duo-promo-offers"><span>iPhone Duo promo offers</span></h3><div class="product"><a data-dimension112="e0cec08a-c844-11f1-be48-cdf87d78fda6" data-action="Deal Block" data-label="up to AU$780 off with Optus' Launch Plus Promo Plan" data-dimension48="up to AU$780 off with Optus' Launch Plus Promo Plan" href="https://www.optus.com.au/mobile/phones/apple/iphone-duo" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:500px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="YwvBBB6x3H2wXEEEevoNYC" name="Optus-logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/YwvBBB6x3H2wXEEEevoNYC-1920-80.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.optus.com.au/mobile/phones/apple/iphone-duo" target="_blank" rel="nofollow" data-dimension112="e0cec08a-c844-11f1-be48-cdf87d78fda6" data-action="Deal Block" data-label="up to AU$780 off with Optus' Launch Plus Promo Plan" data-dimension48="up to AU$780 off with Optus' Launch Plus Promo Plan" data-dimension25="">up to AU$780 off with Optus' Launch Plus Promo Plan:</a></strong><br>Save up to AU$780 with Optus' iPhone Duo Launch Plus Promo plan over 36 months. If you choose Optus' iPhone SIM plan, you'll save AU$120 in the first year, bringing the plan price down from AU$79p/m to AU$59p/m.</p><p>If you opt for the <a href="https://www.optus.com.au/mobile/phones/apple/iphone-duo" target="_blank">256GB iPhone Duo model with 36-month repayment</a> and Optus' Launch Plus Promo plan, you'll pay AU$156.18p/m for the first 12 months (then AU$176.18p/m ongoing). </p><p>The plan includes 360GB of data, and Optus Upgrade & Protect at no extra cost. Plus, you'll also receive AU$10p/m of Optus SubHub credit for 12 months, which you can put towards subscriptions within the platform.<a class="view-deal button" href="https://www.optus.com.au/mobile/phones/apple/iphone-duo" target="_blank" rel="nofollow" data-dimension112="e0cec08a-c844-11f1-be48-cdf87d78fda6" data-action="Deal Block" data-label="up to AU$780 off with Optus' Launch Plus Promo Plan" data-dimension48="up to AU$780 off with Optus' Launch Plus Promo Plan" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="e0cec0ee-c844-11f1-8c4f-232bc0b0dc55" data-action="Deal Block" data-label="up to 48-month payment plans + up to AU$1,684 trade-in credit" data-dimension48="up to 48-month payment plans + up to AU$1,684 trade-in credit" href="https://www.vodafone.com.au/mobile/mobile-phones/apple/iphone-duo?capacity=256GB&color=Star%20White&contractTerm=48" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:550px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="QfajE7yyJxPSmrv4c6Jwv7" name="vodafone logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/QfajE7yyJxPSmrv4c6Jwv7-1920-80.jpg" mos="" align="middle" fullscreen="" width="550" height="550" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.vodafone.com.au/mobile/mobile-phones/apple/iphone-duo?capacity=256GB&color=Star%20White&contractTerm=48" target="_blank" rel="nofollow" data-dimension112="e0cec0ee-c844-11f1-8c4f-232bc0b0dc55" data-action="Deal Block" data-label="up to 48-month payment plans + up to AU$1,684 trade-in credit" data-dimension48="up to 48-month payment plans + up to AU$1,684 trade-in credit" data-dimension25="">up to 48-month payment plans + up to AU$1,684 trade-in credit:</a></strong><br>Right now, Vodafone is offering up to AU$300 of trade-in credit for eligible devices and has discounted SIM plans for the iPhone Duo. Vodafone's offer also includes the Upgrade & Protect plans at no extra cost on eligible Vodafone plans with iPhone Duo over 24, 36 or 48 months. Upgrade & Protect Plus offers early upgrade, phone exchange and a AU$0 first screen replacement.</p><p>The iPhone Duo's 256GB model on a 36-month device-only plan costs just AU$97.19p/m. If you include the Medium Upgrade & Protect Plan with 220GB for AU$50p/m, it will cost AU$147.19p/m (for 12 months, then AU$165.19p/m. </p><p>Plus, if you trade in your old phone, you can receive up to AU$1,684 trade-in credit. The maximum amount is reserved for the iPhone 17 Pro Max, with AU$1,384 residual value AND AU$300 bonus credit on top. </p><p>If you buy the phone outright, Vodafone's SIM-only launch offers include the Small Plan with 65GB data for AU$45p/m (for 12 months, then AU$58p/m), the Medium Plan with 220GB data for AU$50p/m (for 12 months, then AU$68p/m) and the Large Plan with 420GB data for AU$55p/m (for 12 months, then AU$78p/m). <a class="view-deal button" href="https://www.vodafone.com.au/mobile/mobile-phones/apple/iphone-duo?capacity=256GB&color=Star%20White&contractTerm=48" target="_blank" rel="nofollow" data-dimension112="e0cec0ee-c844-11f1-8c4f-232bc0b0dc55" data-action="Deal Block" data-label="up to 48-month payment plans + up to AU$1,684 trade-in credit" data-dimension48="up to 48-month payment plans + up to AU$1,684 trade-in credit" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="e0cebfb8-c844-11f1-9808-75bf45620cbe" data-action="Deal Block" data-label="best price for the standalone headset" data-dimension48="best price for the standalone headset" data-dimension25="$3497" href="https://www.amazon.com.au/dp/B0HJB774XF" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:600px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="EaJx7PLL3rAQSY9BEgEGi3" name="Amazon-logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/EaJx7PLL3rAQSY9BEgEGi3-1920-80.jpg" mos="" align="middle" fullscreen="" width="600" height="600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/dp/B0HJB774XF" target="_blank" rel="nofollow" data-dimension112="e0cebfb8-c844-11f1-9808-75bf45620cbe" data-action="Deal Block" data-label="best price for the standalone headset" data-dimension48="best price for the standalone headset" data-dimension25="$3497">best price for the standalone headset: $3497</a></strong><br>Not the best discount by any means, but Amazon is stocking the iPhone Duo for AU$3,497, which is AU$2 cheaper than most retailers.<a class="view-deal button" href="https://www.amazon.com.au/dp/B0HJB774XF" target="_blank" rel="nofollow" data-dimension112="e0cebfb8-c844-11f1-9808-75bf45620cbe" data-action="Deal Block" data-label="best price for the standalone headset" data-dimension48="best price for the standalone headset" data-dimension25="$3497">View Deal</a></p></div><div class="product"><a data-dimension112="e0cec026-c844-11f1-b3c0-69a56c3071a4" data-action="Deal Block" data-label="Score a JB Hi-Fi gift card with old phone trade-in" data-dimension48="Score a JB Hi-Fi gift card with old phone trade-in" data-dimension25="$3499" href="https://www.jbhifi.com.au/products/apple-iphone-duo-256gb-night-sky" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:500px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="dUMxuvDTBa7Tnj2jRqi8ME" name="JB-Hi-Fi-logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/dUMxuvDTBa7Tnj2jRqi8ME-1920-80.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.jbhifi.com.au/products/apple-iphone-duo-256gb-night-sky" target="_blank" rel="nofollow" data-dimension112="e0cec026-c844-11f1-b3c0-69a56c3071a4" data-action="Deal Block" data-label="Score a JB Hi-Fi gift card with old phone trade-in" data-dimension48="Score a JB Hi-Fi gift card with old phone trade-in" data-dimension25="$3499">Score a JB Hi-Fi gift card with old phone trade-in: $3499</a></strong><br>JB Hi-Fi has a seriously good deal right now for those with trade-in-worthy phones. If you have an iPhone 13 to iPhone 17, you can score gift card credit when you pre-order the iPhone Duo. What a win!<a class="view-deal button" href="https://www.jbhifi.com.au/products/apple-iphone-duo-256gb-night-sky" target="_blank" rel="nofollow" data-dimension112="e0cec026-c844-11f1-b3c0-69a56c3071a4" data-action="Deal Block" data-label="Score a JB Hi-Fi gift card with old phone trade-in" data-dimension48="Score a JB Hi-Fi gift card with old phone trade-in" data-dimension25="$3499">View Deal</a></p></div><div class="product"><a data-dimension112="8dcc7d3c-c849-11f1-881e-edb2d75c48c4" data-action="Deal Block" data-label="save AU$1 on the handset" data-dimension48="save AU$1 on the handset" data-dimension25="$3498" href="https://www.thegoodguys.com.au/apple-iphone-duo-256gb-star-white-mk2d4xa" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:349px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="8CUEcroG8iPmB6VtqAjja4" name="The Good Guys_logo" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/8CUEcroG8iPmB6VtqAjja4-1920-80.jpg" mos="" align="middle" fullscreen="" width="349" height="349" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.thegoodguys.com.au/apple-iphone-duo-256gb-star-white-mk2d4xa" target="_blank" rel="nofollow" data-dimension112="8dcc7d3c-c849-11f1-881e-edb2d75c48c4" data-action="Deal Block" data-label="save AU$1 on the handset" data-dimension48="save AU$1 on the handset" data-dimension25="$3498">save AU$1 on the handset: $3498</a></strong><br>Much like the Amazon offer above, The Good Guys is offering a AU$1 discount on the iPhone Duo's price, which isn't that impressive. <a class="view-deal button" href="https://www.thegoodguys.com.au/apple-iphone-duo-256gb-star-white-mk2d4xa" target="_blank" rel="nofollow" data-dimension112="8dcc7d3c-c849-11f1-881e-edb2d75c48c4" data-action="Deal Block" data-label="save AU$1 on the handset" data-dimension48="save AU$1 on the handset" data-dimension25="$3498">View Deal</a></p></div><h3 class="article-body__section" id="section-iphone-duo-handset-deals"><span>iPhone Duo handset deals</span></h3><iframe allow="" height="1000" width="100%" id="" style="" class="position-center" data-lazy-priority="low" data-lazy-src="https://tomsguide.whistleout.com.au/Widgets/MobilePhoneSearch/Load?calls=-1&customer=Personal&data=5000&phone=Apple-iPhone-Duo-256GB&sms=-1&maxresults=5"></iframe>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ MacBook Ultra could release on November 6 — but don't expect an M6 chip to appear ]]></title>
                                                                                                <dc:content><![CDATA[ <p>We now have confirmation that Apple is hosting <a href="https://www.tomsguide.com/computing/macbooks/apple-holding-event-oct-28-for-first-touchscreen-macbook-pro-what-we-know">another product launch on October 28</a>, and with it should come the official reveal of the <a href="https://www.tomsguide.com/computing/laptops/macbook-ultra-everything-we-know-so-far">touchscreen MacBook Ultra</a> and the <a href="https://www.tomsguide.com/computing/ipads/ipad-mini-8-rumors-everything-we-know-so-far">iPad mini 8</a>. The question is, when will those products actually go on sale? The MacBook might hit the Apple Store as soon as November 6.</p><p>That's according to Bloomberg's Mark Gurman, during the latest episode of the <a href="https://youtu.be/DZkRGgQn6CA" target="_blank">Power On podcast.</a> According to Gurman, Apple Stores are scheduled for a "big floor reset" overnight between November 5 and November 6. Gurman believes this is being done to prepare Apple's retail locations for the unannounced MacBooks.</p><p>The release date makes total sense, given what we know about how Apple tends to release new products. November 6 is just nine days after the October 28 event — and a Friday. Apple loves to release new products on a Friday, and that usually happens the week following a big launch event. Pre-orders will likely open following the event, or on Friday October 30.</p><p>It's likely that this big retail switch will also be to aid the release of the iPad mini 8 and M6 upgrades for the iMac and 14-inch MacBook Pro. They are all expected to appear at the October 28 event, and will presumably go on sale shortly afterwards.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OznJ2O"></div>                            </div>                            <script src="https://kwizly.com/embed/OznJ2O.js" async></script><h2 id="not-an-m6-chip-in-sight">Not an M6 chip in sight</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="5jsbAXhogUzmnuzcd5jTCR" name="MacBook Pro 16-inch M5 Pro review-LIST" alt="MacBook Pro 16-inch M5 Pro on a desk" src="https://cdn.mos.cms.futurecdn.net/5jsbAXhogUzmnuzcd5jTCR-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Gurman also reiterated claims that the touchscreen MacBook may not come with an M6 chip. He claims that Apple is "pretty much done" with the M6, which only debuted last month, and will not be developing any M6 Pro, M6 Max or M6 Ultra chips. </p><p>This reiterates past rumors that Apple would launch the touchscreen MacBook <a href="https://www.tomsguide.com/computing/macbooks/apple-macbook-ultra-may-arrive-running-on-some-of-the-same-chips-as-macbook-pro-heres-why">with M5 Pro, M5 Max and M5 Ultra chips</a>. </p><p>That should offer significantly better performance power than the standard M6 chip, which wouldn't be fitting for a premium device that may, or may not, bear the "Ultra" name. Further chip upgrades won't be happening until the release of the M7 series, which Gurman expects to happen "at the end of next year."</p><p>As for why Apple is skipping the high-end M6 chips, rumors suggest it's because it wants Apple Silicon to pivot more towards AI and better graphics performance Presumably, by scrapping the M6 variants, Apple can pour extra effort and resources into developing the M7 chips sooner than it otherwise would have.</p><p>This means those of you that want to prioritize performance and on-device AI processing may want to hold off on picking up the touchscreen MacBook until the launch of the M7. Though whether they will come to the MacBook Ultra this time next year, or much later than that, isn't clear right now — so a delay is a risk you may have to take.</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/news/live/apple-homeview-event-october-13-live-updates">Apple 'Welcome home' event RECAP — HomeView, Apple TV 4K, HomePod mini 2 unveiled — all the news, prices and release dates</a></li><li><a href="https://www.tomsguide.com/ai/apple-says-siri-doesnt-need-to-beat-chatgpt-heres-what-its-betting-on-instead">Apple says Siri doesn't need to beat ChatGPT — here's what it's betting on instead</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-benchmark-leaks-and-apples-foldable-is-about-to-leave-android-rivals-in-the-dust">iPhone Duo Geekbench scores leak, and Apple's foldable is about to leave Android rivals in the dust</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/macbooks/macbook-ultra-could-release-on-november-6-but-dont-expect-an-m6-chip-to-appear</link>
                                                                            <description>
                            <![CDATA[ MacBook Ultra could land in your hands nine days after the next big Apple event — here's what we know ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">DVq4A8iSzwkNF8N53h8hsh</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/ViRGq3HUPCWmC4Nb9gGEhY-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 16 Oct 2026 10:52:30 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[MacBooks]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Laptops]]></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/ViRGq3HUPCWmC4Nb9gGEhY-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[MacBook Pro 16-inch M5 Pro on a desk]]></media:description>                                                            <media:text><![CDATA[MacBook Pro 16-inch M5 Pro on a desk]]></media:text>
                                <media:title type="plain"><![CDATA[MacBook Pro 16-inch M5 Pro on a desk]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/ViRGq3HUPCWmC4Nb9gGEhY-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>We now have confirmation that Apple is hosting <a href="https://www.tomsguide.com/computing/macbooks/apple-holding-event-oct-28-for-first-touchscreen-macbook-pro-what-we-know">another product launch on October 28</a>, and with it should come the official reveal of the <a href="https://www.tomsguide.com/computing/laptops/macbook-ultra-everything-we-know-so-far">touchscreen MacBook Ultra</a> and the <a href="https://www.tomsguide.com/computing/ipads/ipad-mini-8-rumors-everything-we-know-so-far">iPad mini 8</a>. The question is, when will those products actually go on sale? The MacBook might hit the Apple Store as soon as November 6.</p><p>That's according to Bloomberg's Mark Gurman, during the latest episode of the <a href="https://youtu.be/DZkRGgQn6CA" target="_blank">Power On podcast.</a> According to Gurman, Apple Stores are scheduled for a "big floor reset" overnight between November 5 and November 6. Gurman believes this is being done to prepare Apple's retail locations for the unannounced MacBooks.</p><p>The release date makes total sense, given what we know about how Apple tends to release new products. November 6 is just nine days after the October 28 event — and a Friday. Apple loves to release new products on a Friday, and that usually happens the week following a big launch event. Pre-orders will likely open following the event, or on Friday October 30.</p><p>It's likely that this big retail switch will also be to aid the release of the iPad mini 8 and M6 upgrades for the iMac and 14-inch MacBook Pro. They are all expected to appear at the October 28 event, and will presumably go on sale shortly afterwards.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OznJ2O"></div>                            </div>                            <script src="https://kwizly.com/embed/OznJ2O.js" async></script><h2 id="not-an-m6-chip-in-sight">Not an M6 chip in sight</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="5jsbAXhogUzmnuzcd5jTCR" name="MacBook Pro 16-inch M5 Pro review-LIST" alt="MacBook Pro 16-inch M5 Pro on a desk" src="https://cdn.mos.cms.futurecdn.net/5jsbAXhogUzmnuzcd5jTCR-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Gurman also reiterated claims that the touchscreen MacBook may not come with an M6 chip. He claims that Apple is "pretty much done" with the M6, which only debuted last month, and will not be developing any M6 Pro, M6 Max or M6 Ultra chips. </p><p>This reiterates past rumors that Apple would launch the touchscreen MacBook <a href="https://www.tomsguide.com/computing/macbooks/apple-macbook-ultra-may-arrive-running-on-some-of-the-same-chips-as-macbook-pro-heres-why">with M5 Pro, M5 Max and M5 Ultra chips</a>. </p><p>That should offer significantly better performance power than the standard M6 chip, which wouldn't be fitting for a premium device that may, or may not, bear the "Ultra" name. Further chip upgrades won't be happening until the release of the M7 series, which Gurman expects to happen "at the end of next year."</p><p>As for why Apple is skipping the high-end M6 chips, rumors suggest it's because it wants Apple Silicon to pivot more towards AI and better graphics performance Presumably, by scrapping the M6 variants, Apple can pour extra effort and resources into developing the M7 chips sooner than it otherwise would have.</p><p>This means those of you that want to prioritize performance and on-device AI processing may want to hold off on picking up the touchscreen MacBook until the launch of the M7. Though whether they will come to the MacBook Ultra this time next year, or much later than that, isn't clear right now — so a delay is a risk you may have to take.</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/news/live/apple-homeview-event-october-13-live-updates">Apple 'Welcome home' event RECAP — HomeView, Apple TV 4K, HomePod mini 2 unveiled — all the news, prices and release dates</a></li><li><a href="https://www.tomsguide.com/ai/apple-says-siri-doesnt-need-to-beat-chatgpt-heres-what-its-betting-on-instead">Apple says Siri doesn't need to beat ChatGPT — here's what it's betting on instead</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-benchmark-leaks-and-apples-foldable-is-about-to-leave-android-rivals-in-the-dust">iPhone Duo Geekbench scores leak, and Apple's foldable is about to leave Android rivals in the dust</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Why your high-end headphones sound underwhelming — and how to fix them ]]></title>
                                                                                                <dc:content><![CDATA[ <p>If you’ve ever put on a pair of high-end <a href="https://www.tomsguide.com/us/best-noise-cancelling-headphones,review-5566.html">noise-canceling headphones</a> and felt like the sound just wasn't blowing you away, you’re definitely not alone. I had that exact same reaction with my own pair.</p><p>Your hardware is likely fine, it’s just being held back. In most cases, a quick adjustment to your device settings, factory EQ, and background processing features is all it takes to unlock their full potential. </p><section class="howto-block">                    <h3>Why some wireless headphones don't sound best on iPhone</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="http://cdn.mos.cms.futurecdn.net/gtoTmkQYpGeQehETVCSEuL.jpg"                                        alt="JBL Tour One review"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="http://cdn.mos.cms.futurecdn.net/gtoTmkQYpGeQehETVCSEuL.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>If you pair premium Android-friendly headphones with an iPhone, you aren't getting the full wireless audio quality you paid for. </p><p>High-end headphones feature advanced high-speed Bluetooth technology that can stream music at nearly triple the data rate of standard wireless. However, Apple iPhones do not support these advanced formats, forcing your iPhone to compress wireless playback down to a standard, lower-quality format. </p><p>Due to this Bluetooth bottleneck, <strong>the only way to unlock true high-resolution playback is to connect your headphones using a physical cable  </strong>—though you'll need to check your specific model. Some support pure digital audio directly over a USB-C cable, while others require a standard 3.5mm audio cable paired with a small headphone adapter. </p><p>While plugging in a wire is inconvenient when you are out and about, it is a trade-off worth making: you can stick to standard Bluetooth for convenience while commuting, and save the cable for critical listening when you are relaxing at home.</p><p>Also, <strong>make sure to set your streaming app's audio quality to Lossless </strong>(such as in Settings, Music, and Audio Quality), ensuring your phone feeds the highest quality source file to your headphones.</p></p>                </section><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-W02rYX"></div>                            </div>                            <script src="https://kwizly.com/embed/W02rYX.js" async></script><section class="howto-block">                    <h3>How to fix flat sounding headphones</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/XoFgggz7vYrUSBu6HcZ9jQ.jpg"                                        alt="the anker soundcore space 2 pro headphones in mauve gray photographed against a blue tom's guide background"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/XoFgggz7vYrUSBu6HcZ9jQ.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>Before changing any software settings, <strong>check your physical fit and seal</strong>. If your earbud tips are too small or your over-ear cups aren't sealing tightly against your head, bass frequencies escape instantly, making your music sound thin and lifeless. Try different ear tip sizes or adjust the headband first.</p><p>If the fit is perfect but your favourite tracks still lack energy, you can easily reshape the sound using your headphone’s companion app (like Sony Sound Connect or Sennheiser Smart Control). <strong>Open the app's Equaliser (EQ) settings</strong>, which usually look like a row of frequency sliders. </p><p>When tweaking your settings, its best to<strong> avoid cranking sliders all the way to the maximum</strong>. This overloads the audio driver, which causes digital distortion and muddies the fine details. <strong>Make small adjustments at first</strong>. Instead of heavily boosting one slider, try slightly lowering the others to get the balance you want.</p></p>                </section><section class="howto-block">                    <h3>Test your music with ANC turned off</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="http://cdn.mos.cms.futurecdn.net/TshkAYLcFq9LJud4U73Q99.jpg"                                        alt="Sennheiser Momentum 4 Wireless headphones close up on white painted background  "                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="http://cdn.mos.cms.futurecdn.net/TshkAYLcFq9LJud4U73Q99.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>Active Noise Cancellation (ANC) relies on external microphones and digital processing to cancel ambient noise. While ANC is essential for noisy commutes, that active signal processing can subtly compress certain audio frequencies and narrow the soundstage. </p><p>To test if ANC is degrading your mix in quiet environments, <strong>open your headphone app, navigate to Sound Control, and set ANC to</strong> <strong>off</strong> to hear how your headphones actually sound without any artificial tweaking getting in the way.</p></p>                </section><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide </span></h3><ul><li><strong></strong><a href="https://www.tomsguide.com/audio/headphones/my-usd300-noise-canceling-headphones-started-making-a-strange-pop-on-every-step-the-fix-was-surprisingly-simple"><strong>My $300 noise-canceling headphones started making a strange pop on every step — the fix was surprisingly simple</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/audio/airpods/i-just-discovered-these-5-airpods-features-and-theyre-game-changers"><strong>I just discovered these 5 hidden AirPods features — and they're game-changers</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/audio/your-earbuds-are-damaging-your-hearing-3-warning-signs-youre-ignoring"><strong>Your earbuds are damaging your hearing — 3 warning signs you're ignoring</strong></a><strong></strong></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/audio/headphones/how-to-get-the-best-sound-quality-out-of-your-bluetooth-headphones-on-ios-and-android</link>
                                                                            <description>
                            <![CDATA[ Disappointed by your Bluetooth headphones? Learn why iPhone limitations and default EQ settings can ruin your audio —and how to fix them. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">tWo23kXCS7uJj7MV8Yi75j</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/tQrd9RWmzZbh2bA8XXRJCT-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 16 Oct 2026 09:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Headphones]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                                                                <author><![CDATA[ kaycee.hill@futurenet.com (Kaycee Hill) ]]></author>                    <dc:creator><![CDATA[ Kaycee Hill ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/xHn6RmpEqg87cvtLwrBu9G-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/tQrd9RWmzZbh2bA8XXRJCT-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&amp;#39;s Guide ]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Spotify Lossless on phone next to Marshall headphones]]></media:description>                                                            <media:text><![CDATA[Spotify Lossless on phone next to Marshall headphones]]></media:text>
                                <media:title type="plain"><![CDATA[Spotify Lossless on phone next to Marshall headphones]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/tQrd9RWmzZbh2bA8XXRJCT-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>If you’ve ever put on a pair of high-end <a href="https://www.tomsguide.com/us/best-noise-cancelling-headphones,review-5566.html">noise-canceling headphones</a> and felt like the sound just wasn't blowing you away, you’re definitely not alone. I had that exact same reaction with my own pair.</p><p>Your hardware is likely fine, it’s just being held back. In most cases, a quick adjustment to your device settings, factory EQ, and background processing features is all it takes to unlock their full potential. </p><section class="howto-block">                    <h3>Why some wireless headphones don't sound best on iPhone</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="http://cdn.mos.cms.futurecdn.net/gtoTmkQYpGeQehETVCSEuL.jpg"                                        alt="JBL Tour One review"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="http://cdn.mos.cms.futurecdn.net/gtoTmkQYpGeQehETVCSEuL.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>If you pair premium Android-friendly headphones with an iPhone, you aren't getting the full wireless audio quality you paid for. </p><p>High-end headphones feature advanced high-speed Bluetooth technology that can stream music at nearly triple the data rate of standard wireless. However, Apple iPhones do not support these advanced formats, forcing your iPhone to compress wireless playback down to a standard, lower-quality format. </p><p>Due to this Bluetooth bottleneck, <strong>the only way to unlock true high-resolution playback is to connect your headphones using a physical cable  </strong>—though you'll need to check your specific model. Some support pure digital audio directly over a USB-C cable, while others require a standard 3.5mm audio cable paired with a small headphone adapter. </p><p>While plugging in a wire is inconvenient when you are out and about, it is a trade-off worth making: you can stick to standard Bluetooth for convenience while commuting, and save the cable for critical listening when you are relaxing at home.</p><p>Also, <strong>make sure to set your streaming app's audio quality to Lossless </strong>(such as in Settings, Music, and Audio Quality), ensuring your phone feeds the highest quality source file to your headphones.</p></p>                </section><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-W02rYX"></div>                            </div>                            <script src="https://kwizly.com/embed/W02rYX.js" async></script><section class="howto-block">                    <h3>How to fix flat sounding headphones</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/XoFgggz7vYrUSBu6HcZ9jQ.jpg"                                        alt="the anker soundcore space 2 pro headphones in mauve gray photographed against a blue tom's guide background"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/XoFgggz7vYrUSBu6HcZ9jQ.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>Before changing any software settings, <strong>check your physical fit and seal</strong>. If your earbud tips are too small or your over-ear cups aren't sealing tightly against your head, bass frequencies escape instantly, making your music sound thin and lifeless. Try different ear tip sizes or adjust the headband first.</p><p>If the fit is perfect but your favourite tracks still lack energy, you can easily reshape the sound using your headphone’s companion app (like Sony Sound Connect or Sennheiser Smart Control). <strong>Open the app's Equaliser (EQ) settings</strong>, which usually look like a row of frequency sliders. </p><p>When tweaking your settings, its best to<strong> avoid cranking sliders all the way to the maximum</strong>. This overloads the audio driver, which causes digital distortion and muddies the fine details. <strong>Make small adjustments at first</strong>. Instead of heavily boosting one slider, try slightly lowering the others to get the balance you want.</p></p>                </section><section class="howto-block">                    <h3>Test your music with ANC turned off</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="http://cdn.mos.cms.futurecdn.net/TshkAYLcFq9LJud4U73Q99.jpg"                                        alt="Sennheiser Momentum 4 Wireless headphones close up on white painted background  "                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="http://cdn.mos.cms.futurecdn.net/TshkAYLcFq9LJud4U73Q99.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>Active Noise Cancellation (ANC) relies on external microphones and digital processing to cancel ambient noise. While ANC is essential for noisy commutes, that active signal processing can subtly compress certain audio frequencies and narrow the soundstage. </p><p>To test if ANC is degrading your mix in quiet environments, <strong>open your headphone app, navigate to Sound Control, and set ANC to</strong> <strong>off</strong> to hear how your headphones actually sound without any artificial tweaking getting in the way.</p></p>                </section><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide </span></h3><ul><li><strong></strong><a href="https://www.tomsguide.com/audio/headphones/my-usd300-noise-canceling-headphones-started-making-a-strange-pop-on-every-step-the-fix-was-surprisingly-simple"><strong>My $300 noise-canceling headphones started making a strange pop on every step — the fix was surprisingly simple</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/audio/airpods/i-just-discovered-these-5-airpods-features-and-theyre-game-changers"><strong>I just discovered these 5 hidden AirPods features — and they're game-changers</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/audio/your-earbuds-are-damaging-your-hearing-3-warning-signs-youre-ignoring"><strong>Your earbuds are damaging your hearing — 3 warning signs you're ignoring</strong></a><strong></strong></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple says Siri doesn't need to beat ChatGPT — here's what it's betting on instead ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Apple has spent years trying to catch up with ChatGPT, Gemini and Claude. Now, the company's new CEO is making the case that Siri doesn't actually need to win the AI intelligence race.</p><p>In a new <a href="https://time.com/collection/best-inventions/2026/apple-iphone-duo/" target="_blank">interview with TIME</a>, published October 15, Apple CEO John Ternus explained why the company is <a href="https://www.tomsguide.com/ai/siri-just-got-a-major-ai-upgrade-here-are-5-things-to-try-first">taking a different approach to AI</a>, even as competitors spend billions developing their own models.</p><p>Rather than trying to build the smartest chatbot, Apple is betting that the future of AI comes down to something much more personal: <a href="https://www.tomsguide.com/ai/apple-intelligence/apple-is-prioritizing-privacy-over-winning-the-ai-race-heres-why">the information already sitting on your iPhone</a>.</p><p>It's an interesting argument from a company that has struggled to deliver on its AI promises. But with the new Siri AI now available in the U.S., Apple finally has an opportunity to show whether that strategy can work.</p><h2 id="apple-isn-39-t-trying-to-build-another-chatgpt">Apple isn't trying to build another ChatGPT</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="AJfRiTwXRZBjMQmGp6bqfW" name="openai-mac.jpg" alt="OpenAI and Apple logos" src="https://cdn.mos.cms.futurecdn.net/AJfRiTwXRZBjMQmGp6bqfW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>One of the biggest revelations in the TIME interview is how comfortable Apple appears to be relying on <a href="https://www.tomsguide.com/ai/apple-intelligence/siri-2-0-could-finally-reach-your-iphone-next-month-with-the-gemini-powered-assistant-due-to-gain-even-more-abilities-at-wwdc-this-summer">Google for its AI technology</a>.</p><p>The new Siri uses an Apple AI model that draws on Google's Gemini technology, a partnership that might once have seemed unthinkable for a company famous for controlling nearly every aspect of its products. Ternus doesn't see it that way. </p><p>"We make the things where we can really bring differentiation," he told TIME.</p><p>Interestingly, Apple doesn't seem to be interested in developing a frontier AI model simply to say it has one, which leaves companies such as OpenAI, Google and Anthropic competing to produce more models while Apple concentrates on what those models can actually do inside its devices.</p><p>And that brings us to Siri's biggest potential advantage.</p><h2 id="your-iphone-knows-things-chatgpt-doesn-39-t">Your iPhone knows things ChatGPT doesn't</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="4AkQ7gosxR54LV5qDC92vS" name="maps-tips-2-2" alt="Apple Maps on an iPhone 17" src="https://cdn.mos.cms.futurecdn.net/4AkQ7gosxR54LV5qDC92vS-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>Think about how much of <a href="https://www.tomsguide.com/opinion/i-almost-returned-to-android-but-the-iphone-kept-dragging-me-back">your life is already stored on your phone</a>. From your messages and emails to calendar appointments, images and personal information tucked in the notes, parts of your life are scatter across apps you use every day. </p><p>ChatGPT and Gemini can help you<a href="https://www.tomsguide.com/ai/i-used-google-notebooklm-to-reduce-my-mental-load-for-a-week-heres-what-i-stopped-stressing-about"> organize information</a>, write emails and<a href="https://www.tomsguide.com/ai/i-asked-chatgpt-how-to-feel-more-organized-and-this-one-tip-changed-my-entire-routine"> plan your schedule</a>. But getting them to work with your personal data often requires connecting accounts, granting permissions or manually providing context.</p><p>Siri has a different starting point. With permission, Apple's assistant can draw connections between information across supported apps and use that context to complete tasks. The goal is for Siri to handle making those connections for you.</p><p>Apple also sees opportunities for <a href="https://www.tomsguide.com/ai/apple-intelligence/i-used-apples-visual-intelligence-to-count-calories-heres-how">Siri to interpret health information</a> collected by an Apple Watch or find relevant details buried in emails and documents.</p><p><a href="https://www.tomsguide.com/ai/i-was-paying-for-too-many-ai-tools-here-are-the-4-i-kept-and-3-i-cancelled">Other AI assistants are becoming even more capable of working across apps, too.</a> Apple doesn't have exclusive rights to personal AI. But its tight integration with iOS could make these interactions feel more natural.</p><h2 id="apple-is-also-betting-that-less-ai-could-be-better">Apple is also betting that less AI could be 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:1794px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="iopeLDvPGawviRJFdMxca5" name="iOS 27 Siri AI" alt="iOS 27 Siri AI running on iPhone 17 Pro." src="https://cdn.mos.cms.futurecdn.net/iopeLDvPGawviRJFdMxca5-1920-80.jpg" mos="" align="middle" fullscreen="" width="1794" height="1009" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>There's another interesting part of Apple's strategy. The company doesn't seem to be trying to make Siri as autonomous as the most advanced AI agents. In the TIME interview, Apple's AI product leader Lilian Rincon explained that Siri was <a href="https://www.tomsguide.com/phones/iphones/i-spent-a-week-with-siri-ai-here-are-my-honest-pros-and-cons">deliberately designed not to behave like an AI companion</a> or replace human relationships.</p><p>That stands in contrast to increasingly autonomous AI assistants capable of operating computers, navigating websites and completing complicated tasks with limited supervision.</p><p>Those capabilities can be impressive, but they also introduce risks when AI makes decisions or takes actions users didn't intend.</p><p>Apple appears to be taking a more restrained approach, prioritizing predictable interactions over giving Siri as much independence as possible.</p><h2 id="privacy-is-another-part-of-that-equation">Privacy is another part of that equation</h2><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="qS6iL4BsMQJivbTRYMRVwG" name="shutterstock_2667043909-2" alt="ai agents" src="https://cdn.mos.cms.futurecdn.net/qS6iL4BsMQJivbTRYMRVwG-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: Shutterstock)</span></figcaption></figure><p>Siri processes requests directly on Apple devices when possible. More demanding requests can be handled through <a href="https://www.tomsguide.com/ai/3-apple-intelligence-features-i-cant-live-without-and-one-i-cant-wait-to-try">Private Cloud Compute,</a> Apple's cloud infrastructure designed to process information without retaining user requests or exposing them to Apple.</p><p>Now, the real test is whether Siri can deliver. Apple's strategy makes sense on paper. It already has millions of people carrying its devices, and those devices contain information that could make AI genuinely useful in everyday life.</p><p>But having access to personal context is only an advantage if Siri can use it accurately, securely and without making routine tasks more complicated.</p><h2 id="the-takeaway-2">The takeaway </h2><p>Competitors aren't standing still, either. <a href="https://www.tomsguide.com/ai/i-connected-chatgpt-to-the-apps-i-use-daily-with-these-5-plugins-and-it-was-a-huge-time-saver">ChatGPT and Gemini are gaining deeper integrations with apps and services</a>, while AI agents are becoming more capable of completing tasks rather than simply answering questions.</p><p>Apple is betting that it can compete without owning the most powerful underlying AI model. After years of delays and missed expectations, the question is no longer whether Siri can become as intelligent as ChatGPT.</p><p>It's whether Apple can make Siri useful enough that iPhone owners stop reaching for ChatGPT in the first place.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/ai/turn-your-pdfs-into-audiobooks-with-chatgpt-heres-the-simple-trick"><strong>Turn your PDFs into audiobooks with ChatGPT — here's the simple trick</strong></a></li><li><a href="https://www.tomsguide.com/ai/ai-researcher-warns-cyberattacks-could-take-down-power-banking-and-water-within-a-year-heres-how-to-prepare"><strong>AI researcher warns cyberattacks could take down power, banking and water within a year — here's how to prepare </strong></a></li><li><a href="https://www.tomsguide.com/ai/an-openai-employee-allegedly-used-ai-to-spy-on-his-own-company-then-ai-helped-catch-him"><strong>An OpenAI employee allegedly used AI to spy on his own company — then AI helped catch him</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/ai/apple-says-siri-doesnt-need-to-beat-chatgpt-heres-what-its-betting-on-instead</link>
                                                                            <description>
                            <![CDATA[ Apple CEO John Ternus explains why Siri AI doesn't need to beat ChatGPT or Claude, and how your iPhone's personal data could give it an edge. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">v8hxsKxBTuntXugj3Xiuf9</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/HjYwAC95TvVVcJWWjdzB3C-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 16 Oct 2026 08:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[AI]]></category>
                                                    <category><![CDATA[Apple Intelligence]]></category>
                                                                                                <author><![CDATA[ amanda.caswell@futurenet.com (Amanda Caswell) ]]></author>                    <dc:creator><![CDATA[ Amanda Caswell ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/zYjevim2q7FjQiefqpjZRB-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/HjYwAC95TvVVcJWWjdzB3C-1920-80.jpg">
                                                            <media:credit><![CDATA[Getty Images / Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Apple CEO John Ternus and Siri app on iPhone]]></media:description>                                                            <media:text><![CDATA[Apple CEO John Ternus and Siri app on iPhone]]></media:text>
                                <media:title type="plain"><![CDATA[Apple CEO John Ternus and Siri app on iPhone]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/HjYwAC95TvVVcJWWjdzB3C-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Apple has spent years trying to catch up with ChatGPT, Gemini and Claude. Now, the company's new CEO is making the case that Siri doesn't actually need to win the AI intelligence race.</p><p>In a new <a href="https://time.com/collection/best-inventions/2026/apple-iphone-duo/" target="_blank">interview with TIME</a>, published October 15, Apple CEO John Ternus explained why the company is <a href="https://www.tomsguide.com/ai/siri-just-got-a-major-ai-upgrade-here-are-5-things-to-try-first">taking a different approach to AI</a>, even as competitors spend billions developing their own models.</p><p>Rather than trying to build the smartest chatbot, Apple is betting that the future of AI comes down to something much more personal: <a href="https://www.tomsguide.com/ai/apple-intelligence/apple-is-prioritizing-privacy-over-winning-the-ai-race-heres-why">the information already sitting on your iPhone</a>.</p><p>It's an interesting argument from a company that has struggled to deliver on its AI promises. But with the new Siri AI now available in the U.S., Apple finally has an opportunity to show whether that strategy can work.</p><h2 id="apple-isn-39-t-trying-to-build-another-chatgpt">Apple isn't trying to build another ChatGPT</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="AJfRiTwXRZBjMQmGp6bqfW" name="openai-mac.jpg" alt="OpenAI and Apple logos" src="https://cdn.mos.cms.futurecdn.net/AJfRiTwXRZBjMQmGp6bqfW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>One of the biggest revelations in the TIME interview is how comfortable Apple appears to be relying on <a href="https://www.tomsguide.com/ai/apple-intelligence/siri-2-0-could-finally-reach-your-iphone-next-month-with-the-gemini-powered-assistant-due-to-gain-even-more-abilities-at-wwdc-this-summer">Google for its AI technology</a>.</p><p>The new Siri uses an Apple AI model that draws on Google's Gemini technology, a partnership that might once have seemed unthinkable for a company famous for controlling nearly every aspect of its products. Ternus doesn't see it that way. </p><p>"We make the things where we can really bring differentiation," he told TIME.</p><p>Interestingly, Apple doesn't seem to be interested in developing a frontier AI model simply to say it has one, which leaves companies such as OpenAI, Google and Anthropic competing to produce more models while Apple concentrates on what those models can actually do inside its devices.</p><p>And that brings us to Siri's biggest potential advantage.</p><h2 id="your-iphone-knows-things-chatgpt-doesn-39-t">Your iPhone knows things ChatGPT doesn't</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="4AkQ7gosxR54LV5qDC92vS" name="maps-tips-2-2" alt="Apple Maps on an iPhone 17" src="https://cdn.mos.cms.futurecdn.net/4AkQ7gosxR54LV5qDC92vS-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>Think about how much of <a href="https://www.tomsguide.com/opinion/i-almost-returned-to-android-but-the-iphone-kept-dragging-me-back">your life is already stored on your phone</a>. From your messages and emails to calendar appointments, images and personal information tucked in the notes, parts of your life are scatter across apps you use every day. </p><p>ChatGPT and Gemini can help you<a href="https://www.tomsguide.com/ai/i-used-google-notebooklm-to-reduce-my-mental-load-for-a-week-heres-what-i-stopped-stressing-about"> organize information</a>, write emails and<a href="https://www.tomsguide.com/ai/i-asked-chatgpt-how-to-feel-more-organized-and-this-one-tip-changed-my-entire-routine"> plan your schedule</a>. But getting them to work with your personal data often requires connecting accounts, granting permissions or manually providing context.</p><p>Siri has a different starting point. With permission, Apple's assistant can draw connections between information across supported apps and use that context to complete tasks. The goal is for Siri to handle making those connections for you.</p><p>Apple also sees opportunities for <a href="https://www.tomsguide.com/ai/apple-intelligence/i-used-apples-visual-intelligence-to-count-calories-heres-how">Siri to interpret health information</a> collected by an Apple Watch or find relevant details buried in emails and documents.</p><p><a href="https://www.tomsguide.com/ai/i-was-paying-for-too-many-ai-tools-here-are-the-4-i-kept-and-3-i-cancelled">Other AI assistants are becoming even more capable of working across apps, too.</a> Apple doesn't have exclusive rights to personal AI. But its tight integration with iOS could make these interactions feel more natural.</p><h2 id="apple-is-also-betting-that-less-ai-could-be-better">Apple is also betting that less AI could be 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:1794px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="iopeLDvPGawviRJFdMxca5" name="iOS 27 Siri AI" alt="iOS 27 Siri AI running on iPhone 17 Pro." src="https://cdn.mos.cms.futurecdn.net/iopeLDvPGawviRJFdMxca5-1920-80.jpg" mos="" align="middle" fullscreen="" width="1794" height="1009" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: John Velasco / Tom's Guide)</span></figcaption></figure><p>There's another interesting part of Apple's strategy. The company doesn't seem to be trying to make Siri as autonomous as the most advanced AI agents. In the TIME interview, Apple's AI product leader Lilian Rincon explained that Siri was <a href="https://www.tomsguide.com/phones/iphones/i-spent-a-week-with-siri-ai-here-are-my-honest-pros-and-cons">deliberately designed not to behave like an AI companion</a> or replace human relationships.</p><p>That stands in contrast to increasingly autonomous AI assistants capable of operating computers, navigating websites and completing complicated tasks with limited supervision.</p><p>Those capabilities can be impressive, but they also introduce risks when AI makes decisions or takes actions users didn't intend.</p><p>Apple appears to be taking a more restrained approach, prioritizing predictable interactions over giving Siri as much independence as possible.</p><h2 id="privacy-is-another-part-of-that-equation">Privacy is another part of that equation</h2><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="qS6iL4BsMQJivbTRYMRVwG" name="shutterstock_2667043909-2" alt="ai agents" src="https://cdn.mos.cms.futurecdn.net/qS6iL4BsMQJivbTRYMRVwG-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: Shutterstock)</span></figcaption></figure><p>Siri processes requests directly on Apple devices when possible. More demanding requests can be handled through <a href="https://www.tomsguide.com/ai/3-apple-intelligence-features-i-cant-live-without-and-one-i-cant-wait-to-try">Private Cloud Compute,</a> Apple's cloud infrastructure designed to process information without retaining user requests or exposing them to Apple.</p><p>Now, the real test is whether Siri can deliver. Apple's strategy makes sense on paper. It already has millions of people carrying its devices, and those devices contain information that could make AI genuinely useful in everyday life.</p><p>But having access to personal context is only an advantage if Siri can use it accurately, securely and without making routine tasks more complicated.</p><h2 id="the-takeaway-2">The takeaway </h2><p>Competitors aren't standing still, either. <a href="https://www.tomsguide.com/ai/i-connected-chatgpt-to-the-apps-i-use-daily-with-these-5-plugins-and-it-was-a-huge-time-saver">ChatGPT and Gemini are gaining deeper integrations with apps and services</a>, while AI agents are becoming more capable of completing tasks rather than simply answering questions.</p><p>Apple is betting that it can compete without owning the most powerful underlying AI model. After years of delays and missed expectations, the question is no longer whether Siri can become as intelligent as ChatGPT.</p><p>It's whether Apple can make Siri useful enough that iPhone owners stop reaching for ChatGPT in the first place.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/ai/turn-your-pdfs-into-audiobooks-with-chatgpt-heres-the-simple-trick"><strong>Turn your PDFs into audiobooks with ChatGPT — here's the simple trick</strong></a></li><li><a href="https://www.tomsguide.com/ai/ai-researcher-warns-cyberattacks-could-take-down-power-banking-and-water-within-a-year-heres-how-to-prepare"><strong>AI researcher warns cyberattacks could take down power, banking and water within a year — here's how to prepare </strong></a></li><li><a href="https://www.tomsguide.com/ai/an-openai-employee-allegedly-used-ai-to-spy-on-his-own-company-then-ai-helped-catch-him"><strong>An OpenAI employee allegedly used AI to spy on his own company — then AI helped catch him</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ iPhone Duo modes explained — 6 ways you can use Apple's new foldable ]]></title>
                                                                                                <dc:content><![CDATA[ <p>If you've only ever used iPhones, then 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 be a very different experience for you. Normally, phones only have one screen, and there are only two possible ways of using them: in a portrait/vertical orientation or landscape/horizontal. Foldables make things a little more complicated .</p><p>Not only does the iPhone Duo have two separate displays, it's also capable of detecting the position of the hinge — recognizing if the foldable screen is fully or partially open. That means there are a bunch of different ways you could use the phone, depending on the specific hinge state. While that may sound intimidating to newcomers, it's actually set to be one of the Duo's main advantages.</p><p>Here's what you need to know about the iPhone Duo's different modes, and how the Hinge State plays its part.</p><h2 id="what-is-hinge-state">What is Hinge State?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5439px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="DrnkS3FeWHhXivG9osdVqd" name="iPhone Duo-4" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/DrnkS3FeWHhXivG9osdVqd-1920-80.jpg" mos="" align="middle" fullscreen="" width="5439" height="3059" attribution="" endorsement="" class="inline"></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 key thing that the iPhone Duo's different modes rely on is the Hinge State, or more specifically the angle at which the phone's hinge is positioned. By detecting what angle the hinge is positioned in, the phone can alter the look of what's on screen to offer an optimal experience for the user.</p><p>Hinge is at zero degrees? That means the phone is closed, and content should only be displayed on the exterior cover display. 180 degrees? That means the exact opposite, and content should be displayed on the interior screen instead. The intermediary angles then determine just how the on-screen content is displayed.</p><p>Other foldables are capable of doing this, dynamically adjusting the on-screen interface in order to take advantage of the nuances of the phone's position. Samsung's Galaxy Z Fold 8 Ultra offers this as a feature called "Flex Mode," though it was sadly removed from the passport-shaped Galaxy Z Fold 8. </p><p>Because of the Hinge State, the iPhone Duo offers six distinct modes for you to use.</p><h2 id="all-the-different-iphone-duo-modes">All the different iPhone Duo modes</h2><h3 class="article-body__section" id="section-1-closed"><span>1. Closed</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4656px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Q9CmG4bSftigAEdPtH3Qqd" name="iPhone Duo-LIST1" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/Q9CmG4bSftigAEdPtH3Qqd-1920-80.jpg" mos="" align="middle" fullscreen="" width="4656" height="2619" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The most basic mode the iPhone Duo has to offer is closed. That means the hinge is shut, and the only accessible screen is the exterior cover display. That means you have the 5.4-inch display to work with, complete with all the Dynamic Island and a hole-punch selfie camera. Though it's worth noting that both of those have been moved to a new vertical position on the right-side of the screen.</p><p>This mode is how you'll use the iPhone Duo for quick tasks that don't require the use of a larger screen. That includes checking notifications, sending quick messages, taking phone calls, or using Apple Wallet. </p><h3 class="article-body__section" id="section-2-open-horizontal-landscape"><span>2. Open (Horizontal/Landscape)</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4356px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="xTigbirKk6eHPbe3d35Nod" name="iPhone Duo-LIST2" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/xTigbirKk6eHPbe3d35Nod-1920-80.jpg" mos="" align="middle" fullscreen="" width="4356" height="2450" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Fully opening the iPhone Duo switches things over to the larger 7.6-inch display, which defaults to a horizontal/landscape viewing mode. This screen is closer in size to a tablet, and is designed for those times where you need as much screen space as possible. Examples include watching movies or TV shows, gaming,  drawing or running two apps side by side.</p><p>Essentially this is the default mode for entertainment and productivity. The under-display camera on the top-right side of the screen means this mode is ideal for FaceTiming and other video calls, with the large screen giving you a good view of everyone on the call.</p><h3 class="article-body__section" id="section-3-open-vertical-portrait"><span>3. Open (Vertical/Portrait)</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="yWUGM25C5cAyqkrtssAGjj" name="apple2" alt="iPhone duo different modes" src="https://cdn.mos.cms.futurecdn.net/yWUGM25C5cAyqkrtssAGjj-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>This mode doesn't rely on the Hinge State, but if you flip the iPhone Duo into a vertical/portrait orientation, you can get a better experience for certain tasks and apps. Not only does this flip the navigation bar to the bottom of the phone, the taller aspect ratio means you can better display reading material, whether that's ebooks or articles you've found online.</p><p>Other potential benefits gained from this mode include easier note-taking, less scrolling while browsing the web, and the ability to stack two apps on top of each other. In some circumstances, that could prove beneficial for your multitasking needs. TikTok and other vertical videos will also be able to fill up more of the screen and enhance the viewing experience.</p><h3 class="article-body__section" id="section-4-book-mode-partially-folded"><span>4. Book Mode (Partially Folded)</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="uXT4kgo4D8JQqjmnEb4VfM" name="iPhone Duo standby" alt="The iPhone Duo in Book Mode standing on a surface showing StandBy" src="https://cdn.mos.cms.futurecdn.net/uXT4kgo4D8JQqjmnEb4VfM-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>This mode features an iPhone Duo that is almost fully open, but not quite. The hinge is positioned beyond a 90-degree angle, and visually the phone looks a lot like an open book. In this mode, the iPhone Duo adapts to the fact that there's a crease running down the middle of the screen, and moves on-screen elements away from it.</p><p>Essentially the iPhone Duo has anticipated the distortion that occurs around the display crease, and has taken steps to ensure you can actually see (and touch) everything you need to.</p><p>This mode is good for reading in a more natural book-like way, with one page open on either side of the screen. It may also be useful for multitasking when using an Apple Pencil, since it gives you a nook to hold onto the middle of the iPhone Duo and not try to stretch your hand around the entirety of the unfolded device. This mode also lets you prop the Duo on a flat surface without a stand, which allows you to switch on <a href="https://www.tomsguide.com/news/ios-17-standby">StandBy Mode</a>.</p><h3 class="article-body__section" id="section-5-tabletop-mode-90-degree-angle-fold"><span>5. Tabletop mode (90-degree angle fold)</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width: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>Tabletop mode involves positioning the iPhone Duo like a laptop, with the hinge folded around 90-degrees. In this instance, the phone will split the screen down the crease, and separate different sections of an app for your perusal. Alternatively, it's beneficial for those times you need stable support beneath your phone without relying on some kind of stand. </p><p>Instances where tabletop mode would be useful include hands-free video calling, taking long-exposure or timed photos, or streaming content while keeping things like the description and comments sections accessible.</p><h3 class="article-body__section" id="section-6-tent-standing-mode"><span>6. Tent/Standing mode</span></h3><div class="looped-video"><video class="lazyload-in-view lazyloading" data-src="https://cdn.mos.cms.futurecdn.net/53Tjqd2ZGw3r4mghxSwHMC/Apple-iPhone-Duo-StandBy-260909.mp4" autoplay loop muted playsinline src="https://cdn.mos.cms.futurecdn.net/53Tjqd2ZGw3r4mghxSwHMC/Apple-iPhone-Duo-StandBy-260909.mp4"></video></div><p>This mode involves folding the iPhone Duo into a "V" shape, and resting it on a flat surface with the exterior display facing outwards. Effectively positioning the phone like a stereotypical tent. In this instance the interior screen switches off, and the outer display takes over all the hard work.</p><p>This mode is useful for a number of reasons, particularly since it lets you hold up the phone without the aid of a stand. Possible uses include streaming content on the outer display, which will use less power than the larger inner screen, or propping it up for StandBy mode to show the time and other compatible widgets at a glance.</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-benchmark-leaks-and-apples-foldable-is-about-to-leave-android-rivals-in-the-dust">iPhone Duo Geekbench scores leak, and Apple's foldable is about to leave Android rivals in the dust</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-heres-why-an-iphone-18-pro-max-and-macbook-neo-combo-is-the-better-buy">iPhone Duo: Here’s why an iPhone 18 Pro Max and MacBook Neo combo is the better buy</a></li><li><a href="https://www.tomsguide.com/phones/iphones/apple-increases-iphone-duo-production-by-30-percent-heres-what-that-means-for-you">Apple increases iPhone Duo production by 30% — here's what that means for you</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/iphone-duo-modes-explained-6-ways-you-can-use-apples-new-foldable</link>
                                                                            <description>
                            <![CDATA[ iPhone Duo can be used in six different ways. Here's what those modes are and the things they can do. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">YStwiye7HtLnFg57L4uenK</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/sewDGPdSKoUwiFrJpg8TqE-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 16 Oct 2026 06:30:00 +0000</pubDate>                                                                                                                                <updated>Fri, 16 Oct 2026 08:04:19 +0000</updated>
                                                                                                                                            <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f-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/sewDGPdSKoUwiFrJpg8TqE-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&amp;#39;s Guide/Apple]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPhone Duo Modes]]></media:description>                                                            <media:text><![CDATA[iPhone Duo Modes]]></media:text>
                                <media:title type="plain"><![CDATA[iPhone Duo Modes]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/sewDGPdSKoUwiFrJpg8TqE-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>If you've only ever used iPhones, then 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 be a very different experience for you. Normally, phones only have one screen, and there are only two possible ways of using them: in a portrait/vertical orientation or landscape/horizontal. Foldables make things a little more complicated .</p><p>Not only does the iPhone Duo have two separate displays, it's also capable of detecting the position of the hinge — recognizing if the foldable screen is fully or partially open. That means there are a bunch of different ways you could use the phone, depending on the specific hinge state. While that may sound intimidating to newcomers, it's actually set to be one of the Duo's main advantages.</p><p>Here's what you need to know about the iPhone Duo's different modes, and how the Hinge State plays its part.</p><h2 id="what-is-hinge-state">What is Hinge State?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5439px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="DrnkS3FeWHhXivG9osdVqd" name="iPhone Duo-4" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/DrnkS3FeWHhXivG9osdVqd-1920-80.jpg" mos="" align="middle" fullscreen="" width="5439" height="3059" attribution="" endorsement="" class="inline"></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 key thing that the iPhone Duo's different modes rely on is the Hinge State, or more specifically the angle at which the phone's hinge is positioned. By detecting what angle the hinge is positioned in, the phone can alter the look of what's on screen to offer an optimal experience for the user.</p><p>Hinge is at zero degrees? That means the phone is closed, and content should only be displayed on the exterior cover display. 180 degrees? That means the exact opposite, and content should be displayed on the interior screen instead. The intermediary angles then determine just how the on-screen content is displayed.</p><p>Other foldables are capable of doing this, dynamically adjusting the on-screen interface in order to take advantage of the nuances of the phone's position. Samsung's Galaxy Z Fold 8 Ultra offers this as a feature called "Flex Mode," though it was sadly removed from the passport-shaped Galaxy Z Fold 8. </p><p>Because of the Hinge State, the iPhone Duo offers six distinct modes for you to use.</p><h2 id="all-the-different-iphone-duo-modes">All the different iPhone Duo modes</h2><h3 class="article-body__section" id="section-1-closed"><span>1. Closed</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4656px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Q9CmG4bSftigAEdPtH3Qqd" name="iPhone Duo-LIST1" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/Q9CmG4bSftigAEdPtH3Qqd-1920-80.jpg" mos="" align="middle" fullscreen="" width="4656" height="2619" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The most basic mode the iPhone Duo has to offer is closed. That means the hinge is shut, and the only accessible screen is the exterior cover display. That means you have the 5.4-inch display to work with, complete with all the Dynamic Island and a hole-punch selfie camera. Though it's worth noting that both of those have been moved to a new vertical position on the right-side of the screen.</p><p>This mode is how you'll use the iPhone Duo for quick tasks that don't require the use of a larger screen. That includes checking notifications, sending quick messages, taking phone calls, or using Apple Wallet. </p><h3 class="article-body__section" id="section-2-open-horizontal-landscape"><span>2. Open (Horizontal/Landscape)</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4356px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="xTigbirKk6eHPbe3d35Nod" name="iPhone Duo-LIST2" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/xTigbirKk6eHPbe3d35Nod-1920-80.jpg" mos="" align="middle" fullscreen="" width="4356" height="2450" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Fully opening the iPhone Duo switches things over to the larger 7.6-inch display, which defaults to a horizontal/landscape viewing mode. This screen is closer in size to a tablet, and is designed for those times where you need as much screen space as possible. Examples include watching movies or TV shows, gaming,  drawing or running two apps side by side.</p><p>Essentially this is the default mode for entertainment and productivity. The under-display camera on the top-right side of the screen means this mode is ideal for FaceTiming and other video calls, with the large screen giving you a good view of everyone on the call.</p><h3 class="article-body__section" id="section-3-open-vertical-portrait"><span>3. Open (Vertical/Portrait)</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="yWUGM25C5cAyqkrtssAGjj" name="apple2" alt="iPhone duo different modes" src="https://cdn.mos.cms.futurecdn.net/yWUGM25C5cAyqkrtssAGjj-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>This mode doesn't rely on the Hinge State, but if you flip the iPhone Duo into a vertical/portrait orientation, you can get a better experience for certain tasks and apps. Not only does this flip the navigation bar to the bottom of the phone, the taller aspect ratio means you can better display reading material, whether that's ebooks or articles you've found online.</p><p>Other potential benefits gained from this mode include easier note-taking, less scrolling while browsing the web, and the ability to stack two apps on top of each other. In some circumstances, that could prove beneficial for your multitasking needs. TikTok and other vertical videos will also be able to fill up more of the screen and enhance the viewing experience.</p><h3 class="article-body__section" id="section-4-book-mode-partially-folded"><span>4. Book Mode (Partially Folded)</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="uXT4kgo4D8JQqjmnEb4VfM" name="iPhone Duo standby" alt="The iPhone Duo in Book Mode standing on a surface showing StandBy" src="https://cdn.mos.cms.futurecdn.net/uXT4kgo4D8JQqjmnEb4VfM-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>This mode features an iPhone Duo that is almost fully open, but not quite. The hinge is positioned beyond a 90-degree angle, and visually the phone looks a lot like an open book. In this mode, the iPhone Duo adapts to the fact that there's a crease running down the middle of the screen, and moves on-screen elements away from it.</p><p>Essentially the iPhone Duo has anticipated the distortion that occurs around the display crease, and has taken steps to ensure you can actually see (and touch) everything you need to.</p><p>This mode is good for reading in a more natural book-like way, with one page open on either side of the screen. It may also be useful for multitasking when using an Apple Pencil, since it gives you a nook to hold onto the middle of the iPhone Duo and not try to stretch your hand around the entirety of the unfolded device. This mode also lets you prop the Duo on a flat surface without a stand, which allows you to switch on <a href="https://www.tomsguide.com/news/ios-17-standby">StandBy Mode</a>.</p><h3 class="article-body__section" id="section-5-tabletop-mode-90-degree-angle-fold"><span>5. Tabletop mode (90-degree angle fold)</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width: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>Tabletop mode involves positioning the iPhone Duo like a laptop, with the hinge folded around 90-degrees. In this instance, the phone will split the screen down the crease, and separate different sections of an app for your perusal. Alternatively, it's beneficial for those times you need stable support beneath your phone without relying on some kind of stand. </p><p>Instances where tabletop mode would be useful include hands-free video calling, taking long-exposure or timed photos, or streaming content while keeping things like the description and comments sections accessible.</p><h3 class="article-body__section" id="section-6-tent-standing-mode"><span>6. Tent/Standing mode</span></h3><div class="looped-video"><video class="lazyload-in-view lazyloading" data-src="https://cdn.mos.cms.futurecdn.net/53Tjqd2ZGw3r4mghxSwHMC/Apple-iPhone-Duo-StandBy-260909.mp4" autoplay loop muted playsinline src="https://cdn.mos.cms.futurecdn.net/53Tjqd2ZGw3r4mghxSwHMC/Apple-iPhone-Duo-StandBy-260909.mp4"></video></div><p>This mode involves folding the iPhone Duo into a "V" shape, and resting it on a flat surface with the exterior display facing outwards. Effectively positioning the phone like a stereotypical tent. In this instance the interior screen switches off, and the outer display takes over all the hard work.</p><p>This mode is useful for a number of reasons, particularly since it lets you hold up the phone without the aid of a stand. Possible uses include streaming content on the outer display, which will use less power than the larger inner screen, or propping it up for StandBy mode to show the time and other compatible widgets at a glance.</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-benchmark-leaks-and-apples-foldable-is-about-to-leave-android-rivals-in-the-dust">iPhone Duo Geekbench scores leak, and Apple's foldable is about to leave Android rivals in the dust</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-heres-why-an-iphone-18-pro-max-and-macbook-neo-combo-is-the-better-buy">iPhone Duo: Here’s why an iPhone 18 Pro Max and MacBook Neo combo is the better buy</a></li><li><a href="https://www.tomsguide.com/phones/iphones/apple-increases-iphone-duo-production-by-30-percent-heres-what-that-means-for-you">Apple increases iPhone Duo production by 30% — here's what that means for you</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple holding event Oct. 28 for first touchscreen MacBook Pro — what we know ]]></title>
                                                                                                <dc:content><![CDATA[ <p>We're still catching our breath from the <a href="https://www.tomsguide.com/home/smart-home/i-saw-apples-homeview-early-7-things-you-need-to-know-about-the-smart-home-display">Apple HomeView </a><a href="https://www.tomsguide.com/entertainment/apple-tv/apples-new-tv-4k-finally-lets-you-find-your-lost-remote-but-thats-not-even-its-biggest-upgrade">announcements </a>this week and another Apple event is reportedly right around the corner.</p><p>Bloomberg's <a href="https://x.com/markgurman/status/2110584725983396061" target="_blank">Mark Gurman </a>revealed that Apple is planning another product launch in Los Angeles on Wednesday, October 28. He specified that the event will showcase a touchscreen MacBook, iPad mini and M6 Mac.</p><p>Here's what we know about the three devices based on rumors and leaks.</p><h2 id="touchscreen-macbook">Touchscreen MacBook</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:600px;"><p class="vanilla-image-block" style="padding-top:56.33%;"><img id="MntZYwbQAkLnjrKiJmFA8R" name="MacBook Pro" alt="MacBook Pro 2023" src="https://cdn.mos.cms.futurecdn.net/MntZYwbQAkLnjrKiJmFA8R-1920-80.png" mos="" align="middle" fullscreen="" width="600" height="338" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The <a href="https://www.tomsguide.com/computing/laptops/macbook-ultra-everything-we-know-so-far">MacBook Ultra</a> will be the headliner of the event as it should be Apple's first laptop to feature both a touchscreen and an OLED display. It was rumored to be thinner and lighter thanks to the slimmer OLED panel, but a new leak last week <a href="https://www.tomsguide.com/computing/macbooks/apple-insider-walks-back-oled-macbook-pro-redesign-claims-new-touchscreen-laptop-promised-to-be-lighter-not-thinner">walked that back</a>.</p><p>The high-end laptop should come in 14- and 16-inch versions powered by either the M6 Pro or M6 Max chipsets. </p><p>Thanks to the OLED touchscreen and flagship silicon, we expect the MacBook Ultra to carry a steep premium price that could be at least 20% higher than the current MacBook Pro. That translates to a starting price of around $2,499 for the 14-inch model and $3k for the 16-inch version.</p><h2 id="ipad-mini-8">iPad mini 8</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="mgc3GANfokZsPt2Vfz4vgT" name="iPad mini 7--2-LEDE" alt="An iPad mini 7 on a desk with a finger resting over its power button with Touch ID" src="https://cdn.mos.cms.futurecdn.net/mgc3GANfokZsPt2Vfz4vgT-1920-80.jpg" mos="" align="middle" fullscreen="" width="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 eighth-generation iPad mini is expected to follow its larger brethren and finally sport an OLED display. It's not clear if it will be a tandem OLED like in the <a href="https://www.tomsguide.com/computing/ipads/ipad-pro-m5-review">M5 iPad Pro</a> though.</p><p>Beyond that, with the iPhone 18 Pro finally here, it's likely that the new iPad mini will feature 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 chipset</a>. </p><p>And that's it for the hardware; if the HomeView event is any indication, expect to hear a lot about Siri AI and how it'll work with your iPad.</p><h2 id="m6-upgrades">M6 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="FDDesKjHDcSyDBNdQF3h98" name="apple-m6" alt="Apple M6 chip" src="https://cdn.mos.cms.futurecdn.net/FDDesKjHDcSyDBNdQF3h98-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Beyond the iPad mini and MacBook OLED, Apple should introduce M6 versions of the 14-inch MacBook Pro and the iMac desktop computer. This follows the initial launch of this upgraded chip in the new <a href="https://www.tomsguide.com/computing/apple-desktops/mac-mini-m6-review">Mac mini M6</a>.</p><p>We're not expecting any major redesigns or updates for those devices beyond the new chip.</p><p>Tom's Guide will be on hand with all the latest news from the October 28 event so keep us in your tabs to find out what Apple reveals in two weeks.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/apple-tv/you-dont-need-the-usd300-apple-tv-4k-to-get-its-best-feature-just-buy-the-new-siri-remote"><strong>You don’t need the $300 Apple TV 4K to get its best feature — just buy the new Siri remote</strong></a></li><li><a href="https://www.tomsguide.com/news/live/apple-homeview-event-october-13-live-updates"><strong>Apple 'Welcome home' event RECAP — HomeView, Apple TV 4K, HomePod mini 2 unveiled — all the news, prices and release dates</strong></a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-benchmark-leaks-and-apples-foldable-is-about-to-leave-android-rivals-in-the-dust"><strong>iPhone Duo Geekbench scores leak, and Apple's foldable is about to leave Android rivals in the dust</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/macbooks/apple-holding-event-oct-28-for-first-touchscreen-macbook-pro-what-we-know</link>
                                                                            <description>
                            <![CDATA[ Apple's next launch event is rumored for October 28 where the company will finally reveal the first touchscreen MacBook Pro alongside an upgraded iPad mini. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">Mb6zDNUhqfk79EypH9DseF</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/UE8gefi6QF8B97JZxLZqm8-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 15 Oct 2026 16:50:16 +0000</pubDate>                                                                                                                                <updated>Thu, 15 Oct 2026 22:20:14 +0000</updated>
                                                                                                                                            <category><![CDATA[MacBooks]]></category>
                                                    <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Laptops]]></category>
                                                    <category><![CDATA[Tablets]]></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/UE8gefi6QF8B97JZxLZqm8-1920-80.jpg">
                                                            <media:credit><![CDATA[ozgurdonmaz / Getty Images]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Apple logo on glass wall]]></media:description>                                                            <media:text><![CDATA[Apple logo on glass wall]]></media:text>
                                <media:title type="plain"><![CDATA[Apple logo on glass wall]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/UE8gefi6QF8B97JZxLZqm8-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>We're still catching our breath from the <a href="https://www.tomsguide.com/home/smart-home/i-saw-apples-homeview-early-7-things-you-need-to-know-about-the-smart-home-display">Apple HomeView </a><a href="https://www.tomsguide.com/entertainment/apple-tv/apples-new-tv-4k-finally-lets-you-find-your-lost-remote-but-thats-not-even-its-biggest-upgrade">announcements </a>this week and another Apple event is reportedly right around the corner.</p><p>Bloomberg's <a href="https://x.com/markgurman/status/2110584725983396061" target="_blank">Mark Gurman </a>revealed that Apple is planning another product launch in Los Angeles on Wednesday, October 28. He specified that the event will showcase a touchscreen MacBook, iPad mini and M6 Mac.</p><p>Here's what we know about the three devices based on rumors and leaks.</p><h2 id="touchscreen-macbook">Touchscreen MacBook</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:600px;"><p class="vanilla-image-block" style="padding-top:56.33%;"><img id="MntZYwbQAkLnjrKiJmFA8R" name="MacBook Pro" alt="MacBook Pro 2023" src="https://cdn.mos.cms.futurecdn.net/MntZYwbQAkLnjrKiJmFA8R-1920-80.png" mos="" align="middle" fullscreen="" width="600" height="338" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The <a href="https://www.tomsguide.com/computing/laptops/macbook-ultra-everything-we-know-so-far">MacBook Ultra</a> will be the headliner of the event as it should be Apple's first laptop to feature both a touchscreen and an OLED display. It was rumored to be thinner and lighter thanks to the slimmer OLED panel, but a new leak last week <a href="https://www.tomsguide.com/computing/macbooks/apple-insider-walks-back-oled-macbook-pro-redesign-claims-new-touchscreen-laptop-promised-to-be-lighter-not-thinner">walked that back</a>.</p><p>The high-end laptop should come in 14- and 16-inch versions powered by either the M6 Pro or M6 Max chipsets. </p><p>Thanks to the OLED touchscreen and flagship silicon, we expect the MacBook Ultra to carry a steep premium price that could be at least 20% higher than the current MacBook Pro. That translates to a starting price of around $2,499 for the 14-inch model and $3k for the 16-inch version.</p><h2 id="ipad-mini-8">iPad mini 8</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="mgc3GANfokZsPt2Vfz4vgT" name="iPad mini 7--2-LEDE" alt="An iPad mini 7 on a desk with a finger resting over its power button with Touch ID" src="https://cdn.mos.cms.futurecdn.net/mgc3GANfokZsPt2Vfz4vgT-1920-80.jpg" mos="" align="middle" fullscreen="" width="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 eighth-generation iPad mini is expected to follow its larger brethren and finally sport an OLED display. It's not clear if it will be a tandem OLED like in the <a href="https://www.tomsguide.com/computing/ipads/ipad-pro-m5-review">M5 iPad Pro</a> though.</p><p>Beyond that, with the iPhone 18 Pro finally here, it's likely that the new iPad mini will feature 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 chipset</a>. </p><p>And that's it for the hardware; if the HomeView event is any indication, expect to hear a lot about Siri AI and how it'll work with your iPad.</p><h2 id="m6-upgrades">M6 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="FDDesKjHDcSyDBNdQF3h98" name="apple-m6" alt="Apple M6 chip" src="https://cdn.mos.cms.futurecdn.net/FDDesKjHDcSyDBNdQF3h98-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Beyond the iPad mini and MacBook OLED, Apple should introduce M6 versions of the 14-inch MacBook Pro and the iMac desktop computer. This follows the initial launch of this upgraded chip in the new <a href="https://www.tomsguide.com/computing/apple-desktops/mac-mini-m6-review">Mac mini M6</a>.</p><p>We're not expecting any major redesigns or updates for those devices beyond the new chip.</p><p>Tom's Guide will be on hand with all the latest news from the October 28 event so keep us in your tabs to find out what Apple reveals in two weeks.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/apple-tv/you-dont-need-the-usd300-apple-tv-4k-to-get-its-best-feature-just-buy-the-new-siri-remote"><strong>You don’t need the $300 Apple TV 4K to get its best feature — just buy the new Siri remote</strong></a></li><li><a href="https://www.tomsguide.com/news/live/apple-homeview-event-october-13-live-updates"><strong>Apple 'Welcome home' event RECAP — HomeView, Apple TV 4K, HomePod mini 2 unveiled — all the news, prices and release dates</strong></a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-benchmark-leaks-and-apples-foldable-is-about-to-leave-android-rivals-in-the-dust"><strong>iPhone Duo Geekbench scores leak, and Apple's foldable is about to leave Android rivals in the dust</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple HomeView is already discounted ahead of next month's release — here's how much you could save by pre-ordering ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Apple's HomeView Smart Display has only just been announced, and isn't due to go on sale until November 13 — but you can already save some money on your pre-order. Admittedly it's not a large amount of money, this is a brand new Apple product, but considering how expensive everything is nowadays the option to save even a few dollars shouldn't be ignored.</p><p><a href="https://www.amazon.com/dp/B0HMXG5T64" target="_blank" rel="nofollow">Amazon is currently offering the Apple HomeView for $290,</a> which is $9 off the standard price. Weirdly the discount only seems to be available in three of the four color options, and anyone hoping to pick up the Starlight (cream) color will have to pay the full $299. But Space Gray, Rose Pink and Silver all get to enjoy that slight discount.</p><div class="product"><a data-dimension112="b9394504-c880-11f1-92ee-eb35603709c6" data-action="Deal Block" data-label="HomeView" data-dimension48="HomeView" data-dimension25="$290" href="https://www.amazon.com/dp/B0HMXG5T64" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1266px;"><p class="vanilla-image-block" style="padding-top:118.48%;"><img id="JWMqwRebshquiRevipUgM" name="HomeView" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/JWMqwRebshquiRevipUgM-1920-80.png" mos="" align="middle" fullscreen="" width="1266" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0HMXG5T64" target="_blank" rel="nofollow" data-dimension112="b9394504-c880-11f1-92ee-eb35603709c6" data-action="Deal Block" data-label="HomeView" data-dimension48="HomeView" data-dimension25="$290">HomeView: was $299 now $290</a></strong><br>Apple's smart home display is finally coming, offering direct access to all the smart home and Apple devices you have throughout your house. Complete with FaceTime support, a built-in digital photo frame, access to Siri AI and more. And you can save $9 off the usual price if you pre-order through Amazon.<a class="view-deal button" href="https://www.amazon.com/dp/B0HMXG5T64" target="_blank" rel="nofollow" data-dimension112="b9394504-c880-11f1-92ee-eb35603709c6" data-action="Deal Block" data-label="HomeView" data-dimension48="HomeView" data-dimension25="$290">View Deal</a></p></div><p>The <a href="https://www.tomsguide.com/home/smart-home/i-saw-apples-homeview-early-7-things-you-need-to-know-about-the-smart-home-display">Apple HomeView</a> is not just an iPad with a stand, which is what a lot of smart displays try to be. It's been designed specifically to fit into Apple's burgeoning smart home ecosystem by offering an experience that doesn't involve cloning the things that your iPhone or Apple Watch can already do. </p><p>The most impressive thing is that the HomeView can actually recognize up to six individual people, and adjust the information that's presented on screen accordingly. This means that the schedules and widgets you see are going to be different to the ones your partner or roommate might be presented with.</p><p>Siri AI's personal context feature is going to play a key role in this too, offering a smarter and personalized experience when you interact with the HomeView. In fact, it's even possible to ask the screen to find information from your iPhone and display it for you.</p>                    <div class= "tiktok-wrapper" style="min-height: 750px;"><blockquote class="tiktok-embed" cite="https://www.tiktok.com/@tomsguide/video/7696174677827341581" data-video-id="7696174677827341581" style="max-width: 605px; min-width: 325px;">                        <section>                            <a target="_blank" title="@tomsguide" href="https://www.tiktok.com/@tomsguide">@tomsguide</a>                            <p></p><a target="_blank" title="♬ original sound - Tom’s Guide" href="https://www.tiktok.com/music/original-sound-7696174764578097934">♬ original sound - Tom’s Guide</a></section>                    </blockquote></div>                <p>Naturally HomeView can do all the things you'd expect from a smart display. The screen can operate as a digital photo frame, rotating images from your own Apple Photos albums to mix things up at home. </p><p>Similarly, the 12MP Center Stage camera means the HomeView can also function as a FaceTime machine, letting you offset your calls from your usual device. Plus, like an Amazon Echo, it's an intercom that can communicate with other Apple devices around the house.</p><p>That's on top of the fact this is a hub for all the Matter-equipped smart home devices in your home. That's including, but not limited to, the new <a href="https://www.tomsguide.com/home/smart-home/apples-new-home-collection-includes-a-smart-lock-that-opens-when-you-walk-up-no-tapping-required">Apple Home Collection that's been designed in conjunction with LG and Schneider Electric</a>.</p><p>So if you need a smart home hub, and figure the Apple option is right for you, take advantage of this discount while you can — no matter how small it might be.</p><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=tablets&brands=Amazon&min_discount_ratio=0.95&widget_title=Top+Deals+Handpicked+by+Our+Editors&widget_subtitle=Discover+the+best+discounts+currently+available%2C+curated+daily+by+the+Tom%27s+Guide+Savings+Squad.&bg_color=transparent" data-vizualizer-embed="true"></div>    <script>    /**     * Tom's Guide Deals Finder - Vanilla JS Encapsulated Engine     */    (function() {      // --- Freyr Analytics Adapter ---      function initAnalytics() {        window.dataLayer = window.dataLayer || [];        window.googletag = window.googletag || {};        window.googletag.cmd = window.googletag.cmd || [];        window.hawk = window.hawk || { analytics: { freyr: [] } };        window.hawk.analytics = window.hawk.analytics || { freyr: [] };        window.hawk.analytics.freyr = window.hawk.analytics.freyr || [];        window.freyr = window.freyr || { cmd: [] };        const scriptSrc = 'https://freyr.futurecdn.net/freyr.js';        const hostname = typeof window !== 'undefined' ? window.location.hostname : '';        const isTestEnv = typeof window.navigator !== 'undefined' && (window.navigator.webdriver || window.navigator.userAgent.includes('Headless'));        const shouldSendRealAnalytics = !isTestEnv && hostname && hostname !== 'localhost' && hostname !== '127.0.0.1' && !hostname.includes('run.app');        if (shouldSendRealAnalytics && !document.querySelector(`script[src="${scriptSrc}"]`)) {          const script = document.createElement('script');          script.src = scriptSrc;          script.async = true;          document.head.appendChild(script);        }      }      function storeEventForDebug(name, data) {        if (!window.hawk || !window.hawk.analytics || !window.hawk.analytics.freyr) return;        window.hawk.analytics.freyr.push({ name, data });        try {          if (typeof window !== 'undefined' && window.localStorage) {            window.localStorage.setItem("hawk", JSON.stringify(window.hawk));          }        } catch (e) {          // Ignore storage issues        }        try {          window.dispatchEvent(new CustomEvent("hawk-analytics-update"));        } catch (e) {}      }      function sendToFreyr(eventName, data) {        if (typeof window === 'undefined') return;        window.freyr = window.freyr || { cmd: [] };        window.freyr.cmd.push(() => {          if (window.freyr && window.freyr.pushAndUpdate) {            window.freyr.pushAndUpdate(eventName, data);          }        });      }      function sendEvent(event, skip = false) {        try {          storeEventForDebug(event.name, event.data);          if (!skip) {            sendToFreyr(event.name, event.data);          }        } catch (e) {          // Ensure tracking errors don't surface to the user        }      }      function getCookie(name) {        try {          const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));          return match ? match[2] : null;        } catch (e) {          return null;        }      }      function normalizeCurrency(symbol) {        const map = {          '£': 'GBP',          '$': 'USD',          'A$': 'AUD',          'CA$': 'CAD',          '€': 'EUR'        };        return map[symbol] || symbol;      }      function trackElementInteraction(props) {        sendEvent({          name: 'elementInteraction',          data: {            element: {              action: props.action || "click",              id: props.id || undefined,              class: props.class || undefined,              name: props.name || undefined,              text: props.text || undefined,              label: props.label || undefined,              container: props.container || undefined,              url: props.url || undefined,              articleId: props.articleId || undefined            }          }        });      }      function generateRevenueId(url, productName, merchantName, modelId) {        const str = `${window.location.href}|${productName}|${merchantName}|${modelId || ''}|${new Date().toDateString()}|tomsguide`;        let hash = 0;        for (let i = 0; i < str.length; i++) {          const char = str.charCodeAt(i);          hash = ((hash << 5) - hash) + char;          hash = hash & hash;        }        let numericStr = Math.abs(hash).toString();        while (numericStr.length < 19) {          numericStr += Math.floor(Math.random() * 10).toString();        }        return numericStr.substring(0, 19);      }      function rewriteAffiliateLink(url, territory, revenueId) {        if (!url) return url;        const t = (territory || 'gb').toLowerCase();        return url.replace(/hawk-custom-tracking/g, `tomsguide-${t}-${revenueId}`);      }      function trackHawkEvent(params) {        const { clickType, widgetId, productCategoryName, product, productsArray, zeroBasedProductIndexOrNull, totalDealsOrProducts, areaClicked, merchant, revenueId, isoCurrencyCode, queryName, widgetTypeName } = params;        const data = {          event: "hawkEvent",          category: "Affiliates",          affiliate: {            action: {              type: clickType,              id: widgetId,              event: clickType === "appeared" ? "viewed" : "Click from",              timestamp: Date.now()            },            component: {              flag: "Editor",              product: productCategoryName || "deals",              category: `Signal Deal Finder ${widgetTypeName || "Carousel"} widget`,              type: clickType === "appeared" ? "review" : "signal product",              label: queryName || (product ? (product.name || "") : ""),              index: zeroBasedProductIndexOrNull === null || zeroBasedProductIndexOrNull === undefined ? -1 : zeroBasedProductIndexOrNull,              linkCount: totalDealsOrProducts || 0,              blockLayout: "",              areaClicked: areaClicked || ""            }          },          products: productsArray || (product && merchant ? [            {              product: {                primary: {                  id: product.id || product.matchId || null,                  name: product.name,                  type: "deal",                  price: product.price,                  previousPrice: product.previousPrice || null,                  currency: isoCurrencyCode || "USD",                  preorder: false,                  labels: [],                  link: product.link,                  originalLink: product.originalLink || null,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: null,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: product.globalId || null,                  inStock: product.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: isoCurrencyCode || "USD"                }              },              merchant: {                id: merchant.id || null,                name: merchant.name,                url: merchant.url || null,                network: merchant.network || null              },              model: {                id: product.modelId || null,                brand: product.brand || null,                name: product.name,                parent: product.parent || null              }            }          ] : []),          reviews: [],          _clear: true,          "gtm.uniqueEventId": Date.now() % 10000        };        sendEvent({ name: 'hawkEvent', data });      }      function trackDealClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card" });      }      function trackViewSimilarClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card View Similar" });      }      function trackPriceComparisonClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Price Comparison" });      }      function trackReviewClick(params) {        trackHawkEvent({ ...params, clickType: "review", areaClicked: "Signal Product Card Review Link" });      }      function trackShare(params) {        trackHawkEvent({ ...params, clickType: "share", areaClicked: "Signal Product Card Share" });      }      function trackDealsAppeared(widgetId, deals, revenueId, currency, queryName, widgetTypeName) {         if (!deals || deals.length === 0) return;                  const productsArray = deals.slice(0, 50).map((deal) => {            let voucherPct = null;            let rawPrice = parseFloat(deal.rawPrice) || parseFloat(deal.price) || null;            let rawMsrp = parseFloat(deal.rawMsrp) || parseFloat(deal.msrp) || null;            if (rawMsrp > rawPrice && rawPrice > 0) {              voucherPct = Math.round((1 - (rawPrice / rawMsrp)) * 100);            }            let numId = null;            if (deal.externalProductId && !isNaN(parseInt(deal.externalProductId))) {              numId = parseInt(deal.externalProductId);            } else if (deal.id && !isNaN(parseInt(deal.id))) {              numId = parseInt(deal.id);            } else {              numId = deal.matchId || null;            }            return {              product: {                primary: {                  id: numId,                  name: deal.productName || deal.title || "",                  type: "deal",                  price: rawPrice,                  previousPrice: rawMsrp,                  currency: currency || 'USD',                  preorder: false,                  labels: deal.modelBrand || deal.brand ? [                     { type: "brand", value: deal.modelBrand || deal.brand }                  ] : [],                  link: deal.url,                  originalLink: deal.url,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: voucherPct,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: deal.productKey || null,                  inStock: deal.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: currency || 'USD'                }              },              merchant: {                id: deal.merchantId ? parseInt(deal.merchantId) : null,                name: deal.merchant || "Retailer",                url: deal.merchantUrl || null,                network: deal.merchantNetwork || null              },              model: {                id: deal.modelId ? parseInt(deal.modelId) : null,                brand: deal.modelBrand || deal.brand || null,                name: deal.productName || deal.title || "",                parent: deal.modelParent || null              }            };         });                  trackHawkEvent({             clickType: "appeared",             widgetId: widgetId,             productCategoryName: "deals",             zeroBasedProductIndexOrNull: null,             totalDealsOrProducts: deals.length,             productsArray: productsArray,             queryName: queryName,             widgetTypeName: widgetTypeName         });      }      // 1. Setup Shadow DOM Sandbox      const currentScript = document.currentScript;      let hostContainer = null;      let template = null;            if (currentScript) {        let prev = currentScript.previousElementSibling;        while (prev) {          if (prev.tagName === 'TEMPLATE' && prev.classList.contains('tg-df-widget-template')) {            template = prev;          } else if (prev.tagName === 'DIV' && prev.classList.contains('tg-df-widget-host') && !prev.hasAttribute('data-initialized')) {            hostContainer = prev;            break;          }          prev = prev.previousElementSibling;        }      }            // Fallbacks in case script is deferred      if (!hostContainer) {        const hosts = document.querySelectorAll('.tg-df-widget-host:not([data-initialized])');        if (hosts.length > 0) hostContainer = hosts[0];      }            // Safely embedded template for CMS environments      const rawTemplate = `  \x3Cstyle>    /* --- Shadow DOM Base Reset --- */    *, *::before, *::after {      box-sizing: border-box;    }    img, picture, svg, video {      max-width: 100%;      height: auto;      display: block;    }    /*       1. Scoped CSS for Tom's Guide Deals Widget       All classes are prefixed with \`tg-df-\` to prevent CMS style leakage.    */    .tg-df-container {      container-type: inline-size;      container-name: tg-df;      --tg-df-blue: #1F69FF;      --tg-df-blue-hover: #004d8c;      --tg-df-text: #222222;      --tg-df-text-muted: #555555;      --tg-df-bg: #ffffff;      --tg-df-bg-secondary: #f4f4f4;      --tg-df-border: #e2e8f0;      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;      color: var(--tg-df-text);      background-color: transparent;       width: 100%;      max-width: 1200px;      margin: 0 auto;      padding-bottom: 24px;    }    .tg-df-container *, .tg-df-container *::before, .tg-df-container *::after {      margin: 0;      padding: 0;      box-sizing: border-box;    }    .tg-df-container img {      border: none;      margin: 0;      padding: 0;    }    .tg-df-container a {      text-decoration: none;      color: inherit;    }    /*       2. Search & Filter Bar    */    .tg-df-controls {      display: flex;      flex-direction: column;      align-items: center;      gap: 20px;      margin-bottom: 32px;      width: 100%;    }    .tg-df-top-bar {      display: flex;      width: 100%;      max-width: 760px;      gap: 12px;      align-items: center;    }    .tg-df-search-wrapper {      position: relative;      flex: 1;      width: 100%;      box-shadow: 0 8px 24px rgba(0,0,0,0.06);      border-radius: 40px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      z-index: 100;    }    .tg-df-autocomplete-dropdown {      position: absolute;      top: calc(100% + 4px);      left: 0;      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      max-height: 300px;      overflow-y: auto;      z-index: 200;      display: none;    }    .tg-df-autocomplete-dropdown.active {      display: block;    }    .tg-df-autocomplete-item {      padding: 12px 24px;      cursor: pointer;      font-size: 14px;      color: var(--tg-df-text);      transition: background 0.1s ease;    }    .tg-df-autocomplete-item:hover {      background: var(--tg-df-bg-secondary);    }    .tg-df-search-input {      width: 100%;      padding: 16px 64px 16px 24px;      font-size: 16px;      border: 2px solid transparent;      border-radius: 40px;      outline: none;      transition: border-color 0.2s ease, box-shadow 0.2s ease;      color: var(--tg-df-text);      background: transparent;    }    .tg-df-search-input:focus {      border-color: transparent;      box-shadow: 0 0 0 3px rgba(0, 108, 196, 0.15);    }    .tg-df-search-input::placeholder {      color: #999999;    }        .tg-df-search-btn {      position: absolute;      right: 8px;      top: 50%;      transform: translateY(-50%);      width: 40px;      height: 40px;      border-radius: 50%;      background: #222;      border: none;      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: background 0.2s ease;    }        .tg-df-search-btn:hover {      background: #000;    }    .tg-df-search-icon {      width: 16px;      height: 16px;      fill: #fff;    }    .tg-df-settings-wrapper {      position: relative;    }        .tg-df-settings-btn {      width: 48px;      height: 48px;      border-radius: 50%;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      box-shadow: 0 4px 12px rgba(0,0,0,0.04);      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: all 0.2s ease;      color: var(--tg-df-text-muted);      flex-shrink: 0;    }    .tg-df-settings-btn:hover {      background: var(--tg-df-bg-secondary);      border-color: #0000ff;      color: var(--tg-df-text);    }    .tg-df-settings-btn svg {      width: 24px;      height: 24px;      fill: currentColor;    }    .tg-df-settings-dropdown {      position: absolute;      top: calc(100% + 8px);      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      width: 280px;      padding: 20px;      display: none;      z-index: 100;      flex-direction: column;      gap: 20px;    }    .tg-df-settings-dropdown.active {      display: flex;    }        .tg-df-settings-dropdown-backdrop {      display: none;      position: fixed;      inset: 0;      z-index: 99;    }        .tg-df-settings-dropdown-backdrop.active {      display: block;    }    .tg-df-setting-item {      display: flex;      flex-direction: column;      gap: 10px;    }    .tg-df-setting-label {      font-size: 11px;      font-weight: 700;      color: var(--tg-df-text-muted);      text-transform: uppercase;      letter-spacing: 0.5px;    }        .tg-df-region-select {        padding: 10px 12px;        border-radius: 8px;        border: 1px solid var(--tg-df-border);        font-size: 15px;        outline: none;        background: var(--tg-df-bg-secondary);        color: var(--tg-df-text);        cursor: pointer;        width: 100%;    }    .tg-df-toggle {        position: relative;        display: inline-block;        width: 44px;        height: 24px;        flex-shrink: 0;    }    .tg-df-toggle input {        opacity: 0;        width: 0;        height: 0;    }    .tg-df-slider {        position: absolute;        cursor: pointer;        top: 0; left: 0; right: 0; bottom: 0;        background-color: #ccc;        transition: .2s;        border-radius: 24px;    }    .tg-df-slider:before {        position: absolute;        content: "";        height: 18px;        width: 18px;        left: 3px;        bottom: 3px;        background-color: white;        transition: .2s;        border-radius: 50%;    }    .tg-df-toggle input:checked + .tg-df-slider {        background-color: #1F69FF;    }    .tg-df-toggle input:checked + .tg-df-slider:before {        transform: translateX(20px);    }    .tg-df-dl-row {        flex-direction: row;        align-items: center;        justify-content: space-between;    }    .tg-df-dl-row-text {        font-size: 14px;        font-weight: 600;        color: var(--tg-df-text);    }    .tg-df-dl-row-subtext {        font-size: 12px;        font-weight: 400;        line-height: 1.3;        color: var(--tg-df-text-muted);        margin-top: 4px;        display: block;    }    .tg-df-filters {      display: flex;      gap: 12px;      justify-content: center;      flex-wrap: wrap;    }    .tg-df-sort-wrapper {      position: relative;      display: flex;      align-items: center;    }        .tg-df-sort-icon {      position: absolute;      left: 14px;      width: 14px;      height: 14px;      fill: var(--tg-df-text-muted);      pointer-events: none;    }    .tg-df-sort-select, .tg-df-filter-select {      padding: 10px 36px 10px 38px;      font-size: 14px;      border: 1px solid var(--tg-df-border);      border-radius: 100px;      outline: none;      appearance: none;      background-color: var(--tg-df-bg-secondary);      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 12 12'%3E%3Cpath fill='%23555555' d='M6 8L1 3h10z'/%3E%3C/svg%3E");      background-repeat: no-repeat;      background-position: right 14px center;      color: var(--tg-df-text);      cursor: pointer;      font-weight: 500;      transition: all 0.2s ease;    }        .tg-df-price-input::-webkit-outer-spin-button,    .tg-df-price-input::-webkit-inner-spin-button {      -webkit-appearance: none;      margin: 0;    }    .tg-df-price-input {      -moz-appearance: textfield;    }    .tg-df-sort-select:hover, .tg-df-filter-select:hover {      background-color: #e2e8f0;    }    .tg-df-multiselect-container {      position: relative;    }        .tg-df-multiselect-trigger {      display: block;      background: #fff;      user-select: none;      width: 100%;      overflow: hidden;      white-space: nowrap;      text-overflow: ellipsis;    }        .tg-df-multiselect-dropdown {      display: none;      position: absolute;      top: calc(100% + 4px);      left: 0;      width: 100%;      min-width: 220px;      max-height: 300px;      overflow-y: auto;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);      z-index: 100;      padding: 8px 0;    }    .tg-df-multiselect-dropdown.active {      display: block;    }    .tg-df-ms-option {      padding: 8px 16px;      display: flex;      align-items: center;      gap: 8px;      cursor: pointer;      font-size: 14px;    }    .tg-df-ms-option:hover {      background-color: var(--tg-df-bg-secondary);    }        .tg-df-ms-option input {      cursor: pointer;      accent-color: #1f69ff;    }    .tg-df-sort-select:focus, .tg-df-filter-select:focus {      border-color: #0000ff;      box-shadow: 0 0 0 3px rgba(0, 0, 255, 0.2);      background-color: var(--tg-df-bg);    }    /*       3. Deal Grid Layout    */    .tg-df-grid.tg-df-grid-auto {      padding-top: 24px;    }    .tg-df-grid, .tg-df-grid.layout-grid {      display: grid;      grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));      gap: 10px;    }    .tg-df-grid.layout-row {      grid-template-columns: 1fr;      gap: 16px;    }        .tg-df-grid.layout-row .tg-df-card {      flex-direction: row;      align-items: stretch;      height: auto;      box-shadow: none;      border-bottom: 1px solid var(--tg-df-border);    }    .tg-df-grid.layout-row .tg-df-card:hover {      box-shadow: none;    }    .tg-df-grid.layout-row .tg-df-card-image-box {      width: 140px;      min-width: 140px;      aspect-ratio: 3/4;      border-right: none;      padding: 16px 16px 16px 32px;    }    .tg-df-grid.layout-row .tg-df-card-body {      padding: 16px;      justify-content: space-between;    }    .tg-df-grid.layout-row .tg-df-card-title {      font-size: 15px;      margin-bottom: 16px;    }    .tg-df-grid.layout-row .tg-df-card-stars { margin-bottom: 8px; }    .tg-df-grid.layout-row .tg-df-card-footer {      flex-direction: column;      align-items: flex-start;      gap: 0;    }    .tg-df-grid.layout-row .tg-df-card-merchant-pill {      margin-bottom: 4px;    }    .tg-df-grid.layout-row .tg-df-card-price-group {      margin-bottom: 8px;    }    .tg-df-grid.layout-row .tg-df-price-group {      width: auto;    }    .tg-df-grid.layout-row .tg-df-card-cta {      width: 100%;      max-width: 200px;      padding: 10px 24px;      font-size: 13px;      flex-shrink: 0;      text-align: center;      justify-content: center;    }    /*       4. Deal Card Design    */    .tg-df-card {      position: relative;      display: flex;      flex-direction: column;      background-color: #ffffff;      border-radius: 0;      overflow: hidden;      transition: transform 0.2s ease, box-shadow 0.2s ease;      text-decoration: none;      color: inherit;      height: 100%;      box-shadow: 0 0 16px rgba(0, 0, 0, 0.08);      border: 1px solid var(--tg-df-border);    }    .tg-df-card:hover {      box-shadow: 0 0 24px rgba(0, 0, 0, 0.12);    }    .tg-df-card-image-box {      width: 100%;      aspect-ratio: 3/4;      background-color: #f8f8f8;      display: flex;      align-items: center;      justify-content: center;      position: relative;      overflow: hidden;      padding: 32px;      flex: 0 0 auto;    }    .tg-df-card-image {      max-width: 100%;      max-height: 100%;      width: auto;      height: auto;      object-fit: contain;      mix-blend-mode: multiply; /* Helps white background images blend into secondary bg */      transition: transform 0.3s ease;    }    .tg-df-card:hover .tg-df-card-image {      transform: scale(1.05); /* Zoom in on hover */    }    .tg-df-card-discount-badge {      position: absolute;      top: 12px;      left: 12px;      background: #dc2626; /* Red */      color: #ffffff;      padding: 6px 8px;      font-size: 11px;      font-weight: 500;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      z-index: 10;    }        .tg-df-card-merchant-pill {      display: block;      padding: 0;      font-size: 11px;      font-weight: 600;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      color: var(--tg-df-text-muted);      margin-bottom: 8px;      white-space: nowrap;      overflow: hidden;      text-overflow: ellipsis;    }    .tg-df-card-body {      padding: 16px;      display: flex;      flex-direction: column;      flex-grow: 1;      min-width: 0;    }    .tg-df-card-badges {      display: flex;      flex-wrap: wrap;      gap: 6px;      margin-bottom: 8px;    }    .tg-df-tag {      display: inline-flex;      align-items: center;      padding: 4px 6px;      font-size: 11px;      font-weight: 700;      text-transform: uppercase;      border-radius: 4px;      gap: 4px;    }    .tg-df-tag-prime {      background-color: #00A8E1;      color: #fff;    }    .tg-df-tag-coupons {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-coupons:hover {      background-color: #e2e8f0;    }        .tg-df-tag-outline {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-outline:hover {      background-color: #e2e8f0;    }        @keyframes tg-df-spin {      0% { transform: rotate(0deg); }      100% { transform: rotate(360deg); }    }    .tg-df-coupon-spinner {      border: 2px solid #e2e8f0;      border-top: 2px solid #3b82f6;      border-radius: 50%;      width: 14px;      height: 14px;      animation: tg-df-spin 1s linear infinite;      margin: 4px 8px;      display: inline-block;    }        /* Vouchers Modal */    .tg-df-modal-backdrop {      position: fixed;      top: 0; left: 0; right: 0; bottom: 0;      background: rgba(0,0,0,0.5);      z-index: 10000;      display: flex;      align-items: center;      justify-content: center;      opacity: 0;      pointer-events: none;      transition: opacity 0.3s;    }    .tg-df-modal-backdrop.active {      opacity: 1;      pointer-events: auto;    }    .tg-df-modal {      background: #fff;      border-radius: 12px;      width: 90%;      max-width: 400px;      max-height: 80vh;      display: flex;      flex-direction: column;      box-shadow: 0 10px 40px rgba(0,0,0,0.2);      transform: translateY(20px);      transition: transform 0.3s;    }    .tg-df-modal-backdrop.active .tg-df-modal {      transform: translateY(0);    }    .tg-df-modal-header {      padding: 16px;      border-bottom: 1px solid #e2e8f0;      display: flex;      align-items: center;      justify-content: space-between;    }    .tg-df-modal-title {      font-size: 16px;      font-weight: 600;      margin: 0;    }    .tg-df-modal-close {      background: none;      border: none;      cursor: pointer;      padding: 4px;      color: #64748b;    }    .tg-df-modal-body {      padding: 16px;      overflow-y: auto;    }    .tg-df-voucher-item {      padding: 12px;      border: 1px dashed #cbd5e1;      border-radius: 8px;      margin-bottom: 10px;      background: #f8fafc;      display: flex;      align-items: center;      gap: 12px;      text-decoration: none;      color: inherit;      transition: background-color 0.2s, border-color 0.2s;    }    .tg-df-voucher-item:hover {      background: #f1f5f9;      border-color: #94a3b8;    }    .tg-df-voucher-item:last-child {      margin-bottom: 0;    }    .tg-df-voucher-logo {      width: 48px;      height: 48px;      object-fit: contain;      border-radius: 4px;      background: #fff;      border: 1px solid #e2e8f0;      flex-shrink: 0;    }    .tg-df-voucher-content {      flex: 1;      min-width: 0;    }    .tg-df-voucher-title {      font-size: 14px;      font-weight: 600;      margin: 0 0 4px 0;      line-height: 1.3;      color: #0f172a;    }    .tg-df-voucher-expiry {      font-size: 12px;      color: #64748b;      display: flex;      align-items: center;      gap: 4px;      margin-top: 6px;    }    .tg-df-voucher-code {      display: inline-flex;      align-items: center;      background: #f1f5f9;      border: 1px dashed #cbd5e1;      padding: 6px 10px;      font-family: monospace;      font-weight: 700;      font-size: 14px;      color: #0f172a;      border-radius: 4px;      margin-top: 8px;      cursor: pointer;      transition: all 0.2s ease;    }    .tg-df-voucher-code:hover {      background: #e2e8f0;      border-color: #94a3b8;    }    .tg-df-voucher-code.copied {      background: #ecfdf5;      border-color: #10b981;      color: #10b981;    }    .tg-df-voucher-cta {      display: inline-block;      margin-top: 8px;      font-size: 13px;      font-weight: 600;      color: #2563eb;      text-decoration: none;    }    .tg-df-card-title {      font-size: 15px;      font-weight: 400;      line-height: 1.4;      margin: 0 0 12px 0;      color: var(--tg-df-text);      display: -webkit-box;      -webkit-line-clamp: 2;      -webkit-box-orient: vertical;      overflow: hidden;    }    .tg-df-card-footer {      margin-top: auto;      display: flex;      flex-direction: column;      width: 100%;    }    .tg-df-card-price-group {      display: flex;      flex-direction: row;      align-items: center;      gap: 8px;      margin-bottom: 12px;    }    .tg-df-card-price {      font-size: 16px;      font-weight: 700;      color: #dc2626; /* Red price */      line-height: 1;    }        .tg-df-card-msrp {      font-size: 13px;      color: var(--tg-df-text-muted);      text-decoration: line-through;    }    .tg-df-container .tg-df-card-cta {      display: flex;      align-items: center;      justify-content: center;      width: 100%;      box-sizing: border-box;      background-color: #1f69ff;      color: #ffffff;      font-size: 12px;      font-weight: 700;      text-transform: uppercase;      letter-spacing: 0.5px;      padding: 12px 16px;      border-radius: 0;      border: none;      cursor: pointer;      transition: background-color 0.2s ease;    }    .tg-df-card:hover .tg-df-card-cta,    .tg-df-card-cta:hover {      background-color: #1555cc;    }    .tg-df-container .tg-df-card-cta.tg-df-cta-savings-squad {      background-color: #3c8d0d;    }    .tg-df-card:hover .tg-df-card-cta.tg-df-cta-savings-squad,    .tg-df-card-cta.tg-df-cta-savings-squad:hover {      background-color: #2b6509;    }    /*       5. State & Skeleton Styles    */    .tg-df-message {      grid-column: 1 / -1;      text-align: center;      padding: 48px 24px;      color: var(--tg-df-text-muted);      font-size: 16px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;    }    @keyframes tg-df-shimmer {      0% { background-position: -200% 0; }      100% { background-position: 200% 0; }    }    .tg-df-skeleton {      background: linear-gradient(90deg, var(--tg-df-bg-secondary) 25%, #e2e8f0 50%, var(--tg-df-bg-secondary) 75%);      background-size: 200% 100%;      animation: tg-df-shimmer 1.5s infinite;      border-radius: 4px;    }    .tg-df-skeleton-img {      width: 100%;      height: 100%;      position: absolute;      top: 0; left: 0;    }        .tg-df-skeleton-text {      height: 16px;      margin-bottom: 8px;      width: 100%;    }    .tg-df-skeleton-text.short { width: 40%; }    .tg-df-skeleton-text.title { height: 20px; margin-bottom: 16px; }    /* Editor Floating Bar & Elements */    .tg-df-editor-bar {      position: sticky;      top: 0;      z-index: 1000;      background: #111827;      color: #fff;      padding: 12px 16px;      border-radius: 8px;      margin-bottom: 16px;      display: flex;      align-items: center;      justify-content: space-between;      box-shadow: 0 4px 12px rgba(0,0,0,0.15);    }    .tg-df-editor-bar-text {      font-weight: 600;      font-size: 14px;    }    .tg-df-editor-copy-btn {      background: #10b981;      color: #fff;      padding: 6px 16px;      border: none;      border-radius: 4px;      font-weight: 600;      cursor: pointer;      display: flex;      align-items: center;      font-size: 13px;    }    .tg-df-editor-copy-btn:hover { background: #059669; }        .tg-df-deal-checkbox {      position: absolute;      top: 12px;      right: 12px;      z-index: 10;      width: 20px;      height: 20px;      cursor: pointer;      pointer-events: auto;    }    /*       6. Mobile List View (Stacks into a cleaner horizontal row/list)    */    @container tg-df (max-width: 599px) {      .tg-df-controls {        padding: 0 16px;      }            .tg-df-top-bar {        width: 100%;      }            .tg-df-settings-dropdown {        position: fixed;        top: auto;        bottom: 0;        left: 0;        right: 0;        width: 100%;        border-radius: 20px 20px 0 0;        padding: 24px;        box-shadow: 0 -8px 32px rgba(0,0,0,0.15);        z-index: 1000;        border: none;        border-top: 1px solid var(--tg-df-border);      }            .tg-df-settings-dropdown-backdrop.active {        background: rgba(0,0,0,0.4);      }            .tg-df-search-wrapper {        box-shadow: 0 0 16px rgba(0,0,0,0.08);      }            .tg-df-filters {        width: calc(100% + 32px);        margin: 0 -16px;        padding: 0 16px 4px 16px;        display: flex;        justify-content: flex-start;        gap: 8px;        flex-wrap: nowrap;        overflow-x: auto;        -webkit-overflow-scrolling: touch;        scrollbar-width: none;      }      .tg-df-filters::after {        content: "";        display: block;        flex: 0 0 8px;      }      .tg-df-filters::-webkit-scrollbar {        display: none;      }            .tg-df-sort-wrapper {        flex: 0 0 max(42%, 130px);        min-width: 0;      }      .tg-df-sort-wrapper.tg-df-price-range-wrapper {        flex: 0 0 auto;        min-width: max-content;      }            .tg-df-sort-select, .tg-df-filter-select {        width: 100%;        text-align: left;        padding: 10px 24px 10px 32px;        background-position: right 8px center;        text-overflow: ellipsis;        white-space: nowrap;        overflow: hidden;      }      .tg-df-sort-icon {        left: 10px;      }      .tg-df-grid:not(.layout-grid):not(.layout-row),      .tg-df-grid.layout-row {        grid-template-columns: 1fr;        gap: 16px;      }            .tg-df-grid.tg-df-grid-auto {        padding-top: 24px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card,      .tg-df-grid.layout-row .tg-df-card {        flex-direction: row;        align-items: stretch;        height: auto;        box-shadow: none; /* simple line on mobile if preferred, or keep */        border-bottom: 1px solid var(--tg-df-border);      }      .tg-df-grid.tg-df-grid-auto .tg-df-card:hover,      .tg-df-grid.layout-row .tg-df-card:hover {        box-shadow: none;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-image-box,      .tg-df-grid.layout-row .tg-df-card-image-box {        width: 120px;        min-width: 120px;        aspect-ratio: 3/4;        border-right: none;        padding: 12px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-body,      .tg-df-grid.layout-row .tg-df-card-body {        padding: 12px;        justify-content: space-between;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-title,      .tg-df-grid.layout-row .tg-df-card-title {        font-size: 14px;        margin-bottom: 12px;        -webkit-line-clamp: 3;      }      /* Single column mobile grid override */      .tg-df-grid.layout-grid {        grid-template-columns: 1fr;        gap: 16px;      }      .tg-df-grid.layout-grid .tg-df-card-image-box {        padding: 12px;      }      .tg-df-grid.layout-grid .tg-df-card-body {        padding: 10px;      }      .tg-df-grid.layout-grid .tg-df-card-title {        font-size: 13px;        -webkit-line-clamp: 3;        margin-bottom: 8px;      }      .tg-df-grid.layout-grid .tg-df-card-price {        font-size: 14px;      }            .tg-df-card-footer {        flex-direction: column;        align-items: stretch;        gap: 0;        width: 100%;        min-width: 0;      }      .tg-df-card-merchant-pill {        margin-bottom: 4px;      }      .tg-df-card-price-group {        flex: 1 1 auto;        margin-bottom: 8px;      }      .tg-df-card-price {        font-size: 16px;      }      .tg-df-card-msrp {        display: block;       }      .tg-df-grid.layout-row .tg-df-card-cta,      .tg-df-container .tg-df-card-cta {        width: 100%;        max-width: none;        min-width: 0;        box-sizing: border-box;        padding: 8px 16px;        font-size: 12px;        flex: 0 0 auto;        text-align: center;        white-space: normal;        line-height: 1.2;      }    }    .tg-df-container.is-carousel {      min-height: 760px;      background-color: #E7F0FF;      padding: 0 0 24px 0;      border-radius: 24px;    }    .tg-df-container.is-carousel.hide-header-details {      min-height: 480px;    }    /*       7. Carousel View Mode    */    .tg-df-container .tg-df-carousel-host {      /* Layout is now handled by container wrapper */    }    .tg-df-container .tg-df-carousel-eyebrow {      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      padding: 24px 16px 0 16px;      display: none;    }    .tg-df-container .tg-df-carousel-query-title {      color: #011535;      font-size: 28px;      font-weight: 600;      padding: 0 16px 24px 16px;      line-height: 1.2;      display: none;    }    .tg-df-container .tg-df-carousel-blue-box {      background-color: transparent;      border-radius: 0;      padding: 24px 24px 0 24px;      margin: 0;      color: #1F69FF;          position: relative;      overflow: hidden;    }    .tg-df-container .tg-df-carousel-bg-circle-1 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-2 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-3 {      display: none;    }    .tg-df-container .tg-df-carousel-box-content {      position: relative;      z-index: 10;    }    .tg-df-container .tg-df-carousel-box-eyebrow {      background-color: transparent;      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      display: inline-block;      padding: 0;      border-radius: 0;    }    .tg-df-container .tg-df-carousel-box-title {      font-size: 28px;      font-weight: 600;      line-height: 1.2;      margin-top: 8px;      color: #1e293b;    }    .tg-df-container .tg-df-countdown-wrapper {      position: absolute;      top: 0;      right: 0;      display: flex;      flex-direction: column;      align-items: flex-end;      gap: 12px;      transform: scale(0.67);      transform-origin: top right;    }    .tg-df-container .tg-df-countdown-title {      font-size: 16px;      text-align: center;      width: 100%;      font-weight: 600;      color: #011535;      margin: 0;    }    .tg-df-container .tg-df-countdown-blocks {      display: flex;      gap: 16px;    }    .tg-df-container .tg-df-countdown-item {      display: flex;      flex-direction: column;      align-items: center;      gap: 4px;    }    .tg-df-container .tg-df-countdown-box {      width: 59px;      height: 59px;      background: #03FE9E;      border-radius: 15px;      display: flex;      align-items: center;      justify-content: center;    }    .tg-df-container .tg-df-countdown-num {      font-family: 'Inter', sans-serif;      font-weight: 700;      font-size: 20px;      line-height: normal;      color: #011535;    }    .tg-df-container .tg-df-countdown-label {      font-family: 'Inter', sans-serif;      font-weight: 500;      font-size: 16px;      line-height: normal;      color: #1e293b;      text-transform: uppercase;    }    .tg-df-container .tg-df-carousel-box-subtitle {      font-size: 16px;      margin-top: 8px;      font-weight: 300;      color: #1e293b;      line-height: 24px;    }    .tg-df-container .tg-df-carousel-roundels-wrapper {      position: relative;      margin-top: 24px;      margin-left: -24px;      margin-right: -24px;    }    .tg-df-container .tg-df-carousel-roundels {      display: flex;      gap: 16px;      overflow-x: auto;            scrollbar-width: none;      padding-top: 12px;      padding-bottom: 24px;      padding-left: 24px;      padding-right: 24px;      margin-left: 0;      margin-right: 0;    }        .tg-df-container .tg-df-carousel-scroll-left,    .tg-df-container .tg-df-carousel-scroll-right {      position: absolute;      top: 50%;      transform: translateY(-50%);      height: 36px;      width: 36px;      display: flex;      align-items: center;      justify-content: center;      border-radius: 50%;      background-color: #ffffff;      border: 1px solid #e2e8f0;      box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);      color: #1F69FF;      cursor: pointer;      transition: all 0.2s;      margin-top: -4px;      z-index: 20;    }    .tg-df-container .tg-df-carousel-scroll-left { left: 8px; }    .tg-df-container .tg-df-carousel-scroll-right { right: 8px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left { left: 0px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right { right: 0px; }    .tg-df-carousel-filters-outer { margin-left: -24px; margin-right: -24px; padding-left: 24px; padding-right: 24px; }    @container tg-df (max-width: 599px) { .tg-df-carousel-filters-outer { margin-left: -16px; margin-right: -16px; padding-left: 16px; padding-right: 16px; } }        .tg-df-container .tg-df-carousel-scroll-left:hover,    .tg-df-container .tg-df-carousel-scroll-right:hover {      background-color: #f8fafc;      border-color: #cbd5e1;    }        .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-left,    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right,    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left,    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right {      background-color: rgba(255, 255, 255, 0.4);      border: none;      box-shadow: none;      backdrop-filter: blur(4px);      -webkit-backdrop-filter: blur(4px);    }    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-left { left: 0; }    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right { right: 0; }    .tg-df-grid-wrapper .tg-df-carousel-scroll-left { left: 0; }    .tg-df-grid-wrapper .tg-df-carousel-scroll-right { right: 0; }        .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-left:hover,    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right:hover {      background-color: rgba(255, 255, 255, 0.6);      border: none;    }    .tg-df-container .tg-df-carousel-roundels::-webkit-scrollbar {      display: none;    }    .tg-df-container .tg-df-carousel-roundels::after {      content: "";      flex: 0 0 32px;    }    .tg-df-container .tg-df-roundel {      display: flex;      flex-direction: column;      align-items: center;      gap: 8px;      cursor: pointer;      min-width: 120px;      flex-shrink: 0;    }    .tg-df-container .tg-df-roundel-img-box {      width: 120px;      height: 120px;      border-radius: 50%;      background: white;      display: flex;      align-items: center;      justify-content: center;      overflow: hidden;      box-shadow: 0px 3px 14px 0px rgba(30, 41, 59, 0.08);      transition: box-shadow 0.2s;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box img {      transform: scale(1.08);    }    .tg-df-container .tg-df-roundel-img-box img {      width: 100%;      height: 100%;      object-fit: contain;      padding: 10px;      box-sizing: border-box;      transition: transform 0.3s ease;    }    .tg-df-container .tg-df-roundel-label {      font-size: 13px;      font-weight: 400;      color: #1e293b;      text-align: center;      transition: font-weight 0.2s;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-label {      font-weight: 700;    }    .tg-df-container .tg-df-carousel-filters-label {      font-size: 16px;      font-weight: 400;      color: #1e293b;      white-space: nowrap;      margin-right: 4px;    }    .tg-df-container .tg-df-carousel-filters-wrap {      display: flex;      align-items: center;      flex-wrap: nowrap;      gap: 8px;      margin-top: 8px;      overflow-x: auto;      scrollbar-width: none;      -webkit-overflow-scrolling: touch;      padding-bottom: 8px;      margin-left: -24px;      margin-right: -24px;      padding-left: 24px;      padding-right: 24px;    }    .tg-df-container .tg-df-carousel-filters-wrap::-webkit-scrollbar {      display: none;    }        .tg-df-container .tg-df-carousel-filter-btn img,    .tg-df-container .tg-df-carousel-filter-btn picture {      height: 20px;      width: 20px;      object-fit: contain;      object-position: center;      display: inline-flex;      align-items: center;      justify-content: center;      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn picture img {      margin-right: 0;      height: 100%;      width: 100%;    }    .tg-df-container .tg-df-carousel-filter-btn img.active-img,    .tg-df-container .tg-df-carousel-filter-btn picture:has(.active-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.inactive-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.inactive-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.active-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.active-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.active-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.active-img) {      display: inline-flex;    }    .tg-df-container .tg-df-carousel-filter-btn {      background: #ffffff;      border: 2px solid #1e293b;      color: #1e293b;      border-radius: 24px;      padding: 6px 16px;      font-size: 14px;      font-weight: 600;      cursor: pointer;      transition: all 0.2s;      flex-shrink: 0;      white-space: nowrap;      display: inline-flex;      align-items: center;      justify-content: center;      min-height: 36px;      box-sizing: border-box;    }    .tg-df-container .tg-df-carousel-filter-btn svg {      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn:hover {      background: #1e293b;      color: white;      border-color: #1e293b;    }    .tg-df-container .tg-df-carousel-filter-btn.active {      background: #1e293b;      color: white;      border-color: #1e293b;    }        .tg-df-grid.carousel-compact {      display: flex;      flex-wrap: nowrap;      overflow-x: auto;      gap: 16px;      padding: 16px 24px;      align-items: stretch;      scrollbar-width: none;    }    .tg-df-grid.carousel-compact::after {      content: "";      flex: 0 0 32px;    }    .tg-df-grid-wrapper {      position: relative;    }    .tg-df-grid.carousel-compact::-webkit-scrollbar {      display: none;    }    .tg-df-grid.carousel-compact .tg-df-load-more-card {      flex: 0 0 auto;      width: 100px;      border-radius: 15px;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      border: 2px solid #1e293b;      background: white;      color: #1e293b;      display: flex;      flex-direction: column;      justify-content: center;      align-items: center;      font-weight: 600;      font-size: 14px;      cursor: pointer;      padding: 16px;      text-align: center;      transition: all 0.2s;    }    .tg-df-grid.carousel-compact .tg-df-load-more-card:hover {      background: #1e293b;      color: white;    }    .tg-df-grid.carousel-compact .tg-df-card {      flex: 0 0 auto;      width: 200px;      min-height: auto;      height: auto;      display: flex;      flex-direction: column;      border-radius: 15px;      border: none;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      overflow: visible;    }    .tg-df-grid.carousel-compact .tg-df-card-image-box {      padding: 12px;      background-color: transparent;      border-radius: 15px 15px 0 0;      height: 130px;    }    .tg-df-grid.carousel-compact .tg-df-card-image {      mix-blend-mode: normal;    }    .tg-df-grid.carousel-compact .tg-df-card-discount-badge {      border-radius: 0;      top: 0px;      left: 0px;      padding: 4px 8px;      font-size: 11px;    }    .tg-df-grid.carousel-compact .tg-df-card-body {      padding: 8px 12px 12px 12px;    }    .tg-df-grid.carousel-compact .tg-df-card-title {      font-size: 14px;      font-weight: 400;      -webkit-line-clamp: 2;      margin-bottom: 8px;      color: #011535;    }    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):not(:has(.tg-df-tag-prime)):not(:has(.tg-df-coupon-wrapper:not([style*="none"]))) > .tg-df-card-title,    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):has(> .tg-df-card-title:first-child) > .tg-df-card-title {      -webkit-line-clamp: 3;    }    .tg-df-grid.carousel-compact .tg-df-card-cta {      border-radius: 5px;      padding: 8px 10px;      margin-top: 4px;      background-color: #1F69FF;    }    .tg-df-grid.carousel-compact .tg-df-card-price-group {      margin-bottom: 2px;    }    .tg-df-grid.carousel-compact .tg-df-card-merchant-pill {      margin-bottom: 2px;    }    @container tg-df (max-width: 599px) {      .tg-df-container .tg-df-carousel-blue-box-title {        font-size: 24px;      }      .tg-df-container .tg-df-countdown-title {        display: none;      }      .tg-df-container .tg-df-countdown-wrapper {        position: absolute;        top: 0;        right: 0;        align-items: flex-end;        transform: scale(0.45);        transform-origin: top right;      }      .tg-df-container .tg-df-roundel {        min-width: 88px;      }      .tg-df-container .tg-df-roundel-img-box {        width: 88px;        height: 88px;      }    }    /* REPLICA BLOCK STYLES */    .tg-df-grid.layout-replica-2 { grid-template-columns: repeat(2, 1fr) !important; gap: 20px; }    .tg-df-grid.layout-replica-1 { grid-template-columns: 1fr !important; gap: 20px; }        .tg-df-container .hawk-deal-widget-container { border-bottom: 1px solid #e5e7eb; display: flex; flex-direction: column; margin: 0; padding: 20px 0; box-sizing: border-box; font-family: inherit; }    .tg-df-container .hawk-deal-widget-wrap { display: flex; flex-direction: row; align-items: flex-start; width: 100%; gap: 24px; }    .tg-df-container .hawk-deal-widget-image-container { display: flex; flex-shrink: 0; justify-content: center; width: 160px; height: 160px; align-items: center; background: white; margin-bottom: 0px; }    .tg-df-container .hawk-deal-widget-title-product-title { color: #111827; font-size: 18px; font-weight: 700; line-height: 1.4; display: inline; }    .tg-df-container .hawk-deal-widget-title-price { font-size: 18px; font-weight: 700; line-height: 1.4; white-space: nowrap; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-price-now { font-weight: 700; }    .tg-df-container .hawk-deal-widget-title-retailer-price:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-title-retailer { font-size: 18px; font-weight: 700; line-height: 1.4; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-was-price { color: #dc2626; font-size: 16px; font-weight: 500; line-height: 1.4; text-decoration: line-through; white-space: nowrap; margin-left: 8px; margin-right: 8px; }    .tg-df-container .hawk-deal-widget-text-body-container { position: relative; width: 100%; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-text-body-main { font-size: 16px; width: 100%; margin-bottom: 12px; }    .tg-df-container .hawk-deal-widget-text-body-description { display: block; font-size: 15px; margin-top: 12px; color: #4b5563; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-body-description p { margin: 0; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-cta-container { display: flex; flex-direction: column; gap: 12px; width: 100%; flex: 1; min-width: 0; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-footer { display: flex; justify-content: flex-end; width: 100%; margin-top: auto; }    .tg-df-container .hawk-deal-widget-button-wrapper { display: flex; flex-direction: column; align-items: flex-end; justify-content: flex-end; width: 100%; }    .tg-df-container .hawk-deal-widget-preferred-partner-wrapper { display: flex; flex-direction: row; }        @container tg-df (min-width: 600px) {      .tg-df-mobile-only { display: none !important; }    }    @container tg-df (max-width: 599px) {      .tg-df-desktop-only { display: none !important; }      .tg-df-grid.layout-replica-2 { grid-template-columns: 1fr !important; }      .tg-df-grid.savings-squad-cards { grid-template-columns: 1fr !important; display: flex; flex-direction: column; }    }    .tg-df-grid.savings-squad-cards .tg-df-card-title {      -webkit-line-clamp: unset !important;      display: block !important;      overflow: visible !important;    }    @container tg-df (max-width: 500px) {      .tg-df-container .hawk-deal-widget-wrap { display: block; }      .tg-df-container .hawk-deal-widget-image-container { display: block; float: left; margin: 0 16px 8px 0; width: 120px; max-width: 120px; height: auto; align-items: normal; justify-content: normal; }      .tg-df-container .hawk-deal-widget-text-cta-container { display: block; text-align: left; }      .tg-df-container .hawk-deal-widget-footer { display: block; margin-top: 16px; clear: both; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper .hawk-deal-widget-preferred-partner-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-affiliate-link-deal-button { box-sizing: border-box !important; display: flex !important; max-width: none !important; width: 100% !important; margin: 0 !important; }    }        .tg-df-container .hawk-affiliate-link-deal-button {       align-items: center; background-color: #5aaf0b; box-sizing: border-box; color: #ffffff !important; display: flex; font-size: 14px; font-weight: 700; justify-content: center; letter-spacing: 0.5px; line-height: 1; min-width: 160px; padding: 14px 24px; text-align: center; text-decoration: none; text-transform: uppercase; width: 100%; word-break: normal; border-radius: 4px; border: 0; transition: background-color 0.2s;     }    .tg-df-container .hawk-affiliate-link-deal-button:hover { background-color: #4a9109; text-decoration: none; }    .tg-df-container .hawk-lazy-image-deal-widget { display: block; height: auto; margin: auto; max-height: 160px; max-width: 100%; mix-blend-mode: multiply; object-fit: contain; }    .tg-df-container .hawk-deal-widget-text-cta-container a { color: #2563eb; text-decoration: none; display: inline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:has(.hawk-deal-widget-title-product-title) { color: #111827; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-product-title,    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-retailer-price { text-decoration: underline; }  \x3C/style>  \x3C!-- Widget Container --\x3E  \x3Cdiv class="tg-df-container" id="signal-deals-finder-root">    \x3C!-- Editor Floating Bar --\x3E    \x3Cdiv class="tg-df-editor-bar" id="tg-df-editor-bar" style="display:none;">      \x3Cdiv class="tg-df-editor-bar-text" style="display: flex; align-items: center;">        \x3Cspan id="tg-df-selected-count">0\x3C/span>\x26nbsp;Deals Selected        \x3Cbutton class="tg-df-editor-clear-btn" id="tg-df-editor-clear" type="button" style="margin-left: 12px; font-size: 13px; color: #9ca3af; background: none; border: none; cursor: pointer; text-decoration: underline;">Clear All\x3C/button>      \x3C/div>      \x3Cbutton class="tg-df-editor-copy-btn" id="tg-df-editor-copy" type="button">        \x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">\x3C/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">\x3C/path>\x3C/svg>        Copy to CMS      \x3C/button>    \x3C/div>    \x3Cdiv class="tg-df-carousel-host" id="tg-df-carousel-host" style="display: none;">      \x3Cdiv class="tg-df-carousel-eyebrow">DEAL FINDER\x3C/div>      \x3Cdiv class="tg-df-carousel-query-title" id="tg-df-carousel-title-label">Best Deals\x3C/div>            \x3Cdiv class="tg-df-carousel-blue-box">        \x3Cdiv class="tg-df-carousel-bg-circle-1" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-2" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-3" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-box-content">          \x3Cdiv class="tg-df-countdown-wrapper" id="tg-df-countdown-wrapper" style="display:none;">            \x3Cdiv class="tg-df-countdown-title" id="tg-df-countdown-title">Prime Day starts in\x3C/div>            \x3Cdiv class="tg-df-countdown-blocks">              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-days">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">DAYS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-hrs">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">HRS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-min">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">MIN\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-sec">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">SEC\x3C/div>\x3C/div>            \x3C/div>          \x3C/div>          \x3Cdiv class="tg-df-carousel-box-eyebrow">DEAL FINDER\x3C/div>          \x3Cdiv class="tg-df-carousel-box-title">Find Deals Fast\x3C/div>          \x3Cdiv class="tg-df-carousel-box-subtitle">The latest deals from the biggest retailers, all in one place\x3C/div>                    \x3Cdiv class="tg-df-carousel-roundels-wrapper">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-roundels">            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>          \x3C/div>          \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-carousel-filters-outer" style="position: relative;">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-filters-wrap">                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="0">All\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_lightning">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_prime">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-d="10">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 10% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="15">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 15% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="25">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 25% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-pr="under50">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>            Under $50\x3C/button>        \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3C/div>    \x3C/div>    \x3C/div>      \x3C!-- Search & Filter Controls --\x3E    \x3Cdiv class="tg-df-controls" id="tg-df-controls" style="display:flex;">      \x3Cdiv class="tg-df-top-bar">        \x3Cdiv class="tg-df-search-wrapper">          \x3Cinput type="text" class="tg-df-search-input" placeholder="Search for deals, products, or brands...">          \x3Cbutton type="button" class="tg-df-search-btn" aria-label="Search">              \x3Csvg class="tg-df-search-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">                \x3Cpath d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/>              \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-autocomplete-dropdown" id="tg-df-autocomplete">\x3C/div>        \x3C/div>                \x3Cdiv class="tg-df-settings-wrapper">          \x3Cbutton type="button" class="tg-df-settings-btn" aria-label="Settings" id="tg-df-settings-toggle">            \x3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20">                \x3Cpath d="M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.06-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.73 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.06.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .43-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.49-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z"/>            \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-settings-dropdown-backdrop" id="tg-df-settings-backdrop">\x3C/div>          \x3Cdiv class="tg-df-settings-dropdown" id="tg-df-settings-panel">            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Search Region\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-region-select">                \x3Coption value="auto">🌍 Auto-detect\x3C/option>                \x3Coption value="US">🇺🇸 United States (US)\x3C/option>                \x3Coption value="GB">🇬🇧 United Kingdom (UK)\x3C/option>                \x3Coption value="CA">🇨🇦 Canada (CA)\x3C/option>                \x3Coption value="AU">🇦🇺 Australia (AU)\x3C/option>                \x3Coption value="DE">🇩🇪 Germany (DE)\x3C/option>                \x3Coption value="FR">🇫🇷 France (FR)\x3C/option>                \x3Coption value="IT">🇮🇹 Italy (IT)\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Retailer\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-retailer-select">                \x3Coption value="">All Retailers\x3C/option>                \x3Coption value="Amazon">Amazon\x3C/option>                \x3Coption value="Walmart">Walmart\x3C/option>                \x3Coption value="Best Buy">Best Buy\x3C/option>                \x3Coption value="Target">Target\x3C/option>                \x3Coption value="John Lewis">John Lewis\x3C/option>                \x3Coption value="Currys">Currys\x3C/option>                \x3Coption value="Argos">Argos\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Offer Type\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-offer-type-select">                \x3Coption value="">All Offers\x3C/option>                \x3Coption value="amazon_prime">Amazon Prime\x3C/option>                \x3Coption value="recommended_promo">Recommended Promo\x3C/option>                \x3Coption value="amazon_lightning">Amazon Lightning Deal\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Result Count\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-rows-select">                \x3Coption value="3">3 Items\x3C/option>                \x3Coption value="4">4 Items\x3C/option>                \x3Coption value="6">6 Items\x3C/option>                \x3Coption value="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/home/smart-home/apple-homeview-is-already-discounted-ahead-of-next-months-release-heres-how-much-you-could-save-by-pre-ordering</link>
                                                                            <description>
                            <![CDATA[ Apple HomeView doesn't arrive until next month, but it's already been given a small discount at Amazon. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">5zyCcBN8NuLtPfmsA6FZxa</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/RhoWDdWYRMBxetFF3hkLyG-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 15 Oct 2026 10:43:18 +0000</pubDate>                                                                                                                                <updated>Thu, 15 Oct 2026 10:46:05 +0000</updated>
                                                                                                                                            <category><![CDATA[Smart Home]]></category>
                                                    <category><![CDATA[Home]]></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/RhoWDdWYRMBxetFF3hkLyG-1920-80.jpg">
                                                            <media:credit><![CDATA[Apple]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Apple homeview with a price drop deal tag]]></media:description>                                                            <media:text><![CDATA[Apple homeview with a price drop deal tag]]></media:text>
                                <media:title type="plain"><![CDATA[Apple homeview with a price drop deal tag]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/RhoWDdWYRMBxetFF3hkLyG-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Apple's HomeView Smart Display has only just been announced, and isn't due to go on sale until November 13 — but you can already save some money on your pre-order. Admittedly it's not a large amount of money, this is a brand new Apple product, but considering how expensive everything is nowadays the option to save even a few dollars shouldn't be ignored.</p><p><a href="https://www.amazon.com/dp/B0HMXG5T64" target="_blank" rel="nofollow">Amazon is currently offering the Apple HomeView for $290,</a> which is $9 off the standard price. Weirdly the discount only seems to be available in three of the four color options, and anyone hoping to pick up the Starlight (cream) color will have to pay the full $299. But Space Gray, Rose Pink and Silver all get to enjoy that slight discount.</p><div class="product"><a data-dimension112="b9394504-c880-11f1-92ee-eb35603709c6" data-action="Deal Block" data-label="HomeView" data-dimension48="HomeView" data-dimension25="$290" href="https://www.amazon.com/dp/B0HMXG5T64" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1266px;"><p class="vanilla-image-block" style="padding-top:118.48%;"><img id="JWMqwRebshquiRevipUgM" name="HomeView" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/JWMqwRebshquiRevipUgM-1920-80.png" mos="" align="middle" fullscreen="" width="1266" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0HMXG5T64" target="_blank" rel="nofollow" data-dimension112="b9394504-c880-11f1-92ee-eb35603709c6" data-action="Deal Block" data-label="HomeView" data-dimension48="HomeView" data-dimension25="$290">HomeView: was $299 now $290</a></strong><br>Apple's smart home display is finally coming, offering direct access to all the smart home and Apple devices you have throughout your house. Complete with FaceTime support, a built-in digital photo frame, access to Siri AI and more. And you can save $9 off the usual price if you pre-order through Amazon.<a class="view-deal button" href="https://www.amazon.com/dp/B0HMXG5T64" target="_blank" rel="nofollow" data-dimension112="b9394504-c880-11f1-92ee-eb35603709c6" data-action="Deal Block" data-label="HomeView" data-dimension48="HomeView" data-dimension25="$290">View Deal</a></p></div><p>The <a href="https://www.tomsguide.com/home/smart-home/i-saw-apples-homeview-early-7-things-you-need-to-know-about-the-smart-home-display">Apple HomeView</a> is not just an iPad with a stand, which is what a lot of smart displays try to be. It's been designed specifically to fit into Apple's burgeoning smart home ecosystem by offering an experience that doesn't involve cloning the things that your iPhone or Apple Watch can already do. </p><p>The most impressive thing is that the HomeView can actually recognize up to six individual people, and adjust the information that's presented on screen accordingly. This means that the schedules and widgets you see are going to be different to the ones your partner or roommate might be presented with.</p><p>Siri AI's personal context feature is going to play a key role in this too, offering a smarter and personalized experience when you interact with the HomeView. In fact, it's even possible to ask the screen to find information from your iPhone and display it for you.</p>                    <div class= "tiktok-wrapper" style="min-height: 750px;"><blockquote class="tiktok-embed" cite="https://www.tiktok.com/@tomsguide/video/7696174677827341581" data-video-id="7696174677827341581" style="max-width: 605px; min-width: 325px;">                        <section>                            <a target="_blank" title="@tomsguide" href="https://www.tiktok.com/@tomsguide">@tomsguide</a>                            <p></p><a target="_blank" title="♬ original sound - Tom’s Guide" href="https://www.tiktok.com/music/original-sound-7696174764578097934">♬ original sound - Tom’s Guide</a></section>                    </blockquote></div>                <p>Naturally HomeView can do all the things you'd expect from a smart display. The screen can operate as a digital photo frame, rotating images from your own Apple Photos albums to mix things up at home. </p><p>Similarly, the 12MP Center Stage camera means the HomeView can also function as a FaceTime machine, letting you offset your calls from your usual device. Plus, like an Amazon Echo, it's an intercom that can communicate with other Apple devices around the house.</p><p>That's on top of the fact this is a hub for all the Matter-equipped smart home devices in your home. That's including, but not limited to, the new <a href="https://www.tomsguide.com/home/smart-home/apples-new-home-collection-includes-a-smart-lock-that-opens-when-you-walk-up-no-tapping-required">Apple Home Collection that's been designed in conjunction with LG and Schneider Electric</a>.</p><p>So if you need a smart home hub, and figure the Apple option is right for you, take advantage of this discount while you can — no matter how small it might be.</p><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=tablets&brands=Amazon&min_discount_ratio=0.95&widget_title=Top+Deals+Handpicked+by+Our+Editors&widget_subtitle=Discover+the+best+discounts+currently+available%2C+curated+daily+by+the+Tom%27s+Guide+Savings+Squad.&bg_color=transparent" data-vizualizer-embed="true"></div>    <script>    /**     * Tom's Guide Deals Finder - Vanilla JS Encapsulated Engine     */    (function() {      // --- Freyr Analytics Adapter ---      function initAnalytics() {        window.dataLayer = window.dataLayer || [];        window.googletag = window.googletag || {};        window.googletag.cmd = window.googletag.cmd || [];        window.hawk = window.hawk || { analytics: { freyr: [] } };        window.hawk.analytics = window.hawk.analytics || { freyr: [] };        window.hawk.analytics.freyr = window.hawk.analytics.freyr || [];        window.freyr = window.freyr || { cmd: [] };        const scriptSrc = 'https://freyr.futurecdn.net/freyr.js';        const hostname = typeof window !== 'undefined' ? window.location.hostname : '';        const isTestEnv = typeof window.navigator !== 'undefined' && (window.navigator.webdriver || window.navigator.userAgent.includes('Headless'));        const shouldSendRealAnalytics = !isTestEnv && hostname && hostname !== 'localhost' && hostname !== '127.0.0.1' && !hostname.includes('run.app');        if (shouldSendRealAnalytics && !document.querySelector(`script[src="${scriptSrc}"]`)) {          const script = document.createElement('script');          script.src = scriptSrc;          script.async = true;          document.head.appendChild(script);        }      }      function storeEventForDebug(name, data) {        if (!window.hawk || !window.hawk.analytics || !window.hawk.analytics.freyr) return;        window.hawk.analytics.freyr.push({ name, data });        try {          if (typeof window !== 'undefined' && window.localStorage) {            window.localStorage.setItem("hawk", JSON.stringify(window.hawk));          }        } catch (e) {          // Ignore storage issues        }        try {          window.dispatchEvent(new CustomEvent("hawk-analytics-update"));        } catch (e) {}      }      function sendToFreyr(eventName, data) {        if (typeof window === 'undefined') return;        window.freyr = window.freyr || { cmd: [] };        window.freyr.cmd.push(() => {          if (window.freyr && window.freyr.pushAndUpdate) {            window.freyr.pushAndUpdate(eventName, data);          }        });      }      function sendEvent(event, skip = false) {        try {          storeEventForDebug(event.name, event.data);          if (!skip) {            sendToFreyr(event.name, event.data);          }        } catch (e) {          // Ensure tracking errors don't surface to the user        }      }      function getCookie(name) {        try {          const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));          return match ? match[2] : null;        } catch (e) {          return null;        }      }      function normalizeCurrency(symbol) {        const map = {          '£': 'GBP',          '$': 'USD',          'A$': 'AUD',          'CA$': 'CAD',          '€': 'EUR'        };        return map[symbol] || symbol;      }      function trackElementInteraction(props) {        sendEvent({          name: 'elementInteraction',          data: {            element: {              action: props.action || "click",              id: props.id || undefined,              class: props.class || undefined,              name: props.name || undefined,              text: props.text || undefined,              label: props.label || undefined,              container: props.container || undefined,              url: props.url || undefined,              articleId: props.articleId || undefined            }          }        });      }      function generateRevenueId(url, productName, merchantName, modelId) {        const str = `${window.location.href}|${productName}|${merchantName}|${modelId || ''}|${new Date().toDateString()}|tomsguide`;        let hash = 0;        for (let i = 0; i < str.length; i++) {          const char = str.charCodeAt(i);          hash = ((hash << 5) - hash) + char;          hash = hash & hash;        }        let numericStr = Math.abs(hash).toString();        while (numericStr.length < 19) {          numericStr += Math.floor(Math.random() * 10).toString();        }        return numericStr.substring(0, 19);      }      function rewriteAffiliateLink(url, territory, revenueId) {        if (!url) return url;        const t = (territory || 'gb').toLowerCase();        return url.replace(/hawk-custom-tracking/g, `tomsguide-${t}-${revenueId}`);      }      function trackHawkEvent(params) {        const { clickType, widgetId, productCategoryName, product, productsArray, zeroBasedProductIndexOrNull, totalDealsOrProducts, areaClicked, merchant, revenueId, isoCurrencyCode, queryName, widgetTypeName } = params;        const data = {          event: "hawkEvent",          category: "Affiliates",          affiliate: {            action: {              type: clickType,              id: widgetId,              event: clickType === "appeared" ? "viewed" : "Click from",              timestamp: Date.now()            },            component: {              flag: "Editor",              product: productCategoryName || "deals",              category: `Signal Deal Finder ${widgetTypeName || "Carousel"} widget`,              type: clickType === "appeared" ? "review" : "signal product",              label: queryName || (product ? (product.name || "") : ""),              index: zeroBasedProductIndexOrNull === null || zeroBasedProductIndexOrNull === undefined ? -1 : zeroBasedProductIndexOrNull,              linkCount: totalDealsOrProducts || 0,              blockLayout: "",              areaClicked: areaClicked || ""            }          },          products: productsArray || (product && merchant ? [            {              product: {                primary: {                  id: product.id || product.matchId || null,                  name: product.name,                  type: "deal",                  price: product.price,                  previousPrice: product.previousPrice || null,                  currency: isoCurrencyCode || "USD",                  preorder: false,                  labels: [],                  link: product.link,                  originalLink: product.originalLink || null,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: null,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: product.globalId || null,                  inStock: product.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: isoCurrencyCode || "USD"                }              },              merchant: {                id: merchant.id || null,                name: merchant.name,                url: merchant.url || null,                network: merchant.network || null              },              model: {                id: product.modelId || null,                brand: product.brand || null,                name: product.name,                parent: product.parent || null              }            }          ] : []),          reviews: [],          _clear: true,          "gtm.uniqueEventId": Date.now() % 10000        };        sendEvent({ name: 'hawkEvent', data });      }      function trackDealClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card" });      }      function trackViewSimilarClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card View Similar" });      }      function trackPriceComparisonClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Price Comparison" });      }      function trackReviewClick(params) {        trackHawkEvent({ ...params, clickType: "review", areaClicked: "Signal Product Card Review Link" });      }      function trackShare(params) {        trackHawkEvent({ ...params, clickType: "share", areaClicked: "Signal Product Card Share" });      }      function trackDealsAppeared(widgetId, deals, revenueId, currency, queryName, widgetTypeName) {         if (!deals || deals.length === 0) return;                  const productsArray = deals.slice(0, 50).map((deal) => {            let voucherPct = null;            let rawPrice = parseFloat(deal.rawPrice) || parseFloat(deal.price) || null;            let rawMsrp = parseFloat(deal.rawMsrp) || parseFloat(deal.msrp) || null;            if (rawMsrp > rawPrice && rawPrice > 0) {              voucherPct = Math.round((1 - (rawPrice / rawMsrp)) * 100);            }            let numId = null;            if (deal.externalProductId && !isNaN(parseInt(deal.externalProductId))) {              numId = parseInt(deal.externalProductId);            } else if (deal.id && !isNaN(parseInt(deal.id))) {              numId = parseInt(deal.id);            } else {              numId = deal.matchId || null;            }            return {              product: {                primary: {                  id: numId,                  name: deal.productName || deal.title || "",                  type: "deal",                  price: rawPrice,                  previousPrice: rawMsrp,                  currency: currency || 'USD',                  preorder: false,                  labels: deal.modelBrand || deal.brand ? [                     { type: "brand", value: deal.modelBrand || deal.brand }                  ] : [],                  link: deal.url,                  originalLink: deal.url,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: voucherPct,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: deal.productKey || null,                  inStock: deal.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: currency || 'USD'                }              },              merchant: {                id: deal.merchantId ? parseInt(deal.merchantId) : null,                name: deal.merchant || "Retailer",                url: deal.merchantUrl || null,                network: deal.merchantNetwork || null              },              model: {                id: deal.modelId ? parseInt(deal.modelId) : null,                brand: deal.modelBrand || deal.brand || null,                name: deal.productName || deal.title || "",                parent: deal.modelParent || null              }            };         });                  trackHawkEvent({             clickType: "appeared",             widgetId: widgetId,             productCategoryName: "deals",             zeroBasedProductIndexOrNull: null,             totalDealsOrProducts: deals.length,             productsArray: productsArray,             queryName: queryName,             widgetTypeName: widgetTypeName         });      }      // 1. Setup Shadow DOM Sandbox      const currentScript = document.currentScript;      let hostContainer = null;      let template = null;            if (currentScript) {        let prev = currentScript.previousElementSibling;        while (prev) {          if (prev.tagName === 'TEMPLATE' && prev.classList.contains('tg-df-widget-template')) {            template = prev;          } else if (prev.tagName === 'DIV' && prev.classList.contains('tg-df-widget-host') && !prev.hasAttribute('data-initialized')) {            hostContainer = prev;            break;          }          prev = prev.previousElementSibling;        }      }            // Fallbacks in case script is deferred      if (!hostContainer) {        const hosts = document.querySelectorAll('.tg-df-widget-host:not([data-initialized])');        if (hosts.length > 0) hostContainer = hosts[0];      }            // Safely embedded template for CMS environments      const rawTemplate = `  \x3Cstyle>    /* --- Shadow DOM Base Reset --- */    *, *::before, *::after {      box-sizing: border-box;    }    img, picture, svg, video {      max-width: 100%;      height: auto;      display: block;    }    /*       1. Scoped CSS for Tom's Guide Deals Widget       All classes are prefixed with \`tg-df-\` to prevent CMS style leakage.    */    .tg-df-container {      container-type: inline-size;      container-name: tg-df;      --tg-df-blue: #1F69FF;      --tg-df-blue-hover: #004d8c;      --tg-df-text: #222222;      --tg-df-text-muted: #555555;      --tg-df-bg: #ffffff;      --tg-df-bg-secondary: #f4f4f4;      --tg-df-border: #e2e8f0;      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;      color: var(--tg-df-text);      background-color: transparent;       width: 100%;      max-width: 1200px;      margin: 0 auto;      padding-bottom: 24px;    }    .tg-df-container *, .tg-df-container *::before, .tg-df-container *::after {      margin: 0;      padding: 0;      box-sizing: border-box;    }    .tg-df-container img {      border: none;      margin: 0;      padding: 0;    }    .tg-df-container a {      text-decoration: none;      color: inherit;    }    /*       2. Search & Filter Bar    */    .tg-df-controls {      display: flex;      flex-direction: column;      align-items: center;      gap: 20px;      margin-bottom: 32px;      width: 100%;    }    .tg-df-top-bar {      display: flex;      width: 100%;      max-width: 760px;      gap: 12px;      align-items: center;    }    .tg-df-search-wrapper {      position: relative;      flex: 1;      width: 100%;      box-shadow: 0 8px 24px rgba(0,0,0,0.06);      border-radius: 40px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      z-index: 100;    }    .tg-df-autocomplete-dropdown {      position: absolute;      top: calc(100% + 4px);      left: 0;      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      max-height: 300px;      overflow-y: auto;      z-index: 200;      display: none;    }    .tg-df-autocomplete-dropdown.active {      display: block;    }    .tg-df-autocomplete-item {      padding: 12px 24px;      cursor: pointer;      font-size: 14px;      color: var(--tg-df-text);      transition: background 0.1s ease;    }    .tg-df-autocomplete-item:hover {      background: var(--tg-df-bg-secondary);    }    .tg-df-search-input {      width: 100%;      padding: 16px 64px 16px 24px;      font-size: 16px;      border: 2px solid transparent;      border-radius: 40px;      outline: none;      transition: border-color 0.2s ease, box-shadow 0.2s ease;      color: var(--tg-df-text);      background: transparent;    }    .tg-df-search-input:focus {      border-color: transparent;      box-shadow: 0 0 0 3px rgba(0, 108, 196, 0.15);    }    .tg-df-search-input::placeholder {      color: #999999;    }        .tg-df-search-btn {      position: absolute;      right: 8px;      top: 50%;      transform: translateY(-50%);      width: 40px;      height: 40px;      border-radius: 50%;      background: #222;      border: none;      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: background 0.2s ease;    }        .tg-df-search-btn:hover {      background: #000;    }    .tg-df-search-icon {      width: 16px;      height: 16px;      fill: #fff;    }    .tg-df-settings-wrapper {      position: relative;    }        .tg-df-settings-btn {      width: 48px;      height: 48px;      border-radius: 50%;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      box-shadow: 0 4px 12px rgba(0,0,0,0.04);      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: all 0.2s ease;      color: var(--tg-df-text-muted);      flex-shrink: 0;    }    .tg-df-settings-btn:hover {      background: var(--tg-df-bg-secondary);      border-color: #0000ff;      color: var(--tg-df-text);    }    .tg-df-settings-btn svg {      width: 24px;      height: 24px;      fill: currentColor;    }    .tg-df-settings-dropdown {      position: absolute;      top: calc(100% + 8px);      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      width: 280px;      padding: 20px;      display: none;      z-index: 100;      flex-direction: column;      gap: 20px;    }    .tg-df-settings-dropdown.active {      display: flex;    }        .tg-df-settings-dropdown-backdrop {      display: none;      position: fixed;      inset: 0;      z-index: 99;    }        .tg-df-settings-dropdown-backdrop.active {      display: block;    }    .tg-df-setting-item {      display: flex;      flex-direction: column;      gap: 10px;    }    .tg-df-setting-label {      font-size: 11px;      font-weight: 700;      color: var(--tg-df-text-muted);      text-transform: uppercase;      letter-spacing: 0.5px;    }        .tg-df-region-select {        padding: 10px 12px;        border-radius: 8px;        border: 1px solid var(--tg-df-border);        font-size: 15px;        outline: none;        background: var(--tg-df-bg-secondary);        color: var(--tg-df-text);        cursor: pointer;        width: 100%;    }    .tg-df-toggle {        position: relative;        display: inline-block;        width: 44px;        height: 24px;        flex-shrink: 0;    }    .tg-df-toggle input {        opacity: 0;        width: 0;        height: 0;    }    .tg-df-slider {        position: absolute;        cursor: pointer;        top: 0; left: 0; right: 0; bottom: 0;        background-color: #ccc;        transition: .2s;        border-radius: 24px;    }    .tg-df-slider:before {        position: absolute;        content: "";        height: 18px;        width: 18px;        left: 3px;        bottom: 3px;        background-color: white;        transition: .2s;        border-radius: 50%;    }    .tg-df-toggle input:checked + .tg-df-slider {        background-color: #1F69FF;    }    .tg-df-toggle input:checked + .tg-df-slider:before {        transform: translateX(20px);    }    .tg-df-dl-row {        flex-direction: row;        align-items: center;        justify-content: space-between;    }    .tg-df-dl-row-text {        font-size: 14px;        font-weight: 600;        color: var(--tg-df-text);    }    .tg-df-dl-row-subtext {        font-size: 12px;        font-weight: 400;        line-height: 1.3;        color: var(--tg-df-text-muted);        margin-top: 4px;        display: block;    }    .tg-df-filters {      display: flex;      gap: 12px;      justify-content: center;      flex-wrap: wrap;    }    .tg-df-sort-wrapper {      position: relative;      display: flex;      align-items: center;    }        .tg-df-sort-icon {      position: absolute;      left: 14px;      width: 14px;      height: 14px;      fill: var(--tg-df-text-muted);      pointer-events: none;    }    .tg-df-sort-select, .tg-df-filter-select {      padding: 10px 36px 10px 38px;      font-size: 14px;      border: 1px solid var(--tg-df-border);      border-radius: 100px;      outline: none;      appearance: none;      background-color: var(--tg-df-bg-secondary);      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 12 12'%3E%3Cpath fill='%23555555' d='M6 8L1 3h10z'/%3E%3C/svg%3E");      background-repeat: no-repeat;      background-position: right 14px center;      color: var(--tg-df-text);      cursor: pointer;      font-weight: 500;      transition: all 0.2s ease;    }        .tg-df-price-input::-webkit-outer-spin-button,    .tg-df-price-input::-webkit-inner-spin-button {      -webkit-appearance: none;      margin: 0;    }    .tg-df-price-input {      -moz-appearance: textfield;    }    .tg-df-sort-select:hover, .tg-df-filter-select:hover {      background-color: #e2e8f0;    }    .tg-df-multiselect-container {      position: relative;    }        .tg-df-multiselect-trigger {      display: block;      background: #fff;      user-select: none;      width: 100%;      overflow: hidden;      white-space: nowrap;      text-overflow: ellipsis;    }        .tg-df-multiselect-dropdown {      display: none;      position: absolute;      top: calc(100% + 4px);      left: 0;      width: 100%;      min-width: 220px;      max-height: 300px;      overflow-y: auto;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);      z-index: 100;      padding: 8px 0;    }    .tg-df-multiselect-dropdown.active {      display: block;    }    .tg-df-ms-option {      padding: 8px 16px;      display: flex;      align-items: center;      gap: 8px;      cursor: pointer;      font-size: 14px;    }    .tg-df-ms-option:hover {      background-color: var(--tg-df-bg-secondary);    }        .tg-df-ms-option input {      cursor: pointer;      accent-color: #1f69ff;    }    .tg-df-sort-select:focus, .tg-df-filter-select:focus {      border-color: #0000ff;      box-shadow: 0 0 0 3px rgba(0, 0, 255, 0.2);      background-color: var(--tg-df-bg);    }    /*       3. Deal Grid Layout    */    .tg-df-grid.tg-df-grid-auto {      padding-top: 24px;    }    .tg-df-grid, .tg-df-grid.layout-grid {      display: grid;      grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));      gap: 10px;    }    .tg-df-grid.layout-row {      grid-template-columns: 1fr;      gap: 16px;    }        .tg-df-grid.layout-row .tg-df-card {      flex-direction: row;      align-items: stretch;      height: auto;      box-shadow: none;      border-bottom: 1px solid var(--tg-df-border);    }    .tg-df-grid.layout-row .tg-df-card:hover {      box-shadow: none;    }    .tg-df-grid.layout-row .tg-df-card-image-box {      width: 140px;      min-width: 140px;      aspect-ratio: 3/4;      border-right: none;      padding: 16px 16px 16px 32px;    }    .tg-df-grid.layout-row .tg-df-card-body {      padding: 16px;      justify-content: space-between;    }    .tg-df-grid.layout-row .tg-df-card-title {      font-size: 15px;      margin-bottom: 16px;    }    .tg-df-grid.layout-row .tg-df-card-stars { margin-bottom: 8px; }    .tg-df-grid.layout-row .tg-df-card-footer {      flex-direction: column;      align-items: flex-start;      gap: 0;    }    .tg-df-grid.layout-row .tg-df-card-merchant-pill {      margin-bottom: 4px;    }    .tg-df-grid.layout-row .tg-df-card-price-group {      margin-bottom: 8px;    }    .tg-df-grid.layout-row .tg-df-price-group {      width: auto;    }    .tg-df-grid.layout-row .tg-df-card-cta {      width: 100%;      max-width: 200px;      padding: 10px 24px;      font-size: 13px;      flex-shrink: 0;      text-align: center;      justify-content: center;    }    /*       4. Deal Card Design    */    .tg-df-card {      position: relative;      display: flex;      flex-direction: column;      background-color: #ffffff;      border-radius: 0;      overflow: hidden;      transition: transform 0.2s ease, box-shadow 0.2s ease;      text-decoration: none;      color: inherit;      height: 100%;      box-shadow: 0 0 16px rgba(0, 0, 0, 0.08);      border: 1px solid var(--tg-df-border);    }    .tg-df-card:hover {      box-shadow: 0 0 24px rgba(0, 0, 0, 0.12);    }    .tg-df-card-image-box {      width: 100%;      aspect-ratio: 3/4;      background-color: #f8f8f8;      display: flex;      align-items: center;      justify-content: center;      position: relative;      overflow: hidden;      padding: 32px;      flex: 0 0 auto;    }    .tg-df-card-image {      max-width: 100%;      max-height: 100%;      width: auto;      height: auto;      object-fit: contain;      mix-blend-mode: multiply; /* Helps white background images blend into secondary bg */      transition: transform 0.3s ease;    }    .tg-df-card:hover .tg-df-card-image {      transform: scale(1.05); /* Zoom in on hover */    }    .tg-df-card-discount-badge {      position: absolute;      top: 12px;      left: 12px;      background: #dc2626; /* Red */      color: #ffffff;      padding: 6px 8px;      font-size: 11px;      font-weight: 500;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      z-index: 10;    }        .tg-df-card-merchant-pill {      display: block;      padding: 0;      font-size: 11px;      font-weight: 600;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      color: var(--tg-df-text-muted);      margin-bottom: 8px;      white-space: nowrap;      overflow: hidden;      text-overflow: ellipsis;    }    .tg-df-card-body {      padding: 16px;      display: flex;      flex-direction: column;      flex-grow: 1;      min-width: 0;    }    .tg-df-card-badges {      display: flex;      flex-wrap: wrap;      gap: 6px;      margin-bottom: 8px;    }    .tg-df-tag {      display: inline-flex;      align-items: center;      padding: 4px 6px;      font-size: 11px;      font-weight: 700;      text-transform: uppercase;      border-radius: 4px;      gap: 4px;    }    .tg-df-tag-prime {      background-color: #00A8E1;      color: #fff;    }    .tg-df-tag-coupons {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-coupons:hover {      background-color: #e2e8f0;    }        .tg-df-tag-outline {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-outline:hover {      background-color: #e2e8f0;    }        @keyframes tg-df-spin {      0% { transform: rotate(0deg); }      100% { transform: rotate(360deg); }    }    .tg-df-coupon-spinner {      border: 2px solid #e2e8f0;      border-top: 2px solid #3b82f6;      border-radius: 50%;      width: 14px;      height: 14px;      animation: tg-df-spin 1s linear infinite;      margin: 4px 8px;      display: inline-block;    }        /* Vouchers Modal */    .tg-df-modal-backdrop {      position: fixed;      top: 0; left: 0; right: 0; bottom: 0;      background: rgba(0,0,0,0.5);      z-index: 10000;      display: flex;      align-items: center;      justify-content: center;      opacity: 0;      pointer-events: none;      transition: opacity 0.3s;    }    .tg-df-modal-backdrop.active {      opacity: 1;      pointer-events: auto;    }    .tg-df-modal {      background: #fff;      border-radius: 12px;      width: 90%;      max-width: 400px;      max-height: 80vh;      display: flex;      flex-direction: column;      box-shadow: 0 10px 40px rgba(0,0,0,0.2);      transform: translateY(20px);      transition: transform 0.3s;    }    .tg-df-modal-backdrop.active .tg-df-modal {      transform: translateY(0);    }    .tg-df-modal-header {      padding: 16px;      border-bottom: 1px solid #e2e8f0;      display: flex;      align-items: center;      justify-content: space-between;    }    .tg-df-modal-title {      font-size: 16px;      font-weight: 600;      margin: 0;    }    .tg-df-modal-close {      background: none;      border: none;      cursor: pointer;      padding: 4px;      color: #64748b;    }    .tg-df-modal-body {      padding: 16px;      overflow-y: auto;    }    .tg-df-voucher-item {      padding: 12px;      border: 1px dashed #cbd5e1;      border-radius: 8px;      margin-bottom: 10px;      background: #f8fafc;      display: flex;      align-items: center;      gap: 12px;      text-decoration: none;      color: inherit;      transition: background-color 0.2s, border-color 0.2s;    }    .tg-df-voucher-item:hover {      background: #f1f5f9;      border-color: #94a3b8;    }    .tg-df-voucher-item:last-child {      margin-bottom: 0;    }    .tg-df-voucher-logo {      width: 48px;      height: 48px;      object-fit: contain;      border-radius: 4px;      background: #fff;      border: 1px solid #e2e8f0;      flex-shrink: 0;    }    .tg-df-voucher-content {      flex: 1;      min-width: 0;    }    .tg-df-voucher-title {      font-size: 14px;      font-weight: 600;      margin: 0 0 4px 0;      line-height: 1.3;      color: #0f172a;    }    .tg-df-voucher-expiry {      font-size: 12px;      color: #64748b;      display: flex;      align-items: center;      gap: 4px;      margin-top: 6px;    }    .tg-df-voucher-code {      display: inline-flex;      align-items: center;      background: #f1f5f9;      border: 1px dashed #cbd5e1;      padding: 6px 10px;      font-family: monospace;      font-weight: 700;      font-size: 14px;      color: #0f172a;      border-radius: 4px;      margin-top: 8px;      cursor: pointer;      transition: all 0.2s ease;    }    .tg-df-voucher-code:hover {      background: #e2e8f0;      border-color: #94a3b8;    }    .tg-df-voucher-code.copied {      background: #ecfdf5;      border-color: #10b981;      color: #10b981;    }    .tg-df-voucher-cta {      display: inline-block;      margin-top: 8px;      font-size: 13px;      font-weight: 600;      color: #2563eb;      text-decoration: none;    }    .tg-df-card-title {      font-size: 15px;      font-weight: 400;      line-height: 1.4;      margin: 0 0 12px 0;      color: var(--tg-df-text);      display: -webkit-box;      -webkit-line-clamp: 2;      -webkit-box-orient: vertical;      overflow: hidden;    }    .tg-df-card-footer {      margin-top: auto;      display: flex;      flex-direction: column;      width: 100%;    }    .tg-df-card-price-group {      display: flex;      flex-direction: row;      align-items: center;      gap: 8px;      margin-bottom: 12px;    }    .tg-df-card-price {      font-size: 16px;      font-weight: 700;      color: #dc2626; /* Red price */      line-height: 1;    }        .tg-df-card-msrp {      font-size: 13px;      color: var(--tg-df-text-muted);      text-decoration: line-through;    }    .tg-df-container .tg-df-card-cta {      display: flex;      align-items: center;      justify-content: center;      width: 100%;      box-sizing: border-box;      background-color: #1f69ff;      color: #ffffff;      font-size: 12px;      font-weight: 700;      text-transform: uppercase;      letter-spacing: 0.5px;      padding: 12px 16px;      border-radius: 0;      border: none;      cursor: pointer;      transition: background-color 0.2s ease;    }    .tg-df-card:hover .tg-df-card-cta,    .tg-df-card-cta:hover {      background-color: #1555cc;    }    .tg-df-container .tg-df-card-cta.tg-df-cta-savings-squad {      background-color: #3c8d0d;    }    .tg-df-card:hover .tg-df-card-cta.tg-df-cta-savings-squad,    .tg-df-card-cta.tg-df-cta-savings-squad:hover {      background-color: #2b6509;    }    /*       5. State & Skeleton Styles    */    .tg-df-message {      grid-column: 1 / -1;      text-align: center;      padding: 48px 24px;      color: var(--tg-df-text-muted);      font-size: 16px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;    }    @keyframes tg-df-shimmer {      0% { background-position: -200% 0; }      100% { background-position: 200% 0; }    }    .tg-df-skeleton {      background: linear-gradient(90deg, var(--tg-df-bg-secondary) 25%, #e2e8f0 50%, var(--tg-df-bg-secondary) 75%);      background-size: 200% 100%;      animation: tg-df-shimmer 1.5s infinite;      border-radius: 4px;    }    .tg-df-skeleton-img {      width: 100%;      height: 100%;      position: absolute;      top: 0; left: 0;    }        .tg-df-skeleton-text {      height: 16px;      margin-bottom: 8px;      width: 100%;    }    .tg-df-skeleton-text.short { width: 40%; }    .tg-df-skeleton-text.title { height: 20px; margin-bottom: 16px; }    /* Editor Floating Bar & Elements */    .tg-df-editor-bar {      position: sticky;      top: 0;      z-index: 1000;      background: #111827;      color: #fff;      padding: 12px 16px;      border-radius: 8px;      margin-bottom: 16px;      display: flex;      align-items: center;      justify-content: space-between;      box-shadow: 0 4px 12px rgba(0,0,0,0.15);    }    .tg-df-editor-bar-text {      font-weight: 600;      font-size: 14px;    }    .tg-df-editor-copy-btn {      background: #10b981;      color: #fff;      padding: 6px 16px;      border: none;      border-radius: 4px;      font-weight: 600;      cursor: pointer;      display: flex;      align-items: center;      font-size: 13px;    }    .tg-df-editor-copy-btn:hover { background: #059669; }        .tg-df-deal-checkbox {      position: absolute;      top: 12px;      right: 12px;      z-index: 10;      width: 20px;      height: 20px;      cursor: pointer;      pointer-events: auto;    }    /*       6. Mobile List View (Stacks into a cleaner horizontal row/list)    */    @container tg-df (max-width: 599px) {      .tg-df-controls {        padding: 0 16px;      }            .tg-df-top-bar {        width: 100%;      }            .tg-df-settings-dropdown {        position: fixed;        top: auto;        bottom: 0;        left: 0;        right: 0;        width: 100%;        border-radius: 20px 20px 0 0;        padding: 24px;        box-shadow: 0 -8px 32px rgba(0,0,0,0.15);        z-index: 1000;        border: none;        border-top: 1px solid var(--tg-df-border);      }            .tg-df-settings-dropdown-backdrop.active {        background: rgba(0,0,0,0.4);      }            .tg-df-search-wrapper {        box-shadow: 0 0 16px rgba(0,0,0,0.08);      }            .tg-df-filters {        width: calc(100% + 32px);        margin: 0 -16px;        padding: 0 16px 4px 16px;        display: flex;        justify-content: flex-start;        gap: 8px;        flex-wrap: nowrap;        overflow-x: auto;        -webkit-overflow-scrolling: touch;        scrollbar-width: none;      }      .tg-df-filters::after {        content: "";        display: block;        flex: 0 0 8px;      }      .tg-df-filters::-webkit-scrollbar {        display: none;      }            .tg-df-sort-wrapper {        flex: 0 0 max(42%, 130px);        min-width: 0;      }      .tg-df-sort-wrapper.tg-df-price-range-wrapper {        flex: 0 0 auto;        min-width: max-content;      }            .tg-df-sort-select, .tg-df-filter-select {        width: 100%;        text-align: left;        padding: 10px 24px 10px 32px;        background-position: right 8px center;        text-overflow: ellipsis;        white-space: nowrap;        overflow: hidden;      }      .tg-df-sort-icon {        left: 10px;      }      .tg-df-grid:not(.layout-grid):not(.layout-row),      .tg-df-grid.layout-row {        grid-template-columns: 1fr;        gap: 16px;      }            .tg-df-grid.tg-df-grid-auto {        padding-top: 24px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card,      .tg-df-grid.layout-row .tg-df-card {        flex-direction: row;        align-items: stretch;        height: auto;        box-shadow: none; /* simple line on mobile if preferred, or keep */        border-bottom: 1px solid var(--tg-df-border);      }      .tg-df-grid.tg-df-grid-auto .tg-df-card:hover,      .tg-df-grid.layout-row .tg-df-card:hover {        box-shadow: none;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-image-box,      .tg-df-grid.layout-row .tg-df-card-image-box {        width: 120px;        min-width: 120px;        aspect-ratio: 3/4;        border-right: none;        padding: 12px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-body,      .tg-df-grid.layout-row .tg-df-card-body {        padding: 12px;        justify-content: space-between;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-title,      .tg-df-grid.layout-row .tg-df-card-title {        font-size: 14px;        margin-bottom: 12px;        -webkit-line-clamp: 3;      }      /* Single column mobile grid override */      .tg-df-grid.layout-grid {        grid-template-columns: 1fr;        gap: 16px;      }      .tg-df-grid.layout-grid .tg-df-card-image-box {        padding: 12px;      }      .tg-df-grid.layout-grid .tg-df-card-body {        padding: 10px;      }      .tg-df-grid.layout-grid .tg-df-card-title {        font-size: 13px;        -webkit-line-clamp: 3;        margin-bottom: 8px;      }      .tg-df-grid.layout-grid .tg-df-card-price {        font-size: 14px;      }            .tg-df-card-footer {        flex-direction: column;        align-items: stretch;        gap: 0;        width: 100%;        min-width: 0;      }      .tg-df-card-merchant-pill {        margin-bottom: 4px;      }      .tg-df-card-price-group {        flex: 1 1 auto;        margin-bottom: 8px;      }      .tg-df-card-price {        font-size: 16px;      }      .tg-df-card-msrp {        display: block;       }      .tg-df-grid.layout-row .tg-df-card-cta,      .tg-df-container .tg-df-card-cta {        width: 100%;        max-width: none;        min-width: 0;        box-sizing: border-box;        padding: 8px 16px;        font-size: 12px;        flex: 0 0 auto;        text-align: center;        white-space: normal;        line-height: 1.2;      }    }    .tg-df-container.is-carousel {      min-height: 760px;      background-color: #E7F0FF;      padding: 0 0 24px 0;      border-radius: 24px;    }    .tg-df-container.is-carousel.hide-header-details {      min-height: 480px;    }    /*       7. Carousel View Mode    */    .tg-df-container .tg-df-carousel-host {      /* Layout is now handled by container wrapper */    }    .tg-df-container .tg-df-carousel-eyebrow {      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      padding: 24px 16px 0 16px;      display: none;    }    .tg-df-container .tg-df-carousel-query-title {      color: #011535;      font-size: 28px;      font-weight: 600;      padding: 0 16px 24px 16px;      line-height: 1.2;      display: none;    }    .tg-df-container .tg-df-carousel-blue-box {      background-color: transparent;      border-radius: 0;      padding: 24px 24px 0 24px;      margin: 0;      color: #1F69FF;          position: relative;      overflow: hidden;    }    .tg-df-container .tg-df-carousel-bg-circle-1 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-2 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-3 {      display: none;    }    .tg-df-container .tg-df-carousel-box-content {      position: relative;      z-index: 10;    }    .tg-df-container .tg-df-carousel-box-eyebrow {      background-color: transparent;      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      display: inline-block;      padding: 0;      border-radius: 0;    }    .tg-df-container .tg-df-carousel-box-title {      font-size: 28px;      font-weight: 600;      line-height: 1.2;      margin-top: 8px;      color: #1e293b;    }    .tg-df-container .tg-df-countdown-wrapper {      position: absolute;      top: 0;      right: 0;      display: flex;      flex-direction: column;      align-items: flex-end;      gap: 12px;      transform: scale(0.67);      transform-origin: top right;    }    .tg-df-container .tg-df-countdown-title {      font-size: 16px;      text-align: center;      width: 100%;      font-weight: 600;      color: #011535;      margin: 0;    }    .tg-df-container .tg-df-countdown-blocks {      display: flex;      gap: 16px;    }    .tg-df-container .tg-df-countdown-item {      display: flex;      flex-direction: column;      align-items: center;      gap: 4px;    }    .tg-df-container .tg-df-countdown-box {      width: 59px;      height: 59px;      background: #03FE9E;      border-radius: 15px;      display: flex;      align-items: center;      justify-content: center;    }    .tg-df-container .tg-df-countdown-num {      font-family: 'Inter', sans-serif;      font-weight: 700;      font-size: 20px;      line-height: normal;      color: #011535;    }    .tg-df-container .tg-df-countdown-label {      font-family: 'Inter', sans-serif;      font-weight: 500;      font-size: 16px;      line-height: normal;      color: #1e293b;      text-transform: uppercase;    }    .tg-df-container .tg-df-carousel-box-subtitle {      font-size: 16px;      margin-top: 8px;      font-weight: 300;      color: #1e293b;      line-height: 24px;    }    .tg-df-container .tg-df-carousel-roundels-wrapper {      position: relative;      margin-top: 24px;      margin-left: -24px;      margin-right: -24px;    }    .tg-df-container .tg-df-carousel-roundels {      display: flex;      gap: 16px;      overflow-x: auto;            scrollbar-width: none;      padding-top: 12px;      padding-bottom: 24px;      padding-left: 24px;      padding-right: 24px;      margin-left: 0;      margin-right: 0;    }        .tg-df-container .tg-df-carousel-scroll-left,    .tg-df-container .tg-df-carousel-scroll-right {      position: absolute;      top: 50%;      transform: translateY(-50%);      height: 36px;      width: 36px;      display: flex;      align-items: center;      justify-content: center;      border-radius: 50%;      background-color: #ffffff;      border: 1px solid #e2e8f0;      box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);      color: #1F69FF;      cursor: pointer;      transition: all 0.2s;      margin-top: -4px;      z-index: 20;    }    .tg-df-container .tg-df-carousel-scroll-left { left: 8px; }    .tg-df-container .tg-df-carousel-scroll-right { right: 8px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left { left: 0px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right { right: 0px; }    .tg-df-carousel-filters-outer { margin-left: -24px; margin-right: -24px; padding-left: 24px; padding-right: 24px; }    @container tg-df (max-width: 599px) { .tg-df-carousel-filters-outer { margin-left: -16px; margin-right: -16px; padding-left: 16px; padding-right: 16px; } }        .tg-df-container .tg-df-carousel-scroll-left:hover,    .tg-df-container .tg-df-carousel-scroll-right:hover {      background-color: #f8fafc;      border-color: #cbd5e1;    }        .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-left,    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right,    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left,    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right {      background-color: rgba(255, 255, 255, 0.4);      border: none;      box-shadow: none;      backdrop-filter: blur(4px);      -webkit-backdrop-filter: blur(4px);    }    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-left { left: 0; }    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right { right: 0; }    .tg-df-grid-wrapper .tg-df-carousel-scroll-left { left: 0; }    .tg-df-grid-wrapper .tg-df-carousel-scroll-right { right: 0; }        .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-left:hover,    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right:hover {      background-color: rgba(255, 255, 255, 0.6);      border: none;    }    .tg-df-container .tg-df-carousel-roundels::-webkit-scrollbar {      display: none;    }    .tg-df-container .tg-df-carousel-roundels::after {      content: "";      flex: 0 0 32px;    }    .tg-df-container .tg-df-roundel {      display: flex;      flex-direction: column;      align-items: center;      gap: 8px;      cursor: pointer;      min-width: 120px;      flex-shrink: 0;    }    .tg-df-container .tg-df-roundel-img-box {      width: 120px;      height: 120px;      border-radius: 50%;      background: white;      display: flex;      align-items: center;      justify-content: center;      overflow: hidden;      box-shadow: 0px 3px 14px 0px rgba(30, 41, 59, 0.08);      transition: box-shadow 0.2s;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box img {      transform: scale(1.08);    }    .tg-df-container .tg-df-roundel-img-box img {      width: 100%;      height: 100%;      object-fit: contain;      padding: 10px;      box-sizing: border-box;      transition: transform 0.3s ease;    }    .tg-df-container .tg-df-roundel-label {      font-size: 13px;      font-weight: 400;      color: #1e293b;      text-align: center;      transition: font-weight 0.2s;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-label {      font-weight: 700;    }    .tg-df-container .tg-df-carousel-filters-label {      font-size: 16px;      font-weight: 400;      color: #1e293b;      white-space: nowrap;      margin-right: 4px;    }    .tg-df-container .tg-df-carousel-filters-wrap {      display: flex;      align-items: center;      flex-wrap: nowrap;      gap: 8px;      margin-top: 8px;      overflow-x: auto;      scrollbar-width: none;      -webkit-overflow-scrolling: touch;      padding-bottom: 8px;      margin-left: -24px;      margin-right: -24px;      padding-left: 24px;      padding-right: 24px;    }    .tg-df-container .tg-df-carousel-filters-wrap::-webkit-scrollbar {      display: none;    }        .tg-df-container .tg-df-carousel-filter-btn img,    .tg-df-container .tg-df-carousel-filter-btn picture {      height: 20px;      width: 20px;      object-fit: contain;      object-position: center;      display: inline-flex;      align-items: center;      justify-content: center;      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn picture img {      margin-right: 0;      height: 100%;      width: 100%;    }    .tg-df-container .tg-df-carousel-filter-btn img.active-img,    .tg-df-container .tg-df-carousel-filter-btn picture:has(.active-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.inactive-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.inactive-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.active-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.active-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.active-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.active-img) {      display: inline-flex;    }    .tg-df-container .tg-df-carousel-filter-btn {      background: #ffffff;      border: 2px solid #1e293b;      color: #1e293b;      border-radius: 24px;      padding: 6px 16px;      font-size: 14px;      font-weight: 600;      cursor: pointer;      transition: all 0.2s;      flex-shrink: 0;      white-space: nowrap;      display: inline-flex;      align-items: center;      justify-content: center;      min-height: 36px;      box-sizing: border-box;    }    .tg-df-container .tg-df-carousel-filter-btn svg {      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn:hover {      background: #1e293b;      color: white;      border-color: #1e293b;    }    .tg-df-container .tg-df-carousel-filter-btn.active {      background: #1e293b;      color: white;      border-color: #1e293b;    }        .tg-df-grid.carousel-compact {      display: flex;      flex-wrap: nowrap;      overflow-x: auto;      gap: 16px;      padding: 16px 24px;      align-items: stretch;      scrollbar-width: none;    }    .tg-df-grid.carousel-compact::after {      content: "";      flex: 0 0 32px;    }    .tg-df-grid-wrapper {      position: relative;    }    .tg-df-grid.carousel-compact::-webkit-scrollbar {      display: none;    }    .tg-df-grid.carousel-compact .tg-df-load-more-card {      flex: 0 0 auto;      width: 100px;      border-radius: 15px;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      border: 2px solid #1e293b;      background: white;      color: #1e293b;      display: flex;      flex-direction: column;      justify-content: center;      align-items: center;      font-weight: 600;      font-size: 14px;      cursor: pointer;      padding: 16px;      text-align: center;      transition: all 0.2s;    }    .tg-df-grid.carousel-compact .tg-df-load-more-card:hover {      background: #1e293b;      color: white;    }    .tg-df-grid.carousel-compact .tg-df-card {      flex: 0 0 auto;      width: 200px;      min-height: auto;      height: auto;      display: flex;      flex-direction: column;      border-radius: 15px;      border: none;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      overflow: visible;    }    .tg-df-grid.carousel-compact .tg-df-card-image-box {      padding: 12px;      background-color: transparent;      border-radius: 15px 15px 0 0;      height: 130px;    }    .tg-df-grid.carousel-compact .tg-df-card-image {      mix-blend-mode: normal;    }    .tg-df-grid.carousel-compact .tg-df-card-discount-badge {      border-radius: 0;      top: 0px;      left: 0px;      padding: 4px 8px;      font-size: 11px;    }    .tg-df-grid.carousel-compact .tg-df-card-body {      padding: 8px 12px 12px 12px;    }    .tg-df-grid.carousel-compact .tg-df-card-title {      font-size: 14px;      font-weight: 400;      -webkit-line-clamp: 2;      margin-bottom: 8px;      color: #011535;    }    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):not(:has(.tg-df-tag-prime)):not(:has(.tg-df-coupon-wrapper:not([style*="none"]))) > .tg-df-card-title,    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):has(> .tg-df-card-title:first-child) > .tg-df-card-title {      -webkit-line-clamp: 3;    }    .tg-df-grid.carousel-compact .tg-df-card-cta {      border-radius: 5px;      padding: 8px 10px;      margin-top: 4px;      background-color: #1F69FF;    }    .tg-df-grid.carousel-compact .tg-df-card-price-group {      margin-bottom: 2px;    }    .tg-df-grid.carousel-compact .tg-df-card-merchant-pill {      margin-bottom: 2px;    }    @container tg-df (max-width: 599px) {      .tg-df-container .tg-df-carousel-blue-box-title {        font-size: 24px;      }      .tg-df-container .tg-df-countdown-title {        display: none;      }      .tg-df-container .tg-df-countdown-wrapper {        position: absolute;        top: 0;        right: 0;        align-items: flex-end;        transform: scale(0.45);        transform-origin: top right;      }      .tg-df-container .tg-df-roundel {        min-width: 88px;      }      .tg-df-container .tg-df-roundel-img-box {        width: 88px;        height: 88px;      }    }    /* REPLICA BLOCK STYLES */    .tg-df-grid.layout-replica-2 { grid-template-columns: repeat(2, 1fr) !important; gap: 20px; }    .tg-df-grid.layout-replica-1 { grid-template-columns: 1fr !important; gap: 20px; }        .tg-df-container .hawk-deal-widget-container { border-bottom: 1px solid #e5e7eb; display: flex; flex-direction: column; margin: 0; padding: 20px 0; box-sizing: border-box; font-family: inherit; }    .tg-df-container .hawk-deal-widget-wrap { display: flex; flex-direction: row; align-items: flex-start; width: 100%; gap: 24px; }    .tg-df-container .hawk-deal-widget-image-container { display: flex; flex-shrink: 0; justify-content: center; width: 160px; height: 160px; align-items: center; background: white; margin-bottom: 0px; }    .tg-df-container .hawk-deal-widget-title-product-title { color: #111827; font-size: 18px; font-weight: 700; line-height: 1.4; display: inline; }    .tg-df-container .hawk-deal-widget-title-price { font-size: 18px; font-weight: 700; line-height: 1.4; white-space: nowrap; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-price-now { font-weight: 700; }    .tg-df-container .hawk-deal-widget-title-retailer-price:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-title-retailer { font-size: 18px; font-weight: 700; line-height: 1.4; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-was-price { color: #dc2626; font-size: 16px; font-weight: 500; line-height: 1.4; text-decoration: line-through; white-space: nowrap; margin-left: 8px; margin-right: 8px; }    .tg-df-container .hawk-deal-widget-text-body-container { position: relative; width: 100%; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-text-body-main { font-size: 16px; width: 100%; margin-bottom: 12px; }    .tg-df-container .hawk-deal-widget-text-body-description { display: block; font-size: 15px; margin-top: 12px; color: #4b5563; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-body-description p { margin: 0; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-cta-container { display: flex; flex-direction: column; gap: 12px; width: 100%; flex: 1; min-width: 0; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-footer { display: flex; justify-content: flex-end; width: 100%; margin-top: auto; }    .tg-df-container .hawk-deal-widget-button-wrapper { display: flex; flex-direction: column; align-items: flex-end; justify-content: flex-end; width: 100%; }    .tg-df-container .hawk-deal-widget-preferred-partner-wrapper { display: flex; flex-direction: row; }        @container tg-df (min-width: 600px) {      .tg-df-mobile-only { display: none !important; }    }    @container tg-df (max-width: 599px) {      .tg-df-desktop-only { display: none !important; }      .tg-df-grid.layout-replica-2 { grid-template-columns: 1fr !important; }      .tg-df-grid.savings-squad-cards { grid-template-columns: 1fr !important; display: flex; flex-direction: column; }    }    .tg-df-grid.savings-squad-cards .tg-df-card-title {      -webkit-line-clamp: unset !important;      display: block !important;      overflow: visible !important;    }    @container tg-df (max-width: 500px) {      .tg-df-container .hawk-deal-widget-wrap { display: block; }      .tg-df-container .hawk-deal-widget-image-container { display: block; float: left; margin: 0 16px 8px 0; width: 120px; max-width: 120px; height: auto; align-items: normal; justify-content: normal; }      .tg-df-container .hawk-deal-widget-text-cta-container { display: block; text-align: left; }      .tg-df-container .hawk-deal-widget-footer { display: block; margin-top: 16px; clear: both; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper .hawk-deal-widget-preferred-partner-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-affiliate-link-deal-button { box-sizing: border-box !important; display: flex !important; max-width: none !important; width: 100% !important; margin: 0 !important; }    }        .tg-df-container .hawk-affiliate-link-deal-button {       align-items: center; background-color: #5aaf0b; box-sizing: border-box; color: #ffffff !important; display: flex; font-size: 14px; font-weight: 700; justify-content: center; letter-spacing: 0.5px; line-height: 1; min-width: 160px; padding: 14px 24px; text-align: center; text-decoration: none; text-transform: uppercase; width: 100%; word-break: normal; border-radius: 4px; border: 0; transition: background-color 0.2s;     }    .tg-df-container .hawk-affiliate-link-deal-button:hover { background-color: #4a9109; text-decoration: none; }    .tg-df-container .hawk-lazy-image-deal-widget { display: block; height: auto; margin: auto; max-height: 160px; max-width: 100%; mix-blend-mode: multiply; object-fit: contain; }    .tg-df-container .hawk-deal-widget-text-cta-container a { color: #2563eb; text-decoration: none; display: inline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:has(.hawk-deal-widget-title-product-title) { color: #111827; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-product-title,    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-retailer-price { text-decoration: underline; }  \x3C/style>  \x3C!-- Widget Container --\x3E  \x3Cdiv class="tg-df-container" id="signal-deals-finder-root">    \x3C!-- Editor Floating Bar --\x3E    \x3Cdiv class="tg-df-editor-bar" id="tg-df-editor-bar" style="display:none;">      \x3Cdiv class="tg-df-editor-bar-text" style="display: flex; align-items: center;">        \x3Cspan id="tg-df-selected-count">0\x3C/span>\x26nbsp;Deals Selected        \x3Cbutton class="tg-df-editor-clear-btn" id="tg-df-editor-clear" type="button" style="margin-left: 12px; font-size: 13px; color: #9ca3af; background: none; border: none; cursor: pointer; text-decoration: underline;">Clear All\x3C/button>      \x3C/div>      \x3Cbutton class="tg-df-editor-copy-btn" id="tg-df-editor-copy" type="button">        \x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">\x3C/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">\x3C/path>\x3C/svg>        Copy to CMS      \x3C/button>    \x3C/div>    \x3Cdiv class="tg-df-carousel-host" id="tg-df-carousel-host" style="display: none;">      \x3Cdiv class="tg-df-carousel-eyebrow">DEAL FINDER\x3C/div>      \x3Cdiv class="tg-df-carousel-query-title" id="tg-df-carousel-title-label">Best Deals\x3C/div>            \x3Cdiv class="tg-df-carousel-blue-box">        \x3Cdiv class="tg-df-carousel-bg-circle-1" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-2" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-3" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-box-content">          \x3Cdiv class="tg-df-countdown-wrapper" id="tg-df-countdown-wrapper" style="display:none;">            \x3Cdiv class="tg-df-countdown-title" id="tg-df-countdown-title">Prime Day starts in\x3C/div>            \x3Cdiv class="tg-df-countdown-blocks">              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-days">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">DAYS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-hrs">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">HRS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-min">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">MIN\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-sec">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">SEC\x3C/div>\x3C/div>            \x3C/div>          \x3C/div>          \x3Cdiv class="tg-df-carousel-box-eyebrow">DEAL FINDER\x3C/div>          \x3Cdiv class="tg-df-carousel-box-title">Find Deals Fast\x3C/div>          \x3Cdiv class="tg-df-carousel-box-subtitle">The latest deals from the biggest retailers, all in one place\x3C/div>                    \x3Cdiv class="tg-df-carousel-roundels-wrapper">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-roundels">            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>          \x3C/div>          \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-carousel-filters-outer" style="position: relative;">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-filters-wrap">                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="0">All\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_lightning">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_prime">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-d="10">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 10% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="15">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 15% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="25">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 25% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-pr="under50">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>            Under $50\x3C/button>        \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3C/div>    \x3C/div>    \x3C/div>      \x3C!-- Search & Filter Controls --\x3E    \x3Cdiv class="tg-df-controls" id="tg-df-controls" style="display:flex;">      \x3Cdiv class="tg-df-top-bar">        \x3Cdiv class="tg-df-search-wrapper">          \x3Cinput type="text" class="tg-df-search-input" placeholder="Search for deals, products, or brands...">          \x3Cbutton type="button" class="tg-df-search-btn" aria-label="Search">              \x3Csvg class="tg-df-search-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">                \x3Cpath d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/>              \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-autocomplete-dropdown" id="tg-df-autocomplete">\x3C/div>        \x3C/div>                \x3Cdiv class="tg-df-settings-wrapper">          \x3Cbutton type="button" class="tg-df-settings-btn" aria-label="Settings" id="tg-df-settings-toggle">            \x3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20">                \x3Cpath d="M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.06-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.73 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.06.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .43-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.49-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z"/>            \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-settings-dropdown-backdrop" id="tg-df-settings-backdrop">\x3C/div>          \x3Cdiv class="tg-df-settings-dropdown" id="tg-df-settings-panel">            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Search Region\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-region-select">                \x3Coption value="auto">🌍 Auto-detect\x3C/option>                \x3Coption value="US">🇺🇸 United States (US)\x3C/option>                \x3Coption value="GB">🇬🇧 United Kingdom (UK)\x3C/option>                \x3Coption value="CA">🇨🇦 Canada (CA)\x3C/option>                \x3Coption value="AU">🇦🇺 Australia (AU)\x3C/option>                \x3Coption value="DE">🇩🇪 Germany (DE)\x3C/option>                \x3Coption value="FR">🇫🇷 France (FR)\x3C/option>                \x3Coption value="IT">🇮🇹 Italy (IT)\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Retailer\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-retailer-select">                \x3Coption value="">All Retailers\x3C/option>                \x3Coption value="Amazon">Amazon\x3C/option>                \x3Coption value="Walmart">Walmart\x3C/option>                \x3Coption value="Best Buy">Best Buy\x3C/option>                \x3Coption value="Target">Target\x3C/option>                \x3Coption value="John Lewis">John Lewis\x3C/option>                \x3Coption value="Currys">Currys\x3C/option>                \x3Coption value="Argos">Argos\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Offer Type\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-offer-type-select">                \x3Coption value="">All Offers\x3C/option>                \x3Coption value="amazon_prime">Amazon Prime\x3C/option>                \x3Coption value="recommended_promo">Recommended Promo\x3C/option>                \x3Coption value="amazon_lightning">Amazon Lightning Deal\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Result Count\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-rows-select">                \x3Coption value="3">3 Items\x3C/option>                \x3Coption value="4">4 Items\x3C/option>                \x3Coption value="6">6 Items\x3C/option>                \x3Coption value="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[ iPhone Duo Geekbench scores leak, and Apple's foldable is about to leave Android rivals in the dust ]]></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>'s <a href="https://www.tomsguide.com/phones/iphones/planning-to-buy-apples-foldable-iphone-duo-heres-how-to-get-one-on-launch-day">full release is coming next week</a>, on October 23, but early benchmark testing has already been posted online. Tom's Guide will bring you a full review in due course, but this early indicator is that the Duo will leave other foldables in the dust.</p><p>The tested iPhone Duo (listed as <a href="https://browser.geekbench.com/v7/cpu/630904" target="_blank">iPhone19,4 on Geekbench</a>) was running iOS 27.1 and posted a single-core score of 3,986 and a multi-core score of 11,067. As you'd expect, that's on par with the scores from the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-and-pro-max-review#section-iphone-18-pro-and-pro-max-performance-fastest-phones-ever">iPhone 18 Pro and iPhone 18 Pro Max,</a> which also carry 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</a>.</p><p>Our own testing of those two devices returned a Geekbench score of 4,022 / 11,543 for the 18 Pro and 4,025 / 11,525 for the Pro Max. </p><p>So, while this particular iPhone Duo falls short of Apple's non-folding phones, it's not a definitive result. Wait for our full lab-tested Duo benchmarking results to be sure.</p><p>Here's how these leaked Duo results square up against not just the 18 Pro and Pro Max, but also our lab-tested results for its main foldable rival: 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 <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Z Fold 8 Ultra</a>: </p><div ><table><caption>iPhone Duo leaked benchmark comparison (Geekbench 7)</caption><thead><tr><th class="firstcol empty" ></th><th  ><p>Single Core</p></th><th  ><p>Multicore</p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Apple iPhone Duo (leak)</strong></p></td><td  ><p>2,986</p></td><td  ><p>11,067</p></td></tr><tr><td class="firstcol " ><p><strong>Apple iPhone 18 Pro</strong></p></td><td  ><p>3,301</p></td><td  ><p>8,033</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 18 Pro Max </strong></p></td><td  ><p>2,916</p></td><td  ><p>9,886</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8</strong></p></td><td  ><p>2,978</p></td><td  ><p>9,811</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8 Ultra</strong> </p></td><td  ><p>3,110</p></td><td  ><p>10,578</p></td></tr></tbody></table></div><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-W2EK0e"></div>                            </div>                            <script src="https://kwizly.com/embed/W2EK0e.js" async></script><p>Our final scores are <a href="https://www.tomsguide.com/reference/how-toms-guide-tests-and-reviews-smartphones">averaged out from multiple tests</a>, but even so, you can see the leaked iPhone Duo results comfortably beat out Samsung's foldables. We'll know for sure once we've tested it in kind, but the iPhone Duo looks set to become the most powerful foldable you can buy — and then some.</p><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="RsYRJ4jj6VnFyLhyc7BZjf" name="iPhone Duo vs Galaxy Z Fold 8 LIST3" alt="iPhone Duo and Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/RsYRJ4jj6VnFyLhyc7BZjf-1920-80.png" 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: Apple/Tom's Guide)</span></figcaption></figure><p>The A20 Pro inside the Duo is backed by 12GB of RAM and Apple's new 2nm chip packs a CPU with two super cores that are up to 20% faster and four efficiency cores. Apple has also designed it so the memory is located next to the SoC instead of on top, which results in better heat dissipation. Like the iPhone 18 Pro and Pro Max, the Duo also features a vapor chamber for thermal management.</p><p>It's true the iPhone Duo's high price tag is going to make it a non-starter for most people and <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-trade-offs">there are some trade-offs to be aware of.</a> But judging by these early (and unconfirmed) results, power isn't going to be one of 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/iphone-duo-heres-why-an-iphone-18-pro-max-and-macbook-neo-combo-is-the-better-buy">iPhone Duo: Here’s why an iPhone 18 Pro Max and MacBook Neo combo is the better buy</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-edge-first-impressions-5-reasons-to-buy-and-2-reasons-to-skip-googles-new-fitness-tracker">Fitbit Edge first impressions: 5 reasons to buy (and 2 reasons to skip) Google's new fitness tracker</a></li><li><a href="https://www.tomsguide.com/phones/iphones/apple-increases-iphone-duo-production-by-30-percent-heres-what-that-means-for-you">Apple increases iPhone Duo production by 30% — here's what that means for you</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/iphone-duo-benchmark-leaks-and-apples-foldable-is-about-to-leave-android-rivals-in-the-dust</link>
                                                                            <description>
                            <![CDATA[ A Geekbench 7 score for the iPhone Duo has been posted online and the results are impressive. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">vniEAis5Qps5brxpyTrz9D</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/DDcGvYcqQtgaTHXB9oD9Gc-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 15 Oct 2026 09:40:21 +0000</pubDate>                                                                                                                                <updated>Thu, 15 Oct 2026 11:13:56 +0000</updated>
                                                                                                                                            <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ jeff.parsons@futurenet.com (Jeff Parsons) ]]></author>                    <dc:creator><![CDATA[ Jeff Parsons ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/7z3UTGGrmSokMKxTWHmhjX-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Jeff is U.K. Editor-in-Chief for Tom’s Guide looking after the day-to-day output of the site’s British contingent. &lt;/p&gt;&lt;p&gt;Rising early and heading straight for the coffee machine, Jeff loves nothing more than dialling into the zeitgeist of the day’s tech news. A journalist for over a decade, he&#039;s travelled around the world testing and reviewing any gadget he can get his hands on.&lt;/p&gt;&lt;p&gt;Before joining the team at Tom’s Guide, Jeff covered technology and science for two of the U.K.’s biggest national news sites: Metro.co.uk and the Daily Mirror. Memorable moments include getting lost in Vienna in an electric Audi, touring Lockheed Martin’s mile-long jet factory in Fort Worth and filming a Netflix documentary about Elon Musk in West London.&lt;/p&gt;&lt;p&gt;When not plugged into the current news agenda, editing or commissioning a series of articles or debating the merits of Apple vs Android, Jeff can usually be found out for a run trying to shave precious seconds off his PB. Or lifting weights in a vain attempt to offset the ageing process.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/DDcGvYcqQtgaTHXB9oD9Gc-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPhone Duo hands on]]></media:description>                                                            <media:text><![CDATA[iPhone Duo hands on]]></media:text>
                                <media:title type="plain"><![CDATA[iPhone Duo hands on]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/DDcGvYcqQtgaTHXB9oD9Gc-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>'s <a href="https://www.tomsguide.com/phones/iphones/planning-to-buy-apples-foldable-iphone-duo-heres-how-to-get-one-on-launch-day">full release is coming next week</a>, on October 23, but early benchmark testing has already been posted online. Tom's Guide will bring you a full review in due course, but this early indicator is that the Duo will leave other foldables in the dust.</p><p>The tested iPhone Duo (listed as <a href="https://browser.geekbench.com/v7/cpu/630904" target="_blank">iPhone19,4 on Geekbench</a>) was running iOS 27.1 and posted a single-core score of 3,986 and a multi-core score of 11,067. As you'd expect, that's on par with the scores from the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-and-pro-max-review#section-iphone-18-pro-and-pro-max-performance-fastest-phones-ever">iPhone 18 Pro and iPhone 18 Pro Max,</a> which also carry 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</a>.</p><p>Our own testing of those two devices returned a Geekbench score of 4,022 / 11,543 for the 18 Pro and 4,025 / 11,525 for the Pro Max. </p><p>So, while this particular iPhone Duo falls short of Apple's non-folding phones, it's not a definitive result. Wait for our full lab-tested Duo benchmarking results to be sure.</p><p>Here's how these leaked Duo results square up against not just the 18 Pro and Pro Max, but also our lab-tested results for its main foldable rival: 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 <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-8-ultra-review">Z Fold 8 Ultra</a>: </p><div ><table><caption>iPhone Duo leaked benchmark comparison (Geekbench 7)</caption><thead><tr><th class="firstcol empty" ></th><th  ><p>Single Core</p></th><th  ><p>Multicore</p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Apple iPhone Duo (leak)</strong></p></td><td  ><p>2,986</p></td><td  ><p>11,067</p></td></tr><tr><td class="firstcol " ><p><strong>Apple iPhone 18 Pro</strong></p></td><td  ><p>3,301</p></td><td  ><p>8,033</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 18 Pro Max </strong></p></td><td  ><p>2,916</p></td><td  ><p>9,886</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8</strong></p></td><td  ><p>2,978</p></td><td  ><p>9,811</p></td></tr><tr><td class="firstcol " ><p><strong>Galaxy Z Fold 8 Ultra</strong> </p></td><td  ><p>3,110</p></td><td  ><p>10,578</p></td></tr></tbody></table></div><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-W2EK0e"></div>                            </div>                            <script src="https://kwizly.com/embed/W2EK0e.js" async></script><p>Our final scores are <a href="https://www.tomsguide.com/reference/how-toms-guide-tests-and-reviews-smartphones">averaged out from multiple tests</a>, but even so, you can see the leaked iPhone Duo results comfortably beat out Samsung's foldables. We'll know for sure once we've tested it in kind, but the iPhone Duo looks set to become the most powerful foldable you can buy — and then some.</p><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="RsYRJ4jj6VnFyLhyc7BZjf" name="iPhone Duo vs Galaxy Z Fold 8 LIST3" alt="iPhone Duo and Galaxy Z Fold 8" src="https://cdn.mos.cms.futurecdn.net/RsYRJ4jj6VnFyLhyc7BZjf-1920-80.png" 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: Apple/Tom's Guide)</span></figcaption></figure><p>The A20 Pro inside the Duo is backed by 12GB of RAM and Apple's new 2nm chip packs a CPU with two super cores that are up to 20% faster and four efficiency cores. Apple has also designed it so the memory is located next to the SoC instead of on top, which results in better heat dissipation. Like the iPhone 18 Pro and Pro Max, the Duo also features a vapor chamber for thermal management.</p><p>It's true the iPhone Duo's high price tag is going to make it a non-starter for most people and <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-trade-offs">there are some trade-offs to be aware of.</a> But judging by these early (and unconfirmed) results, power isn't going to be one of 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/iphone-duo-heres-why-an-iphone-18-pro-max-and-macbook-neo-combo-is-the-better-buy">iPhone Duo: Here’s why an iPhone 18 Pro Max and MacBook Neo combo is the better buy</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-edge-first-impressions-5-reasons-to-buy-and-2-reasons-to-skip-googles-new-fitness-tracker">Fitbit Edge first impressions: 5 reasons to buy (and 2 reasons to skip) Google's new fitness tracker</a></li><li><a href="https://www.tomsguide.com/phones/iphones/apple-increases-iphone-duo-production-by-30-percent-heres-what-that-means-for-you">Apple increases iPhone Duo production by 30% — here's what that means for you</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple increases iPhone Duo production by 30% — here's what that means for you ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The impending 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>is at the forefront of all our minds here at Tom's Guide, particularly the subject of whether we'll be able to score a pre-order and how long we're going to have to wait if we do. <a href="https://www.tomsguide.com/phones/iphones/planning-to-buy-apples-foldable-iphone-duo-heres-how-to-get-one-on-launch-day">Pre-orders open this Friday</a> (October 16) at 8 a.m. ET ahead of an official release on October 23. But when will those units actually arrive? </p><p>I'm still waiting on the<a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-and-pro-max-review"> iPhone 18 Pro Max</a> I ordered a month ago, and they were available in much greater numbers. So I shudder to think how long people are going to have to wait for their iPhone Duo orders to be delivered. </p><p>Projected demand for the iPhone Duo is high, and despite the high price tag analysts have been predicting shortages for months already. It's not hard to see why, when you consider the fact that Apple is only expected to ship a few million iPhone Duo units this year — compared to the tens of millions of non-folding iPhones. </p><p>The good news is, any projected shortages won't be lasting forever. Especially not now that Apple has reportedly increased its iPhone Duo orders by roughly 30%.</p><h2 id="more-duos-means-more-availability">More Duos means more availability</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4656px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Q9CmG4bSftigAEdPtH3Qqd" name="iPhone Duo-LIST1" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/Q9CmG4bSftigAEdPtH3Qqd-1920-80.jpg" mos="" align="middle" fullscreen="" width="4656" height="2619" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The <a href="https://stcn.com/article/detail/4211053.html" target="_blank">report</a> in question comes from the Securities Times in China, which claims that Apple is anticipating far higher demand for the iPhone Duo than previously expected. The report notes that previous estimates pointed towards 6 to 7 million units being produced this year, but now that figure is closer to 10 million. </p><p>This comes off the back of reports that Apple has reduced production targets for the iPhone 18 Pro by 10 to 15%, while simultaneously increasing iPhone 18 Pro Max production by the same amount. </p><p>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">10 million figure is not new</a>, and past reports have suggested Apple could have ordered anything from 7 to 10 million iPhone Duo units. However, we never got any real confirmation of that, and news that Apple could be increasing the future supply of its first foldable can only be a good thing for potential buyers.</p><p>Why? Because this means any short-term shortages of the iPhone Duo are likely to be temporary. Apple wants to get its foldable into as many willing hands as it can, and the more it produces, the easier that will inevitably be.</p><p>In other words, if you're struggling to get hold of the iPhone Duo at release, whether it's with an online pre-order or purchasing from a retail store, patience will be your best friend. Which also means you should absolutely not give in to FOMO and buy an overpriced iPhone Duo from a scalper.</p><h2 id="never-give-in-to-the-scalpers">Never give in to the scalpers</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2297px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="6RbxqgBQeRcLXmzyc9Sx6d" name="Apple iPhone Duo hands on" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/6RbxqgBQeRcLXmzyc9Sx6d-1920-80.jpg" mos="" align="middle" fullscreen="" width="2297" height="1292" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Scalpers are an unscrupulous lot, and they will happily take advantage of demand to try to make themselves a few extra bucks. We've seen major problems arise over the past couple of years, and it got particularly bad during the COVID-19 pandemic when consumer electronics were in short supply right as demand exploded.</p><p><a href="https://www.tomsguide.com/news/cant-find-ps5-stock-this-retailer-is-fighting-back-against-scalpers">PS5s were a popular target for scalpers</a> at the time, as were Nintendo Switches, Xboxes and graphics cards. More recently, there have been serious problems with scalpers targeting hobbies, notably <a href="https://www.theverge.com/games/1001002/pokemon-30th-celebration-scalping-resellers" target="_blank">Pokemon cards</a>, and any other product that could easily be flipped for a profit.</p><p>A high-profile release like the iPhone Duo is ripe for scalpers to try and take advantage. I can guarantee that, come Friday, sites like eBay will be flooded with listings offering fast access to the foldable for a price. Obviously you should not cave and give them what they want.</p><p>Buying from scalpers not only encourages them to keep doing what they're doing and to force the rest of us to pay even more for already-expensive products, but it's also unnecessary.</p><h2 id="supply-eventually-bounces-back">Supply eventually bounces back</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="DDcGvYcqQtgaTHXB9oD9Gc" name="iphone duo outlook" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/DDcGvYcqQtgaTHXB9oD9Gc-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>We have shipment delays every time Apple releases a new iPhone, with one particular model or color proving to be far more popular than Apple apparently anticipated. So those people with their heart set on that specific iPhone end up having to wait a little while longer. The ratio of supply and demand always equalizes, though, and those sought-after models inevitably stop being so elusive. </p><p>Sometimes it happens in a few weeks; for others it's a couple of months. The fact is that Apple is in the business of making money by selling as many iPhones as possible. Unlike some companies that seem to thrive on artificial scarcity, that's never really been part of Apple's playbook. The fact it's reportedly increased its iPhone Duo order is testament to that.</p><p>Plus, you have to remember that Apple offers a <a href="https://www.apple.com/shop/help/returns_refund" target="_blank" rel="nofollow">2-week return policy in the U.S</a>. This means scalpers can buy the iPhone Duo, safe in the knowledge that any unsold units can be returned for a full refund within 14 days of them receiving it. <a href="https://www.tomsguide.com/computing/vr-ar/apple-vision-pro-users-are-already-returning-their-headsets-heres-why">We saw that happen with the Apple Vision Pro</a>, both from scalpers and potential buyers that decided the $3,500 face computer wasn't for them.</p><p>That matters because unscalped units will be redistributed into the iPhone Duo supply chain, and sold to someone else — hopefully someone who actually wants to use it. This should also lead to a drop in wait times, but all of that will be for naught if people give the scalpers what they want.</p><h2 id="how-to-secure-your-iphone-duo-pre-order">How to secure your iPhone Duo pre-order</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Koa6PphHPjMtuUK4hZGsAc" name="iphone duo software" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/Koa6PphHPjMtuUK4hZGsAc-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>iPhone Duo pre-orders open on Friday, October 16 at 5 a.m. PT / 8 a.m. ET / 1 p.m. BST, and that will be your first opportunity to secure an Apple foldable for yourself. Obviously, everyone who wants a Duo will have the same idea, and will be flocking to the Apple website to try and grab one for themselves — and right now there's no way of knowing how hectic the process is going to be.</p><p>The good news is that <a href="https://www.tomsguide.com/phones/iphones/want-the-iphone-duo-without-the-wait-heres-how-to-prep-your-pre-order-ahead-of-time">Apple is already letting customers prepare their pre-orders ahead of time</a>. This doesn't guarantee you an iPhone Duo, but it does let you get through the bulk of the pre-ordering process in advance. That means confirming the configuration you want, which carrier you need to sign up for, and ensuring any financial checks that need to take place are all approved and finalized before Friday morning.</p><p>So once pre-orders do open, all you need to do is head to your basket on the Apple website and confirm the order that has already been set up. The few minutes that you save could be the difference between getting your iPhone Duo soon or having to wait several more weeks. </p><p>Alternatively, you could try your luck elsewhere. Third-party carriers will be stocking the iPhone Duo, and may experience less demand than Apple itself. Similarly, you could try your luck at your nearest Apple Store on October 23, and get to <a href="https://x.com/markgurman/status/2108679134872490044" target="_blank">experience the personalized messaging</a> Apple is said to be adding to Duo purchases made in store. There's probably going to be a line, so I recommend getting there early. At least the abnormally warm October weather means you're less likely to catch a chill while standing in line.</p><p>Just don't buy from a scalper. The iPhone Duo is expensive enough, and there's no real benefit to paying more to 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/iphone-duo-pre-orders-7-reasons-to-buy-and-4-reasons-to-skip">iPhone Duo pre-orders — 7 reasons to buy and 4 reasons to skip</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-has-a-secret-cooling-system-hiding-inside-its-hinge-and-thats-another-way-it-beats-galaxy-z-fold-8">iPhone Duo has a secret cooling system hiding inside its hinge — and that's another way it beats Galaxy Z Fold 8</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-pre-orders-open-this-week-but-there-are-still-7-things-we-dont-know">iPhone Duo pre-orders open this week — but there are still 7 things we don't know</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/apple-increases-iphone-duo-production-by-30-percent-heres-what-that-means-for-you</link>
                                                                            <description>
                            <![CDATA[ Apple has apparently increased iPhone Duo production targets by 30%, and that can only be a good thing for consumers — and bad news for scalpers. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">L7X2RCpHUozwZBVQGomDnB</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/DDcGvYcqQtgaTHXB9oD9Gc-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 14 Oct 2026 11:29:28 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f-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/DDcGvYcqQtgaTHXB9oD9Gc-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPhone Duo hands on]]></media:description>                                                            <media:text><![CDATA[iPhone Duo hands on]]></media:text>
                                <media:title type="plain"><![CDATA[iPhone Duo hands on]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/DDcGvYcqQtgaTHXB9oD9Gc-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The impending 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>is at the forefront of all our minds here at Tom's Guide, particularly the subject of whether we'll be able to score a pre-order and how long we're going to have to wait if we do. <a href="https://www.tomsguide.com/phones/iphones/planning-to-buy-apples-foldable-iphone-duo-heres-how-to-get-one-on-launch-day">Pre-orders open this Friday</a> (October 16) at 8 a.m. ET ahead of an official release on October 23. But when will those units actually arrive? </p><p>I'm still waiting on the<a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-and-pro-max-review"> iPhone 18 Pro Max</a> I ordered a month ago, and they were available in much greater numbers. So I shudder to think how long people are going to have to wait for their iPhone Duo orders to be delivered. </p><p>Projected demand for the iPhone Duo is high, and despite the high price tag analysts have been predicting shortages for months already. It's not hard to see why, when you consider the fact that Apple is only expected to ship a few million iPhone Duo units this year — compared to the tens of millions of non-folding iPhones. </p><p>The good news is, any projected shortages won't be lasting forever. Especially not now that Apple has reportedly increased its iPhone Duo orders by roughly 30%.</p><h2 id="more-duos-means-more-availability">More Duos means more availability</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4656px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Q9CmG4bSftigAEdPtH3Qqd" name="iPhone Duo-LIST1" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/Q9CmG4bSftigAEdPtH3Qqd-1920-80.jpg" mos="" align="middle" fullscreen="" width="4656" height="2619" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The <a href="https://stcn.com/article/detail/4211053.html" target="_blank">report</a> in question comes from the Securities Times in China, which claims that Apple is anticipating far higher demand for the iPhone Duo than previously expected. The report notes that previous estimates pointed towards 6 to 7 million units being produced this year, but now that figure is closer to 10 million. </p><p>This comes off the back of reports that Apple has reduced production targets for the iPhone 18 Pro by 10 to 15%, while simultaneously increasing iPhone 18 Pro Max production by the same amount. </p><p>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">10 million figure is not new</a>, and past reports have suggested Apple could have ordered anything from 7 to 10 million iPhone Duo units. However, we never got any real confirmation of that, and news that Apple could be increasing the future supply of its first foldable can only be a good thing for potential buyers.</p><p>Why? Because this means any short-term shortages of the iPhone Duo are likely to be temporary. Apple wants to get its foldable into as many willing hands as it can, and the more it produces, the easier that will inevitably be.</p><p>In other words, if you're struggling to get hold of the iPhone Duo at release, whether it's with an online pre-order or purchasing from a retail store, patience will be your best friend. Which also means you should absolutely not give in to FOMO and buy an overpriced iPhone Duo from a scalper.</p><h2 id="never-give-in-to-the-scalpers">Never give in to the scalpers</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2297px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="6RbxqgBQeRcLXmzyc9Sx6d" name="Apple iPhone Duo hands on" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/6RbxqgBQeRcLXmzyc9Sx6d-1920-80.jpg" mos="" align="middle" fullscreen="" width="2297" height="1292" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Scalpers are an unscrupulous lot, and they will happily take advantage of demand to try to make themselves a few extra bucks. We've seen major problems arise over the past couple of years, and it got particularly bad during the COVID-19 pandemic when consumer electronics were in short supply right as demand exploded.</p><p><a href="https://www.tomsguide.com/news/cant-find-ps5-stock-this-retailer-is-fighting-back-against-scalpers">PS5s were a popular target for scalpers</a> at the time, as were Nintendo Switches, Xboxes and graphics cards. More recently, there have been serious problems with scalpers targeting hobbies, notably <a href="https://www.theverge.com/games/1001002/pokemon-30th-celebration-scalping-resellers" target="_blank">Pokemon cards</a>, and any other product that could easily be flipped for a profit.</p><p>A high-profile release like the iPhone Duo is ripe for scalpers to try and take advantage. I can guarantee that, come Friday, sites like eBay will be flooded with listings offering fast access to the foldable for a price. Obviously you should not cave and give them what they want.</p><p>Buying from scalpers not only encourages them to keep doing what they're doing and to force the rest of us to pay even more for already-expensive products, but it's also unnecessary.</p><h2 id="supply-eventually-bounces-back">Supply eventually bounces back</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="DDcGvYcqQtgaTHXB9oD9Gc" name="iphone duo outlook" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/DDcGvYcqQtgaTHXB9oD9Gc-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>We have shipment delays every time Apple releases a new iPhone, with one particular model or color proving to be far more popular than Apple apparently anticipated. So those people with their heart set on that specific iPhone end up having to wait a little while longer. The ratio of supply and demand always equalizes, though, and those sought-after models inevitably stop being so elusive. </p><p>Sometimes it happens in a few weeks; for others it's a couple of months. The fact is that Apple is in the business of making money by selling as many iPhones as possible. Unlike some companies that seem to thrive on artificial scarcity, that's never really been part of Apple's playbook. The fact it's reportedly increased its iPhone Duo order is testament to that.</p><p>Plus, you have to remember that Apple offers a <a href="https://www.apple.com/shop/help/returns_refund" target="_blank" rel="nofollow">2-week return policy in the U.S</a>. This means scalpers can buy the iPhone Duo, safe in the knowledge that any unsold units can be returned for a full refund within 14 days of them receiving it. <a href="https://www.tomsguide.com/computing/vr-ar/apple-vision-pro-users-are-already-returning-their-headsets-heres-why">We saw that happen with the Apple Vision Pro</a>, both from scalpers and potential buyers that decided the $3,500 face computer wasn't for them.</p><p>That matters because unscalped units will be redistributed into the iPhone Duo supply chain, and sold to someone else — hopefully someone who actually wants to use it. This should also lead to a drop in wait times, but all of that will be for naught if people give the scalpers what they want.</p><h2 id="how-to-secure-your-iphone-duo-pre-order">How to secure your iPhone Duo pre-order</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Koa6PphHPjMtuUK4hZGsAc" name="iphone duo software" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/Koa6PphHPjMtuUK4hZGsAc-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>iPhone Duo pre-orders open on Friday, October 16 at 5 a.m. PT / 8 a.m. ET / 1 p.m. BST, and that will be your first opportunity to secure an Apple foldable for yourself. Obviously, everyone who wants a Duo will have the same idea, and will be flocking to the Apple website to try and grab one for themselves — and right now there's no way of knowing how hectic the process is going to be.</p><p>The good news is that <a href="https://www.tomsguide.com/phones/iphones/want-the-iphone-duo-without-the-wait-heres-how-to-prep-your-pre-order-ahead-of-time">Apple is already letting customers prepare their pre-orders ahead of time</a>. This doesn't guarantee you an iPhone Duo, but it does let you get through the bulk of the pre-ordering process in advance. That means confirming the configuration you want, which carrier you need to sign up for, and ensuring any financial checks that need to take place are all approved and finalized before Friday morning.</p><p>So once pre-orders do open, all you need to do is head to your basket on the Apple website and confirm the order that has already been set up. The few minutes that you save could be the difference between getting your iPhone Duo soon or having to wait several more weeks. </p><p>Alternatively, you could try your luck elsewhere. Third-party carriers will be stocking the iPhone Duo, and may experience less demand than Apple itself. Similarly, you could try your luck at your nearest Apple Store on October 23, and get to <a href="https://x.com/markgurman/status/2108679134872490044" target="_blank">experience the personalized messaging</a> Apple is said to be adding to Duo purchases made in store. There's probably going to be a line, so I recommend getting there early. At least the abnormally warm October weather means you're less likely to catch a chill while standing in line.</p><p>Just don't buy from a scalper. The iPhone Duo is expensive enough, and there's no real benefit to paying more to 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/iphone-duo-pre-orders-7-reasons-to-buy-and-4-reasons-to-skip">iPhone Duo pre-orders — 7 reasons to buy and 4 reasons to skip</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-has-a-secret-cooling-system-hiding-inside-its-hinge-and-thats-another-way-it-beats-galaxy-z-fold-8">iPhone Duo has a secret cooling system hiding inside its hinge — and that's another way it beats Galaxy Z Fold 8</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-pre-orders-open-this-week-but-there-are-still-7-things-we-dont-know">iPhone Duo pre-orders open this week — but there are still 7 things we don't know</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ The 4 emergency phone tweaks that keep your battery alive in a power outage ]]></title>
                                                                                                <dc:content><![CDATA[ <p>When power goes out suddenly,  your smartphone becomes a vital lifeline for news, weather updates, and reaching loved ones. However, standard background tasks and continuous radio searches rapidly drain limited battery reserves. By executing a few targeted setting changes as soon as the lights go out, you can dramatically extend your device's operational life.</p><p>"Many people panic when the power fails, but a few simple changes to your phone settings can make a huge difference," says Marcus Clarke, founder of <a href="https://thepreparedhousehold.co.uk/">The Prepared Household</a>. "These aren't just about saving battery; they're about ensuring you can reach emergency services or loved ones when it truly matters."</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Od2pbe"></div>                            </div>                            <script src="https://kwizly.com/embed/Od2pbe.js" async></script><section class="howto-block">                    <h3>1. Enable Low Power Mode or Battery Saver immediately </h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/AMxapDuoq48uUmd9L8RV5j.jpg"                                        alt="How to turn on Low Power Mode on iPhone "                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/AMxapDuoq48uUmd9L8RV5j.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>The single most effective step to extend battery life during a power outage is forcing your device into a low-energy operational state. Standard smartphone operation runs continuous background synchronization, email polling, and visual effects that waste power when idle.</p><p>"This is your first port of call," Clarke explains. "It's designed specifically for this purpose, cutting out many of the power-hungry processes you won't need in an emergency."</p><p><strong>To turn this on on an iPhone: </strong>open Settings, select Battery, Power Mode, and toggle on Low Power Mode. <strong>On Android devices:</strong> swipe down from the top of your screen to open Quick Settings and tap Battery Saver (or Power Saving Mode). </p><p>This immediately throttles CPU performance, pauses background app refresh, and stops cloud backups.</p></p>                </section><section class="howto-block">                    <h3>2. Disable Wi-Fi and Bluetooth to stop continuous signal scanning</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/gGWFUQf4axcXmJUe6CZMsB.jpg"                                        alt="WiFi and Bluetooth toggled off on iPhone"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/gGWFUQf4axcXmJUe6CZMsB.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide )</div></figure>                    <p><p>During a grid failure, local cell towers and Wi-Fi networks often lose power or become severely congested, forcing your phone's internal antennas to boost transmission power to maintain a link. Leaving wireless radios active causes constant, aggressive network searching that drains battery reserves rapidly.</p><p>"Unless you're connected to a portable Wi Fi hotspot or using a Bluetooth device, these should be off," Clarke notes. "Your phone will spend less energy searching for signals that aren't there."</p><p>To disable these features, <strong>open Settings, select Wi-Fi, and toggle the switch to</strong> <strong>Off</strong>. Then <strong>return to Settings, tap Bluetooth, and toggle it to Off as well</strong>. </p><p>Avoid relying solely on Control Center or Quick Settings shortcuts for this step, as those toggles often only temporarily disconnect devices rather than powering off the scanning hardware completely.</p></p>                </section><section class="howto-block">                    <h3>3. Lower screen brightness and shorten auto-lock duration</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/eJg8BgZqrAdLduPghXqWnU.jpg"                                        alt="Battery saving features iPhone"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/eJg8BgZqrAdLduPghXqWnU.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>Display panels, whether OLED or LCD, are consistently the single largest consumers of battery power on any mobile device. High brightness levels and long screen-timeout windows burn through energy every time you check for updates.</p><p>"The brighter your screen and the longer it stays on, the faster your battery depletes," Clarke adds. "Make every second count by conserving screen time."</p><p>To adjust this, open Settings and look for your screen options:</p><p><strong>For iPhone: </strong>Go to Display & Brightness and manually drag the brightness slider to its lowest level, then go to Appearance and switch on Dark Mode. To prevent the phone from overriding your choice, go back to the main menu and tap Accessibility, Display & Text Size, then scroll to the bottom to toggle off Auto-Brightness.</p><p><strong>For Android:</strong> Go to Display (or Display & Brightness), toggle off Adaptive Brightness, turn on Dark Mode, and drag the slider down.</p><p>Finally, fix the screen timer. On iOS, stay in the Display & Brightness menu, tap Auto-Lock, and set it to 30 seconds. On Android, find Screen Timeout within the Display menu and drop it to 15 or 30 seconds so the screen shuts off immediately when not in active use.</p></p>                </section><section class="howto-block">                    <h3>4. Enable Do Not Disturb to block non-essential notifications</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/AYx3hpeYNqEL3vpNEhZymc.jpg"                                        alt="Do Not Disturb switched on iPhone"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/AYx3hpeYNqEL3vpNEhZymc.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>Every incoming app ping, push notification, and social media alert lights up your screen, triggers vibration motors, and forces the main processor to wake up from an idle state. Silencing non-urgent application updates prevents unnecessary hardware wake-ups while keeping cellular channels open for critical incoming calls or texts.</p><p>"Prioritize what gets through," Clarke advises. "You want to be contactable, but not bothered by every trivial update that can wait until the power is restored."</p><p><strong>On iPhone, open Settings, tap Focus, select Do Not Disturb, and switch it on</strong>. <strong>On Android, swipe down to open Quick Settings and tap Do Not Disturb</strong>. Be sure to check the settings menu under Do Not Disturb to allow calls from emergency contacts or repeated callers so critical communications still reach you.</p><p>"Being prepared isn't just about having supplies; it's about knowing how to make the most of the tools you already have," Clarke concludes.</p></p>                </section><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide </span></h3><ul><li><a href="https://www.tomsguide.com/phones/7-smartphone-features-hiding-in-plain-sight-and-how-to-actually-use-them">7 smartphone features hiding in plain sight — and how to actually use them</a></li><li><a href="https://www.tomsguide.com/phones/this-iphone-and-android-setting-might-be-quietly-leaking-your-home-address">This iPhone and Android setting might be leaking your home address</a></li><li><a href="https://www.tomsguide.com/phones/i-used-my-iphone-to-photograph-the-stars-here-are-the-subtle-tweaks-that-produced-stunning-results">I used my iPhone to photograph the stars — here are the subtle tweaks that produced stunning results</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/the-4-emergency-phone-tweaks-that-keep-your-battery-alive-in-a-power-outage</link>
                                                                            <description>
                            <![CDATA[ Preserve your phone battery during a power outage. Learn the 4 essential settings expert Marcus Clarke recommends toggling to maintain emergency connectivity. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">e6K5gLpTGfu3rTpvZYUYwB</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/X5MFgPp5HNRqg9pfHBuVod-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 14 Oct 2026 10:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ kaycee.hill@futurenet.com (Kaycee Hill) ]]></author>                    <dc:creator><![CDATA[ Kaycee Hill ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/xHn6RmpEqg87cvtLwrBu9G-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/X5MFgPp5HNRqg9pfHBuVod-1920-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPhone screen displaying a Low Battery notification and the Low Power Mode setting pop-up in Dark Mode]]></media:description>                                                            <media:text><![CDATA[iPhone screen displaying a Low Battery notification and the Low Power Mode setting pop-up in Dark Mode]]></media:text>
                                <media:title type="plain"><![CDATA[iPhone screen displaying a Low Battery notification and the Low Power Mode setting pop-up in Dark Mode]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/X5MFgPp5HNRqg9pfHBuVod-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>When power goes out suddenly,  your smartphone becomes a vital lifeline for news, weather updates, and reaching loved ones. However, standard background tasks and continuous radio searches rapidly drain limited battery reserves. By executing a few targeted setting changes as soon as the lights go out, you can dramatically extend your device's operational life.</p><p>"Many people panic when the power fails, but a few simple changes to your phone settings can make a huge difference," says Marcus Clarke, founder of <a href="https://thepreparedhousehold.co.uk/">The Prepared Household</a>. "These aren't just about saving battery; they're about ensuring you can reach emergency services or loved ones when it truly matters."</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Od2pbe"></div>                            </div>                            <script src="https://kwizly.com/embed/Od2pbe.js" async></script><section class="howto-block">                    <h3>1. Enable Low Power Mode or Battery Saver immediately </h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/AMxapDuoq48uUmd9L8RV5j.jpg"                                        alt="How to turn on Low Power Mode on iPhone "                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/AMxapDuoq48uUmd9L8RV5j.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>The single most effective step to extend battery life during a power outage is forcing your device into a low-energy operational state. Standard smartphone operation runs continuous background synchronization, email polling, and visual effects that waste power when idle.</p><p>"This is your first port of call," Clarke explains. "It's designed specifically for this purpose, cutting out many of the power-hungry processes you won't need in an emergency."</p><p><strong>To turn this on on an iPhone: </strong>open Settings, select Battery, Power Mode, and toggle on Low Power Mode. <strong>On Android devices:</strong> swipe down from the top of your screen to open Quick Settings and tap Battery Saver (or Power Saving Mode). </p><p>This immediately throttles CPU performance, pauses background app refresh, and stops cloud backups.</p></p>                </section><section class="howto-block">                    <h3>2. Disable Wi-Fi and Bluetooth to stop continuous signal scanning</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/gGWFUQf4axcXmJUe6CZMsB.jpg"                                        alt="WiFi and Bluetooth toggled off on iPhone"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/gGWFUQf4axcXmJUe6CZMsB.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide )</div></figure>                    <p><p>During a grid failure, local cell towers and Wi-Fi networks often lose power or become severely congested, forcing your phone's internal antennas to boost transmission power to maintain a link. Leaving wireless radios active causes constant, aggressive network searching that drains battery reserves rapidly.</p><p>"Unless you're connected to a portable Wi Fi hotspot or using a Bluetooth device, these should be off," Clarke notes. "Your phone will spend less energy searching for signals that aren't there."</p><p>To disable these features, <strong>open Settings, select Wi-Fi, and toggle the switch to</strong> <strong>Off</strong>. Then <strong>return to Settings, tap Bluetooth, and toggle it to Off as well</strong>. </p><p>Avoid relying solely on Control Center or Quick Settings shortcuts for this step, as those toggles often only temporarily disconnect devices rather than powering off the scanning hardware completely.</p></p>                </section><section class="howto-block">                    <h3>3. Lower screen brightness and shorten auto-lock duration</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/eJg8BgZqrAdLduPghXqWnU.jpg"                                        alt="Battery saving features iPhone"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/eJg8BgZqrAdLduPghXqWnU.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>Display panels, whether OLED or LCD, are consistently the single largest consumers of battery power on any mobile device. High brightness levels and long screen-timeout windows burn through energy every time you check for updates.</p><p>"The brighter your screen and the longer it stays on, the faster your battery depletes," Clarke adds. "Make every second count by conserving screen time."</p><p>To adjust this, open Settings and look for your screen options:</p><p><strong>For iPhone: </strong>Go to Display & Brightness and manually drag the brightness slider to its lowest level, then go to Appearance and switch on Dark Mode. To prevent the phone from overriding your choice, go back to the main menu and tap Accessibility, Display & Text Size, then scroll to the bottom to toggle off Auto-Brightness.</p><p><strong>For Android:</strong> Go to Display (or Display & Brightness), toggle off Adaptive Brightness, turn on Dark Mode, and drag the slider down.</p><p>Finally, fix the screen timer. On iOS, stay in the Display & Brightness menu, tap Auto-Lock, and set it to 30 seconds. On Android, find Screen Timeout within the Display menu and drop it to 15 or 30 seconds so the screen shuts off immediately when not in active use.</p></p>                </section><section class="howto-block">                    <h3>4. Enable Do Not Disturb to block non-essential notifications</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/AYx3hpeYNqEL3vpNEhZymc.jpg"                                        alt="Do Not Disturb switched on iPhone"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/AYx3hpeYNqEL3vpNEhZymc.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>Every incoming app ping, push notification, and social media alert lights up your screen, triggers vibration motors, and forces the main processor to wake up from an idle state. Silencing non-urgent application updates prevents unnecessary hardware wake-ups while keeping cellular channels open for critical incoming calls or texts.</p><p>"Prioritize what gets through," Clarke advises. "You want to be contactable, but not bothered by every trivial update that can wait until the power is restored."</p><p><strong>On iPhone, open Settings, tap Focus, select Do Not Disturb, and switch it on</strong>. <strong>On Android, swipe down to open Quick Settings and tap Do Not Disturb</strong>. Be sure to check the settings menu under Do Not Disturb to allow calls from emergency contacts or repeated callers so critical communications still reach you.</p><p>"Being prepared isn't just about having supplies; it's about knowing how to make the most of the tools you already have," Clarke concludes.</p></p>                </section><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide </span></h3><ul><li><a href="https://www.tomsguide.com/phones/7-smartphone-features-hiding-in-plain-sight-and-how-to-actually-use-them">7 smartphone features hiding in plain sight — and how to actually use them</a></li><li><a href="https://www.tomsguide.com/phones/this-iphone-and-android-setting-might-be-quietly-leaking-your-home-address">This iPhone and Android setting might be leaking your home address</a></li><li><a href="https://www.tomsguide.com/phones/i-used-my-iphone-to-photograph-the-stars-here-are-the-subtle-tweaks-that-produced-stunning-results">I used my iPhone to photograph the stars — here are the subtle tweaks that produced stunning results</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ iPhone Duo pre-orders — 7 reasons to buy and 4 reasons to skip ]]></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's</a> release day is coming in fast, and<a href="https://www.tomsguide.com/phones/iphones/want-the-iphone-duo-without-the-wait-heres-how-to-prep-your-pre-order-ahead-of-time"> pre-orders open up this Friday </a>(October 16). This means a lot of people are going to decide whether they're actually going to pick up the foldable for themselves, or if they're going to stick with a non-folding phone for the time being.</p><p>Making that decision isn't always easy, especially if you find yourself enamored by all the things the first foldable iPhone has to offer. But when it comes down to it, you simply need to weigh up the pros and cons of buying the iPhone Duo for yourself. This is something we can help out with.</p><p>Here are seven reasons why you should pre-order the iPhone Duo this Friday, and four reasons why it might not be worth it. And stay tuned for our full rated review and test results for the final Tom's Guide verdict. </p><h2 id="reasons-to-buy">Reasons to buy</h2><h3 class="article-body__section" id="section-it-s-a-mini-iphone-and-tablet-in-one-gadget"><span>It's a mini iPhone and tablet in one gadget</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1802px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="mvvUtUctkeCiyVuPJRbumc" name="Apple iPhone Duo hands on-4" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/mvvUtUctkeCiyVuPJRbumc-1920-80.jpg" mos="" align="middle" fullscreen="" width="1802" height="1014" attribution="" endorsement="" class="inline"></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 main selling point when it comes to iPhone Duo is the fact that this is the first foldable iPhone. It's something that people have been asking Apple to make for years, and after so many delays and an apparent quest for perfectionism Apple has finally done it. You get a 5.4-inch iPhone that unfolds to reveal a massive 7.6-inch main display.</p><p>The iPhone Duo might as well be the cross between an iPhone and the <a href="https://www.tomsguide.com/tablets/ipads/ipad-mini-7-review">iPad mini</a>, offering the best parts of both in a single device. You get a compact and portable iPhone experience on the exterior display, while opening it up offers the tablet-like interface for all those times a larger screen is more beneficial. And it's all within the usual Apple ecosystem.</p><h3 class="article-body__section" id="section-more-durable-than-other-foldables"><span>More durable than other foldables</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4392px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="GDibKRmUKpjJDLw2zfx9Vd" name="iPhone Duo-7" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/GDibKRmUKpjJDLw2zfx9Vd-1920-80.jpg" mos="" align="middle" fullscreen="" width="4392" height="2471" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Historically speaking, foldable phones have not been the most hardy of devices. Durability has come a long way in recent years, but older models were comparatively fragile devices in the grand scheme of things. The iPhone Duo is not falling into that trap, and it looks like Apple is going all in on making this phone as strong as it can be.</p><p>The IP68 water and dust resistance rating puts the iPhone Duo above <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>, which offers no dust resistance at all. The Duo is also one of only a handful of phones that has a titanium frame, which should enhance the overall strength of the phone. On top of that, Apple is utilizing Ceramic Shield 2 glass, which is famed for its damage and scratch resistance on the exterior display, alongside a Ceramic Shield 1 backplate. </p><p>We're still not sure how durable the interior display is yet, but the rest of the phone is looking pretty sturdy so far.</p><h3 class="article-body__section" id="section-real-iphone-multitasking"><span>Real iPhone 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Koa6PphHPjMtuUK4hZGsAc" name="iphone duo software" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/Koa6PphHPjMtuUK4hZGsAc-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Multitasking is common on a lot of phones, but Apple largely ignored it — saving it as an iPad feature. Since the iPhone Duo is essentially a hybrid device, it wouldn't be complete without multitasking of its own — which is why side-by-side multitasking is available on the iPhone Duo.</p><p>Admittedly being able to display two apps next to each other is the bare minimum Apple could offer, and other devices (including iPads) offer additional windows and split-screen functionality. But that doesn't change the fact that this is the first iPhone that lets you run two apps simultaneously. And Apple makes it super easy to choose new apps, as well as drag and drop content between windows.</p><h3 class="article-body__section" id="section-bright-anti-reflective-display"><span>Bright, anti-reflective 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:4356px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="xTigbirKk6eHPbe3d35Nod" name="iPhone Duo-LIST2" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/xTigbirKk6eHPbe3d35Nod-1920-80.jpg" mos="" align="middle" fullscreen="" width="4356" height="2450" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>There are still things we don't know about the iPhone Duo's main display, like how it's going to handle repeated folding over extended periods of time. But we do know that this is a large 7.6-inch screen with an impressive peak brightness of 3,000 nits. </p><p>That's the same as the iPhone 18 Pro and Pro Max, but with the added benefit of the <a href="https://www.tomsguide.com/phones/iphones/i-was-skeptical-about-the-iphone-duo-nano-texture-display-but-heres-why-ive-changed-my-mind">nano-texture coating.</a> It's not the same as the anti-reflective coating we've seen on phones like the Z Fold 8, but it does diffuse incoming light. That means the screen itself is a lot less reflective, and prevents the kind of glare you get on glossy displays. The nano-texture display also does a fairly good job of hiding the crease.</p><h3 class="article-body__section" id="section-a20-pro-performance"><span>A20 Pro 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="7K7XnKoKb6aD7gkxuBUW5c" name="iPhone duo gaming" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/7K7XnKoKb6aD7gkxuBUW5c-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Apple's A20 Pro is one heck of a chip, and we've already seen the kind of things its capable of while testing the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-and-pro-max-review">iPhone 18 Pro and 18 Pro Max</a>. Computing and graphics performance is so high that <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-benchmarks-apple-just-built-the-most-powerful-phones-weve-ever-seen">we declared them the fastest phones we've ever tested</a>. And that same chip is coming to the iPhone Duo.</p><p>We don't know how much of a difference there will be on the new devices. There were some variations between the Pro and Pro Max models, but not enough to really matter. It all comes down to whether the need to operate two screens is going to make much difference to the numbers. But, even if it does, the Duo is still shaping up to be one of the best performing phones of the year.</p><h3 class="article-body__section" id="section-strong-battery-life-fast-charging"><span>Strong battery life & fast 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="PYTwFju4TnVPtJUC7ADrsb" name="iPhone Duo edit 1" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/PYTwFju4TnVPtJUC7ADrsb-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>We haven't tested the iPhone Duo's battery life yet, so we don't know how long it will last in comparison to the iPhone 18 Pro and iPhone 18 Pro Max. Still, Apple promises that the exterior screen can last for up to 44 hours of video playback, while the larger foldable screen is rated for up to 31 hours. </p><p>That's a little less than the 18 Pro and 18 Pro Max's respective 36 and 45 hours. But considering those phones offer some of the best battery life, with a <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-max-and-18-pro-battery-life-tested-the-results-are-surprising">respective 16 hours 17 minutes and 18 hours 27 minutes in our custom battery test</a>, we expect the iPhone Duo will come out pretty strongly.</p><p>Plus, the iPhone Duo supports up to 60W charging, which is more than you can expect from a lot of other foldables. The Galaxy Z Fold 8 and <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-fold-review">Pixel 11 Pro Fold</a> max out at 45W and 25W, respectively.</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:3258px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="ajMJSzuWMimLz89vjNx9xm" name="Apple Pencil USB-C-6.jpg" alt="Apple Pencil USB-C" src="https://cdn.mos.cms.futurecdn.net/ajMJSzuWMimLz89vjNx9xm-1920-80.jpg" mos="" align="middle" fullscreen="" width="3258" height="1833" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Pairing a foldable phone with a stylus seems like a perfect match, but it's not something that's easy to come by right now. The <a href="https://www.tomsguide.com/phones/motorola-phones/motorola-razr-fold-review">Razr Fold</a> supports its own specialized stylus, as does Oppo's Find N series, but that's about it — and the support is limited to foldables. Apple's going in a different direction, offering support for the existing <a href="https://www.tomsguide.com/hands-on/apple-pencil-usb-c-hands-on-is-this-pen-mightier">Apple Pencil (USB-C)</a>.</p><p>That's the same Apple Pencil that's compatible with almost every recent iPad, even if it isn't the most advanced and feature-rich stylus Apple has to offer. Not only does this mean the iPhone Duo had the productivity boost a stylus offers, it's the same low-cost accessory that a lot of people might already own. </p><h2 id="reasons-to-skip">Reasons to skip</h2><h3 class="article-body__section" id="section-the-price"><span>The 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="DDcGvYcqQtgaTHXB9oD9Gc" name="iphone duo outlook" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/DDcGvYcqQtgaTHXB9oD9Gc-1920-80.jpg" mos="" align="middle" fullscreen="" width="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 biggest downside to iPhone Duo is the same as all foldables phones: The high price tag. With prices starting at $1,999 for a model with 256GB of storage, this is the most expensive iPhone Apple has ever released — $700 more than the iPhone 18 Pro Max.</p><p>That's obviously going to put a lot of people off, especially when you remember that Apple is asking you to sacrifice certain things in the process. Is it worth spending more money just to get the foldable design? <a href="https://www.tomsguide.com/phones/iphones/thats-my-dealbreaker-toms-guide-readers-sound-off-on-iphone-duo-trade-offs-and-if-theyll-buy">Some don't believe that it is.</a></p><h3 class="article-body__section" id="section-no-telephoto-camera"><span>No telephoto 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="46Wveg5fLymtBobG52Ttvb" name="iPhone Duo edit 3" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/46Wveg5fLymtBobG52Ttvb-1920-80.jpg" mos="" align="middle" fullscreen="" width="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 biggest issue with the Duo is that the camera experience is going to be, as a whole, <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-7-features-youre-giving-up-by-not-buying-the-iphone-18-pro-max">worse than you'd get on a non-folding iPhone</a>. The most obvious issue is that there's no telephoto lens, which means you're automatically at a disadvantage for zoomed in photos. </p><p>The iPhone Duo also misses out staple Pro-level camera features like ProRAW photos, ProRES video, LOG recording and spatial photography. Not to mention the fact it's missing iPhone 18 Pro's variable aperture lens and Pro photography controls.</p><p>Some might argue that these are either niche or power-user features, and they may have a point, but it doesn't change the fact that Apple is offering less in the camera department for the iPhone Duo versus the iPhone 18 Pro and Pro Max.</p><h3 class="article-body__section" id="section-magsafe-accessory-support-is-a-little-funky"><span> MagSafe accessory support is a little funky</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="P3tEYZC3x2BZsheo9XqbWc" name="Apple iPhone Duo hands on-6" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/P3tEYZC3x2BZsheo9XqbWc-1920-80.jpg" mos="" align="middle" fullscreen="" width="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 iPhone Duo supports MagSafe, which is great for wireless charging, but the unique design means it's going to struggle with certain MagSafe-compatible accessories. In fact, we've already seen images of people who <a href="https://www.reddit.com/r/iphone/comments/1whl55w/the_biggest_disappointment_with_the_duo/" target="_blank">tested the foldable with MagSafe wallets</a>, only to find that the phone is too short to support them without some overhang.</p><p>Wallets won't be the only accessories affected by this either. Any MagSafe-friendly accessories that have been designed to fit on regular-sized iPhones are going to fit a little awkwardly on the iPhone Duo — including batteries and some stands. It may not cause many practical problems, but when you have a brand that prides itself on design as much as Apple, it's not ideal for long-standing accessories to suddenly not work. </p><p>You can expect a wide range of iPhone Duo accessories, so stay tuned for our coverage.</p><h3 class="article-body__section" id="section-it-might-be-worth-waiting-for-iphone-duo-2"><span>It might be worth waiting for iPhone Duo 2</span></h3><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="vYM5tTFWZqoCzzH8Kj9EHV" name="iPhone Duo-3" alt="iPhone Duo hands-on pictures" src="https://cdn.mos.cms.futurecdn.net/vYM5tTFWZqoCzzH8Kj9EHV-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 / Jeff Parsons)</span></figcaption></figure><p>The iPhone Duo is Apple's first foldable phone, so it stands to reason that some shoppers will bide their time and wait for the sequel so Apple can work out any possible kinks. </p><p>The things Apple learns in the months following the Duo's release will undoubtedly be used to improve the next generation. Which means waiting a year might be a better use of your money.</p><p>For example, perhaps the next iPhone Duo will support Face ID instead of just Touch ID. Or maybe Apple will find a way to add a telephoto zoom camera while keeping the design compact. </p><h3 class="article-body__section" id="section-iphone-duo-outlook"><span>iPhone Duo outlook</span></h3><p>The iPhone Duo has a lot going for it, from its nano-texture display and durability to Apple's approach to the software and the multiple modes the Duo supports. It should also be the fastest foldable yet.</p><p>However, $2,000 is a lot of money to spend on a phone, even if it can double as a tablet. And you have to be willing to give up certain iPhone 18 Pro features to get Apple's first foldable, such as a telephoto zoom and Face ID. But we're betting a lot of people will be willing to live with these trade-offs.</p><p>Stay tuned for our iPhone Duo review and test results for our final verdict. In the meantime, if you have any questions or agree or disagree with any of my reasons to buy or skip, hit us up in the comments. And if you do plan on pre-ordering the iPhone Duo, check out <a href="https://www.amazon.com/s?k=iphone+duo+accessories&crid=3M4YQHXL6HSOZ&sprefix=%2Caps%2C228&ref=nb_sb_ss_recent_2_0_recent" target="_blank" rel="nofollow">Amazon's lineup of iPhone Duo cases and accessories</a> so your foldable is ready to go on day 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/android-phones/android-17-vs-ios-27-which-platform-does-lock-screen-widgets-the-best">Android 17 vs iOS 27 — which platform does lock screen widgets the best?</a></li><li><a href="https://www.tomsguide.com/phones/iphones/want-the-iphone-duo-without-the-wait-heres-how-to-prep-your-pre-order-ahead-of-time">Want the iPhone Duo without the wait? Here's how to prep your pre-order ahead of time</a></li><li><a href="https://www.tomsguide.com/phones/android-phones/i-turned-my-android-phone-into-a-steam-deck-with-one-app-mobile-gaming-will-never-be-the-same-again-thanks-to-droiddeck">I turned my Android phone into a Steam Deck with one app — mobile gaming will never be the same again thanks to DroidDeck</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/iphone-duo-pre-orders-7-reasons-to-buy-and-4-reasons-to-skip</link>
                                                                            <description>
                            <![CDATA[ iPhone Duo pre-orders open on Friday, and you need to decide whether it's the right kind of phone for you. Here are our top reasons to buy, and skip, the first foldable iPhone. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">z5ysihfzwveAMXvfUGFySb</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/W2NraSE8MpzoVEUGR59LJV-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 14 Oct 2026 04:30:00 +0000</pubDate>                                                                                                                                <updated>Wed, 14 Oct 2026 11:53:00 +0000</updated>
                                                                                                                                            <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f-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/W2NraSE8MpzoVEUGR59LJV-1920-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPhone Duo half folded ]]></media:description>                                                            <media:text><![CDATA[iPhone Duo half folded ]]></media:text>
                                <media:title type="plain"><![CDATA[iPhone Duo half folded ]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/W2NraSE8MpzoVEUGR59LJV-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's</a> release day is coming in fast, and<a href="https://www.tomsguide.com/phones/iphones/want-the-iphone-duo-without-the-wait-heres-how-to-prep-your-pre-order-ahead-of-time"> pre-orders open up this Friday </a>(October 16). This means a lot of people are going to decide whether they're actually going to pick up the foldable for themselves, or if they're going to stick with a non-folding phone for the time being.</p><p>Making that decision isn't always easy, especially if you find yourself enamored by all the things the first foldable iPhone has to offer. But when it comes down to it, you simply need to weigh up the pros and cons of buying the iPhone Duo for yourself. This is something we can help out with.</p><p>Here are seven reasons why you should pre-order the iPhone Duo this Friday, and four reasons why it might not be worth it. And stay tuned for our full rated review and test results for the final Tom's Guide verdict. </p><h2 id="reasons-to-buy">Reasons to buy</h2><h3 class="article-body__section" id="section-it-s-a-mini-iphone-and-tablet-in-one-gadget"><span>It's a mini iPhone and tablet in one gadget</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1802px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="mvvUtUctkeCiyVuPJRbumc" name="Apple iPhone Duo hands on-4" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/mvvUtUctkeCiyVuPJRbumc-1920-80.jpg" mos="" align="middle" fullscreen="" width="1802" height="1014" attribution="" endorsement="" class="inline"></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 main selling point when it comes to iPhone Duo is the fact that this is the first foldable iPhone. It's something that people have been asking Apple to make for years, and after so many delays and an apparent quest for perfectionism Apple has finally done it. You get a 5.4-inch iPhone that unfolds to reveal a massive 7.6-inch main display.</p><p>The iPhone Duo might as well be the cross between an iPhone and the <a href="https://www.tomsguide.com/tablets/ipads/ipad-mini-7-review">iPad mini</a>, offering the best parts of both in a single device. You get a compact and portable iPhone experience on the exterior display, while opening it up offers the tablet-like interface for all those times a larger screen is more beneficial. And it's all within the usual Apple ecosystem.</p><h3 class="article-body__section" id="section-more-durable-than-other-foldables"><span>More durable than other foldables</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4392px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="GDibKRmUKpjJDLw2zfx9Vd" name="iPhone Duo-7" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/GDibKRmUKpjJDLw2zfx9Vd-1920-80.jpg" mos="" align="middle" fullscreen="" width="4392" height="2471" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Historically speaking, foldable phones have not been the most hardy of devices. Durability has come a long way in recent years, but older models were comparatively fragile devices in the grand scheme of things. The iPhone Duo is not falling into that trap, and it looks like Apple is going all in on making this phone as strong as it can be.</p><p>The IP68 water and dust resistance rating puts the iPhone Duo above <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>, which offers no dust resistance at all. The Duo is also one of only a handful of phones that has a titanium frame, which should enhance the overall strength of the phone. On top of that, Apple is utilizing Ceramic Shield 2 glass, which is famed for its damage and scratch resistance on the exterior display, alongside a Ceramic Shield 1 backplate. </p><p>We're still not sure how durable the interior display is yet, but the rest of the phone is looking pretty sturdy so far.</p><h3 class="article-body__section" id="section-real-iphone-multitasking"><span>Real iPhone 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Koa6PphHPjMtuUK4hZGsAc" name="iphone duo software" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/Koa6PphHPjMtuUK4hZGsAc-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Multitasking is common on a lot of phones, but Apple largely ignored it — saving it as an iPad feature. Since the iPhone Duo is essentially a hybrid device, it wouldn't be complete without multitasking of its own — which is why side-by-side multitasking is available on the iPhone Duo.</p><p>Admittedly being able to display two apps next to each other is the bare minimum Apple could offer, and other devices (including iPads) offer additional windows and split-screen functionality. But that doesn't change the fact that this is the first iPhone that lets you run two apps simultaneously. And Apple makes it super easy to choose new apps, as well as drag and drop content between windows.</p><h3 class="article-body__section" id="section-bright-anti-reflective-display"><span>Bright, anti-reflective 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:4356px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="xTigbirKk6eHPbe3d35Nod" name="iPhone Duo-LIST2" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/xTigbirKk6eHPbe3d35Nod-1920-80.jpg" mos="" align="middle" fullscreen="" width="4356" height="2450" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>There are still things we don't know about the iPhone Duo's main display, like how it's going to handle repeated folding over extended periods of time. But we do know that this is a large 7.6-inch screen with an impressive peak brightness of 3,000 nits. </p><p>That's the same as the iPhone 18 Pro and Pro Max, but with the added benefit of the <a href="https://www.tomsguide.com/phones/iphones/i-was-skeptical-about-the-iphone-duo-nano-texture-display-but-heres-why-ive-changed-my-mind">nano-texture coating.</a> It's not the same as the anti-reflective coating we've seen on phones like the Z Fold 8, but it does diffuse incoming light. That means the screen itself is a lot less reflective, and prevents the kind of glare you get on glossy displays. The nano-texture display also does a fairly good job of hiding the crease.</p><h3 class="article-body__section" id="section-a20-pro-performance"><span>A20 Pro 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="7K7XnKoKb6aD7gkxuBUW5c" name="iPhone duo gaming" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/7K7XnKoKb6aD7gkxuBUW5c-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Apple's A20 Pro is one heck of a chip, and we've already seen the kind of things its capable of while testing the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-and-pro-max-review">iPhone 18 Pro and 18 Pro Max</a>. Computing and graphics performance is so high that <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-benchmarks-apple-just-built-the-most-powerful-phones-weve-ever-seen">we declared them the fastest phones we've ever tested</a>. And that same chip is coming to the iPhone Duo.</p><p>We don't know how much of a difference there will be on the new devices. There were some variations between the Pro and Pro Max models, but not enough to really matter. It all comes down to whether the need to operate two screens is going to make much difference to the numbers. But, even if it does, the Duo is still shaping up to be one of the best performing phones of the year.</p><h3 class="article-body__section" id="section-strong-battery-life-fast-charging"><span>Strong battery life & fast 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="PYTwFju4TnVPtJUC7ADrsb" name="iPhone Duo edit 1" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/PYTwFju4TnVPtJUC7ADrsb-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>We haven't tested the iPhone Duo's battery life yet, so we don't know how long it will last in comparison to the iPhone 18 Pro and iPhone 18 Pro Max. Still, Apple promises that the exterior screen can last for up to 44 hours of video playback, while the larger foldable screen is rated for up to 31 hours. </p><p>That's a little less than the 18 Pro and 18 Pro Max's respective 36 and 45 hours. But considering those phones offer some of the best battery life, with a <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-max-and-18-pro-battery-life-tested-the-results-are-surprising">respective 16 hours 17 minutes and 18 hours 27 minutes in our custom battery test</a>, we expect the iPhone Duo will come out pretty strongly.</p><p>Plus, the iPhone Duo supports up to 60W charging, which is more than you can expect from a lot of other foldables. The Galaxy Z Fold 8 and <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-pro-fold-review">Pixel 11 Pro Fold</a> max out at 45W and 25W, respectively.</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:3258px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="ajMJSzuWMimLz89vjNx9xm" name="Apple Pencil USB-C-6.jpg" alt="Apple Pencil USB-C" src="https://cdn.mos.cms.futurecdn.net/ajMJSzuWMimLz89vjNx9xm-1920-80.jpg" mos="" align="middle" fullscreen="" width="3258" height="1833" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Pairing a foldable phone with a stylus seems like a perfect match, but it's not something that's easy to come by right now. The <a href="https://www.tomsguide.com/phones/motorola-phones/motorola-razr-fold-review">Razr Fold</a> supports its own specialized stylus, as does Oppo's Find N series, but that's about it — and the support is limited to foldables. Apple's going in a different direction, offering support for the existing <a href="https://www.tomsguide.com/hands-on/apple-pencil-usb-c-hands-on-is-this-pen-mightier">Apple Pencil (USB-C)</a>.</p><p>That's the same Apple Pencil that's compatible with almost every recent iPad, even if it isn't the most advanced and feature-rich stylus Apple has to offer. Not only does this mean the iPhone Duo had the productivity boost a stylus offers, it's the same low-cost accessory that a lot of people might already own. </p><h2 id="reasons-to-skip">Reasons to skip</h2><h3 class="article-body__section" id="section-the-price"><span>The 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="DDcGvYcqQtgaTHXB9oD9Gc" name="iphone duo outlook" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/DDcGvYcqQtgaTHXB9oD9Gc-1920-80.jpg" mos="" align="middle" fullscreen="" width="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 biggest downside to iPhone Duo is the same as all foldables phones: The high price tag. With prices starting at $1,999 for a model with 256GB of storage, this is the most expensive iPhone Apple has ever released — $700 more than the iPhone 18 Pro Max.</p><p>That's obviously going to put a lot of people off, especially when you remember that Apple is asking you to sacrifice certain things in the process. Is it worth spending more money just to get the foldable design? <a href="https://www.tomsguide.com/phones/iphones/thats-my-dealbreaker-toms-guide-readers-sound-off-on-iphone-duo-trade-offs-and-if-theyll-buy">Some don't believe that it is.</a></p><h3 class="article-body__section" id="section-no-telephoto-camera"><span>No telephoto 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="46Wveg5fLymtBobG52Ttvb" name="iPhone Duo edit 3" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/46Wveg5fLymtBobG52Ttvb-1920-80.jpg" mos="" align="middle" fullscreen="" width="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 biggest issue with the Duo is that the camera experience is going to be, as a whole, <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-7-features-youre-giving-up-by-not-buying-the-iphone-18-pro-max">worse than you'd get on a non-folding iPhone</a>. The most obvious issue is that there's no telephoto lens, which means you're automatically at a disadvantage for zoomed in photos. </p><p>The iPhone Duo also misses out staple Pro-level camera features like ProRAW photos, ProRES video, LOG recording and spatial photography. Not to mention the fact it's missing iPhone 18 Pro's variable aperture lens and Pro photography controls.</p><p>Some might argue that these are either niche or power-user features, and they may have a point, but it doesn't change the fact that Apple is offering less in the camera department for the iPhone Duo versus the iPhone 18 Pro and Pro Max.</p><h3 class="article-body__section" id="section-magsafe-accessory-support-is-a-little-funky"><span> MagSafe accessory support is a little funky</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="P3tEYZC3x2BZsheo9XqbWc" name="Apple iPhone Duo hands on-6" alt="iPhone Duo hands on" src="https://cdn.mos.cms.futurecdn.net/P3tEYZC3x2BZsheo9XqbWc-1920-80.jpg" mos="" align="middle" fullscreen="" width="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 iPhone Duo supports MagSafe, which is great for wireless charging, but the unique design means it's going to struggle with certain MagSafe-compatible accessories. In fact, we've already seen images of people who <a href="https://www.reddit.com/r/iphone/comments/1whl55w/the_biggest_disappointment_with_the_duo/" target="_blank">tested the foldable with MagSafe wallets</a>, only to find that the phone is too short to support them without some overhang.</p><p>Wallets won't be the only accessories affected by this either. Any MagSafe-friendly accessories that have been designed to fit on regular-sized iPhones are going to fit a little awkwardly on the iPhone Duo — including batteries and some stands. It may not cause many practical problems, but when you have a brand that prides itself on design as much as Apple, it's not ideal for long-standing accessories to suddenly not work. </p><p>You can expect a wide range of iPhone Duo accessories, so stay tuned for our coverage.</p><h3 class="article-body__section" id="section-it-might-be-worth-waiting-for-iphone-duo-2"><span>It might be worth waiting for iPhone Duo 2</span></h3><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="vYM5tTFWZqoCzzH8Kj9EHV" name="iPhone Duo-3" alt="iPhone Duo hands-on pictures" src="https://cdn.mos.cms.futurecdn.net/vYM5tTFWZqoCzzH8Kj9EHV-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 / Jeff Parsons)</span></figcaption></figure><p>The iPhone Duo is Apple's first foldable phone, so it stands to reason that some shoppers will bide their time and wait for the sequel so Apple can work out any possible kinks. </p><p>The things Apple learns in the months following the Duo's release will undoubtedly be used to improve the next generation. Which means waiting a year might be a better use of your money.</p><p>For example, perhaps the next iPhone Duo will support Face ID instead of just Touch ID. Or maybe Apple will find a way to add a telephoto zoom camera while keeping the design compact. </p><h3 class="article-body__section" id="section-iphone-duo-outlook"><span>iPhone Duo outlook</span></h3><p>The iPhone Duo has a lot going for it, from its nano-texture display and durability to Apple's approach to the software and the multiple modes the Duo supports. It should also be the fastest foldable yet.</p><p>However, $2,000 is a lot of money to spend on a phone, even if it can double as a tablet. And you have to be willing to give up certain iPhone 18 Pro features to get Apple's first foldable, such as a telephoto zoom and Face ID. But we're betting a lot of people will be willing to live with these trade-offs.</p><p>Stay tuned for our iPhone Duo review and test results for our final verdict. In the meantime, if you have any questions or agree or disagree with any of my reasons to buy or skip, hit us up in the comments. And if you do plan on pre-ordering the iPhone Duo, check out <a href="https://www.amazon.com/s?k=iphone+duo+accessories&crid=3M4YQHXL6HSOZ&sprefix=%2Caps%2C228&ref=nb_sb_ss_recent_2_0_recent" target="_blank" rel="nofollow">Amazon's lineup of iPhone Duo cases and accessories</a> so your foldable is ready to go on day 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/android-phones/android-17-vs-ios-27-which-platform-does-lock-screen-widgets-the-best">Android 17 vs iOS 27 — which platform does lock screen widgets the best?</a></li><li><a href="https://www.tomsguide.com/phones/iphones/want-the-iphone-duo-without-the-wait-heres-how-to-prep-your-pre-order-ahead-of-time">Want the iPhone Duo without the wait? Here's how to prep your pre-order ahead of time</a></li><li><a href="https://www.tomsguide.com/phones/android-phones/i-turned-my-android-phone-into-a-steam-deck-with-one-app-mobile-gaming-will-never-be-the-same-again-thanks-to-droiddeck">I turned my Android phone into a Steam Deck with one app — mobile gaming will never be the same again thanks to DroidDeck</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Want the iPhone Duo without the wait? Here's how to prep your pre-order ahead of time ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Pre-orders for 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> officially kick off this Friday, but if you want to get your hands on Apple's foldable as soon as humanly possible, there are some things you can do to try and minimize those inevitable delays. We already have a <a href="https://www.tomsguide.com/phones/iphones/planning-to-buy-apples-foldable-iphone-duo-heres-how-to-get-one-on-launch-day">rundown of different tips and tricks you can employ to secure your pre-order</a>, and arguably the most important is preparing everything ahead of time.</p><p>Apple's letting would-be Duo owners set up their entire purchase ahead of pre-orders opening this Friday (October 16) at 8 a.m. ET / 5 a.m. PT. This doesn't let you skip the line in any meaningful way, but it does let you go through the entire ordering process early — effectively saving your iPhone Duo order to your basket ready to checkout later.</p><p>This may not seem like much, but when you're battling legions of people (and scalpers) that are simultaneously trying to secure iPhone Duos for themselves, every second you save could mean knocking days (or weeks) off your delivery estimate.</p><h2 id="how-to-prep-your-iphone-duo-pre-order">How to prep your iPhone Duo pre-order</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2554px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="kneyqNWbvjJbUpej8VaVQa" name="Screenshot 2026-10-13 131128" alt="iphone duo pre-order preparation pages" src="https://cdn.mos.cms.futurecdn.net/kneyqNWbvjJbUpej8VaVQa-1920-80.png" mos="" align="middle" fullscreen="" width="2554" height="1437" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>There's nothing particularly special about the way this process works. You simply <a href="https://www.apple.com/shop/buy-iphone/iphone-duo" target="_blank" rel="nofollow">head to the Apple Store website </a>and work your way through a purchasing page just as you would with any iPhone model. This means picking things like color, storage level, carrier and AppleCare plan, while also securing trade-in quotes and organizing how you're going to pay.</p><p>That last part is probably the biggest time saver. If you're not intending on paying for your device in full, you're going to have to go through all the financial hoops involved in applying for a finance or leasing plan. That's something you may not have been otherwise prepared for, and this way you can get yourself approved ahead of time.</p><p>Heck, even those of you planning to put the whole purchase on a credit card will be able to save yourself the hassle of hurriedly entering all those numbers on Friday morning. Most importantly, this process also lets you get through the verification stage, and <a href="https://www.tomsguide.com/news/ps5-restock-disaster-these-scalpers-really-dont-appreciate-the-bad-press">as we saw with the PS5 restock fiasco of five years ago</a>, being forced into that process can be difference between securing a unit and not.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-W2EK0e"></div>                            </div>                            <script src="https://kwizly.com/embed/W2EK0e.js" async></script><h2 id="things-to-remember">Things to remember</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2069px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="qhuFFnp77MUAKj2RmpTy5a" name="Screenshot 2026-10-13 131345" alt="iphone duo pre-order preparation pages" src="https://cdn.mos.cms.futurecdn.net/qhuFFnp77MUAKj2RmpTy5a-1920-80.png" mos="" align="middle" fullscreen="" width="2069" height="1164" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>There are some things this process does not do, however. The main one to remember is that preparing for a pre-order is not the same as actually pre-ordering. You have to return to the Apple Store to complete the checkout process after 8 a.m. ET on Friday October 16. You're also not obligated to actually follow through with the purchase either, and if you decide against pre-ordering an iPhone Duo you can simply not do that.</p><p>This preparation process also doesn't seem to take into account whether your credit card is at, or close, to your credit limit. My monthly credit limit is (by choice) about $300 less than the price of an iPhone Duo, not counting the cost of carrier activation or AppleCare+. Yet the pre-order preparation process was happy to take my details, and American Express didn't flag any issues during the process.</p><p>Needless to say, you should make sure your purchase isn't going to get declined, or a lot of this effort will go to waste. </p><p>Failing this, you can always try and secure an iPhone Duo from someone else. <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-pre-order-deals-announced-on-at-and-t-heres-how-to-save-usd1-200">AT&T</a> and <a href="https://www.tomsguide.com/phones/iphones/xfinity-mobile-iphone-duo-preorder-confirmed-how-to-save-usd1-000-right-now">Xfinity Mobile </a>are among the carriers that have announced pre-order deals for the iPhone Duo, and if your delivery estimate is too far in the future, you can always try your luck standing in line at your nearest Apple store on October 23.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide </span></h3><ul><li><a href="https://www.tomsguide.com/computing/macos/the-fastest-way-to-sign-documents-on-mac-is-a-secret-feature-hidden-in-plain-sight">The fastest way to sign documents on Mac is a secret feature hidden in plain sight</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-has-a-secret-cooling-system-hiding-inside-its-hinge-and-thats-another-way-it-beats-galaxy-z-fold-8">iPhone Duo has a secret cooling system hiding inside its hinge — and that's another way it beats Galaxy Z Fold 8</a></li><li><a href="https://www.tomsguide.com/phones/apple-gave-the-notes-app-massive-upgrades-in-ios-27-and-now-its-a-legitimate-writing-tool">4 new iOS 27 features that turn Apple Notes into a productivity powerhouse</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/want-the-iphone-duo-without-the-wait-heres-how-to-prep-your-pre-order-ahead-of-time</link>
                                                                            <description>
                            <![CDATA[ Apple's expecting big demand for iPhone Duo, and that means it's letting you prep your pre-order ahead of time. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">hrqtXTi4aNpoeYywGuFT85</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/mvvUtUctkeCiyVuPJRbumc-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 13 Oct 2026 15:08:47 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f-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/mvvUtUctkeCiyVuPJRbumc-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPhone Duo hands on]]></media:description>                                                            <media:text><![CDATA[iPhone Duo hands on]]></media:text>
                                <media:title type="plain"><![CDATA[iPhone Duo hands on]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/mvvUtUctkeCiyVuPJRbumc-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Pre-orders for 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> officially kick off this Friday, but if you want to get your hands on Apple's foldable as soon as humanly possible, there are some things you can do to try and minimize those inevitable delays. We already have a <a href="https://www.tomsguide.com/phones/iphones/planning-to-buy-apples-foldable-iphone-duo-heres-how-to-get-one-on-launch-day">rundown of different tips and tricks you can employ to secure your pre-order</a>, and arguably the most important is preparing everything ahead of time.</p><p>Apple's letting would-be Duo owners set up their entire purchase ahead of pre-orders opening this Friday (October 16) at 8 a.m. ET / 5 a.m. PT. This doesn't let you skip the line in any meaningful way, but it does let you go through the entire ordering process early — effectively saving your iPhone Duo order to your basket ready to checkout later.</p><p>This may not seem like much, but when you're battling legions of people (and scalpers) that are simultaneously trying to secure iPhone Duos for themselves, every second you save could mean knocking days (or weeks) off your delivery estimate.</p><h2 id="how-to-prep-your-iphone-duo-pre-order">How to prep your iPhone Duo pre-order</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2554px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="kneyqNWbvjJbUpej8VaVQa" name="Screenshot 2026-10-13 131128" alt="iphone duo pre-order preparation pages" src="https://cdn.mos.cms.futurecdn.net/kneyqNWbvjJbUpej8VaVQa-1920-80.png" mos="" align="middle" fullscreen="" width="2554" height="1437" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>There's nothing particularly special about the way this process works. You simply <a href="https://www.apple.com/shop/buy-iphone/iphone-duo" target="_blank" rel="nofollow">head to the Apple Store website </a>and work your way through a purchasing page just as you would with any iPhone model. This means picking things like color, storage level, carrier and AppleCare plan, while also securing trade-in quotes and organizing how you're going to pay.</p><p>That last part is probably the biggest time saver. If you're not intending on paying for your device in full, you're going to have to go through all the financial hoops involved in applying for a finance or leasing plan. That's something you may not have been otherwise prepared for, and this way you can get yourself approved ahead of time.</p><p>Heck, even those of you planning to put the whole purchase on a credit card will be able to save yourself the hassle of hurriedly entering all those numbers on Friday morning. Most importantly, this process also lets you get through the verification stage, and <a href="https://www.tomsguide.com/news/ps5-restock-disaster-these-scalpers-really-dont-appreciate-the-bad-press">as we saw with the PS5 restock fiasco of five years ago</a>, being forced into that process can be difference between securing a unit and not.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-W2EK0e"></div>                            </div>                            <script src="https://kwizly.com/embed/W2EK0e.js" async></script><h2 id="things-to-remember">Things to remember</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2069px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="qhuFFnp77MUAKj2RmpTy5a" name="Screenshot 2026-10-13 131345" alt="iphone duo pre-order preparation pages" src="https://cdn.mos.cms.futurecdn.net/qhuFFnp77MUAKj2RmpTy5a-1920-80.png" mos="" align="middle" fullscreen="" width="2069" height="1164" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>There are some things this process does not do, however. The main one to remember is that preparing for a pre-order is not the same as actually pre-ordering. You have to return to the Apple Store to complete the checkout process after 8 a.m. ET on Friday October 16. You're also not obligated to actually follow through with the purchase either, and if you decide against pre-ordering an iPhone Duo you can simply not do that.</p><p>This preparation process also doesn't seem to take into account whether your credit card is at, or close, to your credit limit. My monthly credit limit is (by choice) about $300 less than the price of an iPhone Duo, not counting the cost of carrier activation or AppleCare+. Yet the pre-order preparation process was happy to take my details, and American Express didn't flag any issues during the process.</p><p>Needless to say, you should make sure your purchase isn't going to get declined, or a lot of this effort will go to waste. </p><p>Failing this, you can always try and secure an iPhone Duo from someone else. <a href="https://www.tomsguide.com/phones/iphones/iphone-duo-pre-order-deals-announced-on-at-and-t-heres-how-to-save-usd1-200">AT&T</a> and <a href="https://www.tomsguide.com/phones/iphones/xfinity-mobile-iphone-duo-preorder-confirmed-how-to-save-usd1-000-right-now">Xfinity Mobile </a>are among the carriers that have announced pre-order deals for the iPhone Duo, and if your delivery estimate is too far in the future, you can always try your luck standing in line at your nearest Apple store on October 23.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide </span></h3><ul><li><a href="https://www.tomsguide.com/computing/macos/the-fastest-way-to-sign-documents-on-mac-is-a-secret-feature-hidden-in-plain-sight">The fastest way to sign documents on Mac is a secret feature hidden in plain sight</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-duo-has-a-secret-cooling-system-hiding-inside-its-hinge-and-thats-another-way-it-beats-galaxy-z-fold-8">iPhone Duo has a secret cooling system hiding inside its hinge — and that's another way it beats Galaxy Z Fold 8</a></li><li><a href="https://www.tomsguide.com/phones/apple-gave-the-notes-app-massive-upgrades-in-ios-27-and-now-its-a-legitimate-writing-tool">4 new iOS 27 features that turn Apple Notes into a productivity powerhouse</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Huge Apple sale at Amazon takes up to $500 off MacBooks, AirPods and more ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Don't want to wait for Black Friday? Apple tech will (most likely) be cheaper during next month's Black Friday sales, but if you want an upgrade now, there are plenty of great apple deals to be had.</p><p>Right now Amazon is offering deals on <a href="https://www.amazon.com/stores/Apple/page/77D9E1F7-0337-4282-9DB6-B6B8FB2DC98D" target="_blank" rel="nofollow">AirPods, MacBooks and accessories starting from just $14</a>. One of my favorite deals right now is the <a href="https://www.amazon.com/Apple-AirTag-2nd-Generation-Precision/dp/B0GJTXVN9Z" target="_blank" rel="nofollow">AirTag 4-Pack on sale for $89</a>. Just attach an AirTag to anything you want to keep track of, and you can use the Find My app on your iPhone to find it if it gets lost.</p><p>Keep scrolling to see all my favorite deals!</p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links</span></h3><ul><li><strong></strong><a href="https://www.amazon.com/stores/Apple/page/77D9E1F7-0337-4282-9DB6-B6B8FB2DC98D?" target="_blank" rel="nofollow"><strong>shop all Apple deals on Amazon</strong></a><strong>   </strong></li><li><strong>Apple EarPods (Lightning): </strong><a href="https://www.amazon.com/Apple-EarPods-Headphones-Lightning-Connector/dp/B0D7FVQ1ZB/" target="_blank" rel="nofollow"><strong>was $19 now $15</strong></a></li><li><strong>Apple AirTag: </strong><a href="https://www.amazon.com/gp/aw/d/B0GJTFXNRX/" target="_blank" rel="nofollow"><strong>was $29 now $24</strong></a></li><li><strong>Apple Watch 12: </strong><a href="https://www.amazon.com/dp/B0HJB63G4M" target="_blank" rel="nofollow"><strong>was $399 now $389</strong></a></li><li><strong>11" iPad Air (M4): </strong><a href="https://www.amazon.com/Apple-iPad-Air-11-inch-M4/dp/B0GQVPX1PJ" target="_blank" rel="nofollow"><strong>was $749 now $729</strong></a><strong></strong></li><li><strong>Mac mini (M6): </strong><a href="https://www.amazon.com/Apple-2026-mini-Desktop-Computer/dp/B0HGGJZ92H" target="_blank" rel="nofollow"><strong>was $899 now $779</strong></a></li><li><strong>15" MacBook Air (M5): </strong><a href="https://www.amazon.com/Apple-2026-MacBook-15-inch-Laptop/dp/B0GR1N82GJ" target="_blank" rel="nofollow"><strong>was $1,499 now $1,399</strong></a><strong></strong></li></ul><h3 class="article-body__section" id="section-accessories"><span>Accessories</span></h3><div class="product"><a data-dimension112="d8a7746c-c707-11f1-ba4c-f9f2bec03b00" data-action="Deal Block" data-label="20W USB-C Compact Power Adapter" data-dimension48="20W USB-C Compact Power Adapter" data-dimension25="$14" href="https://www.amazon.com/Apple-20W-USB-C-Power-Adapter/dp/B0DJFW7PNM" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:649px;"><p class="vanilla-image-block" style="padding-top:149.61%;"><img id="mhEQ7c2rj34AhoPSdBToNX" name="20W USB-C Compact Power Adapter" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/mhEQ7c2rj34AhoPSdBToNX-1920-80.jpg" mos="" align="middle" fullscreen="" width="649" height="971" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Apple-20W-USB-C-Power-Adapter/dp/B0DJFW7PNM" target="_blank" rel="nofollow" data-dimension112="d8a7746c-c707-11f1-ba4c-f9f2bec03b00" data-action="Deal Block" data-label="20W USB-C Compact Power Adapter" data-dimension48="20W USB-C Compact Power Adapter" data-dimension25="$14">20W USB-C Compact Power Adapter: was $19 now $14</a></strong><br>This is one of those essentials everyone needs, so you might as well buy one while it's on sale. It offers 20W fast charging for iPhone 8 and up.<a class="view-deal button" href="https://www.amazon.com/Apple-20W-USB-C-Power-Adapter/dp/B0DJFW7PNM" target="_blank" rel="nofollow" data-dimension112="d8a7746c-c707-11f1-ba4c-f9f2bec03b00" data-action="Deal Block" data-label="20W USB-C Compact Power Adapter" data-dimension48="20W USB-C Compact Power Adapter" data-dimension25="$14">View Deal</a></p></div><div class="product"><a data-dimension112="d8a774d0-c707-11f1-89dc-6781861adeb5" data-action="Deal Block" data-label="EarPods (Lightning)" data-dimension48="EarPods (Lightning)" data-dimension25="$15" href="https://www.amazon.com/Apple-EarPods-Headphones-Lightning-Connector/dp/B0D7FVQ1ZB/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1040px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="Ys3T2v7S48cnc2sK2hLS9U" name="apple earpods with lightning connector.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/Ys3T2v7S48cnc2sK2hLS9U-1920-80.jpg" mos="" align="middle" fullscreen="" width="1040" height="1040" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Apple-EarPods-Headphones-Lightning-Connector/dp/B0D7FVQ1ZB/" target="_blank" rel="nofollow" data-dimension112="d8a774d0-c707-11f1-89dc-6781861adeb5" data-action="Deal Block" data-label="EarPods (Lightning)" data-dimension48="EarPods (Lightning)" data-dimension25="$15">EarPods (Lightning): was $19 now $15</a></strong><br>If you like listening to your music the old-fashioned way, this pair of wired EarPods has a Lightning connector, allowing them to be used with older Apple devices. For this price, you might as well grab a pair!<a class="view-deal button" href="https://www.amazon.com/Apple-EarPods-Headphones-Lightning-Connector/dp/B0D7FVQ1ZB/" target="_blank" rel="nofollow" data-dimension112="d8a774d0-c707-11f1-89dc-6781861adeb5" data-action="Deal Block" data-label="EarPods (Lightning)" data-dimension48="EarPods (Lightning)" data-dimension25="$15">View Deal</a></p></div><div class="product"><a data-dimension112="d8a7753e-c707-11f1-bcdd-9fe8dcc2cdc1" data-action="Deal Block" data-label="AirTag (2nd Gen)" data-dimension48="AirTag (2nd Gen)" data-dimension25="$24" href="https://www.amazon.com/gp/aw/d/B0GJTFXNRX/" 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="EzmCNB37HYZTKq3XSMqvTY" name="Apple AirTag 2 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/EzmCNB37HYZTKq3XSMqvTY-1920-80.jpg" mos="" align="middle" fullscreen="" width="600" height="600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/gp/aw/d/B0GJTFXNRX/" target="_blank" rel="nofollow" data-dimension112="d8a7753e-c707-11f1-bcdd-9fe8dcc2cdc1" data-action="Deal Block" data-label="AirTag (2nd Gen)" data-dimension48="AirTag (2nd Gen)" data-dimension25="$24">AirTag (2nd Gen): was $29 now $24</a></strong><br>Apple's second generation AirTag offers better range, precision finding, a louder speaking and a bunch of extra improvements to help you track your lost keys and bags.<a class="view-deal button" href="https://www.amazon.com/gp/aw/d/B0GJTFXNRX/" target="_blank" rel="nofollow" data-dimension112="d8a7753e-c707-11f1-bcdd-9fe8dcc2cdc1" data-action="Deal Block" data-label="AirTag (2nd Gen)" data-dimension48="AirTag (2nd Gen)" data-dimension25="$24">View Deal</a></p></div><div class="product"><a data-dimension112="d8a775a2-c707-11f1-97b4-e391dd52462d" data-action="Deal Block" data-label="240W USB-C to USB-C Woven Charge Cable (2 m)" data-dimension48="240W USB-C to USB-C Woven Charge Cable (2 m)" data-dimension25="$24" href="https://www.amazon.com/Apple-USB-C-Woven-Charge-Cable/dp/B0DCH5B2HF" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:71.07%;"><img id="H37kKia68mrqHSBwHDsVRJ" name="240W USB-C to USB-C Woven Charge Cable (2 m)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/H37kKia68mrqHSBwHDsVRJ-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="1066" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Apple-USB-C-Woven-Charge-Cable/dp/B0DCH5B2HF" target="_blank" rel="nofollow" data-dimension112="d8a775a2-c707-11f1-97b4-e391dd52462d" data-action="Deal Block" data-label="240W USB-C to USB-C Woven Charge Cable (2 m)" data-dimension48="240W USB-C to USB-C Woven Charge Cable (2 m)" data-dimension25="$24">240W USB-C to USB-C Woven Charge Cable (2 m): was $29 now $24</a></strong><br>Another essential you don't want to go without. I have mostly USB-A to USB-C cables, so I definitely need to grab one of these for when a USB-A charging port isn't available — plus it's $5 off.<a class="view-deal button" href="https://www.amazon.com/Apple-USB-C-Woven-Charge-Cable/dp/B0DCH5B2HF" target="_blank" rel="nofollow" data-dimension112="d8a775a2-c707-11f1-97b4-e391dd52462d" data-action="Deal Block" data-label="240W USB-C to USB-C Woven Charge Cable (2 m)" data-dimension48="240W USB-C to USB-C Woven Charge Cable (2 m)" data-dimension25="$24">View Deal</a></p></div><div class="product"><a data-dimension112="d8a77606-c707-11f1-96ea-3d6358f8d182" data-action="Deal Block" data-label="Pencil (USB-C)" data-dimension48="Pencil (USB-C)" data-dimension25="$69" href="https://www.amazon.com/Apple-MUWA3AM-A-Pencil-USB-C/dp/B0CL7J12YK" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:500px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="LCuHYQPiVnordwa3UuoKE6" name="1721134277.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/LCuHYQPiVnordwa3UuoKE6-1920-80.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Apple-MUWA3AM-A-Pencil-USB-C/dp/B0CL7J12YK" target="_blank" rel="nofollow" data-dimension112="d8a77606-c707-11f1-96ea-3d6358f8d182" data-action="Deal Block" data-label="Pencil (USB-C)" data-dimension48="Pencil (USB-C)" data-dimension25="$69">Pencil (USB-C): was $79 now $69</a></strong><br>If you want a stylus that covers the basics, than the Apple Pencil USB-C is the one for you. With pixel-perfect precision, low-latency and magnets to attach to your tablet, this is the no-frills approach to writing ad drawing on your tablet.<a class="view-deal button" href="https://www.amazon.com/Apple-MUWA3AM-A-Pencil-USB-C/dp/B0CL7J12YK" target="_blank" rel="nofollow" data-dimension112="d8a77606-c707-11f1-96ea-3d6358f8d182" data-action="Deal Block" data-label="Pencil (USB-C)" data-dimension48="Pencil (USB-C)" data-dimension25="$69">View Deal</a></p></div><div class="product"><a data-dimension112="d8a77674-c707-11f1-9e73-1b778051e563" data-action="Deal Block" data-label="AirTag (2nd Gen)" data-dimension48="AirTag (2nd Gen)" data-dimension25="$89" href="https://www.amazon.com/Apple-AirTag-2nd-Generation-Precision/dp/B0GJTXVN9Z" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:900px;"><p class="vanilla-image-block" style="padding-top:133.33%;"><img id="HCUqWkUuUEZJCvXyEu4wwk" name="Apple - AirTag 4 pack (2nd generation) - 2026 - White" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/HCUqWkUuUEZJCvXyEu4wwk-1920-80.jpg" mos="" align="middle" fullscreen="" width="900" height="1200" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Score a four-pack of Apple AirTag (2nd Gen) keyfinders with a discount. If you have a lot of stuff you need to keep track of, this deal is one of the best ways to do it! Apple's second generation AirTag offers better range, precision finding, a louder speaking and a bunch of extra improvements to help you track your lost keys and bags.<a class="view-deal button" href="https://www.amazon.com/Apple-AirTag-2nd-Generation-Precision/dp/B0GJTXVN9Z" target="_blank" rel="nofollow" data-dimension112="d8a77674-c707-11f1-9e73-1b778051e563" data-action="Deal Block" data-label="AirTag (2nd Gen)" data-dimension48="AirTag (2nd Gen)" data-dimension25="$89">View Deal</a></p></div><div class="product"><a data-dimension112="7ae56cfa-c70a-11f1-a4b2-23fe5afdd0df" data-action="Deal Block" data-label="Magic Trackpad" data-dimension48="Magic Trackpad" data-dimension25="$115" href="https://www.amazon.com/Apple-Magic-Trackpad-Multi-Touch-Surface/dp/B0DL6ZN6GK" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1007px;"><p class="vanilla-image-block" style="padding-top:21.35%;"><img id="zFbS4rzma3VgrgQFqNpH5" name="Magic Trackpad" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/zFbS4rzma3VgrgQFqNpH5-1920-80.jpg" mos="" align="middle" fullscreen="" width="1007" height="215" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>$115 is the lowest price ever for this Apple accessory. The Magic Trackpad pairs automatically with Mac devices, has month-long battery and is pressure sensitive. Basically, it's a simple way to make your work more efficient and comfortable.<a class="view-deal button" href="https://www.amazon.com/Apple-Magic-Trackpad-Multi-Touch-Surface/dp/B0DL6ZN6GK" target="_blank" rel="nofollow" data-dimension112="7ae56cfa-c70a-11f1-a4b2-23fe5afdd0df" data-action="Deal Block" data-label="Magic Trackpad" data-dimension48="Magic Trackpad" data-dimension25="$115">View Deal</a></p></div><h3 class="article-body__section" id="section-apple-watch"><span>Apple Watch</span></h3><div class="product"><a data-dimension112="7ae56d86-c70a-11f1-a670-c72faf9d524b" data-action="Deal Block" data-label="Watch SE 3 (GPS/42mm)" data-dimension48="Watch SE 3 (GPS/42mm)" data-dimension25="$219" href="https://www.amazon.com/dp/B0HJB1CGR3" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1250px;"><p class="vanilla-image-block" style="padding-top:120.00%;"><img id="P5u4zYQs5ZvG5TAnrthGhE" name="Apple Watch SE 3 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/P5u4zYQs5ZvG5TAnrthGhE-1920-80.jpg" mos="" align="middle" fullscreen="" width="1250" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0HJB1CGR3" target="_blank" rel="nofollow" data-dimension112="7ae56d86-c70a-11f1-a670-c72faf9d524b" data-action="Deal Block" data-label="Watch SE 3 (GPS/42mm)" data-dimension48="Watch SE 3 (GPS/42mm)" data-dimension25="$219">Watch SE 3 (GPS/42mm): was $249 now $219</a></strong><br>The Apple Watch SE 3 sports a lot of new features that redefine Apple's entry-level smartwatch. Among them, you'll find an always-on display, S10 processor, and better health features, such as support for Sleep Score and Workout Buddy. (The latter is powered by Apple Intelligence and requires an iPhone 15 Pro or higher). In our <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-se-3-review">Apple Watch SE 3 review</a>, we called it the best smartwatch value around.<a class="view-deal button" href="https://www.amazon.com/dp/B0HJB1CGR3" target="_blank" rel="nofollow" data-dimension112="7ae56d86-c70a-11f1-a670-c72faf9d524b" data-action="Deal Block" data-label="Watch SE 3 (GPS/42mm)" data-dimension48="Watch SE 3 (GPS/42mm)" data-dimension25="$219">View Deal</a></p></div><div class="product"><a data-dimension112="d8a77868-c707-11f1-9c74-39b0bb00a381" data-action="Deal Block" data-label="Watch Series 12" data-dimension48="Watch Series 12" data-dimension25="$389" href="https://www.amazon.com/dp/B0HJBCX8VS" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1298px;"><p class="vanilla-image-block" style="padding-top:115.56%;"><img id="dj8YUEM5aawJ85g5ZY8J69" name="Apple Watch 12 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/dj8YUEM5aawJ85g5ZY8J69-1920-80.jpg" mos="" align="middle" fullscreen="" width="1298" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0HJBCX8VS" target="_blank" rel="nofollow" data-dimension112="d8a77868-c707-11f1-9c74-39b0bb00a381" data-action="Deal Block" data-label="Watch Series 12" data-dimension48="Watch Series 12" data-dimension25="$389">Watch Series 12: was $399 now $389</a></strong><br>The Apple Watch 12 features an upgraded S11 processor, improved heart rate and heart rate variability (HRV) tracking, new Readiness metric, new Health Age score, and a redesigned Health app with improved recovery insights and personalized AI health/fitness guidance. In our <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-series-12-review">Apple Watch 12 review</a>, we said its continuous heart-rate sensing and better recovery information make it a must buy for Apple fans.<a class="view-deal button" href="https://www.amazon.com/dp/B0HJBCX8VS" target="_blank" rel="nofollow" data-dimension112="d8a77868-c707-11f1-9c74-39b0bb00a381" data-action="Deal Block" data-label="Watch Series 12" data-dimension48="Watch Series 12" data-dimension25="$389">View Deal</a></p></div><div class="product"><a data-dimension112="7ae56df4-c70a-11f1-9acd-b7550b3609bb" data-action="Deal Block" data-label="Watch Ultra 3" data-dimension48="Watch Ultra 3" data-dimension25="$699" href="https://www.amazon.com/Apple-Cellular-Multisport-Smartwatch-Titanium/dp/B0FQG17FTN" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1345px;"><p class="vanilla-image-block" style="padding-top:111.52%;"><img id="boqhtatymKJ4MYpDXZJLoM" name="Apple Watch Ultra 3 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/boqhtatymKJ4MYpDXZJLoM-1920-80.jpg" mos="" align="middle" fullscreen="" width="1345" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Apple Watch Ultra 3 has several features that make it an epic smartwatch, including a 42-hour battery life and an extremely large, bright display. The Apple Watch Ultra 3 also comes with precision dual-frequency GPS + Cellular connectivity and new built-in satellite for emergency communications. In our <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-ultra-3-review" data-dimension112="7ae56df4-c70a-11f1-9acd-b7550b3609bb" data-action="Deal Block" data-label="Watch Ultra 3" data-dimension48="Watch Ultra 3" data-dimension25="$699">Apple Watch Ultra 3 review</a>, we called it the ultimate wearable. However, note that the newer Apple Watch Ultra 4 is now available.<a class="view-deal button" href="https://www.amazon.com/Apple-Cellular-Multisport-Smartwatch-Titanium/dp/B0FQG17FTN" target="_blank" rel="nofollow" data-dimension112="7ae56df4-c70a-11f1-9acd-b7550b3609bb" data-action="Deal Block" data-label="Watch Ultra 3" data-dimension48="Watch Ultra 3" data-dimension25="$699">View Deal</a></p></div><h3 class="article-body__section" id="section-mac"><span>Mac</span></h3><div class="product"><a data-dimension112="7ae56ebc-c70a-11f1-b85e-154ba4fe7340" data-action="Deal Block" data-label="Mac mini M6" data-dimension48="Mac mini M6" data-dimension25="$779" href="https://www.amazon.com/Apple-2026-mini-Desktop-Computer/dp/B0HGGJZ92H" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:990px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="JTeh5dZUAWCmJHNFpFpmZZ" name="Mac mini M6" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/JTeh5dZUAWCmJHNFpFpmZZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="990" height="990" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Mac mini M6 keeps the ultra-compact 5x5-inch design introduced with the prior generation, but packs major performance upgrades under the hood. You get the raw speed of Apple's M6 chip, upgraded graphics with hardware-accelerated ray tracing for better 1080p gaming, 16GB of unified memory, and improved connectivity thanks to Apple's custom N1 chip, which adds Wi-Fi 7, Bluetooth 6.0, and Thread support. This deal is $10 above its lowest price ever of $769.<a class="view-deal button" href="https://www.amazon.com/Apple-2026-mini-Desktop-Computer/dp/B0HGGJZ92H" target="_blank" rel="nofollow" data-dimension112="7ae56ebc-c70a-11f1-b85e-154ba4fe7340" data-action="Deal Block" data-label="Mac mini M6" data-dimension48="Mac mini M6" data-dimension25="$779">View Deal</a></p></div><div class="product"><a data-dimension112="7ae56f20-c70a-11f1-bf3a-af0d9cb82735" data-action="Deal Block" data-label="Mac Studio M5 Max" data-dimension48="Mac Studio M5 Max" data-dimension25="$2299" href="https://www.amazon.com/Apple-2026-Studio-Desktop-Computer/dp/B0HGKSQMX6" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:48.93%;"><img id="YNRAcdiJezmYBiKgftV4gi" name="Mac Studio M5 Max" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/YNRAcdiJezmYBiKgftV4gi-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="734" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Apple-2026-Studio-Desktop-Computer/dp/B0HGKSQMX6" target="_blank" rel="nofollow" data-dimension112="7ae56f20-c70a-11f1-bf3a-af0d9cb82735" data-action="Deal Block" data-label="Mac Studio M5 Max" data-dimension48="Mac Studio M5 Max" data-dimension25="$2299">Mac Studio M5 Max: was $2499 now $2299</a></strong><br>Apple's powerful desktop computer, the Mac Studio, is on sale with $200 off — its lowest price ever. We checked out the M5 Ultra version of this computer in our <a href="https://www.tomsguide.com/computing/apple-desktops/apple-mac-studio-m5-ultra-review">Mac Studio M5 Ultra review</a> and pointed out that Apple's M5 Max and M5 Ultra chips run rings around the new base M6 chip in terms of performance.<a class="view-deal button" href="https://www.amazon.com/Apple-2026-Studio-Desktop-Computer/dp/B0HGKSQMX6" target="_blank" rel="nofollow" data-dimension112="7ae56f20-c70a-11f1-bf3a-af0d9cb82735" data-action="Deal Block" data-label="Mac Studio M5 Max" data-dimension48="Mac Studio M5 Max" data-dimension25="$2299">View Deal</a></p></div><h3 class="article-body__section" id="section-airpods"><span>AirPods</span></h3><div class="product"><a data-dimension112="7ae56fe8-c70a-11f1-bbda-a721b877f607" data-action="Deal Block" data-label="AirPods Pro 3" data-dimension48="AirPods Pro 3" data-dimension25="$199" href="https://www.amazon.com/Apple-Cancellation-Translation-Headphones-High-Fidelity/dp/B0FQFB8FMG" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:842px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="FYzcjQSdtuwidVacXmMNL5" name="AirPods Pro 3.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/FYzcjQSdtuwidVacXmMNL5-1920-80.jpg" mos="" align="middle" fullscreen="" width="842" height="842" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The AirPods Pro 3 bring the heat with 10 hours of battery life, improved sound, and superior active noise canceling. In our <a href="https://www.tomsguide.com/audio/airpods/apple-airpods-pro-3-review" data-dimension112="7ae56fe8-c70a-11f1-bbda-a721b877f607" data-action="Deal Block" data-label="AirPods Pro 3" data-dimension48="AirPods Pro 3" data-dimension25="$199">AirPods Pro 3 review</a> we said the Editor's Choice buds deliver the upgrade iPhone users have been waiting for with improved battery life, stronger noise cancellation, and smart new features like Live Translation, which delivers real-time translations to your ears. <strong>Note: </strong>these have sold for $169 in the past.<a class="view-deal button" href="https://www.amazon.com/Apple-Cancellation-Translation-Headphones-High-Fidelity/dp/B0FQFB8FMG" target="_blank" rel="nofollow" data-dimension112="7ae56fe8-c70a-11f1-bbda-a721b877f607" data-action="Deal Block" data-label="AirPods Pro 3" data-dimension48="AirPods Pro 3" data-dimension25="$199">View Deal</a></p></div><div class="product"><a data-dimension112="7ae5704c-c70a-11f1-b964-3dbf2ab493b3" data-action="Deal Block" data-label="AirPods Max 2" data-dimension48="AirPods Max 2" data-dimension25="$449" href="https://www.amazon.com/dp/B0GSS72GZJ" 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="TSi2XMUrFhYn5nqrGBsd59" name="airpods max 2 deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/TSi2XMUrFhYn5nqrGBsd59-1920-80.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>These are some of the best headphones we've ever used. With seamless Apple ecosystem integration, well-balanced sound, and excellent comfort, the AirPods Max 2 will make you want to listen to music. You have to try them to believe them and at this price, it's almost a steal. <strong>Note: </strong>these have sold for $399 in the past.<a class="view-deal button" href="https://www.amazon.com/dp/B0GSS72GZJ" target="_blank" rel="nofollow" data-dimension112="7ae5704c-c70a-11f1-b964-3dbf2ab493b3" data-action="Deal Block" data-label="AirPods Max 2" data-dimension48="AirPods Max 2" data-dimension25="$449">View Deal</a></p></div><h3 class="article-body__section" id="section-ipads"><span>iPads</span></h3><div class="product"><a data-dimension112="e8643c0c-cbce-11f1-80d4-9b039144c888" data-action="Deal Block" data-label="11" iPad (Wi-Fi/128GB)" data-dimension48="11" iPad (Wi-Fi/128GB)" data-dimension25="$399" href="https://www.amazon.com/Apple-iPad-11-inch-Display-All-Day/dp/B0DZ77D5HL" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1325px;"><p class="vanilla-image-block" style="padding-top:113.21%;"><img id="oi25obYHzoyNfMHoycGamh" name="iPad 2022 Blue.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/oi25obYHzoyNfMHoycGamh-1920-80.jpg" mos="" align="middle" fullscreen="" width="1325" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Apple-iPad-11-inch-Display-All-Day/dp/B0DZ77D5HL" target="_blank" rel="nofollow" data-dimension112="e8643c0c-cbce-11f1-80d4-9b039144c888" data-action="Deal Block" data-label='11" iPad (Wi-Fi/128GB)' data-dimension48='11" iPad (Wi-Fi/128GB)' data-dimension25="$399">11" iPad (Wi-Fi/128GB): was $449 now $399</a></strong><br>The 2025 iPad features a larger 11-inch (2360 x 1640) screen, A16 CPU, 12MP rear/front cameras, USB-C connectivity, and Magic Keyboard Folio ($249) support. The base model features 128GB of storage, which is double the capacity of its predecessor. It's available in 128GB, 256GB, and 512GB capacities. <strong>Note:</strong> Apple increased its price to $449 in June.<a class="view-deal button" href="https://www.amazon.com/Apple-iPad-11-inch-Display-All-Day/dp/B0DZ77D5HL" target="_blank" rel="nofollow" data-dimension112="e8643c0c-cbce-11f1-80d4-9b039144c888" data-action="Deal Block" data-label="11" iPad (Wi-Fi/128GB)" data-dimension48="11" iPad (Wi-Fi/128GB)" data-dimension25="$399">View Deal</a></p></div><div class="product"><a data-dimension112="d8a77930-c707-11f1-b61a-d54bd086ce48" data-action="Deal Block" data-label="iPad mini 7" data-dimension48="iPad mini 7" data-dimension25="$569" href="https://www.amazon.com/dp/B0DK3W4YHS" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1203px;"><p class="vanilla-image-block" style="padding-top:124.69%;"><img id="G2PjHEjHsRfuddfWSzPBjd" name="iPad mini 2024 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/G2PjHEjHsRfuddfWSzPBjd-1920-80.jpg" mos="" align="middle" fullscreen="" width="1203" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The iPad mini is getting a discount, and any price cut to this small tablet is welcome. We're big fans of its incredibly portable design and long battery life (it lasted 10 hours in our battery life tests.) It comes with speedy performance thanks to Apple's A17 Pro chip, and has a gorgeous 8.3-inch (2,266 x 1,488) Liquid Retina display. You also get 12MP cameras on the front and back and Wi-Fi 6e support. In our <a href="https://www.tomsguide.com/tablets/ipads/ipad-mini-7-review" data-dimension112="d8a77930-c707-11f1-b61a-d54bd086ce48" data-action="Deal Block" data-label="iPad mini 7" data-dimension48="iPad mini 7" data-dimension25="$569">iPad mini 7 review</a>, we said it delivers the full iPad experience in a tiny size. <a class="view-deal button" href="https://www.amazon.com/dp/B0DK3W4YHS" target="_blank" rel="nofollow" data-dimension112="d8a77930-c707-11f1-b61a-d54bd086ce48" data-action="Deal Block" data-label="iPad mini 7" data-dimension48="iPad mini 7" data-dimension25="$569">View Deal</a></p></div><div class="product"><a data-dimension112="d8a77994-c707-11f1-818a-7f73897e547c" data-action="Deal Block" data-label="11" iPad Air (WiFi/128GB)" data-dimension48="11" iPad Air (WiFi/128GB)" data-dimension25="$729" href="https://www.amazon.com/Apple-iPad-Air-11-inch-M4/dp/B0GQVPX1PJ" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1325px;"><p class="vanilla-image-block" style="padding-top:113.21%;"><img id="NVZkwX7FuVd3CYdiYHdsgm" name="iPad Air 11 2024 deal block.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/NVZkwX7FuVd3CYdiYHdsgm-1920-80.jpg" mos="" align="middle" fullscreen="" width="1325" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Apple-iPad-Air-11-inch-M4/dp/B0GQVPX1PJ" target="_blank" rel="nofollow" data-dimension112="d8a77994-c707-11f1-818a-7f73897e547c" data-action="Deal Block" data-label='11" iPad Air (WiFi/128GB)' data-dimension48='11" iPad Air (WiFi/128GB)' data-dimension25="$729">11" iPad Air (WiFi/128GB): was $749 now $729</a></strong><br>The 2026 iPad Air packs Apple's M4 processor, which Apple states is up to 30 percent faster than iPad Air with M3. It also has an 11-inch LED (2360 x 1640) display, 128GB of storage, 12MP rear camera, and 12MP front camera. The tablet now supports Wi-Fi 7 a well as Bluetooth 6 and Thread. In our <a href="https://www.tomsguide.com/computing/ipads/apple-ipad-air-m4-review-small-tweaks-to-the-gold-standard">iPad Air M4 review</a>, we said the upgrades are modest, but the iPad Air remains the best tablet out there. <a class="view-deal button" href="https://www.amazon.com/Apple-iPad-Air-11-inch-M4/dp/B0GQVPX1PJ" target="_blank" rel="nofollow" data-dimension112="d8a77994-c707-11f1-818a-7f73897e547c" data-action="Deal Block" data-label="11" iPad Air (WiFi/128GB)" data-dimension48="11" iPad Air (WiFi/128GB)" data-dimension25="$729">View Deal</a></p></div><h3 class="article-body__section" id="section-macbooks"><span>MacBooks</span></h3><div class="product"><a data-dimension112="d8a77a5c-c707-11f1-ba07-452dbb75ba45" data-action="Deal Block" data-label="MacBook Neo (256GB)" data-dimension48="MacBook Neo (256GB)" data-dimension25="$689" href="https://www.amazon.com/dp/B0GR6FHGXX?" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:61.07%;"><img id="Lg4Dvg68j9SbB5CPNrTEpH" name="MacBook Neo deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/Lg4Dvg68j9SbB5CPNrTEpH-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="916" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0GR6FHGXX?" target="_blank" rel="nofollow" data-dimension112="d8a77a5c-c707-11f1-ba07-452dbb75ba45" data-action="Deal Block" data-label="MacBook Neo (256GB)" data-dimension48="MacBook Neo (256GB)" data-dimension25="$689">MacBook Neo (256GB): was $699 now $689</a></strong><br>The MacBook Neo sports a 13-inch Liquid Retina (2408 x 1506) display, A18 Pro chipset, 8GB of RAM, 256GB SSD, and 1080p FaceTime HD camera. There's also the option to add TouchID and a 512GB SSD for a total price of $699. The 2.7-lb. laptop is available in Indigo, Blush, Citrus, and Silver. In our <a href="https://www.tomsguide.com/computing/macbooks/apple-macbook-neo-review">MacBook Neo review</a>, we said no other laptop comes close to the Neo in terms of bang for your buck. <a class="view-deal button" href="https://www.amazon.com/dp/B0GR6FHGXX?" target="_blank" rel="nofollow" data-dimension112="d8a77a5c-c707-11f1-ba07-452dbb75ba45" data-action="Deal Block" data-label="MacBook Neo (256GB)" data-dimension48="MacBook Neo (256GB)" data-dimension25="$689">View Deal</a></p></div><div class="product"><a data-dimension112="d8a77ac0-c707-11f1-943c-3156deba4a79" data-action="Deal Block" data-label="15" MacBook Air (M5)" data-dimension48="15" MacBook Air (M5)" data-dimension25="$1399" href="https://www.amazon.com/Apple-2026-MacBook-15-inch-Laptop/dp/B0GR1N82GJ" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:60.73%;"><img id="R5hxVnj9RteJKiej8tQbLH" name="MacBook Air M5 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/R5hxVnj9RteJKiej8tQbLH-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="911" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Apple-2026-MacBook-15-inch-Laptop/dp/B0GR1N82GJ" target="_blank" rel="nofollow" data-dimension112="d8a77ac0-c707-11f1-943c-3156deba4a79" data-action="Deal Block" data-label='15" MacBook Air (M5)' data-dimension48='15" MacBook Air (M5)' data-dimension25="$1399">15" MacBook Air (M5): was $1499 now $1399</a></strong><br>The 15-inch MacBook Air M5 is one of the devices that got hit by the Apple price hikes, but right now you can get it for $100 off. This laptop features a 15.3-inch (2880 x 1864) display, Apple M5 chipset, 16GB of RAM, 512GB SSD and support for WiFi 7 and Bluetooth 6. <a class="view-deal button" href="https://www.amazon.com/Apple-2026-MacBook-15-inch-Laptop/dp/B0GR1N82GJ" target="_blank" rel="nofollow" data-dimension112="d8a77ac0-c707-11f1-943c-3156deba4a79" data-action="Deal Block" data-label="15" MacBook Air (M5)" data-dimension48="15" MacBook Air (M5)" data-dimension25="$1399">View Deal</a></p></div><div class="product"><a data-dimension112="7ae570d8-c70a-11f1-9c6c-ef35ab93c834" data-action="Deal Block" data-label="MacBook Pro 16" (M5 Pro/1TB)" data-dimension48="MacBook Pro 16" (M5 Pro/1TB)" data-dimension25="$2751" href="https://www.amazon.com/Apple-MacBook-Laptop-18-core-20-core/dp/B0GR1DS3YP/?" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:61.20%;"><img id="RNSaffzj2zSm5qbMJFK97K" name="MacBook Pro 16" (M5 Pro/1TB)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/RNSaffzj2zSm5qbMJFK97K-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="918" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Apple-MacBook-Laptop-18-core-20-core/dp/B0GR1DS3YP/?" target="_blank" rel="nofollow" data-dimension112="7ae570d8-c70a-11f1-9c6c-ef35ab93c834" data-action="Deal Block" data-label='MacBook Pro 16" (M5 Pro/1TB)' data-dimension48='MacBook Pro 16" (M5 Pro/1TB)' data-dimension25="$2751">MacBook Pro 16" (M5 Pro/1TB): was $2999 now $2751</a></strong><br>This config of the 2026 MacBook Pro is on sale for almost $250 off. In our <a href="https://www.tomsguide.com/computing/macbooks/macbook-pro-16-inch-m5-pro-review">MacBook Pro M5 Pro review</a>, our reviewer said "its stellar performance and epic battery life blew me away." Upgrades over last year's M4 model are incremental, but everyone else will feel a serious boost in performance.<a class="view-deal button" href="https://www.amazon.com/Apple-MacBook-Laptop-18-core-20-core/dp/B0GR1DS3YP/?" target="_blank" rel="nofollow" data-dimension112="7ae570d8-c70a-11f1-9c6c-ef35ab93c834" data-action="Deal Block" data-label="MacBook Pro 16" (M5 Pro/1TB)" data-dimension48="MacBook Pro 16" (M5 Pro/1TB)" data-dimension25="$2751">View Deal</a></p></div><div class="product"><a data-dimension112="e8643cca-cbce-11f1-a27f-499b2c1ea66e" data-action="Deal Block" data-label="MacBook Pro 16" (M5 Max/2TB)" data-dimension48="MacBook Pro 16" (M5 Max/2TB)" data-dimension25="$4499" href="https://www.amazon.com/Apple-MacBook-Laptop-18-core-20-core/dp/B0GR1DS3YP/?" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:61.20%;"><img id="RNSaffzj2zSm5qbMJFK97K" name="MacBook Pro 16" (M5 Pro/1TB)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/RNSaffzj2zSm5qbMJFK97K-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="918" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Apple-MacBook-Laptop-18-core-20-core/dp/B0GR1DS3YP/?" target="_blank" rel="nofollow" data-dimension112="e8643cca-cbce-11f1-a27f-499b2c1ea66e" data-action="Deal Block" data-label='MacBook Pro 16" (M5 Max/2TB)' data-dimension48='MacBook Pro 16" (M5 Max/2TB)' data-dimension25="$4499">MacBook Pro 16" (M5 Max/2TB): was $4999 now $4499</a></strong><br>The 2026 MacBook Pro M5 Max is on sale for $500 off. As well as a blazing-fast performance with the M5 Max chip, this version of the MacBook now has upgrades like a Neural Accelerator in every core and an N1 chip that brings Wi-Fi 7 and Bluetooth 6 support.<a class="view-deal button" href="https://www.amazon.com/Apple-MacBook-Laptop-18-core-20-core/dp/B0GR1DS3YP/?" target="_blank" rel="nofollow" data-dimension112="e8643cca-cbce-11f1-a27f-499b2c1ea66e" data-action="Deal Block" data-label="MacBook Pro 16" (M5 Max/2TB)" data-dimension48="MacBook Pro 16" (M5 Max/2TB)" data-dimension25="$4499">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=iphone&view_mode=savings_squad&widget_title=Top+Deals+Handpicked+by+Our+Editors&widget_subtitle=Discover+the+best+discounts+currently+available%2C+curated+daily+by+the+Tom%27s+Guide+Savings+Squad.&bg_color=transparent" data-vizualizer-embed="true"></div>    <script>    /**     * Tom's Guide Deals Finder - Vanilla JS Encapsulated Engine     */    (function() {      // --- Freyr Analytics Adapter ---      function initAnalytics() {        window.dataLayer = window.dataLayer || [];        window.googletag = window.googletag || {};        window.googletag.cmd = window.googletag.cmd || [];        window.hawk = window.hawk || { analytics: { freyr: [] } };        window.hawk.analytics = window.hawk.analytics || { freyr: [] };        window.hawk.analytics.freyr = window.hawk.analytics.freyr || [];        window.freyr = window.freyr || { cmd: [] };        const scriptSrc = 'https://freyr.futurecdn.net/freyr.js';        const hostname = typeof window !== 'undefined' ? window.location.hostname : '';        const isTestEnv = typeof window.navigator !== 'undefined' && (window.navigator.webdriver || window.navigator.userAgent.includes('Headless'));        const shouldSendRealAnalytics = !isTestEnv && hostname && hostname !== 'localhost' && hostname !== '127.0.0.1' && !hostname.includes('run.app');        if (shouldSendRealAnalytics && !document.querySelector(`script[src="${scriptSrc}"]`)) {          const script = document.createElement('script');          script.src = scriptSrc;          script.async = true;          document.head.appendChild(script);        }      }      function storeEventForDebug(name, data) {        if (!window.hawk || !window.hawk.analytics || !window.hawk.analytics.freyr) return;        window.hawk.analytics.freyr.push({ name, data });        try {          if (typeof window !== 'undefined' && window.localStorage) {            window.localStorage.setItem("hawk", JSON.stringify(window.hawk));          }        } catch (e) {          // Ignore storage issues        }        try {          window.dispatchEvent(new CustomEvent("hawk-analytics-update"));        } catch (e) {}      }      function sendToFreyr(eventName, data) {        if (typeof window === 'undefined') return;        window.freyr = window.freyr || { cmd: [] };        window.freyr.cmd.push(() => {          if (window.freyr && window.freyr.pushAndUpdate) {            window.freyr.pushAndUpdate(eventName, data);          }        });      }      function sendEvent(event, skip = false) {        try {          storeEventForDebug(event.name, event.data);          if (!skip) {            sendToFreyr(event.name, event.data);          }        } catch (e) {          // Ensure tracking errors don't surface to the user        }      }      function getCookie(name) {        try {          const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));          return match ? match[2] : null;        } catch (e) {          return null;        }      }      function getTimeAgo(dateString) {        if (!dateString) return '';        const date = new Date(dateString);        const now = new Date();        const diffInSeconds = Math.floor((now.getTime() - date.getTime()) / 1000);        if (diffInSeconds < 60) return 'Just now';        const diffInMinutes = Math.floor(diffInSeconds / 60);        if (diffInMinutes < 60) return `${diffInMinutes} min${diffInMinutes > 1 ? 's' : ''} ago`;        const diffInHours = Math.floor(diffInMinutes / 60);        if (diffInHours < 24) return `${diffInHours} hr${diffInHours > 1 ? 's' : ''} ago`;        const diffInDays = Math.floor(diffInHours / 24);        if (diffInDays < 30) return `${diffInDays} day${diffInDays > 1 ? 's' : ''} ago`;        const diffInMonths = Math.floor(diffInDays / 30);        if (diffInMonths < 12) return `${diffInMonths} mo${diffInMonths > 1 ? 's' : ''} ago`;        const diffInYears = Math.floor(diffInDays / 365);        return `${diffInYears} yr${diffInYears > 1 ? 's' : ''} ago`;      }      function normalizeCurrency(symbol) {        const map = {          '£': 'GBP',          '$': 'USD',          'A$': 'AUD',          'CA$': 'CAD',          '€': 'EUR'        };        return map[symbol] || symbol;      }      function trackElementInteraction(props) {        sendEvent({          name: 'elementInteraction',          data: {            element: {              action: props.action || "click",              id: props.id || undefined,              class: props.class || undefined,              name: props.name || undefined,              text: props.text || undefined,              label: props.label || undefined,              container: props.container || undefined,              url: props.url || undefined,              articleId: props.articleId || undefined            }          }        });      }      function generateRevenueId(url, productName, merchantName, modelId) {        const str = `${window.location.href}|${productName}|${merchantName}|${modelId || ''}|${new Date().toDateString()}|tomsguide`;        let hash = 0;        for (let i = 0; i < str.length; i++) {          const char = str.charCodeAt(i);          hash = ((hash << 5) - hash) + char;          hash = hash & hash;        }        let numericStr = Math.abs(hash).toString();        while (numericStr.length < 19) {          numericStr += Math.floor(Math.random() * 10).toString();        }        return numericStr.substring(0, 19);      }      function rewriteAffiliateLink(url, territory, revenueId) {        if (!url) return url;        const t = (territory || 'gb').toLowerCase();        return url.replace(/hawk-custom-tracking/g, `tomsguide-${t}-${revenueId}`);      }      function trackHawkEvent(params) {        const { clickType, widgetId, productCategoryName, product, productsArray, zeroBasedProductIndexOrNull, totalDealsOrProducts, areaClicked, merchant, revenueId, isoCurrencyCode, queryName, widgetTypeName } = params;        const data = {          event: "hawkEvent",          category: "Affiliates",          affiliate: {            action: {              type: clickType,              id: widgetId,              event: clickType === "appeared" ? "viewed" : "Click from",              timestamp: Date.now()            },            component: {              flag: "Editor",              product: productCategoryName || "deals",              category: `Signal Deal Finder ${widgetTypeName || "Carousel"} widget`,              type: clickType === "appeared" ? "review" : "signal product",              label: queryName || (product ? (product.name || "") : ""),              index: zeroBasedProductIndexOrNull === null || zeroBasedProductIndexOrNull === undefined ? -1 : zeroBasedProductIndexOrNull,              linkCount: totalDealsOrProducts || 0,              blockLayout: "",              areaClicked: areaClicked || ""            }          },          products: productsArray || (product && merchant ? [            {              product: {                primary: {                  id: product.id || product.matchId || null,                  name: product.name,                  type: "deal",                  price: product.price,                  previousPrice: product.previousPrice || null,                  currency: isoCurrencyCode || "USD",                  preorder: false,                  labels: [],                  link: product.link,                  originalLink: product.originalLink || null,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: null,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: product.globalId || null,                  inStock: product.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: isoCurrencyCode || "USD"                }              },              merchant: {                id: merchant.id || null,                name: merchant.name,                url: merchant.url || null,                network: merchant.network || null              },              model: {                id: product.modelId || null,                brand: product.brand || null,                name: product.name,                parent: product.parent || null              }            }          ] : []),          reviews: [],          _clear: true,          "gtm.uniqueEventId": Date.now() % 10000        };        sendEvent({ name: 'hawkEvent', data });      }      function trackDealClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card" });      }      function trackViewSimilarClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card View Similar" });      }      function trackPriceComparisonClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Price Comparison" });      }      function trackReviewClick(params) {        trackHawkEvent({ ...params, clickType: "review", areaClicked: "Signal Product Card Review Link" });      }      function trackShare(params) {        trackHawkEvent({ ...params, clickType: "share", areaClicked: "Signal Product Card Share" });      }      function trackDealsAppeared(widgetId, deals, revenueId, currency, queryName, widgetTypeName) {         if (!deals || deals.length === 0) return;                  const productsArray = deals.slice(0, 50).map((deal) => {            let voucherPct = null;            let rawPrice = parseFloat(deal.rawPrice) || parseFloat(deal.price) || null;            let rawMsrp = parseFloat(deal.rawMsrp) || parseFloat(deal.msrp) || null;            if (rawMsrp > rawPrice && rawPrice > 0) {              voucherPct = Math.round((1 - (rawPrice / rawMsrp)) * 100);            }            let numId = null;            if (deal.externalProductId && !isNaN(parseInt(deal.externalProductId))) {              numId = parseInt(deal.externalProductId);            } else if (deal.id && !isNaN(parseInt(deal.id))) {              numId = parseInt(deal.id);            } else {              numId = deal.matchId || null;            }            return {              product: {                primary: {                  id: numId,                  name: deal.productName || deal.title || "",                  type: "deal",                  price: rawPrice,                  previousPrice: rawMsrp,                  currency: currency || 'USD',                  preorder: false,                  labels: deal.modelBrand || deal.brand ? [                     { type: "brand", value: deal.modelBrand || deal.brand }                  ] : [],                  link: deal.url,                  originalLink: deal.url,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: voucherPct,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: deal.productKey || null,                  inStock: deal.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: currency || 'USD'                }              },              merchant: {                id: deal.merchantId ? parseInt(deal.merchantId) : null,                name: deal.merchant || "Retailer",                url: deal.merchantUrl || null,                network: deal.merchantNetwork || null              },              model: {                id: deal.modelId ? parseInt(deal.modelId) : null,                brand: deal.modelBrand || deal.brand || null,                name: deal.productName || deal.title || "",                parent: deal.modelParent || null              }            };         });                  trackHawkEvent({             clickType: "appeared",             widgetId: widgetId,             productCategoryName: "deals",             zeroBasedProductIndexOrNull: null,             totalDealsOrProducts: deals.length,             productsArray: productsArray,             queryName: queryName,             widgetTypeName: widgetTypeName         });      }      // 1. Setup Shadow DOM Sandbox      const currentScript = document.currentScript;      let hostContainer = null;      let template = null;            if (currentScript) {        let prev = currentScript.previousElementSibling;        while (prev) {          if (prev.tagName === 'TEMPLATE' && prev.classList.contains('tg-df-widget-template')) {            template = prev;          } else if (prev.tagName === 'DIV' && prev.classList.contains('tg-df-widget-host') && !prev.hasAttribute('data-initialized')) {            hostContainer = prev;            break;          }          prev = prev.previousElementSibling;        }      }            // Fallbacks in case script is deferred      if (!hostContainer) {        const hosts = document.querySelectorAll('.tg-df-widget-host:not([data-initialized])');        if (hosts.length > 0) hostContainer = hosts[0];      }            // Safely embedded template for CMS environments      const rawTemplate = `  \x3Cstyle>    /* --- Shadow DOM Base Reset --- */    *, *::before, *::after {      box-sizing: border-box;    }    img, picture, svg, video {      max-width: 100%;      height: auto;      display: block;    }    /*       1. Scoped CSS for Tom's Guide Deals Widget       All classes are prefixed with \`tg-df-\` to prevent CMS style leakage.    */    .tg-df-container {      container-type: inline-size;      container-name: tg-df;      --tg-df-blue: #1F69FF;      --tg-df-blue-hover: #004d8c;      --tg-df-text: #222222;      --tg-df-text-muted: #555555;      --tg-df-bg: #ffffff;      --tg-df-bg-secondary: #f4f4f4;      --tg-df-border: #e2e8f0;      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;      color: var(--tg-df-text);      background-color: transparent;       width: 100%;      max-width: 1200px;      margin: 0 auto;      padding-bottom: 24px;    }    .tg-df-container *, .tg-df-container *::before, .tg-df-container *::after {      margin: 0;      padding: 0;      box-sizing: border-box;    }    .tg-df-container img {      border: none;      margin: 0;      padding: 0;    }    .tg-df-container a {      text-decoration: none;      color: inherit;    }    /*       2. Search & Filter Bar    */    .tg-df-controls {      display: flex;      flex-direction: column;      align-items: center;      gap: 20px;      margin-bottom: 32px;      width: 100%;      position: relative;      z-index: 20;    }    .tg-df-top-bar {      display: flex;      width: 100%;      max-width: 760px;      gap: 12px;      margin: 0 auto;      align-items: center;    }    .tg-df-search-wrapper {      position: relative;      flex: 1;      width: 100%;      box-shadow: 0 8px 24px rgba(0,0,0,0.06);      border-radius: 40px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      z-index: 100;    }    .tg-df-autocomplete-dropdown {      position: absolute;      top: calc(100% + 4px);      left: 0;      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      max-height: 300px;      overflow-y: auto;      z-index: 200;      display: none;    }    .tg-df-autocomplete-dropdown.active {      display: block;    }    .tg-df-autocomplete-item {      padding: 12px 24px;      cursor: pointer;      font-size: 14px;      color: var(--tg-df-text);      transition: background 0.1s ease;    }    .tg-df-autocomplete-item:hover {      background: var(--tg-df-bg-secondary);    }    .tg-df-search-input {      width: 100%;      padding: 16px 64px 16px 24px;      font-size: 16px;      border: 2px solid transparent;      border-radius: 40px;      outline: none;      transition: border-color 0.2s ease, box-shadow 0.2s ease;      color: var(--tg-df-text);      background: transparent;    }    .tg-df-search-input:focus {      border-color: transparent;      box-shadow: 0 0 0 3px rgba(0, 108, 196, 0.15);    }    .tg-df-search-input::placeholder {      color: #999999;    }        .tg-df-search-btn {      position: absolute;      right: 8px;      top: 50%;      transform: translateY(-50%);      width: 40px;      height: 40px;      border-radius: 50%;      background: #222;      border: none;      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: background 0.2s ease;    }        .tg-df-search-btn:hover {      background: #000;    }    .tg-df-search-icon {      width: 16px;      height: 16px;      fill: #fff;    }    .tg-df-settings-wrapper {      position: relative;    }        .tg-df-settings-btn {      width: 48px;      height: 48px;      border-radius: 50%;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      box-shadow: 0 4px 12px rgba(0,0,0,0.04);      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: all 0.2s ease;      color: var(--tg-df-text-muted);      flex-shrink: 0;    }    .tg-df-settings-btn:hover {      background: var(--tg-df-bg-secondary);      border-color: #0000ff;      color: var(--tg-df-text);    }    .tg-df-settings-btn svg {      width: 24px;      height: 24px;      fill: currentColor;    }    .tg-df-settings-dropdown {      position: absolute;      top: calc(100% + 8px);      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      width: 280px;      padding: 20px;      display: none;      z-index: 100;      flex-direction: column;      gap: 20px;    }    .tg-df-settings-dropdown.active {      display: flex;    }        .tg-df-settings-dropdown-backdrop {      display: none;      position: fixed;      inset: 0;      z-index: 99;    }        .tg-df-settings-dropdown-backdrop.active {      display: block;    }    .tg-df-setting-item {      display: flex;      flex-direction: column;      gap: 10px;    }    .tg-df-setting-label {      font-size: 11px;      font-weight: 700;      color: var(--tg-df-text-muted);      text-transform: uppercase;      letter-spacing: 0.5px;    }        .tg-df-region-select {        padding: 10px 12px;        border-radius: 8px;        border: 1px solid var(--tg-df-border);        font-size: 15px;        outline: none;        background: var(--tg-df-bg-secondary);        color: var(--tg-df-text);        cursor: pointer;        width: 100%;    }    .tg-df-toggle {        position: relative;        display: inline-block;        width: 44px;        height: 24px;        flex-shrink: 0;    }    .tg-df-toggle input {        opacity: 0;        width: 0;        height: 0;    }    .tg-df-slider {        position: absolute;        cursor: pointer;        top: 0; left: 0; right: 0; bottom: 0;        background-color: #ccc;        transition: .2s;        border-radius: 24px;    }    .tg-df-slider:before {        position: absolute;        content: "";        height: 18px;        width: 18px;        left: 3px;        bottom: 3px;        background-color: white;        transition: .2s;        border-radius: 50%;    }    .tg-df-toggle input:checked + .tg-df-slider {        background-color: #1F69FF;    }    .tg-df-toggle input:checked + .tg-df-slider:before {        transform: translateX(20px);    }    .tg-df-dl-row {        flex-direction: row;        align-items: center;        justify-content: space-between;    }    .tg-df-dl-row-text {        font-size: 14px;        font-weight: 600;        color: var(--tg-df-text);    }    .tg-df-dl-row-subtext {        font-size: 12px;        font-weight: 400;        line-height: 1.3;        color: var(--tg-df-text-muted);        margin-top: 4px;        display: block;    }    .tg-df-filters-container {      position: relative;      width: 100%;      max-width: 800px;    }    .tg-df-scroll-btn {      display: none;      position: absolute;      top: 50%;      transform: translateY(-50%);      width: 32px;      height: 32px;      background: white;      border: 1px solid var(--tg-df-border);      border-radius: 50%;      align-items: center;      justify-content: center;      cursor: pointer;      z-index: 10;      box-shadow: 0 2px 8px rgba(0,0,0,0.1);      color: var(--tg-df-text-primary);      padding: 0;    }    .tg-df-scroll-btn svg {      width: 16px;      height: 16px;    }    .tg-df-scroll-btn:hover {      background: #f4f4f4;    }    .tg-df-scroll-btn.left {      left: 0px;    }    .tg-df-scroll-btn.right {      right: 0px;    }    @container tg-df (max-width: 768px) {      .tg-df-scroll-btn {        display: flex;        top: 22px; /* vertically center within the 44px high filter buttons */      }    }    .tg-df-filters {      display: grid;      width: 100%;      grid-template-columns: repeat(4, 1fr);      gap: 12px;      margin: 0 auto;      max-width: 800px;    }                 .tg-df-sort-wrapper {      position: relative;      display: flex;      align-items: center;      width: 100%;    }        .tg-df-sort-icon {      position: absolute;      left: 14px;      width: 14px;      height: 14px;      fill: var(--tg-df-text-muted);      pointer-events: none;    }    .tg-df-sort-select, .tg-df-filter-select {      width: 100%;      padding: 10px 36px 10px 38px;      font-size: 14px;      border: 1px solid var(--tg-df-border);      border-radius: 100px;      outline: none;      appearance: none;      background-color: var(--tg-df-bg-secondary);      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 12 12'%3E%3Cpath fill='%23555555' d='M6 8L1 3h10z'/%3E%3C/svg%3E");      background-repeat: no-repeat;      background-position: right 14px center;      color: var(--tg-df-text);      cursor: pointer;      font-weight: 500;      transition: all 0.2s ease;    }        .tg-df-price-input::-webkit-outer-spin-button,    .tg-df-price-input::-webkit-inner-spin-button {      -webkit-appearance: none;      margin: 0;    }    .tg-df-price-input {      -moz-appearance: textfield;    }    .tg-df-sort-select:hover, .tg-df-filter-select:hover {      background-color: #e2e8f0;    }    .tg-df-multiselect-container {      position: relative;    }    @container tg-df (max-width: 768px) {      .tg-df-filters-container {      position: relative;      width: 100%;      max-width: 800px;    }    .tg-df-scroll-btn {      display: none;      position: absolute;      top: 50%;      transform: translateY(-50%);      width: 32px;      height: 32px;      background: white;      border: 1px solid var(--tg-df-border);      border-radius: 50%;      align-items: center;      justify-content: center;      cursor: pointer;      z-index: 10;      box-shadow: 0 2px 8px rgba(0,0,0,0.1);      color: var(--tg-df-text-primary);      padding: 0;    }    .tg-df-scroll-btn svg {      width: 16px;      height: 16px;    }    .tg-df-scroll-btn:hover {      background: #f4f4f4;    }    .tg-df-scroll-btn.left {      left: 0px;    }    .tg-df-scroll-btn.right {      right: 0px;    }    @container tg-df (max-width: 768px) {      .tg-df-scroll-btn {        display: flex;        top: 22px; /* vertically center within the 44px high filter buttons */      }    }    .tg-df-filters {        width: 100%;        margin: 0;        margin-bottom: -320px;        padding: 0 16px 320px 16px;        display: flex;        flex-wrap: nowrap;        gap: 8px;        overflow-x: auto;        overflow-y: hidden;        pointer-events: none;        scrollbar-width: none;        -webkit-overflow-scrolling: touch;      }      .tg-df-filters::-webkit-scrollbar {        display: none;      }      .tg-df-sort-wrapper {        pointer-events: auto;        flex: 0 0 auto;        width: 175px;        min-width: 175px;      }    }        .tg-df-multiselect-trigger {      display: block;      background: #fff;      user-select: none;      width: 100%;      overflow: hidden;      white-space: nowrap;      text-overflow: ellipsis;    }        .tg-df-multiselect-dropdown {      display: none;      position: absolute;      top: calc(100% + 4px);      left: 0;      width: 100%;      min-width: 220px;      max-height: 300px;      overflow-y: auto;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);      z-index: 100;      padding: 8px 0;    }    .tg-df-multiselect-dropdown.active {      display: block;    }    .tg-df-ms-option {      padding: 8px 16px;      display: flex;      align-items: center;      gap: 8px;      cursor: pointer;      font-size: 14px;    }    .tg-df-ms-option:hover {      background-color: var(--tg-df-bg-secondary);    }        .tg-df-ms-option input {      cursor: pointer;      accent-color: #1f69ff;    }    .tg-df-sort-select:focus, .tg-df-filter-select:focus {      border-color: #0000ff;      box-shadow: 0 0 0 3px rgba(0, 0, 255, 0.2);      background-color: var(--tg-df-bg);    }    /*       3. Deal Grid Layout    */    .tg-df-grid.tg-df-grid-auto {      padding-top: 24px;    }    .tg-df-grid, .tg-df-grid.layout-grid {      display: grid;      grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));      gap: 10px;    }    .tg-df-grid.layout-row {      grid-template-columns: 1fr;      gap: 16px;    }        .tg-df-grid.layout-row .tg-df-card {      flex-direction: row;      align-items: stretch;      height: auto;      box-shadow: none;      border-bottom: 1px solid var(--tg-df-border);    }    .tg-df-grid.layout-row .tg-df-card:hover {      box-shadow: none;    }    .tg-df-grid.layout-row .tg-df-card-image-box {      width: 140px;      min-width: 140px;      aspect-ratio: 3/4;      border-right: none;      padding: 16px 16px 16px 32px;    }    .tg-df-grid.layout-row .tg-df-card-body {      padding: 16px;      justify-content: space-between;    }    .tg-df-grid.layout-row .tg-df-card-title {      font-size: 15px;      margin-bottom: 16px;    }    .tg-df-grid.layout-row .tg-df-card-stars { margin-bottom: 8px; }    .tg-df-grid.layout-row .tg-df-card-footer {      flex-direction: column;      align-items: flex-start;      gap: 0;    }    .tg-df-grid.layout-row .tg-df-card-merchant-pill {      margin-bottom: 4px;    }    .tg-df-grid.layout-row .tg-df-card-price-group {      margin-bottom: 8px;    }    .tg-df-grid.layout-row .tg-df-price-group {      width: auto;    }    .tg-df-grid.layout-row .tg-df-card-cta {      width: 100%;      max-width: 200px;      padding: 10px 24px;      font-size: 13px;      flex-shrink: 0;      text-align: center;      justify-content: center;    }    /*       4. Deal Card Design    */    .tg-df-card {      position: relative;      display: flex;      flex-direction: column;      background-color: #ffffff;      border-radius: 0;      overflow: hidden;      transition: transform 0.2s ease, box-shadow 0.2s ease;      text-decoration: none;      color: inherit;      height: 100%;      box-shadow: 0 0 16px rgba(0, 0, 0, 0.08);      border: 1px solid var(--tg-df-border);    }    .tg-df-card:hover {      box-shadow: 0 0 24px rgba(0, 0, 0, 0.12);    }    .tg-df-card-image-box {      width: 100%;      aspect-ratio: 3/4;      background-color: #f8f8f8;      display: flex;      align-items: center;      justify-content: center;      position: relative;      overflow: hidden;      padding: 32px;      flex: 0 0 auto;    }    .tg-df-card-image {      max-width: 100%;      max-height: 100%;      width: auto;      height: auto;      object-fit: contain;      mix-blend-mode: multiply; /* Helps white background images blend into secondary bg */      transition: transform 0.3s ease;    }    .tg-df-card:hover .tg-df-card-image {      transform: scale(1.05); /* Zoom in on hover */    }    .tg-df-card-discount-badge {      position: absolute;      top: 12px;      left: 12px;      background: #dc2626; /* Red */      color: #ffffff;      padding: 6px 8px;      font-size: 11px;      font-weight: 500;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      z-index: 10;    }        .tg-df-card-merchant-pill {      display: block;      padding: 0;      font-size: 11px;      font-weight: 600;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      color: var(--tg-df-text-muted);      margin-bottom: 8px;      white-space: nowrap;      overflow: hidden;      text-overflow: ellipsis;    }    .tg-df-card-body {      padding: 16px;      display: flex;      flex-direction: column;      flex-grow: 1;      min-width: 0;    }    .tg-df-card-badges {      display: flex;      flex-wrap: wrap;      gap: 6px;      margin-bottom: 8px;    }    .tg-df-tag {      display: inline-flex;      align-items: center;      padding: 4px 6px;      font-size: 11px;      font-weight: 700;      text-transform: uppercase;      border-radius: 4px;      gap: 4px;    }    .tg-df-tag-prime {      background-color: #00A8E1;      color: #fff;    }    .tg-df-tag-coupons {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-coupons:hover {      background-color: #e2e8f0;    }        .tg-df-tag-outline {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-outline:hover {      background-color: #e2e8f0;    }        @keyframes tg-df-spin {      0% { transform: rotate(0deg); }      100% { transform: rotate(360deg); }    }    .tg-df-coupon-spinner {      border: 2px solid #e2e8f0;      border-top: 2px solid #3b82f6;      border-radius: 50%;      width: 14px;      height: 14px;      animation: tg-df-spin 1s linear infinite;      margin: 4px 8px;      display: inline-block;    }        /* Vouchers Modal */    .tg-df-modal-backdrop {      position: fixed;      top: 0; left: 0; right: 0; bottom: 0;      background: rgba(0,0,0,0.5);      z-index: 10000;      display: flex;      align-items: center;      justify-content: center;      opacity: 0;      pointer-events: none;      transition: opacity 0.3s;    }    .tg-df-modal-backdrop.active {      opacity: 1;      pointer-events: auto;    }    .tg-df-modal {      background: #fff;      border-radius: 12px;      width: 90%;      max-width: 400px;      max-height: 80vh;      display: flex;      flex-direction: column;      box-shadow: 0 10px 40px rgba(0,0,0,0.2);      transform: translateY(20px);      transition: transform 0.3s;    }    .tg-df-modal-backdrop.active .tg-df-modal {      transform: translateY(0);    }    .tg-df-modal-header {      padding: 16px;      border-bottom: 1px solid #e2e8f0;      display: flex;      align-items: center;      justify-content: space-between;    }    .tg-df-modal-title {      font-size: 16px;      font-weight: 600;      margin: 0;    }    .tg-df-modal-close {      background: none;      border: none;      cursor: pointer;      padding: 4px;      color: #64748b;    }    .tg-df-modal-body {      padding: 16px;      overflow-y: auto;    }    .tg-df-voucher-item {      padding: 12px;      border: 1px dashed #cbd5e1;      border-radius: 8px;      margin-bottom: 10px;      background: #f8fafc;      display: flex;      align-items: center;      gap: 12px;      text-decoration: none;      color: inherit;      transition: background-color 0.2s, border-color 0.2s;    }    .tg-df-voucher-item:hover {      background: #f1f5f9;      border-color: #94a3b8;    }    .tg-df-voucher-item:last-child {      margin-bottom: 0;    }    .tg-df-voucher-logo {      width: 48px;      height: 48px;      object-fit: contain;      border-radius: 4px;      background: #fff;      border: 1px solid #e2e8f0;      flex-shrink: 0;    }    .tg-df-voucher-content {      flex: 1;      min-width: 0;    }    .tg-df-voucher-title {      font-size: 14px;      font-weight: 600;      margin: 0 0 4px 0;      line-height: 1.3;      color: #0f172a;    }    .tg-df-voucher-expiry {      font-size: 12px;      color: #64748b;      display: flex;      align-items: center;      gap: 4px;      margin-top: 6px;    }    .tg-df-voucher-code {      display: inline-flex;      align-items: center;      background: #f1f5f9;      border: 1px dashed #cbd5e1;      padding: 6px 10px;      font-family: monospace;      font-weight: 700;      font-size: 14px;      color: #0f172a;      border-radius: 4px;      margin-top: 8px;      cursor: pointer;      transition: all 0.2s ease;    }    .tg-df-voucher-code:hover {      background: #e2e8f0;      border-color: #94a3b8;    }    .tg-df-voucher-code.copied {      background: #ecfdf5;      border-color: #10b981;      color: #10b981;    }    .tg-df-voucher-cta {      display: inline-block;      margin-top: 8px;      font-size: 13px;      font-weight: 600;      color: #2563eb;      text-decoration: none;    }    .tg-df-card-title {      font-size: 15px;      font-weight: 400;      line-height: 1.4;      margin: 0 0 12px 0;      color: var(--tg-df-text);    }    .tg-df-card-footer {      margin-top: auto;      display: flex;      flex-direction: column;      width: 100%;    }    .tg-df-card-price-group {      display: flex;      flex-direction: row;      align-items: center;      gap: 8px;      margin-bottom: 12px;    }    .tg-df-card-price {      font-size: 16px;      font-weight: 700;      color: #dc2626; /* Red price */      line-height: 1;    }        .tg-df-card-msrp {      font-size: 13px;      color: var(--tg-df-text-muted);      text-decoration: line-through;    }    .tg-df-container .tg-df-card-cta {      display: flex;      align-items: center;      justify-content: center;      width: 100%;      box-sizing: border-box;      background-color: #1f69ff;      color: #ffffff;      font-size: 12px;      font-weight: 700;      text-transform: uppercase;      letter-spacing: 0.5px;      padding: 12px 16px;      border-radius: 0;      border: none;      cursor: pointer;      transition: background-color 0.2s ease;    }    .tg-df-card:hover .tg-df-card-cta,    .tg-df-card-cta:hover {      background-color: #1555cc;    }    /*       5. State & Skeleton Styles    */    .tg-df-message {      grid-column: 1 / -1;      text-align: center;      padding: 48px 24px;      color: var(--tg-df-text-muted);      font-size: 16px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;    }    @keyframes tg-df-shimmer {      0% { background-position: -200% 0; }      100% { background-position: 200% 0; }    }    .tg-df-skeleton {      background: linear-gradient(90deg, var(--tg-df-bg-secondary) 25%, #e2e8f0 50%, var(--tg-df-bg-secondary) 75%);      background-size: 200% 100%;      animation: tg-df-shimmer 1.5s infinite;      border-radius: 4px;    }    .tg-df-skeleton-img {      width: 100%;      height: 100%;      position: absolute;      top: 0; left: 0;    }        .tg-df-skeleton-text {      height: 16px;      margin-bottom: 8px;      width: 100%;    }    .tg-df-skeleton-text.short { width: 40%; }    .tg-df-skeleton-text.title { height: 20px; margin-bottom: 16px; }    /* Editor Floating Bar & Elements */    .tg-df-editor-bar {      position: sticky;      top: 120px;      z-index: 1000;      background: #111827;      color: #fff;      padding: 12px 16px;      border-radius: 8px;      margin-bottom: 16px;      display: flex;      align-items: center;      justify-content: space-between;      box-shadow: 0 4px 12px rgba(0,0,0,0.15);    }    .tg-df-editor-bar-text {      font-weight: 600;      font-size: 14px;    }    .tg-df-editor-copy-btn {      background: #10b981;      color: #fff;      padding: 6px 16px;      border: none;      border-radius: 4px;      font-weight: 600;      cursor: pointer;      display: flex;      align-items: center;      font-size: 13px;    }    .tg-df-editor-copy-btn:hover { background: #059669; }        .tg-df-deal-checkbox {      position: absolute;      top: 12px;      right: 12px;      z-index: 10;      width: 20px;      height: 20px;      cursor: pointer;      pointer-events: auto;    }    /*       6. Mobile List View (Stacks into a cleaner horizontal row/list)    */    @container tg-df (max-width: 599px) {      .tg-df-controls {        padding: 16px 16px 8px;      }            .tg-df-top-bar {        width: 100%;      }            .tg-df-settings-dropdown {        position: fixed;        top: auto;        bottom: 0;        left: 0;        right: 0;        width: 100%;        border-radius: 20px 20px 0 0;        padding: 24px;        box-shadow: 0 -8px 32px rgba(0,0,0,0.15);        z-index: 1000;        border: none;        border-top: 1px solid var(--tg-df-border);      }            .tg-df-settings-dropdown-backdrop.active {        background: rgba(0,0,0,0.4);      }            .tg-df-search-wrapper {        box-shadow: 0 0 16px rgba(0,0,0,0.08);      }                  .tg-df-sort-wrapper.tg-df-price-range-wrapper {        flex: 0 0 auto;        min-width: max-content;        width: auto;      }            .tg-df-sort-select, .tg-df-filter-select {        width: 100%;        text-align: left;        padding: 10px 24px 10px 32px;        background-position: right 8px center;        text-overflow: ellipsis;        white-space: nowrap;        overflow: hidden;      }      .tg-df-sort-icon {        left: 10px;      }      .tg-df-grid:not(.layout-grid):not(.layout-row),      .tg-df-grid.layout-row {        grid-template-columns: 1fr;        gap: 16px;      }            .tg-df-grid.tg-df-grid-auto {        padding-top: 24px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card,      .tg-df-grid.layout-row .tg-df-card {        flex-direction: row;        align-items: stretch;        height: auto;        box-shadow: none; /* simple line on mobile if preferred, or keep */        border-bottom: 1px solid var(--tg-df-border);      }      .tg-df-grid.tg-df-grid-auto .tg-df-card:hover,      .tg-df-grid.layout-row .tg-df-card:hover {        box-shadow: none;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-image-box,      .tg-df-grid.layout-row .tg-df-card-image-box {        width: 120px;        min-width: 120px;        aspect-ratio: 3/4;        border-right: none;        padding: 12px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-body,      .tg-df-grid.layout-row .tg-df-card-body {        padding: 12px;        justify-content: space-between;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-title,      .tg-df-grid.layout-row .tg-df-card-title {        font-size: 14px;        margin-bottom: 12px;      }      /* Single column mobile grid override */      .tg-df-grid.layout-grid {        grid-template-columns: 1fr;        gap: 16px;      }      .tg-df-grid.layout-grid .tg-df-card-image-box {        padding: 12px;      }      .tg-df-grid.layout-grid .tg-df-card-body {        padding: 10px;      }      .tg-df-grid.layout-grid .tg-df-card-title {        font-size: 13px;        margin-bottom: 8px;      }      .tg-df-grid.layout-grid .tg-df-card-price {        font-size: 14px;      }            .tg-df-card-footer {        flex-direction: column;        align-items: stretch;        gap: 0;        width: 100%;        min-width: 0;      }      .tg-df-card-merchant-pill {        margin-bottom: 4px;      }      .tg-df-card-price-group {        flex: 1 1 auto;        margin-bottom: 8px;      }      .tg-df-card-price {        font-size: 16px;      }      .tg-df-card-msrp {        display: block;       }      .tg-df-grid.layout-row .tg-df-card-cta,      .tg-df-container .tg-df-card-cta {        width: 100%;        max-width: none;        min-width: 0;        box-sizing: border-box;        padding: 8px 16px;        font-size: 12px;        flex: 0 0 auto;        text-align: center;        white-space: normal;        line-height: 1.2;      }    }    .tg-df-container.is-carousel {      min-height: 760px;      background-color: #E7F0FF;      padding: 0 0 24px 0;      border-radius: 24px;      width: 100vw;      max-width: 1200px;      position: relative;      left: 50%;      transform: translateX(-50%);    }    .tg-df-container.is-carousel.hide-header-details {      min-height: 480px;    }    /*       7. Carousel View Mode    */    .tg-df-container .tg-df-carousel-host {      /* Layout is now handled by container wrapper */    }    .tg-df-container .tg-df-carousel-eyebrow {      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      padding: 24px 16px 0 16px;      display: none;    }    .tg-df-container .tg-df-carousel-query-title {      color: #011535;      font-size: 28px;      font-weight: 600;      padding: 0 16px 24px 16px;      line-height: 1.2;      display: none;    }    .tg-df-container .tg-df-carousel-blue-box {      background-color: transparent;      border-radius: 0;      padding: 24px 24px 0 24px;      margin: 0;      color: #1F69FF;          position: relative;      overflow: hidden;    }    .tg-df-container .tg-df-carousel-bg-circle-1 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-2 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-3 {      display: none;    }    .tg-df-container .tg-df-carousel-box-content {      position: relative;      z-index: 10;    }    .tg-df-container .tg-df-carousel-box-eyebrow {      background-color: transparent;      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      display: inline-block;      padding: 0;      border-radius: 0;    }    .tg-df-container .tg-df-carousel-box-title {      font-size: 28px;      font-weight: 600;      line-height: 1.2;      margin-top: 8px;      color: #1e293b;    }    .tg-df-container .tg-df-countdown-wrapper {      position: absolute;      top: 0;      right: 0;      display: flex;      flex-direction: column;      align-items: flex-end;      gap: 12px;      transform: scale(0.67);      transform-origin: top right;    }    .tg-df-container .tg-df-countdown-title {      font-size: 14px;      font-weight: 600;      color: #011535;      margin: 0;    }    .tg-df-container .tg-df-countdown-blocks {      display: flex;      gap: 16px;    }    .tg-df-container .tg-df-countdown-item {      display: flex;      flex-direction: column;      align-items: center;      gap: 4px;    }    .tg-df-container .tg-df-countdown-box {      width: 59px;      height: 59px;      background: #03FE9E;      border-radius: 15px;      display: flex;      align-items: center;      justify-content: center;    }    .tg-df-container .tg-df-countdown-num {      font-family: 'Inter', sans-serif;      font-weight: 700;      font-size: 20px;      line-height: normal;      color: #011535;    }    .tg-df-container .tg-df-countdown-label {      font-family: 'Inter', sans-serif;      font-weight: 500;      font-size: 16px;      line-height: normal;      color: #1e293b;      text-transform: uppercase;    }    .tg-df-container .tg-df-carousel-box-subtitle {      font-size: 16px;      margin-top: 8px;      font-weight: 300;      color: #1e293b;      line-height: 24px;    }    .tg-df-container .tg-df-carousel-roundels-wrapper {      position: relative;      margin-top: 24px;      margin-left: -24px;      margin-right: -24px;    }    .tg-df-container .tg-df-carousel-roundels {      display: flex;      gap: 16px;      overflow-x: auto;            scrollbar-width: none;      padding-top: 12px;      padding-bottom: 24px;      padding-left: 24px;      padding-right: 24px;      margin-left: 0;      margin-right: 0;    }        .tg-df-container .tg-df-carousel-scroll-left,    .tg-df-container .tg-df-carousel-scroll-right {      position: absolute;      top: 50%;      transform: translateY(-50%);      height: 36px;      width: 36px;      display: flex;      align-items: center;      justify-content: center;      border-radius: 50%;      background-color: #ffffff;      border: 1px solid #e2e8f0;      box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);      color: #1F69FF;      cursor: pointer;      transition: all 0.2s;      margin-top: -4px;      z-index: 20;    }    .tg-df-container .tg-df-carousel-scroll-left { left: 8px; }    .tg-df-container .tg-df-carousel-scroll-right { right: 8px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left { left: 0px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right { right: 0px; }    .tg-df-carousel-filters-outer { margin-left: -24px; margin-right: -24px; padding-left: 24px; padding-right: 24px; }    .tg-df-grid-wrapper { position: relative; }    @container tg-df (max-width: 599px) { .tg-df-carousel-filters-outer { margin-left: -16px; margin-right: -16px; padding-left: 16px; padding-right: 16px; } }        .tg-df-container .tg-df-carousel-scroll-left:hover,    .tg-df-container .tg-df-carousel-scroll-right:hover {      background-color: rgba(255, 255, 255, 0.6);    }    .tg-df-container .tg-df-carousel-roundels::-webkit-scrollbar {      display: none;    }    .tg-df-container .tg-df-roundel {      display: flex;      flex-direction: column;      align-items: center;      gap: 8px;      cursor: pointer;      min-width: 120px;      flex-shrink: 0;    }    .tg-df-container .tg-df-roundel-img-box {      width: 120px;      height: 120px;      border-radius: 50%;      background: white;      display: flex;      align-items: center;      justify-content: center;      overflow: hidden;      box-shadow: 0px 3px 14px 0px rgba(30, 41, 59, 0.08);      transition: box-shadow 0.2s;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box img {      transform: scale(1.08);    }    .tg-df-container .tg-df-roundel-img-box img {      width: 100%;      height: 100%;      object-fit: contain;      padding: 10px;      box-sizing: border-box;      transition: transform 0.3s ease;    }    .tg-df-container .tg-df-roundel-label {      font-size: 13px;      font-weight: 400;      color: #1e293b;      text-align: center;    }    .tg-df-container .tg-df-carousel-filters-label {      font-size: 16px;      font-weight: 400;      color: #1e293b;      white-space: nowrap;      margin-right: 4px;    }    .tg-df-container .tg-df-carousel-filters-wrap {      display: flex;      align-items: center;      flex-wrap: nowrap;      gap: 8px;      margin-top: 8px;      overflow-x: auto;      scrollbar-width: none;      -webkit-overflow-scrolling: touch;      padding-bottom: 8px;      margin-left: -24px;      margin-right: -24px;      padding-left: 24px;      padding-right: 24px;    }    .tg-df-container .tg-df-carousel-filters-wrap::-webkit-scrollbar {      display: none;    }        .tg-df-container .tg-df-carousel-filter-btn img,    .tg-df-container .tg-df-carousel-filter-btn picture {      height: 20px;      width: 20px;      object-fit: contain;      object-position: center;      display: inline-flex;      align-items: center;      justify-content: center;      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn picture img {      margin-right: 0;      height: 100%;      width: 100%;    }    .tg-df-container .tg-df-carousel-filter-btn img.active-img,    .tg-df-container .tg-df-carousel-filter-btn picture:has(.active-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.inactive-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.inactive-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.active-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.active-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.active-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.active-img) {      display: inline-flex;    }    .tg-df-container .tg-df-carousel-filter-btn {      background: #ffffff;      border: 2px solid #1e293b;      color: #1e293b;      border-radius: 24px;      padding: 6px 16px;      font-size: 14px;      font-weight: 600;      cursor: pointer;      transition: all 0.2s;      flex-shrink: 0;      white-space: nowrap;    }    .tg-df-container .tg-df-carousel-filter-btn svg {      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn {      display: inline-flex;      align-items: center;    }    .tg-df-container .tg-df-carousel-filter-btn:hover {      background: #1e293b;      color: white;      border-color: #1e293b;    }    .tg-df-container .tg-df-carousel-filter-btn.active {      background: #1e293b;      color: white;      border-color: #1e293b;    }        .tg-df-grid.carousel-compact {      display: flex;      flex-wrap: nowrap;      overflow-x: auto;      gap: 16px;      padding: 16px 24px;      align-items: stretch;      scrollbar-width: none;    }    .tg-df-grid.carousel-compact::-webkit-scrollbar {      display: none;    }    .tg-df-grid.carousel-compact .tg-df-card {      flex: 0 0 auto;      width: 200px;      min-height: auto;      height: auto;      display: flex;      flex-direction: column;      border-radius: 15px;      border: none;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      overflow: visible;    }    .tg-df-grid.carousel-compact .tg-df-card-image-box {      padding: 12px;      background-color: transparent;      border-radius: 15px 15px 0 0;      height: 130px;    }    .tg-df-grid.carousel-compact .tg-df-card-image {      mix-blend-mode: normal;    }    .tg-df-grid.carousel-compact .tg-df-card-discount-badge {      border-radius: 0;      top: 0px;      left: 0px;      padding: 4px 8px;      font-size: 11px;    }    .tg-df-grid.carousel-compact .tg-df-card-body {      padding: 8px 12px 12px 12px;    }    .tg-df-grid.carousel-compact .tg-df-card-title {      font-size: 14px;      font-weight: 400;      margin-bottom: 8px;      color: #011535;    }    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):not(:has(.tg-df-tag-prime)):not(:has(.tg-df-coupon-wrapper:not([style*="none"]))) > .tg-df-card-title,    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):has(> .tg-df-card-title:first-child) > .tg-df-card-title {    }    .tg-df-grid.carousel-compact .tg-df-card-cta {      border-radius: 5px;      padding: 8px 10px;      margin-top: 4px;      background-color: #1F69FF;    }    .tg-df-grid.carousel-compact .tg-df-card-price-group {      margin-bottom: 2px;    }    .tg-df-grid.carousel-compact .tg-df-card-merchant-pill {      margin-bottom: 2px;    }    @container tg-df (max-width: 599px) {      .tg-df-container .tg-df-carousel-blue-box-title {        font-size: 24px;      }      .tg-df-container .tg-df-countdown-title {        display: none;      }      .tg-df-container .tg-df-countdown-wrapper {        position: absolute;        top: 0;        right: 0;        align-items: flex-end;        transform: scale(0.40);        transform-origin: top right;      }      .tg-df-container .tg-df-roundel {        min-width: 88px;      }      .tg-df-container .tg-df-roundel-img-box {        width: 88px;        height: 88px;      }    }    /* REPLICA BLOCK STYLES */    .tg-df-grid.layout-replica-2 { grid-template-columns: repeat(2, 1fr) !important; gap: 20px; }    .tg-df-grid.layout-replica-1 { grid-template-columns: 1fr !important; gap: 20px; }        .tg-df-container .hawk-deal-widget-container { border-bottom: 1px solid #e5e7eb; display: flex; flex-direction: column; margin: 0; padding: 20px 0; box-sizing: border-box; font-family: inherit; }    .tg-df-container .hawk-deal-widget-wrap { display: flex; flex-direction: row; align-items: flex-start; width: 100%; gap: 24px; }    .tg-df-container .hawk-deal-widget-image-container { display: flex; flex-shrink: 0; justify-content: center; width: 160px; height: 160px; align-items: center; background: white; margin-bottom: 0px; }    .tg-df-container .hawk-deal-widget-title-product-title { color: #111827; font-size: 18px; font-weight: 700; line-height: 1.4; display: inline; }    .tg-df-container .hawk-deal-widget-title-price { font-size: 18px; font-weight: 700; line-height: 1.4; white-space: nowrap; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-price-now { font-weight: 700; }    .tg-df-container .hawk-deal-widget-title-retailer-price:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-title-retailer { font-size: 18px; font-weight: 700; line-height: 1.4; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-was-price { color: #dc2626; font-size: 16px; font-weight: 500; line-height: 1.4; text-decoration: line-through; white-space: nowrap; margin-left: 8px; margin-right: 8px; }    .tg-df-container .hawk-deal-widget-text-body-container { position: relative; width: 100%; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-text-body-main { font-size: 16px; width: 100%; margin-bottom: 12px; }    .tg-df-container .hawk-deal-widget-text-body-description { display: block; font-size: 15px; margin-top: 12px; color: #4b5563; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-body-description p { margin: 0; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-cta-container { display: flex; flex-direction: column; gap: 12px; width: 100%; flex: 1; min-width: 0; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-footer { display: flex; justify-content: flex-end; width: 100%; margin-top: auto; }    .tg-df-container .hawk-deal-widget-button-wrapper { display: flex; flex-direction: column; align-items: flex-end; justify-content: flex-end; width: 100%; }    .tg-df-container .hawk-deal-widget-preferred-partner-wrapper { display: flex; flex-direction: row; }        @container tg-df (min-width: 600px) {      .tg-df-mobile-only { display: none !important; }    }    @container tg-df (max-width: 599px) {      .tg-df-desktop-only { display: none !important; }      .tg-df-grid.layout-replica-2 { grid-template-columns: 1fr !important; }      .tg-df-grid.savings-squad-cards { grid-template-columns: 1fr !important; display: flex; flex-direction: column; }    }    .tg-df-grid.savings-squad-cards .tg-df-card-title {      -webkit-line-clamp: unset !important;      display: block !important;      overflow: visible !important;    }    @container tg-df (max-width: 500px) {      .tg-df-container .hawk-deal-widget-wrap { display: block; }      .tg-df-container .hawk-deal-widget-image-container { display: block; float: left; margin: 0 16px 8px 0; width: 120px; max-width: 120px; height: auto; align-items: normal; justify-content: normal; }      .tg-df-container .hawk-deal-widget-text-cta-container { display: block; text-align: left; }      .tg-df-container .hawk-deal-widget-footer { display: block; margin-top: 16px; clear: both; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper .hawk-deal-widget-preferred-partner-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-affiliate-link-deal-button { box-sizing: border-box !important; display: flex !important; max-width: none !important; width: 100% !important; margin: 0 !important; }    }        .tg-df-container .hawk-affiliate-link-deal-button {       align-items: center; background-color: #1f69ff; box-sizing: border-box; color: #ffffff !important; display: flex; font-size: 14px; font-weight: 700; justify-content: center; letter-spacing: 0.5px; line-height: 1; min-width: 160px; padding: 14px 24px; text-align: center; text-decoration: none; text-transform: uppercase; width: 100%; word-break: normal; border-radius: 4px; border: 0; transition: background-color 0.2s;     }    .tg-df-container .hawk-affiliate-link-deal-button:hover { background-color: #0056e0; text-decoration: none; }    .tg-df-container .hawk-lazy-image-deal-widget { display: block; height: auto; margin: auto; max-height: 160px; max-width: 100%; mix-blend-mode: multiply; object-fit: contain; }    .tg-df-container .hawk-deal-widget-text-cta-container a { color: #2563eb; text-decoration: none; display: inline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:has(.hawk-deal-widget-title-product-title) { color: #111827; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-product-title,    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-retailer-price { text-decoration: underline; }    .tg-df-savings-squad-header { margin-bottom: 24px; text-align: center; display: none; }    .tg-df-banner-img-desktop { display: block; width: 100%; height: auto; margin-bottom: 32px; }    .tg-df-banner-img-mobile { display: none; width: 100%; height: auto; margin-bottom: 32px; }    @container tg-df (max-width: 600px) {      .tg-df-banner-img-desktop { display: none; }      .tg-df-banner-img-mobile { display: block; }    }    .tg-df-header-title { font-size: 28px; font-weight: 700; color: var(--tg-df-text); margin: 32px 0 12px 0; line-height: 1.3; }    .tg-df-header-subtitle { font-size: 16px; color: var(--tg-df-text-muted); margin: 0 0 32px 0; line-height: 1.5; }  \x3C/style>  \x3C!-- Widget Container --\x3E  \x3Cdiv class="tg-df-container" id="signal-deals-finder-root">    \x3Cdiv class="tg-df-savings-squad-header" id="tg-df-savings-squad-header">      \x3Cpicture>        \x3Cimg src="https://cdn.mos.cms.futurecdn.net/flexiimages/xkh2og7m3d1778189998.png" alt="Deals Banner" class="tg-df-banner-img-desktop" />        \x3Cimg src="https://cdn.mos.cms.futurecdn.net/flexiimages/gmak6rtdf41778245089.png" alt="Deals Banner Mobile" class="tg-df-banner-img-mobile" />      \x3C/picture>      \x3Cdiv class="tg-df-header-text">        \x3Ch2 class="tg-df-header-title" id="tg-df-header-title">Editor's Choice Deals\x3C/h2>        \x3Cp class="tg-df-header-subtitle" id="tg-df-header-subtitle">Discover the best discounts currently available, curated daily by the Tom's Guide Savings Squad.\x3C/p>      \x3C/div>    \x3C/div>    \x3C!-- Editor Floating Bar --\x3E    \x3Cdiv class="tg-df-editor-bar" id="tg-df-editor-bar" style="display:none;">      \x3Cdiv class="tg-df-editor-bar-text" style="display: flex; align-items: center;">        \x3Cspan id="tg-df-selected-count">0\x3C/span>\x26nbsp;Deals Selected        \x3Cbutton class="tg-df-editor-clear-btn" id="tg-df-editor-clear" type="button" style="margin-left: 12px; font-size: 13px; color: #9ca3af; background: none; border: none; cursor: pointer; text-decoration: underline;">Clear All\x3C/button>      \x3C/div>      \x3Cbutton class="tg-df-editor-copy-btn" id="tg-df-editor-copy" type="button">        \x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">\x3C/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">\x3C/path>\x3C/svg>        Copy to CMS      \x3C/button>    \x3C/div>    \x3Cdiv class="tg-df-carousel-host" id="tg-df-carousel-host" style="display: none;">      \x3Cdiv class="tg-df-carousel-eyebrow">DEAL FINDER\x3C/div>      \x3Cdiv class="tg-df-carousel-query-title" id="tg-df-carousel-title-label">Best Deals\x3C/div>            \x3Cdiv class="tg-df-carousel-blue-box">        \x3Cdiv class="tg-df-carousel-bg-circle-1" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-2" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-3" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-box-content">          \x3Cdiv class="tg-df-countdown-wrapper" id="tg-df-countdown-wrapper" style="display:none;">            \x3Cdiv class="tg-df-countdown-title" id="tg-df-countdown-title">Prime Day starts in\x3C/div>            \x3Cdiv class="tg-df-countdown-blocks">              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-days">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">DAYS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-hrs">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">HRS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-min">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">MIN\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-sec">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">SEC\x3C/div>\x3C/div>            \x3C/div>          \x3C/div>          \x3Cdiv class="tg-df-carousel-box-eyebrow">DEAL FINDER\x3C/div>          \x3Cdiv class="tg-df-carousel-box-title">Find Deals Fast\x3C/div>          \x3Cdiv class="tg-df-carousel-box-subtitle">The latest deals from the biggest retailers, all in one place\x3C/div>                    \x3Cdiv class="tg-df-carousel-roundels-wrapper">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-roundels">                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Televisions" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/wcMxTsHgqu3roMbAx7RLnT-132-100.png" alt="TVs" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">TVs\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Phones" data-pr="over50">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/G3KGaRGzj24F6PUsw4bWpT-132-100.png" alt="Phones" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Phones\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Computing" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/znNvsLzx8NEgNkD9HSFSnT-132-100.png" alt="Computing" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Computing\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Gaming" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/Pgew8yaRQeZFHqHjTzvBnT-132-100.png" alt="Gaming" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Gaming\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Mattresses" data-pr="over500">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/cW7xsaLyesxkHFVSiC4kmT-132-100.png" alt="Mattresses" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Mattresses\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Audio" data-pr="over30">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/pCvBVHuhaQVjKt3VgCjbqT-132-100.png" alt="Audio" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Audio\x3C/span>            \x3C/div>                  \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>        \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-carousel-filters-outer" style="position: relative;">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-filters-wrap">                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="0">All\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_lightning">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_prime">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-d="10">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 10% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="15">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 15% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="25">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 25% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-pr="under50">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>            Under $50\x3C/button>        \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3C/div>    \x3C/div>    \x3C/div>      \x3C!-- Search & Filter Controls --\x3E      \x3Cdiv class="tg-df-top-bar" id="tg-df-top-bar" style="position: relative; z-index: 100; margin: 0 auto 20px;">        \x3Cdiv class="tg-df-search-wrapper">          \x3Cinput type="text" class="tg-df-search-input" placeholder="Search for deals, products, or brands...">          \x3Cbutton type="button" class="tg-df-search-btn" aria-label="Search">              \x3Csvg class="tg-df-search-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">                \x3Cpath d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/>              \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-autocomplete-dropdown" id="tg-df-autocomplete">\x3C/div>        \x3C/div>      \x3C/div>    \x3Cdiv class="tg-df-controls" id="tg-df-controls" style="display:flex;">              \x3Cdiv class="tg-df-filters-container" style="position: relative; width: 100%; max-width: 800px; margin: 0 auto;">          \x3Cbutton class="tg-df-scroll-btn left" style="display: none;" onclick="this.parentElement.querySelector('.tg-df-filters').scrollBy({left: -200, behavior: 'smooth'})">            \x3Csvg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">\x3Cpath d="M15 18l-6-6 6-6"/>\x3C/svg>          \x3C/button>          \x3Cbutton class="tg-df-scroll-btn right" style="display: none;" onclick="this.parentElement.querySelector('.tg-df-filters').scrollBy({left: 200, behavior: 'smooth'})">            \x3Csvg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">\x3Cpath d="M9 18l6-6-6-6"/>\x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-filters">          \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-category-filter-wrapper" style="display: none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-category-filter" aria-label="Category">            \x3Coption value="all">All Categories\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-multiselect-container" id="tg-df-brand-filter-wrapper" style="display:none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M4.25 5.61C6.27 8.2 10 13 10 13v6c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-6s3.72-4.8 5.74-7.39A.998.998 0 0 0 18.95 4H5.04c-.83 0-1.3.95-.79 1.61z"/>          \x3C/svg>          \x3Cdiv class="tg-df-filter-select tg-df-multiselect-trigger" id="tg-df-brand-trigger" tabindex="0">            Any Brand          \x3C/div>          \x3Cdiv class="tg-df-multiselect-dropdown" id="tg-df-brand-dropdown">            \x3C!-- Populated via script --\x3E          \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-price-range-wrapper" id="tg-df-custom-price-wrapper" style="display: flex; align-items:center; justify-content:center; padding: 10px 20px; gap: 8px; border: 1px solid var(--tg-df-border); border-radius: 100px; background-color: var(--tg-df-bg);">          \x3Cspan style="font-size:14px; font-weight:500; color:var(--tg-df-text-primary);">Price\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-min" placeholder="Min" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">          \x3Cspan style="color:var(--tg-df-text-muted)">-\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-max" placeholder="Max" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-legacy-price-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-price-filter" aria-label="Filter Prices">            \x3Coption value="all">All Prices\x3C/option>            \x3Coption value="under50">Under $50\x3C/option>            \x3Coption value="50_100">$50 - $100\x3C/option>            \x3Coption value="100_200">$100 - $200\x3C/option>            \x3Coption value="200_500">$200 - $500\x3C/option>            \x3Coption value="over500">Over $500\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-discount-filter-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-discount-filter" aria-label="Discount Amount">            \x3Coption value="all">Any discount\x3C/option>            \x3Coption value="5">Min 5%\x3C/option>            \x3Coption value="10">Min 10%\x3C/option>            \x3Coption value="15">Min 15%\x3C/option>            \x3Coption value="20">Min 20%\x3C/option>            \x3Coption value="25">Min 25%\x3C/option>            \x3Coption value="30">Min 30%\x3C/option>            \x3Coption value="40">Min 40%\x3C/option>            \x3Coption value="50">Min 50%\x3C/option>            \x3Coption value="60">Min 60%\x3C/option>            \x3Coption value="70">Min 70%\x3C/option>          \x3C/select>          \x3C/div>        \x3C/div>        \x3C/div>      \x3C/div>    \x3C!-- Deals Grid Wrapper --\x3E    \x3Cdiv class="tg-df-grid-wrapper tg-df-carousel-cards-wrapper" id="tg-df-grid-wrapper">      \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3Cdiv class="tg-df-grid" id="tg-df-grid">        \x3C!-- Content populated by JavaScript --\x3E      \x3C/div>      \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>    \x3C/div>        \x3C!-- Vouchers Modal --\x3E    \x3Cdiv class="tg-df-modal-backdrop" id="tg-df-vouchers-modal">      \x3Cdiv class="tg-df-modal">        \x3Cdiv class="tg-df-modal-header">          \x3Ch3 class="tg-df-modal-title" id="tg-df-vouchers-title">Available Coupons & Deals\x3C/h3>          \x3Cbutton class="tg-df-modal-close" id="tg-df-vouchers-close">            \x3Csvg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">              \x3Cline x1="18" y1="6" x2="6" y2="18">\x3C/line>              \x3Cline x1="6" y1="6" x2="18" y2="18">\x3C/line>            \x3C/svg>          \x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-modal-body" id="tg-df-vouchers-content">          \x3C!-- Vouchers injected here --\x3E        \x3C/div>      \x3C/div>    \x3C/div>  \x3C/div>`;      if (!template) {        template = document.createElement('template');        template.innerHTML = rawTemplate;      }      let shadowRoot = null;      if (hostContainer && template) {        hostContainer.setAttribute('data-initialized', 'true');        shadowRoot = hostContainer.attachShadow({ mode: 'open' });        shadowRoot.appendChild(template.content.cloneNode(true));      }      class DealsFinderWidget {        constructor(config) {          this.rootNode = config.rootNode || document;          this.hostContainer = config.hostContainer || null;          this.rootId = config.rootId || 'signal-deals-finder-root';          this.root = this.rootNode.querySelector('#' + this.rootId);          if (!this.root) return;          this.widgetId = (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'widget-' + Date.now() + '-' + Math.random().toString(36).slice(2);          this.grid = this.root.querySelector('#tg-df-grid');          this.tagsContainer = this.root.querySelector('#tg-df-tags-container');          this.categoryFilter = this.root.querySelector('#tg-df-category-filter');          this.categoryFilterWrapper = this.root.querySelector('#tg-df-category-filter-wrapper');          this.searchInput = this.root.querySelector('.tg-df-search-input');          this.autocompleteDropdown = this.root.querySelector('#tg-df-autocomplete');          this.sortSelect = this.root.querySelector('.tg-df-sort-select');          this.searchBtn = this.root.querySelector('.tg-df-search-btn');                    this.settingsToggle = this.root.querySelector('#tg-df-settings-toggle');          this.settingsPanel = this.root.querySelector('#tg-df-settings-panel');          this.settingsBackdrop = this.root.querySelector('#tg-df-settings-backdrop');          this.regionSelect = this.root.querySelector('#tg-df-region-select');          this.retailerSelect = this.root.querySelector('#tg-df-retailer-select');          this.offerTypeSelect = this.root.querySelector('#tg-df-offer-type-select');          this.viewModeSelect = this.root.querySelector('#tg-df-view-mode-select');          this.rowsSelect = this.root.querySelector('#tg-df-rows-select');          this.dealModeToggle = this.root.querySelector('#tg-df-deal-mode');          this.editorModeToggle = this.root.querySelector('#tg-df-editor-mode');          this.priceFilter = this.root.querySelector('#tg-df-price-filter');          this.discountFilter = this.root.querySelector('#tg-df-discount-filter');                    this.editorBar = this.root.querySelector('#tg-df-editor-bar');          this.editorSelectedCount = this.root.querySelector('#tg-df-selected-count');          this.editorCopyBtn = this.root.querySelector('#tg-df-editor-copy');          this.editorClearBtn = this.root.querySelector('#tg-df-editor-clear');                    this.apiUrl = 'https://search-api.fie.future.net.uk/widget.php';          this.deals = [];          this.displayLimit = 12;          this.airedaleArticles = null;          this.airedaleTags = [];          this.airedaleTagCounts = {};          this.activeDealTag = null;          this.selectedBrands = [];          this.currentQuery = '';          this.editorMode = this.hostContainer ? this.hostContainer.hasAttribute('data-editor-mode') : false;          this.viewModeOverride = this.hostContainer ? this.hostContainer.getAttribute('data-view-mode') : null;          this.selectedDeals = new Map();                    this.brandFilterWrapper = this.root.querySelector('#tg-df-brand-filter-wrapper');          this.brandTrigger = this.root.querySelector('#tg-df-brand-trigger');          this.brandDropdown = this.root.querySelector('#tg-df-brand-dropdown');                    this.customPriceWrapper = this.root.querySelector('#tg-df-custom-price-wrapper');          this.customPriceMin = this.root.querySelector('#tg-df-custom-price-min');          this.customPriceMax = this.root.querySelector('#tg-df-custom-price-max');          this.legacyPriceWrapper = this.root.querySelector('#tg-df-legacy-price-wrapper');          this.discountFilterWrapper = this.root.querySelector('#tg-df-discount-filter-wrapper');          this.initResizeObserver();          this.init();        }        getViewMode() {          console.log("DEBUG getViewMode -> override:", this.viewModeOverride, "editorMode:", this.editorMode);          if (this.viewModeOverride && (!this.editorMode || !this.viewModeSelect)) {            return this.viewModeOverride;          }          return (this.viewModeSelect && this.viewModeSelect.value) ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');        }        applyLayoutMode() {          if (!this.grid) return;          const mode = this.getViewMode();          console.log("[DEBUG] applyLayoutMode CALLED! mode=", mode);          this.grid.classList.remove('layout-row', 'layout-grid', 'tg-df-grid-auto', 'carousel-compact', 'layout-replica-1', 'layout-replica-2');                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          const showHeaderDetails = params.get('show_header_details') !== 'false';          const carouselHost = this.root.querySelector('#tg-df-carousel-host');          const controlsDiv = this.root.querySelector('#tg-df-controls');          const topBarDiv = this.root.querySelector('#tg-df-top-bar');          const headerElement = this.root.querySelector('#tg-df-savings-squad-header');          if (headerElement) {             headerElement.style.display = (mode === 'savings_squad' && showHeaderDetails) ? 'block' : 'none';          }          if (mode === 'carousel') {             this.grid.classList.add('carousel-compact');             if (carouselHost) carouselHost.style.display = 'block';             if (controlsDiv) controlsDiv.style.display = 'none';             if (topBarDiv) topBarDiv.style.display = 'none';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.add('is-carousel');             }          } else {             if (carouselHost) carouselHost.style.display = 'none';             if (controlsDiv) controlsDiv.style.display = 'flex';             if (topBarDiv) topBarDiv.style.display = 'block';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          }          if (mode === 'grid') {            this.grid.classList.add('layout-grid');          } else if (mode === 'row') {            this.grid.classList.add('layout-row');          } else if (mode === 'savings_squad') {            this.grid.classList.add('tg-df-grid-auto', 'savings-squad-cards');          } else if (mode !== 'carousel') {            this.grid.classList.add('tg-df-grid-auto');          }                    const settingsWrapper = this.root.querySelector('.tg-df-settings-wrapper');          if (settingsWrapper) {            settingsWrapper.style.display = mode === 'auto' ? 'none' : 'block';          }          if (this.customPriceWrapper) {             this.customPriceWrapper.style.display = mode === 'auto' ? 'flex' : 'none';          }          if (this.legacyPriceWrapper) {             this.legacyPriceWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }          if (this.discountFilterWrapper) {             this.discountFilterWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }        }        initResizeObserver() {          try {            if (window.parent === window) return;          } catch (e) {            // cross origin frame check threw          }          const emitHeight = () => {            try {              const height = document.documentElement.scrollHeight || document.body.scrollHeight;              const msg = { type: 'embed-size', height: height };              if (window.parent && window.parent !== window) {                window.parent.postMessage(msg, '*');                window.parent.postMessage(JSON.stringify({ ...msg, sentinel: 'amp' }), '*');              }            } catch (e) {}          };                    if (window.ResizeObserver) {            try {              const ro = new ResizeObserver(() => emitHeight());              ro.observe(document.body);              if (this.root) ro.observe(this.root);            } catch(e){ console.warn(e); }          }          window.addEventListener('resize', emitHeight);          setTimeout(emitHeight, 300);        }        initCountdown() {          this.cdWrapper = this.root.querySelector('#tg-df-countdown-wrapper');                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          this.showCountdown = params.get('show_countdown') === 'true';          const showHeaderDetails = params.get('show_header_details') !== 'false';          const eyebrow = this.root.querySelector('.tg-df-carousel-box-eyebrow');          const title = this.root.querySelector('.tg-df-carousel-box-title');          const subtitle = this.root.querySelector('.tg-df-carousel-box-subtitle');          if (!showHeaderDetails) {            let containerElement = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (containerElement) containerElement.classList.add('hide-header-details');            if (eyebrow) eyebrow.style.display = 'none';            if (title) title.style.display = 'none';            if (subtitle) subtitle.style.display = 'none';          }          if (!this.cdWrapper) return;          this.cdTitle = this.root.querySelector('#tg-df-countdown-title');          this.cdDays = this.root.querySelector('#tg-df-cd-days');          this.cdHrs = this.root.querySelector('#tg-df-cd-hrs');          this.cdMin = this.root.querySelector('#tg-df-cd-min');          this.cdSec = this.root.querySelector('#tg-df-cd-sec');          this.updateCountdown();          this.cdInterval = setInterval(() => this.updateCountdown(), 1000);        }        updateCountdown() {          if (!this.cdWrapper) return;          if (!this.showCountdown) {            this.cdWrapper.style.display = 'none';            return;          }          const area = this.getAreaCode();          let offset = '-04:00';          if (['DE', 'FR', 'IT', 'ES', 'NL'].includes(area)) {             offset = '+02:00';          } else if (['GB', 'IE', 'UK'].includes(area)) {             offset = '+01:00';          }          const startTime = new Date('2026-06-23T00:00:00' + offset).getTime();          const endTime = new Date('2026-06-26T00:00:00' + offset).getTime();          const now = Date.now();          let targetTime = 0;          if (now < startTime) {             targetTime = startTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day starts in';             this.cdWrapper.style.display = 'flex';          } else if (now < endTime) {             targetTime = endTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day ends in';             this.cdWrapper.style.display = 'flex';          } else {             this.cdWrapper.style.display = 'none';             if (this.cdInterval) clearInterval(this.cdInterval);             return;          }          const diff = Math.max(0, targetTime - now);          const d = Math.floor(diff / (1000 * 60 * 60 * 24));          const h = Math.floor((diff / (1000 * 60 * 60)) % 24);          const m = Math.floor((diff / 1000 / 60) % 60);          const s = Math.floor((diff / 1000) % 60);          if (this.cdDays) this.cdDays.textContent = d;          if (this.cdHrs) this.cdHrs.textContent = h;          if (this.cdMin) this.cdMin.textContent = m;          if (this.cdSec) this.cdSec.textContent = s;        }        init() {          this.initCountdown();          try {            initAnalytics();          } catch (e) {            console.warn('Deals Widget Analytics Error:', e);          }                    this.bindEvents();                    let initialQuery = '';                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          let initialViewMode = params.get('view_mode');          if (!this.viewModeOverride && initialViewMode) {            this.viewModeOverride = initialViewMode;          }          if (!params.has('search') && !params.has('q') && !params.has('query') && initialViewMode !== 'savings_squad') {             initialQuery = 'Gaming laptops';          }          const website = params.get('website') || 'tomsguide';          this.website = website;          if (website === 'techradar') {            const squadHeader = this.root.querySelector('.tg-df-savings-squad-header');            if (squadHeader) {               const pic = squadHeader.querySelector('picture');               if (pic) pic.style.display = 'none';            }            const style = document.createElement('style');            style.innerHTML = `              .tg-df-container .hawk-affiliate-link-deal-button, .tg-df-container .tg-df-card-cta { background-color: #5DAF08 !important; }              .tg-df-container .hawk-affiliate-link-deal-button:hover, .tg-df-container .tg-df-card-cta:hover { background-color: #4a8c06 !important; }            `;            this.root.appendChild(style);          }                    if (this.regionSelect) {            this.regionSelect.value = params.get('region') || 'auto';            this.updatePriceDropdownCurrency();          }                    if (this.retailerSelect && params.has('retailer')) {            this.retailerSelect.value = params.get('retailer');          }                    if (params.has('brands')) {            const b = params.get('brands');            if (b) {              this.selectedBrands = b.split(',');            }          }                    if (this.offerTypeSelect && params.has('offer_type')) {            this.offerTypeSelect.value = params.get('offer_type');          }          if (this.viewModeSelect && params.has('view_mode')) {            this.viewModeSelect.value = params.get('view_mode');          }          if (this.rowsSelect && params.has('rows')) {            this.rowsSelect.value = params.get('rows');          }          if (params.has('price')) {            const priceVal = params.get('price');            if (this.priceFilter) {               // Try assigning it directly to select. If it's not present implicitly ignores               this.priceFilter.value = priceVal;            }            if (priceVal.includes('_')) {               const parts = priceVal.split('_');               if (this.customPriceMin && parts[0]) this.customPriceMin.value = parts[0];               if (this.customPriceMax && parts[1]) this.customPriceMax.value = parts[1];            }          }          if (this.discountFilter && params.has('min_discount_ratio')) {            // Need to convert back from ratio (e.g. 0.8) to select value (e.g. "20")            const ratioStr = params.get('min_discount_ratio');            const ratioFloat = parseFloat(ratioStr);            if (!isNaN(ratioFloat)) {               const percentage = Math.round((1 - ratioFloat) * 100);               this.discountFilter.value = percentage.toString();            }          }          if (this.sortSelect) {            this.sortSelect.value = params.get('sort') || 'date_desc';          }          if (this.dealModeToggle && params.has('deal_mode')) {            this.dealModeToggle.checked = params.get('deal_mode') === 'true' || params.get('deal_mode') === '1';          }          const headerTitleEl = this.root.querySelector('#tg-df-header-title');          const headerSubtitleEl = this.root.querySelector('#tg-df-header-subtitle');          if (params.has('widget_title') && headerTitleEl) {             headerTitleEl.textContent = params.get('widget_title');          }          if (params.has('widget_subtitle') && headerSubtitleEl) {             headerSubtitleEl.textContent = params.get('widget_subtitle');          }                    // Re-apply layout after params have updated control values          this.applyLayoutMode();                    if (params.get('search')) {            initialQuery = params.get('search');          } else if (params.get('q')) {            initialQuery = params.get('q');          } else if (params.get('query')) {            initialQuery = params.get('query');          }                    this.currentQuery = initialQuery;          if (this.searchInput) {            if (this.getViewMode() === 'savings_squad') {              this.searchInput.value = '';            } else {              this.searchInput.value = this.currentQuery;            }          }                    if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {            this.fetchDeals(this.currentQuery);          } else {            this.render();          }        }        updatePriceDropdownCurrency() {          if (!this.priceFilter || !this.regionSelect) return;          const currencySymbols = {            'US': '$',            'GB': '£',            'CA': '$CA',            'AU': '$AU',            'DE': '€',            'FR': '€',            'IT': '€',          };          const area = this.getAreaCode();          const cur = currencySymbols[area || 'US'] || '$';                    const options = this.priceFilter.options;          for (let i = 0; i < options.length; i++) {            const opt = options[i];            if (opt.value === 'all') {              opt.innerText = 'All Prices';            } else if (opt.value === 'under50') {              opt.innerText = `Under ${cur}50`;            } else if (opt.value === '50_100') {              opt.innerText = `${cur}50 - ${cur}100`;            } else if (opt.value === '100_200') {              opt.innerText = `${cur}100 - ${cur}200`;            } else if (opt.value === '200_500') {              opt.innerText = `${cur}200 - ${cur}500`;            } else if (opt.value === 'over500') {              opt.innerText = `Over ${cur}500`;            }          }        }        populateBrandDropdown(values) {          if (!this.brandDropdown || !this.brandFilterWrapper) return;          this.brandFilterWrapper.style.display = 'flex'; // show the wrapper                    let html = '';          const allChecked = this.selectedBrands.length === 0 ? 'checked' : '';          const _div = '<' + '/div>';          const _span = '<' + '/span>';          html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="" ${allChecked} class="tg-df-brand-chk"> Any Brand${_div}`;                    values.forEach(v => {             if (!v.formatted_value || v.formatted_value === 'Any Brand') return;             const isChecked = this.selectedBrands.includes(v.formatted_value) ? 'checked' : '';             html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="${this.escapeHTML(v.formatted_value)}" ${isChecked} class="tg-df-brand-chk"> ${this.escapeHTML(v.formatted_value)} \x3Cspan style="color:var(--tg-df-text-muted);font-size:12px">(${v.count || 0})${_span}${_div}`;          });                    this.brandDropdown.innerHTML = html;                    // Re-bind listeners          const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');          chks.forEach(chk => {            chk.addEventListener('change', (e) => {              const val = e.target.value;              if (val === '') {                this.selectedBrands = [];              } else {                if (e.target.checked) {                   if (!this.selectedBrands.includes(val)) this.selectedBrands.push(val);                } else {                   this.selectedBrands = this.selectedBrands.filter(b => b !== val);                }              }                            if (this.selectedBrands.length === 0) {                 this.brandTrigger.innerText = 'Any Brand';              } else if (this.selectedBrands.length === 1) {                 this.brandTrigger.innerText = this.selectedBrands[0];              } else {                 this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;              }                            // Only call API if changed from UI interactions              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.updateURLParams();                 this.fetchDeals(this.currentQuery);              }            });          });                    // Update button text on load          if (this.selectedBrands.length === 0) {             this.brandTrigger.innerText = 'Any Brand';          } else if (this.selectedBrands.length === 1) {             this.brandTrigger.innerText = this.selectedBrands[0];          } else {             this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;          }        }        updateURLParams() {          const url = new URL(window.location);          if (this.currentQuery && this.currentQuery !== 'Gaming laptops') {            url.searchParams.set('q', this.currentQuery);          } else {            url.searchParams.delete('q');            url.searchParams.delete('search');            url.searchParams.delete('query');          }                    if (this.regionSelect && this.regionSelect.value !== 'auto') {            url.searchParams.set('region', this.regionSelect.value);          } else {            url.searchParams.delete('region');          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.set('retailer', this.retailerSelect.value);          } else {            url.searchParams.delete('retailer');          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.set('brands', this.selectedBrands.join(','));          } else {            url.searchParams.delete('brands');          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.set('offer_type', this.offerTypeSelect.value);          } else {            url.searchParams.delete('offer_type');          }                    if (this.viewModeSelect && this.viewModeSelect.value !== 'auto') {            url.searchParams.set('view_mode', this.viewModeSelect.value);          } else {            url.searchParams.delete('view_mode');          }                    if (this.rowsSelect && this.rowsSelect.value !== '12') {            url.searchParams.set('rows', this.rowsSelect.value);          } else {            url.searchParams.delete('rows');          }                    const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             url.searchParams.set('price', `${min}_${max}`);          } else if (this.priceFilter && this.priceFilter.value !== 'all') {            url.searchParams.set('price', this.priceFilter.value);          } else {            url.searchParams.delete('price');          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {               const ratio = (100 - v) / 100;               url.searchParams.set('min_discount_ratio', ratio.toString());            }          } else {            url.searchParams.delete('min_discount_ratio');          }                    if (this.sortSelect && this.sortSelect.value !== 'date_desc') {            url.searchParams.set('sort', this.sortSelect.value);          } else {            url.searchParams.delete('sort');          }                    if (this.dealModeToggle && this.dealModeToggle.checked) {            url.searchParams.set('deal_mode', 'true');          } else {            url.searchParams.delete('deal_mode');          }                    window.history.replaceState({}, '', url);        }        bindEvents() {          const handleFiltersScroll = () => {            const filters = this.root.querySelector('.tg-df-filters');            const leftBtn = this.root.querySelector('.tg-df-scroll-btn.left');            const rightBtn = this.root.querySelector('.tg-df-scroll-btn.right');            if (filters && leftBtn && rightBtn) {              const { scrollLeft, scrollWidth, clientWidth } = filters;              leftBtn.style.display = scrollLeft > 0 ? 'flex' : 'none';              rightBtn.style.display = Math.ceil(scrollLeft + clientWidth) < scrollWidth - 5 ? 'flex' : 'none';            }          };          const filters = this.root.querySelector('.tg-df-filters');          if (filters) {            filters.addEventListener('scroll', handleFiltersScroll);            window.addEventListener('resize', handleFiltersScroll);            setTimeout(handleFiltersScroll, 100);                        // Also call after rendering dropdowns            const origRenderCategories = this.renderCategories;            if (origRenderCategories) {               this.renderCategories = (...args) => {                 origRenderCategories.apply(this, args);                 setTimeout(handleFiltersScroll, 50);               };            }          }                const roundels = this.root.querySelectorAll('.tg-df-carousel-cat');          roundels.forEach(r => {             r.addEventListener('click', () => {                const q = r.getAttribute('data-query');                const pr = r.getAttribute('data-pr');                if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: q,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = q;                const label = this.root.querySelector('#tg-df-carousel-title-label');                if (label) label.textContent = 'Best ' + q;                if (this.priceFilter) this.priceFilter.value = pr || 'all';                if (this.discountFilter) this.discountFilter.value = '5';                if (this.searchInput) this.searchInput.value = q;                                roundels.forEach(ro => ro.classList.remove('active'));                r.classList.add('active');                this.fetchDeals(this.currentQuery);             });          });          const discBtns = this.root.querySelectorAll('.tg-df-carousel-filter-btn');          discBtns.forEach(b => {             b.addEventListener('click', () => {                const d = b.getAttribute('data-d');                const pr = b.getAttribute('data-pr');                const ot = b.getAttribute('data-ot');                let label = b.innerText ? b.innerText.trim() : '';                let filterType = 'unknown';                let filterVal = 'unknown';                if (d !== null) { filterType = 'discount'; filterVal = d; }                else if (pr !== null) { filterType = 'price'; filterVal = pr; }                else if (ot !== null) { filterType = 'offertype'; filterVal = ot; }                if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-${filterType}-${filterVal}`, name: 'Filter Button', label: label });                                if (d !== null) {                   if (this.discountFilter) this.discountFilter.value = this.discountFilter.value === d ? '0' : d;                } else if (pr !== null) {                   if (this.priceFilter) this.priceFilter.value = this.priceFilter.value === pr ? 'all' : pr;                } else if (ot !== null) {                   if (this.offerTypeSelect) this.offerTypeSelect.value = this.offerTypeSelect.value === ot ? 'all' : ot;                } else {                   if (this.discountFilter) this.discountFilter.value = '0';                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.offerTypeSelect) this.offerTypeSelect.value = 'all';                }                if (d === null && pr === null && ot === null && b.getAttribute("data-type") !== "custom") {                   discBtns.forEach(ro => ro.classList.remove('active'));                   b.classList.add('active');                } else if (b.getAttribute("data-type") !== "custom") {                   // Only operate on hardcoded buttons (those without data-type)                   discBtns.forEach(ro => {                      if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active');                   });                                      let makeActive = true;                   if (d !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-d') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (pr !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-pr') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (ot !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-ot') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   }                                      if (makeActive) b.classList.add('active');                                      // Check if anything is active, if not activate "All"                   let anyActive = false;                   discBtns.forEach(ro => { if (ro.classList.contains('active') && ro.getAttribute('data-type') !== 'custom') anyActive = true; });                   if (!anyActive) {                       discBtns.forEach(ro => { if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.add('active'); });                   }                }                                this.fetchDeals(this.currentQuery);             });          });          if (this.brandTrigger && this.brandDropdown) {            this.brandTrigger.addEventListener('click', () => {              this.brandDropdown.classList.toggle('active');            });            document.addEventListener('click', (e) => {              if (this.brandFilterWrapper && !e.composedPath().includes(this.brandFilterWrapper)) {                this.brandDropdown.classList.remove('active');              }            });          }          const showAutocomplete = () => {             if (this.getViewMode() !== 'savings_squad' || !this.autocompleteDropdown || !this.airedaleTags) return;                          let terms = this.airedaleTags;             if (this.airedaleBrands) {                terms = terms.concat(this.airedaleBrands.map(b => b.formatted_value));             }             terms = [...new Set(terms)];                          const query = this.searchInput.value.trim();             let matches = [];             if (query.length > 0) {                 matches = terms.filter(t => t.toLowerCase().includes(query.toLowerCase()) && t.toLowerCase() !== query.toLowerCase());             } else {                 matches = terms;             }                          if (matches.length > 0) {                 this.autocompleteDropdown.innerHTML = matches.map(m => `\x3Cdiv class="tg-df-autocomplete-item" data-tag="${this.escapeHTML(m)}">${this.escapeHTML(m)}<` + `/div>`).join('');                 this.autocompleteDropdown.classList.add('active');             } else {                 this.autocompleteDropdown.classList.remove('active');             }          };          let debounceTimer;          if(this.searchInput) {            this.searchInput.addEventListener('focus', showAutocomplete);            this.searchInput.addEventListener('input', (e) => {              clearTimeout(debounceTimer);              const query = e.target.value.trim();              this.currentQuery = query;              showAutocomplete();              debounceTimer = setTimeout(() => {                this.updateURLParams();                if (query.length > 2) {                  this.fetchDeals(query);                } else if (query.length === 0) {                  if (this.getViewMode() === 'savings_squad') {                    this.activeDealTag = null;                    this.currentQuery = '';                    if (this.categoryFilter) this.categoryFilter.value = 'all';                    this.fetchDeals('');                  } else {                    this.deals = [];                    this.render();                  }                }              }, 400);            });            this.searchInput.addEventListener('keypress', (e) => {              if (e.key === 'Enter') {                if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');                clearTimeout(debounceTimer);                const query = e.target.value.trim();                this.currentQuery = query;                                let isTag = false;                if (this.airedaleTags && this.airedaleTags.includes(query)) isTag = true;                if (this.airedaleBrands && this.airedaleBrands.some(b => b.formatted_value === query)) isTag = true;                this.activeDealTag = isTag ? query : null;                                trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                this.updateURLParams();                if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                   if (query.length === 0 && this.getViewMode() === 'savings_squad') {                       if (this.categoryFilter) this.categoryFilter.value = 'all';                   }                   this.fetchDeals(query);                }              }            });          }          if (this.autocompleteDropdown) {             this.autocompleteDropdown.addEventListener('click', (e) => {                const item = e.target.closest('.tg-df-autocomplete-item');                if (item) {                   const tag = item.getAttribute('data-tag');                   this.currentQuery = tag;                   if (this.searchInput) this.searchInput.value = tag;                   this.activeDealTag = tag;                   if (this.categoryFilter && this.airedaleTags.includes(tag)) {                       this.categoryFilter.value = tag;                   }                   this.autocompleteDropdown.classList.remove('active');                   this.updateURLParams();                   this.fetchDeals(tag);                }             });             document.addEventListener('click', (e) => {               if (this.autocompleteDropdown && this.searchInput && !e.composedPath().includes(this.searchInput) && !e.composedPath().includes(this.autocompleteDropdown)) {                 this.autocompleteDropdown.classList.remove('active');               }             });          }          if (this.searchBtn) {            this.searchBtn.addEventListener('click', () => {              if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');              clearTimeout(debounceTimer);              const query = this.searchInput.value.trim();              trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                            let isTag = false;              if (this.airedaleTags && this.airedaleTags.includes(query)) isTag = true;              if (this.airedaleBrands && this.airedaleBrands.some(b => b.formatted_value === query)) isTag = true;              this.activeDealTag = isTag ? query : null;                            this.currentQuery = query;              this.updateURLParams();              if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                 if (query.length === 0 && this.getViewMode() === 'savings_squad') {                     if (this.categoryFilter) this.categoryFilter.value = 'all';                 }                 this.fetchDeals(query);              }            });          }          if(this.sortSelect && this.sortSelect.querySelector('option[value="date_desc"]') === null) {              const option = document.createElement('option');              option.value = "date_desc";              option.text = "Newest First";              this.sortSelect.insertBefore(option, this.sortSelect.firstChild);          }          if(this.sortSelect) this.sortSelect.addEventListener('change', () => {            trackElementInteraction({ id: `sort-option-${this.sortSelect.value}`, name: 'Sort', label: `Sort: ${this.sortSelect.options[this.sortSelect.selectedIndex].text}` });            this.updateURLParams();            if (this.deals.length > 0) {              this.sortData();              this.render();            }          });                    const priceFilter = this.root.querySelector('#tg-df-price-filter');          if (priceFilter) {            this.priceFilter = priceFilter;            this.priceFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-price-${this.priceFilter.value}`, name: 'Price', label: this.priceFilter.options[this.priceFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          const updateCustomPrice = () => {             this.updateURLParams();             if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);             } else {                this.render();             }          };          if (this.customPriceMin) {             this.customPriceMin.addEventListener('change', updateCustomPrice);             this.customPriceMin.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          if (this.customPriceMax) {             this.customPriceMax.addEventListener('change', updateCustomPrice);             this.customPriceMax.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          const discountFilter = this.root.querySelector('#tg-df-discount-filter');          if (discountFilter) {            this.discountFilter = discountFilter;            this.discountFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-discount-${this.discountFilter.value}`, name: 'Discount', label: this.discountFilter.options[this.discountFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          if (this.categoryFilter) {            this.categoryFilter.addEventListener('change', (e) => {               const val = e.target.value === 'all' ? null : e.target.value;               this.activeDealTag = val;               if (val) {                 this.currentQuery = val;               } else {                 if (this.searchInput && this.currentQuery === document.querySelector('#tg-df-brand-trigger')?.getAttribute('data-active-brand')) {                     // don't clear current query if a brand is selected                 } else if (this.searchInput) {                     this.currentQuery = '';                     this.searchInput.value = '';                 }               }               this.fetchSavingsSquad();            });          }                    if (this.settingsToggle) {            this.settingsToggle.addEventListener('click', () => {              const o = this.settingsPanel.classList.toggle('active');              this.settingsBackdrop.classList.toggle('active');              if (o) trackElementInteraction({ id: 'filter-open', name: 'Filters', label: 'Open filters' });            });          }                    if (this.settingsBackdrop) {            this.settingsBackdrop.addEventListener('click', () => {              this.settingsPanel.classList.remove('active');              this.settingsBackdrop.classList.remove('active');            });          }                    if (this.regionSelect) {            this.regionSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-region-${this.regionSelect.value}`, name: 'Region', label: this.regionSelect.options[this.regionSelect.selectedIndex].text });              this.updateURLParams();              this.updatePriceDropdownCurrency();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.retailerSelect) {            this.retailerSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-merchant-${this.retailerSelect.value}`, name: 'Retailer', label: this.retailerSelect.options[this.retailerSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.offerTypeSelect) {            this.offerTypeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-offertype-${this.offerTypeSelect.value}`, name: 'Offer Type', label: this.offerTypeSelect.options[this.offerTypeSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.viewModeSelect) {            this._prevViewMode = this.viewModeSelect.value;            this.viewModeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-viewmode-${this.viewModeSelect.value}`, name: 'View Mode', label: this.viewModeSelect.options[this.viewModeSelect.selectedIndex].text });                            // Reset all active toggles and filters to prevent config carry-over              this.selectedBrands = [];              if (this.brandTrigger) this.brandTrigger.innerText = 'Select Brands';              if (this.brandDropdown) {                const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                chks.forEach(chk => { chk.checked = false; });              }              if (this.priceFilter) this.priceFilter.value = 'all';              if (this.customPriceMin) this.customPriceMin.value = '';              if (this.customPriceMax) this.customPriceMax.value = '';              if (this.sortSelect) this.sortSelect.value = 'date_desc';              if (this.discountFilter) this.discountFilter.value = '0';              if (this.retailerSelect) this.retailerSelect.value = '';              if (this.offerTypeSelect) this.offerTypeSelect.value = '';              if (this.rowsSelect) this.rowsSelect.value = '12';              if (this.categoryFilter) this.categoryFilter.value = 'all';              this.activeDealTag = null;              this.updateURLParams();              this.applyLayoutMode();                            if (this.getViewMode() === 'savings_squad' || this._prevViewMode === 'savings_squad') {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }              this._prevViewMode = this.viewModeSelect.value;            });          }                    if (this.rowsSelect) {            this.rowsSelect.addEventListener('change', () => {              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.dealModeToggle) {            this.dealModeToggle.addEventListener('change', () => {              this.updateURLParams();              this.render();            });          }          if (this.editorModeToggle) {             this.editorModeToggle.addEventListener('change', (e) => {                this.editorMode = e.target.checked;                this.render();                this.updateFloatingCopyBar();             });          }          if (this.editorCopyBtn) {             this.editorCopyBtn.addEventListener('click', () => {                this.copySelectedDealsToCMS();             });          }          if (this.editorClearBtn) {             this.editorClearBtn.addEventListener('click', () => {                this.selectedDeals.clear();                this.render();                this.updateFloatingCopyBar();             });          }          if (this.grid) {            this.grid.addEventListener('change', (e) => {               if (e.target.classList.contains('tg-df-deal-checkbox')) {                  const dealId = e.target.getAttribute('data-id');                  if (e.target.checked) {                     const dealObj = this.deals.find(d => d.id === dealId);                     if (dealObj) this.selectedDeals.set(dealId, dealObj);                  } else {                     this.selectedDeals.delete(dealId);                  }                  this.updateFloatingCopyBar();               }            });            this.grid.addEventListener('click', (e) => {              const dealCard = e.target.closest('[data-action="deal-click"]');              const similarCard = e.target.closest('[data-action="view-similar-click"]');              const cardLink = dealCard || similarCard;              if (cardLink) {                const productName = cardLink.getAttribute('data-product-name');                const merchantName = cardLink.getAttribute('data-merchant-name');                const productId = cardLink.getAttribute('data-analytics-id');                const price = parseFloat(cardLink.getAttribute('data-price')) || null;                const prevPriceStr = cardLink.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = cardLink.getAttribute('data-original-link');                const 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 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 = this.decodeHTML(description.replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').replace(/View Deal$/i, '').trim());                summaryTitle = this.decodeHTML(summaryTitle);                                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.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) {          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.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 : '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 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)}${_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)}" ${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 ? `\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/sales-events/huge-apple-sale-amazon-takes-up-to-usd500-off-macbooks-airpods-and-more</link>
                                                                            <description>
                            <![CDATA[ Amazon is offering a bunch of discounts on Apple tech — check these deals out while you catch up on the latest devices from the last Apple Event! ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">6ZmnsWHW7Js8b3aJEB8PZg</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/qDfhsoYDXgpo57nuvYhWcS-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 13 Oct 2026 13:53:08 +0000</pubDate>                                                                                                                                <updated>Mon, 19 Oct 2026 15:08:14 +0000</updated>
                                                                                                                                            <category><![CDATA[Sales Events]]></category>
                                                                                                <author><![CDATA[ millie.daviswilliams@futurenet.com (Millie Davis-Williams) ]]></author>                    <dc:creator><![CDATA[ Millie Davis-Williams ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/WU6pa7hKuxs5ScCoqcXYWA-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Millie is a Deals Editor at Tom&#039;s Guide specializing in tech deals content. Based in London, Millie has spent a lifetime stubbornly refusing to pay full price on any possible purchase. She has years of searching for the best discounts on the latest and greatest phones, TVs and gadgets under her belt, and knows how to sort the best deals from the rest. Helping readers save on the products they want is her mission, whether it’s an Apple Watch or a new tablet.&lt;/p&gt;&lt;p&gt;Since working at Tom’s Guide, Millie has covered retail events like Prime Day, Black Friday and Cyber Monday extensively, meaning she knows the products readers are looking for and the best times of year to hit “purchase.”&lt;/p&gt;&lt;p&gt;When she’s not looking for discounts, Millie covers news and writes how-to articles about everything from phones, streaming devices, and headphones to apps and video games.&lt;/p&gt;&lt;p&gt;In her spare time, Millie enjoys reading, gaming on her Nintendo Switch and creating digital art. She’s also a fan of watching Disney movies and collecting plush (the latter having totally taken over her bedroom.)&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/qDfhsoYDXgpo57nuvYhWcS-1920-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[MacBook Neo with Price Drop deal tag]]></media:description>                                                            <media:text><![CDATA[MacBook Neo with Price Drop deal tag]]></media:text>
                                <media:title type="plain"><![CDATA[MacBook Neo with Price Drop deal tag]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/qDfhsoYDXgpo57nuvYhWcS-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Don't want to wait for Black Friday? Apple tech will (most likely) be cheaper during next month's Black Friday sales, but if you want an upgrade now, there are plenty of great apple deals to be had.</p><p>Right now Amazon is offering deals on <a href="https://www.amazon.com/stores/Apple/page/77D9E1F7-0337-4282-9DB6-B6B8FB2DC98D" target="_blank" rel="nofollow">AirPods, MacBooks and accessories starting from just $14</a>. One of my favorite deals right now is the <a href="https://www.amazon.com/Apple-AirTag-2nd-Generation-Precision/dp/B0GJTXVN9Z" target="_blank" rel="nofollow">AirTag 4-Pack on sale for $89</a>. Just attach an AirTag to anything you want to keep track of, and you can use the Find My app on your iPhone to find it if it gets lost.</p><p>Keep scrolling to see all my favorite deals!</p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links</span></h3><ul><li><strong></strong><a href="https://www.amazon.com/stores/Apple/page/77D9E1F7-0337-4282-9DB6-B6B8FB2DC98D?" target="_blank" rel="nofollow"><strong>shop all Apple deals on Amazon</strong></a><strong>   </strong></li><li><strong>Apple EarPods (Lightning): </strong><a href="https://www.amazon.com/Apple-EarPods-Headphones-Lightning-Connector/dp/B0D7FVQ1ZB/" target="_blank" rel="nofollow"><strong>was $19 now $15</strong></a></li><li><strong>Apple AirTag: </strong><a href="https://www.amazon.com/gp/aw/d/B0GJTFXNRX/" target="_blank" rel="nofollow"><strong>was $29 now $24</strong></a></li><li><strong>Apple Watch 12: </strong><a href="https://www.amazon.com/dp/B0HJB63G4M" target="_blank" rel="nofollow"><strong>was $399 now $389</strong></a></li><li><strong>11" iPad Air (M4): </strong><a href="https://www.amazon.com/Apple-iPad-Air-11-inch-M4/dp/B0GQVPX1PJ" target="_blank" rel="nofollow"><strong>was $749 now $729</strong></a><strong></strong></li><li><strong>Mac mini (M6): </strong><a href="https://www.amazon.com/Apple-2026-mini-Desktop-Computer/dp/B0HGGJZ92H" target="_blank" rel="nofollow"><strong>was $899 now $779</strong></a></li><li><strong>15" MacBook Air (M5): </strong><a href="https://www.amazon.com/Apple-2026-MacBook-15-inch-Laptop/dp/B0GR1N82GJ" target="_blank" rel="nofollow"><strong>was $1,499 now $1,399</strong></a><strong></strong></li></ul><h3 class="article-body__section" id="section-accessories"><span>Accessories</span></h3><div class="product"><a data-dimension112="d8a7746c-c707-11f1-ba4c-f9f2bec03b00" data-action="Deal Block" data-label="20W USB-C Compact Power Adapter" data-dimension48="20W USB-C Compact Power Adapter" data-dimension25="$14" href="https://www.amazon.com/Apple-20W-USB-C-Power-Adapter/dp/B0DJFW7PNM" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:649px;"><p class="vanilla-image-block" style="padding-top:149.61%;"><img id="mhEQ7c2rj34AhoPSdBToNX" name="20W USB-C Compact Power Adapter" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/mhEQ7c2rj34AhoPSdBToNX-1920-80.jpg" mos="" align="middle" fullscreen="" width="649" height="971" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Apple-20W-USB-C-Power-Adapter/dp/B0DJFW7PNM" target="_blank" rel="nofollow" data-dimension112="d8a7746c-c707-11f1-ba4c-f9f2bec03b00" data-action="Deal Block" data-label="20W USB-C Compact Power Adapter" data-dimension48="20W USB-C Compact Power Adapter" data-dimension25="$14">20W USB-C Compact Power Adapter: was $19 now $14</a></strong><br>This is one of those essentials everyone needs, so you might as well buy one while it's on sale. It offers 20W fast charging for iPhone 8 and up.<a class="view-deal button" href="https://www.amazon.com/Apple-20W-USB-C-Power-Adapter/dp/B0DJFW7PNM" target="_blank" rel="nofollow" data-dimension112="d8a7746c-c707-11f1-ba4c-f9f2bec03b00" data-action="Deal Block" data-label="20W USB-C Compact Power Adapter" data-dimension48="20W USB-C Compact Power Adapter" data-dimension25="$14">View Deal</a></p></div><div class="product"><a data-dimension112="d8a774d0-c707-11f1-89dc-6781861adeb5" data-action="Deal Block" data-label="EarPods (Lightning)" data-dimension48="EarPods (Lightning)" data-dimension25="$15" href="https://www.amazon.com/Apple-EarPods-Headphones-Lightning-Connector/dp/B0D7FVQ1ZB/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1040px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="Ys3T2v7S48cnc2sK2hLS9U" name="apple earpods with lightning connector.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/Ys3T2v7S48cnc2sK2hLS9U-1920-80.jpg" mos="" align="middle" fullscreen="" width="1040" height="1040" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Apple-EarPods-Headphones-Lightning-Connector/dp/B0D7FVQ1ZB/" target="_blank" rel="nofollow" data-dimension112="d8a774d0-c707-11f1-89dc-6781861adeb5" data-action="Deal Block" data-label="EarPods (Lightning)" data-dimension48="EarPods (Lightning)" data-dimension25="$15">EarPods (Lightning): was $19 now $15</a></strong><br>If you like listening to your music the old-fashioned way, this pair of wired EarPods has a Lightning connector, allowing them to be used with older Apple devices. For this price, you might as well grab a pair!<a class="view-deal button" href="https://www.amazon.com/Apple-EarPods-Headphones-Lightning-Connector/dp/B0D7FVQ1ZB/" target="_blank" rel="nofollow" data-dimension112="d8a774d0-c707-11f1-89dc-6781861adeb5" data-action="Deal Block" data-label="EarPods (Lightning)" data-dimension48="EarPods (Lightning)" data-dimension25="$15">View Deal</a></p></div><div class="product"><a data-dimension112="d8a7753e-c707-11f1-bcdd-9fe8dcc2cdc1" data-action="Deal Block" data-label="AirTag (2nd Gen)" data-dimension48="AirTag (2nd Gen)" data-dimension25="$24" href="https://www.amazon.com/gp/aw/d/B0GJTFXNRX/" 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="EzmCNB37HYZTKq3XSMqvTY" name="Apple AirTag 2 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/EzmCNB37HYZTKq3XSMqvTY-1920-80.jpg" mos="" align="middle" fullscreen="" width="600" height="600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/gp/aw/d/B0GJTFXNRX/" target="_blank" rel="nofollow" data-dimension112="d8a7753e-c707-11f1-bcdd-9fe8dcc2cdc1" data-action="Deal Block" data-label="AirTag (2nd Gen)" data-dimension48="AirTag (2nd Gen)" data-dimension25="$24">AirTag (2nd Gen): was $29 now $24</a></strong><br>Apple's second generation AirTag offers better range, precision finding, a louder speaking and a bunch of extra improvements to help you track your lost keys and bags.<a class="view-deal button" href="https://www.amazon.com/gp/aw/d/B0GJTFXNRX/" target="_blank" rel="nofollow" data-dimension112="d8a7753e-c707-11f1-bcdd-9fe8dcc2cdc1" data-action="Deal Block" data-label="AirTag (2nd Gen)" data-dimension48="AirTag (2nd Gen)" data-dimension25="$24">View Deal</a></p></div><div class="product"><a data-dimension112="d8a775a2-c707-11f1-97b4-e391dd52462d" data-action="Deal Block" data-label="240W USB-C to USB-C Woven Charge Cable (2 m)" data-dimension48="240W USB-C to USB-C Woven Charge Cable (2 m)" data-dimension25="$24" href="https://www.amazon.com/Apple-USB-C-Woven-Charge-Cable/dp/B0DCH5B2HF" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:71.07%;"><img id="H37kKia68mrqHSBwHDsVRJ" name="240W USB-C to USB-C Woven Charge Cable (2 m)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/H37kKia68mrqHSBwHDsVRJ-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="1066" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Apple-USB-C-Woven-Charge-Cable/dp/B0DCH5B2HF" target="_blank" rel="nofollow" data-dimension112="d8a775a2-c707-11f1-97b4-e391dd52462d" data-action="Deal Block" data-label="240W USB-C to USB-C Woven Charge Cable (2 m)" data-dimension48="240W USB-C to USB-C Woven Charge Cable (2 m)" data-dimension25="$24">240W USB-C to USB-C Woven Charge Cable (2 m): was $29 now $24</a></strong><br>Another essential you don't want to go without. I have mostly USB-A to USB-C cables, so I definitely need to grab one of these for when a USB-A charging port isn't available — plus it's $5 off.<a class="view-deal button" href="https://www.amazon.com/Apple-USB-C-Woven-Charge-Cable/dp/B0DCH5B2HF" target="_blank" rel="nofollow" data-dimension112="d8a775a2-c707-11f1-97b4-e391dd52462d" data-action="Deal Block" data-label="240W USB-C to USB-C Woven Charge Cable (2 m)" data-dimension48="240W USB-C to USB-C Woven Charge Cable (2 m)" data-dimension25="$24">View Deal</a></p></div><div class="product"><a data-dimension112="d8a77606-c707-11f1-96ea-3d6358f8d182" data-action="Deal Block" data-label="Pencil (USB-C)" data-dimension48="Pencil (USB-C)" data-dimension25="$69" href="https://www.amazon.com/Apple-MUWA3AM-A-Pencil-USB-C/dp/B0CL7J12YK" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:500px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="LCuHYQPiVnordwa3UuoKE6" name="1721134277.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/LCuHYQPiVnordwa3UuoKE6-1920-80.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Apple-MUWA3AM-A-Pencil-USB-C/dp/B0CL7J12YK" target="_blank" rel="nofollow" data-dimension112="d8a77606-c707-11f1-96ea-3d6358f8d182" data-action="Deal Block" data-label="Pencil (USB-C)" data-dimension48="Pencil (USB-C)" data-dimension25="$69">Pencil (USB-C): was $79 now $69</a></strong><br>If you want a stylus that covers the basics, than the Apple Pencil USB-C is the one for you. With pixel-perfect precision, low-latency and magnets to attach to your tablet, this is the no-frills approach to writing ad drawing on your tablet.<a class="view-deal button" href="https://www.amazon.com/Apple-MUWA3AM-A-Pencil-USB-C/dp/B0CL7J12YK" target="_blank" rel="nofollow" data-dimension112="d8a77606-c707-11f1-96ea-3d6358f8d182" data-action="Deal Block" data-label="Pencil (USB-C)" data-dimension48="Pencil (USB-C)" data-dimension25="$69">View Deal</a></p></div><div class="product"><a data-dimension112="d8a77674-c707-11f1-9e73-1b778051e563" data-action="Deal Block" data-label="AirTag (2nd Gen)" data-dimension48="AirTag (2nd Gen)" data-dimension25="$89" href="https://www.amazon.com/Apple-AirTag-2nd-Generation-Precision/dp/B0GJTXVN9Z" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:900px;"><p class="vanilla-image-block" style="padding-top:133.33%;"><img id="HCUqWkUuUEZJCvXyEu4wwk" name="Apple - AirTag 4 pack (2nd generation) - 2026 - White" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/HCUqWkUuUEZJCvXyEu4wwk-1920-80.jpg" mos="" align="middle" fullscreen="" width="900" height="1200" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Score a four-pack of Apple AirTag (2nd Gen) keyfinders with a discount. If you have a lot of stuff you need to keep track of, this deal is one of the best ways to do it! Apple's second generation AirTag offers better range, precision finding, a louder speaking and a bunch of extra improvements to help you track your lost keys and bags.<a class="view-deal button" href="https://www.amazon.com/Apple-AirTag-2nd-Generation-Precision/dp/B0GJTXVN9Z" target="_blank" rel="nofollow" data-dimension112="d8a77674-c707-11f1-9e73-1b778051e563" data-action="Deal Block" data-label="AirTag (2nd Gen)" data-dimension48="AirTag (2nd Gen)" data-dimension25="$89">View Deal</a></p></div><div class="product"><a data-dimension112="7ae56cfa-c70a-11f1-a4b2-23fe5afdd0df" data-action="Deal Block" data-label="Magic Trackpad" data-dimension48="Magic Trackpad" data-dimension25="$115" href="https://www.amazon.com/Apple-Magic-Trackpad-Multi-Touch-Surface/dp/B0DL6ZN6GK" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1007px;"><p class="vanilla-image-block" style="padding-top:21.35%;"><img id="zFbS4rzma3VgrgQFqNpH5" name="Magic Trackpad" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/zFbS4rzma3VgrgQFqNpH5-1920-80.jpg" mos="" align="middle" fullscreen="" width="1007" height="215" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>$115 is the lowest price ever for this Apple accessory. The Magic Trackpad pairs automatically with Mac devices, has month-long battery and is pressure sensitive. Basically, it's a simple way to make your work more efficient and comfortable.<a class="view-deal button" href="https://www.amazon.com/Apple-Magic-Trackpad-Multi-Touch-Surface/dp/B0DL6ZN6GK" target="_blank" rel="nofollow" data-dimension112="7ae56cfa-c70a-11f1-a4b2-23fe5afdd0df" data-action="Deal Block" data-label="Magic Trackpad" data-dimension48="Magic Trackpad" data-dimension25="$115">View Deal</a></p></div><h3 class="article-body__section" id="section-apple-watch"><span>Apple Watch</span></h3><div class="product"><a data-dimension112="7ae56d86-c70a-11f1-a670-c72faf9d524b" data-action="Deal Block" data-label="Watch SE 3 (GPS/42mm)" data-dimension48="Watch SE 3 (GPS/42mm)" data-dimension25="$219" href="https://www.amazon.com/dp/B0HJB1CGR3" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1250px;"><p class="vanilla-image-block" style="padding-top:120.00%;"><img id="P5u4zYQs5ZvG5TAnrthGhE" name="Apple Watch SE 3 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/P5u4zYQs5ZvG5TAnrthGhE-1920-80.jpg" mos="" align="middle" fullscreen="" width="1250" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0HJB1CGR3" target="_blank" rel="nofollow" data-dimension112="7ae56d86-c70a-11f1-a670-c72faf9d524b" data-action="Deal Block" data-label="Watch SE 3 (GPS/42mm)" data-dimension48="Watch SE 3 (GPS/42mm)" data-dimension25="$219">Watch SE 3 (GPS/42mm): was $249 now $219</a></strong><br>The Apple Watch SE 3 sports a lot of new features that redefine Apple's entry-level smartwatch. Among them, you'll find an always-on display, S10 processor, and better health features, such as support for Sleep Score and Workout Buddy. (The latter is powered by Apple Intelligence and requires an iPhone 15 Pro or higher). In our <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-se-3-review">Apple Watch SE 3 review</a>, we called it the best smartwatch value around.<a class="view-deal button" href="https://www.amazon.com/dp/B0HJB1CGR3" target="_blank" rel="nofollow" data-dimension112="7ae56d86-c70a-11f1-a670-c72faf9d524b" data-action="Deal Block" data-label="Watch SE 3 (GPS/42mm)" data-dimension48="Watch SE 3 (GPS/42mm)" data-dimension25="$219">View Deal</a></p></div><div class="product"><a data-dimension112="d8a77868-c707-11f1-9c74-39b0bb00a381" data-action="Deal Block" data-label="Watch Series 12" data-dimension48="Watch Series 12" data-dimension25="$389" href="https://www.amazon.com/dp/B0HJBCX8VS" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1298px;"><p class="vanilla-image-block" style="padding-top:115.56%;"><img id="dj8YUEM5aawJ85g5ZY8J69" name="Apple Watch 12 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/dj8YUEM5aawJ85g5ZY8J69-1920-80.jpg" mos="" align="middle" fullscreen="" width="1298" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0HJBCX8VS" target="_blank" rel="nofollow" data-dimension112="d8a77868-c707-11f1-9c74-39b0bb00a381" data-action="Deal Block" data-label="Watch Series 12" data-dimension48="Watch Series 12" data-dimension25="$389">Watch Series 12: was $399 now $389</a></strong><br>The Apple Watch 12 features an upgraded S11 processor, improved heart rate and heart rate variability (HRV) tracking, new Readiness metric, new Health Age score, and a redesigned Health app with improved recovery insights and personalized AI health/fitness guidance. In our <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-series-12-review">Apple Watch 12 review</a>, we said its continuous heart-rate sensing and better recovery information make it a must buy for Apple fans.<a class="view-deal button" href="https://www.amazon.com/dp/B0HJBCX8VS" target="_blank" rel="nofollow" data-dimension112="d8a77868-c707-11f1-9c74-39b0bb00a381" data-action="Deal Block" data-label="Watch Series 12" data-dimension48="Watch Series 12" data-dimension25="$389">View Deal</a></p></div><div class="product"><a data-dimension112="7ae56df4-c70a-11f1-9acd-b7550b3609bb" data-action="Deal Block" data-label="Watch Ultra 3" data-dimension48="Watch Ultra 3" data-dimension25="$699" href="https://www.amazon.com/Apple-Cellular-Multisport-Smartwatch-Titanium/dp/B0FQG17FTN" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1345px;"><p class="vanilla-image-block" style="padding-top:111.52%;"><img id="boqhtatymKJ4MYpDXZJLoM" name="Apple Watch Ultra 3 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/boqhtatymKJ4MYpDXZJLoM-1920-80.jpg" mos="" align="middle" fullscreen="" width="1345" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Apple Watch Ultra 3 has several features that make it an epic smartwatch, including a 42-hour battery life and an extremely large, bright display. The Apple Watch Ultra 3 also comes with precision dual-frequency GPS + Cellular connectivity and new built-in satellite for emergency communications. In our <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-ultra-3-review" data-dimension112="7ae56df4-c70a-11f1-9acd-b7550b3609bb" data-action="Deal Block" data-label="Watch Ultra 3" data-dimension48="Watch Ultra 3" data-dimension25="$699">Apple Watch Ultra 3 review</a>, we called it the ultimate wearable. However, note that the newer Apple Watch Ultra 4 is now available.<a class="view-deal button" href="https://www.amazon.com/Apple-Cellular-Multisport-Smartwatch-Titanium/dp/B0FQG17FTN" target="_blank" rel="nofollow" data-dimension112="7ae56df4-c70a-11f1-9acd-b7550b3609bb" data-action="Deal Block" data-label="Watch Ultra 3" data-dimension48="Watch Ultra 3" data-dimension25="$699">View Deal</a></p></div><h3 class="article-body__section" id="section-mac"><span>Mac</span></h3><div class="product"><a data-dimension112="7ae56ebc-c70a-11f1-b85e-154ba4fe7340" data-action="Deal Block" data-label="Mac mini M6" data-dimension48="Mac mini M6" data-dimension25="$779" href="https://www.amazon.com/Apple-2026-mini-Desktop-Computer/dp/B0HGGJZ92H" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:990px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="JTeh5dZUAWCmJHNFpFpmZZ" name="Mac mini M6" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/JTeh5dZUAWCmJHNFpFpmZZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="990" height="990" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Mac mini M6 keeps the ultra-compact 5x5-inch design introduced with the prior generation, but packs major performance upgrades under the hood. You get the raw speed of Apple's M6 chip, upgraded graphics with hardware-accelerated ray tracing for better 1080p gaming, 16GB of unified memory, and improved connectivity thanks to Apple's custom N1 chip, which adds Wi-Fi 7, Bluetooth 6.0, and Thread support. This deal is $10 above its lowest price ever of $769.<a class="view-deal button" href="https://www.amazon.com/Apple-2026-mini-Desktop-Computer/dp/B0HGGJZ92H" target="_blank" rel="nofollow" data-dimension112="7ae56ebc-c70a-11f1-b85e-154ba4fe7340" data-action="Deal Block" data-label="Mac mini M6" data-dimension48="Mac mini M6" data-dimension25="$779">View Deal</a></p></div><div class="product"><a data-dimension112="7ae56f20-c70a-11f1-bf3a-af0d9cb82735" data-action="Deal Block" data-label="Mac Studio M5 Max" data-dimension48="Mac Studio M5 Max" data-dimension25="$2299" href="https://www.amazon.com/Apple-2026-Studio-Desktop-Computer/dp/B0HGKSQMX6" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:48.93%;"><img id="YNRAcdiJezmYBiKgftV4gi" name="Mac Studio M5 Max" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/YNRAcdiJezmYBiKgftV4gi-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="734" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Apple-2026-Studio-Desktop-Computer/dp/B0HGKSQMX6" target="_blank" rel="nofollow" data-dimension112="7ae56f20-c70a-11f1-bf3a-af0d9cb82735" data-action="Deal Block" data-label="Mac Studio M5 Max" data-dimension48="Mac Studio M5 Max" data-dimension25="$2299">Mac Studio M5 Max: was $2499 now $2299</a></strong><br>Apple's powerful desktop computer, the Mac Studio, is on sale with $200 off — its lowest price ever. We checked out the M5 Ultra version of this computer in our <a href="https://www.tomsguide.com/computing/apple-desktops/apple-mac-studio-m5-ultra-review">Mac Studio M5 Ultra review</a> and pointed out that Apple's M5 Max and M5 Ultra chips run rings around the new base M6 chip in terms of performance.<a class="view-deal button" href="https://www.amazon.com/Apple-2026-Studio-Desktop-Computer/dp/B0HGKSQMX6" target="_blank" rel="nofollow" data-dimension112="7ae56f20-c70a-11f1-bf3a-af0d9cb82735" data-action="Deal Block" data-label="Mac Studio M5 Max" data-dimension48="Mac Studio M5 Max" data-dimension25="$2299">View Deal</a></p></div><h3 class="article-body__section" id="section-airpods"><span>AirPods</span></h3><div class="product"><a data-dimension112="7ae56fe8-c70a-11f1-bbda-a721b877f607" data-action="Deal Block" data-label="AirPods Pro 3" data-dimension48="AirPods Pro 3" data-dimension25="$199" href="https://www.amazon.com/Apple-Cancellation-Translation-Headphones-High-Fidelity/dp/B0FQFB8FMG" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:842px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="FYzcjQSdtuwidVacXmMNL5" name="AirPods Pro 3.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/FYzcjQSdtuwidVacXmMNL5-1920-80.jpg" mos="" align="middle" fullscreen="" width="842" height="842" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The AirPods Pro 3 bring the heat with 10 hours of battery life, improved sound, and superior active noise canceling. In our <a href="https://www.tomsguide.com/audio/airpods/apple-airpods-pro-3-review" data-dimension112="7ae56fe8-c70a-11f1-bbda-a721b877f607" data-action="Deal Block" data-label="AirPods Pro 3" data-dimension48="AirPods Pro 3" data-dimension25="$199">AirPods Pro 3 review</a> we said the Editor's Choice buds deliver the upgrade iPhone users have been waiting for with improved battery life, stronger noise cancellation, and smart new features like Live Translation, which delivers real-time translations to your ears. <strong>Note: </strong>these have sold for $169 in the past.<a class="view-deal button" href="https://www.amazon.com/Apple-Cancellation-Translation-Headphones-High-Fidelity/dp/B0FQFB8FMG" target="_blank" rel="nofollow" data-dimension112="7ae56fe8-c70a-11f1-bbda-a721b877f607" data-action="Deal Block" data-label="AirPods Pro 3" data-dimension48="AirPods Pro 3" data-dimension25="$199">View Deal</a></p></div><div class="product"><a data-dimension112="7ae5704c-c70a-11f1-b964-3dbf2ab493b3" data-action="Deal Block" data-label="AirPods Max 2" data-dimension48="AirPods Max 2" data-dimension25="$449" href="https://www.amazon.com/dp/B0GSS72GZJ" 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="TSi2XMUrFhYn5nqrGBsd59" name="airpods max 2 deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/TSi2XMUrFhYn5nqrGBsd59-1920-80.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>These are some of the best headphones we've ever used. With seamless Apple ecosystem integration, well-balanced sound, and excellent comfort, the AirPods Max 2 will make you want to listen to music. You have to try them to believe them and at this price, it's almost a steal. <strong>Note: </strong>these have sold for $399 in the past.<a class="view-deal button" href="https://www.amazon.com/dp/B0GSS72GZJ" target="_blank" rel="nofollow" data-dimension112="7ae5704c-c70a-11f1-b964-3dbf2ab493b3" data-action="Deal Block" data-label="AirPods Max 2" data-dimension48="AirPods Max 2" data-dimension25="$449">View Deal</a></p></div><h3 class="article-body__section" id="section-ipads"><span>iPads</span></h3><div class="product"><a data-dimension112="e8643c0c-cbce-11f1-80d4-9b039144c888" data-action="Deal Block" data-label="11" iPad (Wi-Fi/128GB)" data-dimension48="11" iPad (Wi-Fi/128GB)" data-dimension25="$399" href="https://www.amazon.com/Apple-iPad-11-inch-Display-All-Day/dp/B0DZ77D5HL" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1325px;"><p class="vanilla-image-block" style="padding-top:113.21%;"><img id="oi25obYHzoyNfMHoycGamh" name="iPad 2022 Blue.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/oi25obYHzoyNfMHoycGamh-1920-80.jpg" mos="" align="middle" fullscreen="" width="1325" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Apple-iPad-11-inch-Display-All-Day/dp/B0DZ77D5HL" target="_blank" rel="nofollow" data-dimension112="e8643c0c-cbce-11f1-80d4-9b039144c888" data-action="Deal Block" data-label='11" iPad (Wi-Fi/128GB)' data-dimension48='11" iPad (Wi-Fi/128GB)' data-dimension25="$399">11" iPad (Wi-Fi/128GB): was $449 now $399</a></strong><br>The 2025 iPad features a larger 11-inch (2360 x 1640) screen, A16 CPU, 12MP rear/front cameras, USB-C connectivity, and Magic Keyboard Folio ($249) support. The base model features 128GB of storage, which is double the capacity of its predecessor. It's available in 128GB, 256GB, and 512GB capacities. <strong>Note:</strong> Apple increased its price to $449 in June.<a class="view-deal button" href="https://www.amazon.com/Apple-iPad-11-inch-Display-All-Day/dp/B0DZ77D5HL" target="_blank" rel="nofollow" data-dimension112="e8643c0c-cbce-11f1-80d4-9b039144c888" data-action="Deal Block" data-label="11" iPad (Wi-Fi/128GB)" data-dimension48="11" iPad (Wi-Fi/128GB)" data-dimension25="$399">View Deal</a></p></div><div class="product"><a data-dimension112="d8a77930-c707-11f1-b61a-d54bd086ce48" data-action="Deal Block" data-label="iPad mini 7" data-dimension48="iPad mini 7" data-dimension25="$569" href="https://www.amazon.com/dp/B0DK3W4YHS" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1203px;"><p class="vanilla-image-block" style="padding-top:124.69%;"><img id="G2PjHEjHsRfuddfWSzPBjd" name="iPad mini 2024 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/G2PjHEjHsRfuddfWSzPBjd-1920-80.jpg" mos="" align="middle" fullscreen="" width="1203" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The iPad mini is getting a discount, and any price cut to this small tablet is welcome. We're big fans of its incredibly portable design and long battery life (it lasted 10 hours in our battery life tests.) It comes with speedy performance thanks to Apple's A17 Pro chip, and has a gorgeous 8.3-inch (2,266 x 1,488) Liquid Retina display. You also get 12MP cameras on the front and back and Wi-Fi 6e support. In our <a href="https://www.tomsguide.com/tablets/ipads/ipad-mini-7-review" data-dimension112="d8a77930-c707-11f1-b61a-d54bd086ce48" data-action="Deal Block" data-label="iPad mini 7" data-dimension48="iPad mini 7" data-dimension25="$569">iPad mini 7 review</a>, we said it delivers the full iPad experience in a tiny size. <a class="view-deal button" href="https://www.amazon.com/dp/B0DK3W4YHS" target="_blank" rel="nofollow" data-dimension112="d8a77930-c707-11f1-b61a-d54bd086ce48" data-action="Deal Block" data-label="iPad mini 7" data-dimension48="iPad mini 7" data-dimension25="$569">View Deal</a></p></div><div class="product"><a data-dimension112="d8a77994-c707-11f1-818a-7f73897e547c" data-action="Deal Block" data-label="11" iPad Air (WiFi/128GB)" data-dimension48="11" iPad Air (WiFi/128GB)" data-dimension25="$729" href="https://www.amazon.com/Apple-iPad-Air-11-inch-M4/dp/B0GQVPX1PJ" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1325px;"><p class="vanilla-image-block" style="padding-top:113.21%;"><img id="NVZkwX7FuVd3CYdiYHdsgm" name="iPad Air 11 2024 deal block.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/NVZkwX7FuVd3CYdiYHdsgm-1920-80.jpg" mos="" align="middle" fullscreen="" width="1325" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Apple-iPad-Air-11-inch-M4/dp/B0GQVPX1PJ" target="_blank" rel="nofollow" data-dimension112="d8a77994-c707-11f1-818a-7f73897e547c" data-action="Deal Block" data-label='11" iPad Air (WiFi/128GB)' data-dimension48='11" iPad Air (WiFi/128GB)' data-dimension25="$729">11" iPad Air (WiFi/128GB): was $749 now $729</a></strong><br>The 2026 iPad Air packs Apple's M4 processor, which Apple states is up to 30 percent faster than iPad Air with M3. It also has an 11-inch LED (2360 x 1640) display, 128GB of storage, 12MP rear camera, and 12MP front camera. The tablet now supports Wi-Fi 7 a well as Bluetooth 6 and Thread. In our <a href="https://www.tomsguide.com/computing/ipads/apple-ipad-air-m4-review-small-tweaks-to-the-gold-standard">iPad Air M4 review</a>, we said the upgrades are modest, but the iPad Air remains the best tablet out there. <a class="view-deal button" href="https://www.amazon.com/Apple-iPad-Air-11-inch-M4/dp/B0GQVPX1PJ" target="_blank" rel="nofollow" data-dimension112="d8a77994-c707-11f1-818a-7f73897e547c" data-action="Deal Block" data-label="11" iPad Air (WiFi/128GB)" data-dimension48="11" iPad Air (WiFi/128GB)" data-dimension25="$729">View Deal</a></p></div><h3 class="article-body__section" id="section-macbooks"><span>MacBooks</span></h3><div class="product"><a data-dimension112="d8a77a5c-c707-11f1-ba07-452dbb75ba45" data-action="Deal Block" data-label="MacBook Neo (256GB)" data-dimension48="MacBook Neo (256GB)" data-dimension25="$689" href="https://www.amazon.com/dp/B0GR6FHGXX?" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:61.07%;"><img id="Lg4Dvg68j9SbB5CPNrTEpH" name="MacBook Neo deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/Lg4Dvg68j9SbB5CPNrTEpH-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="916" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0GR6FHGXX?" target="_blank" rel="nofollow" data-dimension112="d8a77a5c-c707-11f1-ba07-452dbb75ba45" data-action="Deal Block" data-label="MacBook Neo (256GB)" data-dimension48="MacBook Neo (256GB)" data-dimension25="$689">MacBook Neo (256GB): was $699 now $689</a></strong><br>The MacBook Neo sports a 13-inch Liquid Retina (2408 x 1506) display, A18 Pro chipset, 8GB of RAM, 256GB SSD, and 1080p FaceTime HD camera. There's also the option to add TouchID and a 512GB SSD for a total price of $699. The 2.7-lb. laptop is available in Indigo, Blush, Citrus, and Silver. In our <a href="https://www.tomsguide.com/computing/macbooks/apple-macbook-neo-review">MacBook Neo review</a>, we said no other laptop comes close to the Neo in terms of bang for your buck. <a class="view-deal button" href="https://www.amazon.com/dp/B0GR6FHGXX?" target="_blank" rel="nofollow" data-dimension112="d8a77a5c-c707-11f1-ba07-452dbb75ba45" data-action="Deal Block" data-label="MacBook Neo (256GB)" data-dimension48="MacBook Neo (256GB)" data-dimension25="$689">View Deal</a></p></div><div class="product"><a data-dimension112="d8a77ac0-c707-11f1-943c-3156deba4a79" data-action="Deal Block" data-label="15" MacBook Air (M5)" data-dimension48="15" MacBook Air (M5)" data-dimension25="$1399" href="https://www.amazon.com/Apple-2026-MacBook-15-inch-Laptop/dp/B0GR1N82GJ" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:60.73%;"><img id="R5hxVnj9RteJKiej8tQbLH" name="MacBook Air M5 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/R5hxVnj9RteJKiej8tQbLH-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="911" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Apple-2026-MacBook-15-inch-Laptop/dp/B0GR1N82GJ" target="_blank" rel="nofollow" data-dimension112="d8a77ac0-c707-11f1-943c-3156deba4a79" data-action="Deal Block" data-label='15" MacBook Air (M5)' data-dimension48='15" MacBook Air (M5)' data-dimension25="$1399">15" MacBook Air (M5): was $1499 now $1399</a></strong><br>The 15-inch MacBook Air M5 is one of the devices that got hit by the Apple price hikes, but right now you can get it for $100 off. This laptop features a 15.3-inch (2880 x 1864) display, Apple M5 chipset, 16GB of RAM, 512GB SSD and support for WiFi 7 and Bluetooth 6. <a class="view-deal button" href="https://www.amazon.com/Apple-2026-MacBook-15-inch-Laptop/dp/B0GR1N82GJ" target="_blank" rel="nofollow" data-dimension112="d8a77ac0-c707-11f1-943c-3156deba4a79" data-action="Deal Block" data-label="15" MacBook Air (M5)" data-dimension48="15" MacBook Air (M5)" data-dimension25="$1399">View Deal</a></p></div><div class="product"><a data-dimension112="7ae570d8-c70a-11f1-9c6c-ef35ab93c834" data-action="Deal Block" data-label="MacBook Pro 16" (M5 Pro/1TB)" data-dimension48="MacBook Pro 16" (M5 Pro/1TB)" data-dimension25="$2751" href="https://www.amazon.com/Apple-MacBook-Laptop-18-core-20-core/dp/B0GR1DS3YP/?" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:61.20%;"><img id="RNSaffzj2zSm5qbMJFK97K" name="MacBook Pro 16" (M5 Pro/1TB)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/RNSaffzj2zSm5qbMJFK97K-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="918" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Apple-MacBook-Laptop-18-core-20-core/dp/B0GR1DS3YP/?" target="_blank" rel="nofollow" data-dimension112="7ae570d8-c70a-11f1-9c6c-ef35ab93c834" data-action="Deal Block" data-label='MacBook Pro 16" (M5 Pro/1TB)' data-dimension48='MacBook Pro 16" (M5 Pro/1TB)' data-dimension25="$2751">MacBook Pro 16" (M5 Pro/1TB): was $2999 now $2751</a></strong><br>This config of the 2026 MacBook Pro is on sale for almost $250 off. In our <a href="https://www.tomsguide.com/computing/macbooks/macbook-pro-16-inch-m5-pro-review">MacBook Pro M5 Pro review</a>, our reviewer said "its stellar performance and epic battery life blew me away." Upgrades over last year's M4 model are incremental, but everyone else will feel a serious boost in performance.<a class="view-deal button" href="https://www.amazon.com/Apple-MacBook-Laptop-18-core-20-core/dp/B0GR1DS3YP/?" target="_blank" rel="nofollow" data-dimension112="7ae570d8-c70a-11f1-9c6c-ef35ab93c834" data-action="Deal Block" data-label="MacBook Pro 16" (M5 Pro/1TB)" data-dimension48="MacBook Pro 16" (M5 Pro/1TB)" data-dimension25="$2751">View Deal</a></p></div><div class="product"><a data-dimension112="e8643cca-cbce-11f1-a27f-499b2c1ea66e" data-action="Deal Block" data-label="MacBook Pro 16" (M5 Max/2TB)" data-dimension48="MacBook Pro 16" (M5 Max/2TB)" data-dimension25="$4499" href="https://www.amazon.com/Apple-MacBook-Laptop-18-core-20-core/dp/B0GR1DS3YP/?" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:61.20%;"><img id="RNSaffzj2zSm5qbMJFK97K" name="MacBook Pro 16" (M5 Pro/1TB)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/RNSaffzj2zSm5qbMJFK97K-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="918" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Apple-MacBook-Laptop-18-core-20-core/dp/B0GR1DS3YP/?" target="_blank" rel="nofollow" data-dimension112="e8643cca-cbce-11f1-a27f-499b2c1ea66e" data-action="Deal Block" data-label='MacBook Pro 16" (M5 Max/2TB)' data-dimension48='MacBook Pro 16" (M5 Max/2TB)' data-dimension25="$4499">MacBook Pro 16" (M5 Max/2TB): was $4999 now $4499</a></strong><br>The 2026 MacBook Pro M5 Max is on sale for $500 off. As well as a blazing-fast performance with the M5 Max chip, this version of the MacBook now has upgrades like a Neural Accelerator in every core and an N1 chip that brings Wi-Fi 7 and Bluetooth 6 support.<a class="view-deal button" href="https://www.amazon.com/Apple-MacBook-Laptop-18-core-20-core/dp/B0GR1DS3YP/?" target="_blank" rel="nofollow" data-dimension112="e8643cca-cbce-11f1-a27f-499b2c1ea66e" data-action="Deal Block" data-label="MacBook Pro 16" (M5 Max/2TB)" data-dimension48="MacBook Pro 16" (M5 Max/2TB)" data-dimension25="$4499">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=iphone&view_mode=savings_squad&widget_title=Top+Deals+Handpicked+by+Our+Editors&widget_subtitle=Discover+the+best+discounts+currently+available%2C+curated+daily+by+the+Tom%27s+Guide+Savings+Squad.&bg_color=transparent" data-vizualizer-embed="true"></div>    <script>    /**     * Tom's Guide Deals Finder - Vanilla JS Encapsulated Engine     */    (function() {      // --- Freyr Analytics Adapter ---      function initAnalytics() {        window.dataLayer = window.dataLayer || [];        window.googletag = window.googletag || {};        window.googletag.cmd = window.googletag.cmd || [];        window.hawk = window.hawk || { analytics: { freyr: [] } };        window.hawk.analytics = window.hawk.analytics || { freyr: [] };        window.hawk.analytics.freyr = window.hawk.analytics.freyr || [];        window.freyr = window.freyr || { cmd: [] };        const scriptSrc = 'https://freyr.futurecdn.net/freyr.js';        const hostname = typeof window !== 'undefined' ? window.location.hostname : '';        const isTestEnv = typeof window.navigator !== 'undefined' && (window.navigator.webdriver || window.navigator.userAgent.includes('Headless'));        const shouldSendRealAnalytics = !isTestEnv && hostname && hostname !== 'localhost' && hostname !== '127.0.0.1' && !hostname.includes('run.app');        if (shouldSendRealAnalytics && !document.querySelector(`script[src="${scriptSrc}"]`)) {          const script = document.createElement('script');          script.src = scriptSrc;          script.async = true;          document.head.appendChild(script);        }      }      function storeEventForDebug(name, data) {        if (!window.hawk || !window.hawk.analytics || !window.hawk.analytics.freyr) return;        window.hawk.analytics.freyr.push({ name, data });        try {          if (typeof window !== 'undefined' && window.localStorage) {            window.localStorage.setItem("hawk", JSON.stringify(window.hawk));          }        } catch (e) {          // Ignore storage issues        }        try {          window.dispatchEvent(new CustomEvent("hawk-analytics-update"));        } catch (e) {}      }      function sendToFreyr(eventName, data) {        if (typeof window === 'undefined') return;        window.freyr = window.freyr || { cmd: [] };        window.freyr.cmd.push(() => {          if (window.freyr && window.freyr.pushAndUpdate) {            window.freyr.pushAndUpdate(eventName, data);          }        });      }      function sendEvent(event, skip = false) {        try {          storeEventForDebug(event.name, event.data);          if (!skip) {            sendToFreyr(event.name, event.data);          }        } catch (e) {          // Ensure tracking errors don't surface to the user        }      }      function getCookie(name) {        try {          const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));          return match ? match[2] : null;        } catch (e) {          return null;        }      }      function getTimeAgo(dateString) {        if (!dateString) return '';        const date = new Date(dateString);        const now = new Date();        const diffInSeconds = Math.floor((now.getTime() - date.getTime()) / 1000);        if (diffInSeconds < 60) return 'Just now';        const diffInMinutes = Math.floor(diffInSeconds / 60);        if (diffInMinutes < 60) return `${diffInMinutes} min${diffInMinutes > 1 ? 's' : ''} ago`;        const diffInHours = Math.floor(diffInMinutes / 60);        if (diffInHours < 24) return `${diffInHours} hr${diffInHours > 1 ? 's' : ''} ago`;        const diffInDays = Math.floor(diffInHours / 24);        if (diffInDays < 30) return `${diffInDays} day${diffInDays > 1 ? 's' : ''} ago`;        const diffInMonths = Math.floor(diffInDays / 30);        if (diffInMonths < 12) return `${diffInMonths} mo${diffInMonths > 1 ? 's' : ''} ago`;        const diffInYears = Math.floor(diffInDays / 365);        return `${diffInYears} yr${diffInYears > 1 ? 's' : ''} ago`;      }      function normalizeCurrency(symbol) {        const map = {          '£': 'GBP',          '$': 'USD',          'A$': 'AUD',          'CA$': 'CAD',          '€': 'EUR'        };        return map[symbol] || symbol;      }      function trackElementInteraction(props) {        sendEvent({          name: 'elementInteraction',          data: {            element: {              action: props.action || "click",              id: props.id || undefined,              class: props.class || undefined,              name: props.name || undefined,              text: props.text || undefined,              label: props.label || undefined,              container: props.container || undefined,              url: props.url || undefined,              articleId: props.articleId || undefined            }          }        });      }      function generateRevenueId(url, productName, merchantName, modelId) {        const str = `${window.location.href}|${productName}|${merchantName}|${modelId || ''}|${new Date().toDateString()}|tomsguide`;        let hash = 0;        for (let i = 0; i < str.length; i++) {          const char = str.charCodeAt(i);          hash = ((hash << 5) - hash) + char;          hash = hash & hash;        }        let numericStr = Math.abs(hash).toString();        while (numericStr.length < 19) {          numericStr += Math.floor(Math.random() * 10).toString();        }        return numericStr.substring(0, 19);      }      function rewriteAffiliateLink(url, territory, revenueId) {        if (!url) return url;        const t = (territory || 'gb').toLowerCase();        return url.replace(/hawk-custom-tracking/g, `tomsguide-${t}-${revenueId}`);      }      function trackHawkEvent(params) {        const { clickType, widgetId, productCategoryName, product, productsArray, zeroBasedProductIndexOrNull, totalDealsOrProducts, areaClicked, merchant, revenueId, isoCurrencyCode, queryName, widgetTypeName } = params;        const data = {          event: "hawkEvent",          category: "Affiliates",          affiliate: {            action: {              type: clickType,              id: widgetId,              event: clickType === "appeared" ? "viewed" : "Click from",              timestamp: Date.now()            },            component: {              flag: "Editor",              product: productCategoryName || "deals",              category: `Signal Deal Finder ${widgetTypeName || "Carousel"} widget`,              type: clickType === "appeared" ? "review" : "signal product",              label: queryName || (product ? (product.name || "") : ""),              index: zeroBasedProductIndexOrNull === null || zeroBasedProductIndexOrNull === undefined ? -1 : zeroBasedProductIndexOrNull,              linkCount: totalDealsOrProducts || 0,              blockLayout: "",              areaClicked: areaClicked || ""            }          },          products: productsArray || (product && merchant ? [            {              product: {                primary: {                  id: product.id || product.matchId || null,                  name: product.name,                  type: "deal",                  price: product.price,                  previousPrice: product.previousPrice || null,                  currency: isoCurrencyCode || "USD",                  preorder: false,                  labels: [],                  link: product.link,                  originalLink: product.originalLink || null,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: null,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: product.globalId || null,                  inStock: product.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: isoCurrencyCode || "USD"                }              },              merchant: {                id: merchant.id || null,                name: merchant.name,                url: merchant.url || null,                network: merchant.network || null              },              model: {                id: product.modelId || null,                brand: product.brand || null,                name: product.name,                parent: product.parent || null              }            }          ] : []),          reviews: [],          _clear: true,          "gtm.uniqueEventId": Date.now() % 10000        };        sendEvent({ name: 'hawkEvent', data });      }      function trackDealClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card" });      }      function trackViewSimilarClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card View Similar" });      }      function trackPriceComparisonClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Price Comparison" });      }      function trackReviewClick(params) {        trackHawkEvent({ ...params, clickType: "review", areaClicked: "Signal Product Card Review Link" });      }      function trackShare(params) {        trackHawkEvent({ ...params, clickType: "share", areaClicked: "Signal Product Card Share" });      }      function trackDealsAppeared(widgetId, deals, revenueId, currency, queryName, widgetTypeName) {         if (!deals || deals.length === 0) return;                  const productsArray = deals.slice(0, 50).map((deal) => {            let voucherPct = null;            let rawPrice = parseFloat(deal.rawPrice) || parseFloat(deal.price) || null;            let rawMsrp = parseFloat(deal.rawMsrp) || parseFloat(deal.msrp) || null;            if (rawMsrp > rawPrice && rawPrice > 0) {              voucherPct = Math.round((1 - (rawPrice / rawMsrp)) * 100);            }            let numId = null;            if (deal.externalProductId && !isNaN(parseInt(deal.externalProductId))) {              numId = parseInt(deal.externalProductId);            } else if (deal.id && !isNaN(parseInt(deal.id))) {              numId = parseInt(deal.id);            } else {              numId = deal.matchId || null;            }            return {              product: {                primary: {                  id: numId,                  name: deal.productName || deal.title || "",                  type: "deal",                  price: rawPrice,                  previousPrice: rawMsrp,                  currency: currency || 'USD',                  preorder: false,                  labels: deal.modelBrand || deal.brand ? [                     { type: "brand", value: deal.modelBrand || deal.brand }                  ] : [],                  link: deal.url,                  originalLink: deal.url,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: voucherPct,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: deal.productKey || null,                  inStock: deal.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: currency || 'USD'                }              },              merchant: {                id: deal.merchantId ? parseInt(deal.merchantId) : null,                name: deal.merchant || "Retailer",                url: deal.merchantUrl || null,                network: deal.merchantNetwork || null              },              model: {                id: deal.modelId ? parseInt(deal.modelId) : null,                brand: deal.modelBrand || deal.brand || null,                name: deal.productName || deal.title || "",                parent: deal.modelParent || null              }            };         });                  trackHawkEvent({             clickType: "appeared",             widgetId: widgetId,             productCategoryName: "deals",             zeroBasedProductIndexOrNull: null,             totalDealsOrProducts: deals.length,             productsArray: productsArray,             queryName: queryName,             widgetTypeName: widgetTypeName         });      }      // 1. Setup Shadow DOM Sandbox      const currentScript = document.currentScript;      let hostContainer = null;      let template = null;            if (currentScript) {        let prev = currentScript.previousElementSibling;        while (prev) {          if (prev.tagName === 'TEMPLATE' && prev.classList.contains('tg-df-widget-template')) {            template = prev;          } else if (prev.tagName === 'DIV' && prev.classList.contains('tg-df-widget-host') && !prev.hasAttribute('data-initialized')) {            hostContainer = prev;            break;          }          prev = prev.previousElementSibling;        }      }            // Fallbacks in case script is deferred      if (!hostContainer) {        const hosts = document.querySelectorAll('.tg-df-widget-host:not([data-initialized])');        if (hosts.length > 0) hostContainer = hosts[0];      }            // Safely embedded template for CMS environments      const rawTemplate = `  \x3Cstyle>    /* --- Shadow DOM Base Reset --- */    *, *::before, *::after {      box-sizing: border-box;    }    img, picture, svg, video {      max-width: 100%;      height: auto;      display: block;    }    /*       1. Scoped CSS for Tom's Guide Deals Widget       All classes are prefixed with \`tg-df-\` to prevent CMS style leakage.    */    .tg-df-container {      container-type: inline-size;      container-name: tg-df;      --tg-df-blue: #1F69FF;      --tg-df-blue-hover: #004d8c;      --tg-df-text: #222222;      --tg-df-text-muted: #555555;      --tg-df-bg: #ffffff;      --tg-df-bg-secondary: #f4f4f4;      --tg-df-border: #e2e8f0;      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;      color: var(--tg-df-text);      background-color: transparent;       width: 100%;      max-width: 1200px;      margin: 0 auto;      padding-bottom: 24px;    }    .tg-df-container *, .tg-df-container *::before, .tg-df-container *::after {      margin: 0;      padding: 0;      box-sizing: border-box;    }    .tg-df-container img {      border: none;      margin: 0;      padding: 0;    }    .tg-df-container a {      text-decoration: none;      color: inherit;    }    /*       2. Search & Filter Bar    */    .tg-df-controls {      display: flex;      flex-direction: column;      align-items: center;      gap: 20px;      margin-bottom: 32px;      width: 100%;      position: relative;      z-index: 20;    }    .tg-df-top-bar {      display: flex;      width: 100%;      max-width: 760px;      gap: 12px;      margin: 0 auto;      align-items: center;    }    .tg-df-search-wrapper {      position: relative;      flex: 1;      width: 100%;      box-shadow: 0 8px 24px rgba(0,0,0,0.06);      border-radius: 40px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      z-index: 100;    }    .tg-df-autocomplete-dropdown {      position: absolute;      top: calc(100% + 4px);      left: 0;      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      max-height: 300px;      overflow-y: auto;      z-index: 200;      display: none;    }    .tg-df-autocomplete-dropdown.active {      display: block;    }    .tg-df-autocomplete-item {      padding: 12px 24px;      cursor: pointer;      font-size: 14px;      color: var(--tg-df-text);      transition: background 0.1s ease;    }    .tg-df-autocomplete-item:hover {      background: var(--tg-df-bg-secondary);    }    .tg-df-search-input {      width: 100%;      padding: 16px 64px 16px 24px;      font-size: 16px;      border: 2px solid transparent;      border-radius: 40px;      outline: none;      transition: border-color 0.2s ease, box-shadow 0.2s ease;      color: var(--tg-df-text);      background: transparent;    }    .tg-df-search-input:focus {      border-color: transparent;      box-shadow: 0 0 0 3px rgba(0, 108, 196, 0.15);    }    .tg-df-search-input::placeholder {      color: #999999;    }        .tg-df-search-btn {      position: absolute;      right: 8px;      top: 50%;      transform: translateY(-50%);      width: 40px;      height: 40px;      border-radius: 50%;      background: #222;      border: none;      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: background 0.2s ease;    }        .tg-df-search-btn:hover {      background: #000;    }    .tg-df-search-icon {      width: 16px;      height: 16px;      fill: #fff;    }    .tg-df-settings-wrapper {      position: relative;    }        .tg-df-settings-btn {      width: 48px;      height: 48px;      border-radius: 50%;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      box-shadow: 0 4px 12px rgba(0,0,0,0.04);      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: all 0.2s ease;      color: var(--tg-df-text-muted);      flex-shrink: 0;    }    .tg-df-settings-btn:hover {      background: var(--tg-df-bg-secondary);      border-color: #0000ff;      color: var(--tg-df-text);    }    .tg-df-settings-btn svg {      width: 24px;      height: 24px;      fill: currentColor;    }    .tg-df-settings-dropdown {      position: absolute;      top: calc(100% + 8px);      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      width: 280px;      padding: 20px;      display: none;      z-index: 100;      flex-direction: column;      gap: 20px;    }    .tg-df-settings-dropdown.active {      display: flex;    }        .tg-df-settings-dropdown-backdrop {      display: none;      position: fixed;      inset: 0;      z-index: 99;    }        .tg-df-settings-dropdown-backdrop.active {      display: block;    }    .tg-df-setting-item {      display: flex;      flex-direction: column;      gap: 10px;    }    .tg-df-setting-label {      font-size: 11px;      font-weight: 700;      color: var(--tg-df-text-muted);      text-transform: uppercase;      letter-spacing: 0.5px;    }        .tg-df-region-select {        padding: 10px 12px;        border-radius: 8px;        border: 1px solid var(--tg-df-border);        font-size: 15px;        outline: none;        background: var(--tg-df-bg-secondary);        color: var(--tg-df-text);        cursor: pointer;        width: 100%;    }    .tg-df-toggle {        position: relative;        display: inline-block;        width: 44px;        height: 24px;        flex-shrink: 0;    }    .tg-df-toggle input {        opacity: 0;        width: 0;        height: 0;    }    .tg-df-slider {        position: absolute;        cursor: pointer;        top: 0; left: 0; right: 0; bottom: 0;        background-color: #ccc;        transition: .2s;        border-radius: 24px;    }    .tg-df-slider:before {        position: absolute;        content: "";        height: 18px;        width: 18px;        left: 3px;        bottom: 3px;        background-color: white;        transition: .2s;        border-radius: 50%;    }    .tg-df-toggle input:checked + .tg-df-slider {        background-color: #1F69FF;    }    .tg-df-toggle input:checked + .tg-df-slider:before {        transform: translateX(20px);    }    .tg-df-dl-row {        flex-direction: row;        align-items: center;        justify-content: space-between;    }    .tg-df-dl-row-text {        font-size: 14px;        font-weight: 600;        color: var(--tg-df-text);    }    .tg-df-dl-row-subtext {        font-size: 12px;        font-weight: 400;        line-height: 1.3;        color: var(--tg-df-text-muted);        margin-top: 4px;        display: block;    }    .tg-df-filters-container {      position: relative;      width: 100%;      max-width: 800px;    }    .tg-df-scroll-btn {      display: none;      position: absolute;      top: 50%;      transform: translateY(-50%);      width: 32px;      height: 32px;      background: white;      border: 1px solid var(--tg-df-border);      border-radius: 50%;      align-items: center;      justify-content: center;      cursor: pointer;      z-index: 10;      box-shadow: 0 2px 8px rgba(0,0,0,0.1);      color: var(--tg-df-text-primary);      padding: 0;    }    .tg-df-scroll-btn svg {      width: 16px;      height: 16px;    }    .tg-df-scroll-btn:hover {      background: #f4f4f4;    }    .tg-df-scroll-btn.left {      left: 0px;    }    .tg-df-scroll-btn.right {      right: 0px;    }    @container tg-df (max-width: 768px) {      .tg-df-scroll-btn {        display: flex;        top: 22px; /* vertically center within the 44px high filter buttons */      }    }    .tg-df-filters {      display: grid;      width: 100%;      grid-template-columns: repeat(4, 1fr);      gap: 12px;      margin: 0 auto;      max-width: 800px;    }                 .tg-df-sort-wrapper {      position: relative;      display: flex;      align-items: center;      width: 100%;    }        .tg-df-sort-icon {      position: absolute;      left: 14px;      width: 14px;      height: 14px;      fill: var(--tg-df-text-muted);      pointer-events: none;    }    .tg-df-sort-select, .tg-df-filter-select {      width: 100%;      padding: 10px 36px 10px 38px;      font-size: 14px;      border: 1px solid var(--tg-df-border);      border-radius: 100px;      outline: none;      appearance: none;      background-color: var(--tg-df-bg-secondary);      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 12 12'%3E%3Cpath fill='%23555555' d='M6 8L1 3h10z'/%3E%3C/svg%3E");      background-repeat: no-repeat;      background-position: right 14px center;      color: var(--tg-df-text);      cursor: pointer;      font-weight: 500;      transition: all 0.2s ease;    }        .tg-df-price-input::-webkit-outer-spin-button,    .tg-df-price-input::-webkit-inner-spin-button {      -webkit-appearance: none;      margin: 0;    }    .tg-df-price-input {      -moz-appearance: textfield;    }    .tg-df-sort-select:hover, .tg-df-filter-select:hover {      background-color: #e2e8f0;    }    .tg-df-multiselect-container {      position: relative;    }    @container tg-df (max-width: 768px) {      .tg-df-filters-container {      position: relative;      width: 100%;      max-width: 800px;    }    .tg-df-scroll-btn {      display: none;      position: absolute;      top: 50%;      transform: translateY(-50%);      width: 32px;      height: 32px;      background: white;      border: 1px solid var(--tg-df-border);      border-radius: 50%;      align-items: center;      justify-content: center;      cursor: pointer;      z-index: 10;      box-shadow: 0 2px 8px rgba(0,0,0,0.1);      color: var(--tg-df-text-primary);      padding: 0;    }    .tg-df-scroll-btn svg {      width: 16px;      height: 16px;    }    .tg-df-scroll-btn:hover {      background: #f4f4f4;    }    .tg-df-scroll-btn.left {      left: 0px;    }    .tg-df-scroll-btn.right {      right: 0px;    }    @container tg-df (max-width: 768px) {      .tg-df-scroll-btn {        display: flex;        top: 22px; /* vertically center within the 44px high filter buttons */      }    }    .tg-df-filters {        width: 100%;        margin: 0;        margin-bottom: -320px;        padding: 0 16px 320px 16px;        display: flex;        flex-wrap: nowrap;        gap: 8px;        overflow-x: auto;        overflow-y: hidden;        pointer-events: none;        scrollbar-width: none;        -webkit-overflow-scrolling: touch;      }      .tg-df-filters::-webkit-scrollbar {        display: none;      }      .tg-df-sort-wrapper {        pointer-events: auto;        flex: 0 0 auto;        width: 175px;        min-width: 175px;      }    }        .tg-df-multiselect-trigger {      display: block;      background: #fff;      user-select: none;      width: 100%;      overflow: hidden;      white-space: nowrap;      text-overflow: ellipsis;    }        .tg-df-multiselect-dropdown {      display: none;      position: absolute;      top: calc(100% + 4px);      left: 0;      width: 100%;      min-width: 220px;      max-height: 300px;      overflow-y: auto;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);      z-index: 100;      padding: 8px 0;    }    .tg-df-multiselect-dropdown.active {      display: block;    }    .tg-df-ms-option {      padding: 8px 16px;      display: flex;      align-items: center;      gap: 8px;      cursor: pointer;      font-size: 14px;    }    .tg-df-ms-option:hover {      background-color: var(--tg-df-bg-secondary);    }        .tg-df-ms-option input {      cursor: pointer;      accent-color: #1f69ff;    }    .tg-df-sort-select:focus, .tg-df-filter-select:focus {      border-color: #0000ff;      box-shadow: 0 0 0 3px rgba(0, 0, 255, 0.2);      background-color: var(--tg-df-bg);    }    /*       3. Deal Grid Layout    */    .tg-df-grid.tg-df-grid-auto {      padding-top: 24px;    }    .tg-df-grid, .tg-df-grid.layout-grid {      display: grid;      grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));      gap: 10px;    }    .tg-df-grid.layout-row {      grid-template-columns: 1fr;      gap: 16px;    }        .tg-df-grid.layout-row .tg-df-card {      flex-direction: row;      align-items: stretch;      height: auto;      box-shadow: none;      border-bottom: 1px solid var(--tg-df-border);    }    .tg-df-grid.layout-row .tg-df-card:hover {      box-shadow: none;    }    .tg-df-grid.layout-row .tg-df-card-image-box {      width: 140px;      min-width: 140px;      aspect-ratio: 3/4;      border-right: none;      padding: 16px 16px 16px 32px;    }    .tg-df-grid.layout-row .tg-df-card-body {      padding: 16px;      justify-content: space-between;    }    .tg-df-grid.layout-row .tg-df-card-title {      font-size: 15px;      margin-bottom: 16px;    }    .tg-df-grid.layout-row .tg-df-card-stars { margin-bottom: 8px; }    .tg-df-grid.layout-row .tg-df-card-footer {      flex-direction: column;      align-items: flex-start;      gap: 0;    }    .tg-df-grid.layout-row .tg-df-card-merchant-pill {      margin-bottom: 4px;    }    .tg-df-grid.layout-row .tg-df-card-price-group {      margin-bottom: 8px;    }    .tg-df-grid.layout-row .tg-df-price-group {      width: auto;    }    .tg-df-grid.layout-row .tg-df-card-cta {      width: 100%;      max-width: 200px;      padding: 10px 24px;      font-size: 13px;      flex-shrink: 0;      text-align: center;      justify-content: center;    }    /*       4. Deal Card Design    */    .tg-df-card {      position: relative;      display: flex;      flex-direction: column;      background-color: #ffffff;      border-radius: 0;      overflow: hidden;      transition: transform 0.2s ease, box-shadow 0.2s ease;      text-decoration: none;      color: inherit;      height: 100%;      box-shadow: 0 0 16px rgba(0, 0, 0, 0.08);      border: 1px solid var(--tg-df-border);    }    .tg-df-card:hover {      box-shadow: 0 0 24px rgba(0, 0, 0, 0.12);    }    .tg-df-card-image-box {      width: 100%;      aspect-ratio: 3/4;      background-color: #f8f8f8;      display: flex;      align-items: center;      justify-content: center;      position: relative;      overflow: hidden;      padding: 32px;      flex: 0 0 auto;    }    .tg-df-card-image {      max-width: 100%;      max-height: 100%;      width: auto;      height: auto;      object-fit: contain;      mix-blend-mode: multiply; /* Helps white background images blend into secondary bg */      transition: transform 0.3s ease;    }    .tg-df-card:hover .tg-df-card-image {      transform: scale(1.05); /* Zoom in on hover */    }    .tg-df-card-discount-badge {      position: absolute;      top: 12px;      left: 12px;      background: #dc2626; /* Red */      color: #ffffff;      padding: 6px 8px;      font-size: 11px;      font-weight: 500;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      z-index: 10;    }        .tg-df-card-merchant-pill {      display: block;      padding: 0;      font-size: 11px;      font-weight: 600;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      color: var(--tg-df-text-muted);      margin-bottom: 8px;      white-space: nowrap;      overflow: hidden;      text-overflow: ellipsis;    }    .tg-df-card-body {      padding: 16px;      display: flex;      flex-direction: column;      flex-grow: 1;      min-width: 0;    }    .tg-df-card-badges {      display: flex;      flex-wrap: wrap;      gap: 6px;      margin-bottom: 8px;    }    .tg-df-tag {      display: inline-flex;      align-items: center;      padding: 4px 6px;      font-size: 11px;      font-weight: 700;      text-transform: uppercase;      border-radius: 4px;      gap: 4px;    }    .tg-df-tag-prime {      background-color: #00A8E1;      color: #fff;    }    .tg-df-tag-coupons {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-coupons:hover {      background-color: #e2e8f0;    }        .tg-df-tag-outline {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-outline:hover {      background-color: #e2e8f0;    }        @keyframes tg-df-spin {      0% { transform: rotate(0deg); }      100% { transform: rotate(360deg); }    }    .tg-df-coupon-spinner {      border: 2px solid #e2e8f0;      border-top: 2px solid #3b82f6;      border-radius: 50%;      width: 14px;      height: 14px;      animation: tg-df-spin 1s linear infinite;      margin: 4px 8px;      display: inline-block;    }        /* Vouchers Modal */    .tg-df-modal-backdrop {      position: fixed;      top: 0; left: 0; right: 0; bottom: 0;      background: rgba(0,0,0,0.5);      z-index: 10000;      display: flex;      align-items: center;      justify-content: center;      opacity: 0;      pointer-events: none;      transition: opacity 0.3s;    }    .tg-df-modal-backdrop.active {      opacity: 1;      pointer-events: auto;    }    .tg-df-modal {      background: #fff;      border-radius: 12px;      width: 90%;      max-width: 400px;      max-height: 80vh;      display: flex;      flex-direction: column;      box-shadow: 0 10px 40px rgba(0,0,0,0.2);      transform: translateY(20px);      transition: transform 0.3s;    }    .tg-df-modal-backdrop.active .tg-df-modal {      transform: translateY(0);    }    .tg-df-modal-header {      padding: 16px;      border-bottom: 1px solid #e2e8f0;      display: flex;      align-items: center;      justify-content: space-between;    }    .tg-df-modal-title {      font-size: 16px;      font-weight: 600;      margin: 0;    }    .tg-df-modal-close {      background: none;      border: none;      cursor: pointer;      padding: 4px;      color: #64748b;    }    .tg-df-modal-body {      padding: 16px;      overflow-y: auto;    }    .tg-df-voucher-item {      padding: 12px;      border: 1px dashed #cbd5e1;      border-radius: 8px;      margin-bottom: 10px;      background: #f8fafc;      display: flex;      align-items: center;      gap: 12px;      text-decoration: none;      color: inherit;      transition: background-color 0.2s, border-color 0.2s;    }    .tg-df-voucher-item:hover {      background: #f1f5f9;      border-color: #94a3b8;    }    .tg-df-voucher-item:last-child {      margin-bottom: 0;    }    .tg-df-voucher-logo {      width: 48px;      height: 48px;      object-fit: contain;      border-radius: 4px;      background: #fff;      border: 1px solid #e2e8f0;      flex-shrink: 0;    }    .tg-df-voucher-content {      flex: 1;      min-width: 0;    }    .tg-df-voucher-title {      font-size: 14px;      font-weight: 600;      margin: 0 0 4px 0;      line-height: 1.3;      color: #0f172a;    }    .tg-df-voucher-expiry {      font-size: 12px;      color: #64748b;      display: flex;      align-items: center;      gap: 4px;      margin-top: 6px;    }    .tg-df-voucher-code {      display: inline-flex;      align-items: center;      background: #f1f5f9;      border: 1px dashed #cbd5e1;      padding: 6px 10px;      font-family: monospace;      font-weight: 700;      font-size: 14px;      color: #0f172a;      border-radius: 4px;      margin-top: 8px;      cursor: pointer;      transition: all 0.2s ease;    }    .tg-df-voucher-code:hover {      background: #e2e8f0;      border-color: #94a3b8;    }    .tg-df-voucher-code.copied {      background: #ecfdf5;      border-color: #10b981;      color: #10b981;    }    .tg-df-voucher-cta {      display: inline-block;      margin-top: 8px;      font-size: 13px;      font-weight: 600;      color: #2563eb;      text-decoration: none;    }    .tg-df-card-title {      font-size: 15px;      font-weight: 400;      line-height: 1.4;      margin: 0 0 12px 0;      color: var(--tg-df-text);    }    .tg-df-card-footer {      margin-top: auto;      display: flex;      flex-direction: column;      width: 100%;    }    .tg-df-card-price-group {      display: flex;      flex-direction: row;      align-items: center;      gap: 8px;      margin-bottom: 12px;    }    .tg-df-card-price {      font-size: 16px;      font-weight: 700;      color: #dc2626; /* Red price */      line-height: 1;    }        .tg-df-card-msrp {      font-size: 13px;      color: var(--tg-df-text-muted);      text-decoration: line-through;    }    .tg-df-container .tg-df-card-cta {      display: flex;      align-items: center;      justify-content: center;      width: 100%;      box-sizing: border-box;      background-color: #1f69ff;      color: #ffffff;      font-size: 12px;      font-weight: 700;      text-transform: uppercase;      letter-spacing: 0.5px;      padding: 12px 16px;      border-radius: 0;      border: none;      cursor: pointer;      transition: background-color 0.2s ease;    }    .tg-df-card:hover .tg-df-card-cta,    .tg-df-card-cta:hover {      background-color: #1555cc;    }    /*       5. State & Skeleton Styles    */    .tg-df-message {      grid-column: 1 / -1;      text-align: center;      padding: 48px 24px;      color: var(--tg-df-text-muted);      font-size: 16px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;    }    @keyframes tg-df-shimmer {      0% { background-position: -200% 0; }      100% { background-position: 200% 0; }    }    .tg-df-skeleton {      background: linear-gradient(90deg, var(--tg-df-bg-secondary) 25%, #e2e8f0 50%, var(--tg-df-bg-secondary) 75%);      background-size: 200% 100%;      animation: tg-df-shimmer 1.5s infinite;      border-radius: 4px;    }    .tg-df-skeleton-img {      width: 100%;      height: 100%;      position: absolute;      top: 0; left: 0;    }        .tg-df-skeleton-text {      height: 16px;      margin-bottom: 8px;      width: 100%;    }    .tg-df-skeleton-text.short { width: 40%; }    .tg-df-skeleton-text.title { height: 20px; margin-bottom: 16px; }    /* Editor Floating Bar & Elements */    .tg-df-editor-bar {      position: sticky;      top: 120px;      z-index: 1000;      background: #111827;      color: #fff;      padding: 12px 16px;      border-radius: 8px;      margin-bottom: 16px;      display: flex;      align-items: center;      justify-content: space-between;      box-shadow: 0 4px 12px rgba(0,0,0,0.15);    }    .tg-df-editor-bar-text {      font-weight: 600;      font-size: 14px;    }    .tg-df-editor-copy-btn {      background: #10b981;      color: #fff;      padding: 6px 16px;      border: none;      border-radius: 4px;      font-weight: 600;      cursor: pointer;      display: flex;      align-items: center;      font-size: 13px;    }    .tg-df-editor-copy-btn:hover { background: #059669; }        .tg-df-deal-checkbox {      position: absolute;      top: 12px;      right: 12px;      z-index: 10;      width: 20px;      height: 20px;      cursor: pointer;      pointer-events: auto;    }    /*       6. Mobile List View (Stacks into a cleaner horizontal row/list)    */    @container tg-df (max-width: 599px) {      .tg-df-controls {        padding: 16px 16px 8px;      }            .tg-df-top-bar {        width: 100%;      }            .tg-df-settings-dropdown {        position: fixed;        top: auto;        bottom: 0;        left: 0;        right: 0;        width: 100%;        border-radius: 20px 20px 0 0;        padding: 24px;        box-shadow: 0 -8px 32px rgba(0,0,0,0.15);        z-index: 1000;        border: none;        border-top: 1px solid var(--tg-df-border);      }            .tg-df-settings-dropdown-backdrop.active {        background: rgba(0,0,0,0.4);      }            .tg-df-search-wrapper {        box-shadow: 0 0 16px rgba(0,0,0,0.08);      }                  .tg-df-sort-wrapper.tg-df-price-range-wrapper {        flex: 0 0 auto;        min-width: max-content;        width: auto;      }            .tg-df-sort-select, .tg-df-filter-select {        width: 100%;        text-align: left;        padding: 10px 24px 10px 32px;        background-position: right 8px center;        text-overflow: ellipsis;        white-space: nowrap;        overflow: hidden;      }      .tg-df-sort-icon {        left: 10px;      }      .tg-df-grid:not(.layout-grid):not(.layout-row),      .tg-df-grid.layout-row {        grid-template-columns: 1fr;        gap: 16px;      }            .tg-df-grid.tg-df-grid-auto {        padding-top: 24px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card,      .tg-df-grid.layout-row .tg-df-card {        flex-direction: row;        align-items: stretch;        height: auto;        box-shadow: none; /* simple line on mobile if preferred, or keep */        border-bottom: 1px solid var(--tg-df-border);      }      .tg-df-grid.tg-df-grid-auto .tg-df-card:hover,      .tg-df-grid.layout-row .tg-df-card:hover {        box-shadow: none;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-image-box,      .tg-df-grid.layout-row .tg-df-card-image-box {        width: 120px;        min-width: 120px;        aspect-ratio: 3/4;        border-right: none;        padding: 12px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-body,      .tg-df-grid.layout-row .tg-df-card-body {        padding: 12px;        justify-content: space-between;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-title,      .tg-df-grid.layout-row .tg-df-card-title {        font-size: 14px;        margin-bottom: 12px;      }      /* Single column mobile grid override */      .tg-df-grid.layout-grid {        grid-template-columns: 1fr;        gap: 16px;      }      .tg-df-grid.layout-grid .tg-df-card-image-box {        padding: 12px;      }      .tg-df-grid.layout-grid .tg-df-card-body {        padding: 10px;      }      .tg-df-grid.layout-grid .tg-df-card-title {        font-size: 13px;        margin-bottom: 8px;      }      .tg-df-grid.layout-grid .tg-df-card-price {        font-size: 14px;      }            .tg-df-card-footer {        flex-direction: column;        align-items: stretch;        gap: 0;        width: 100%;        min-width: 0;      }      .tg-df-card-merchant-pill {        margin-bottom: 4px;      }      .tg-df-card-price-group {        flex: 1 1 auto;        margin-bottom: 8px;      }      .tg-df-card-price {        font-size: 16px;      }      .tg-df-card-msrp {        display: block;       }      .tg-df-grid.layout-row .tg-df-card-cta,      .tg-df-container .tg-df-card-cta {        width: 100%;        max-width: none;        min-width: 0;        box-sizing: border-box;        padding: 8px 16px;        font-size: 12px;        flex: 0 0 auto;        text-align: center;        white-space: normal;        line-height: 1.2;      }    }    .tg-df-container.is-carousel {      min-height: 760px;      background-color: #E7F0FF;      padding: 0 0 24px 0;      border-radius: 24px;      width: 100vw;      max-width: 1200px;      position: relative;      left: 50%;      transform: translateX(-50%);    }    .tg-df-container.is-carousel.hide-header-details {      min-height: 480px;    }    /*       7. Carousel View Mode    */    .tg-df-container .tg-df-carousel-host {      /* Layout is now handled by container wrapper */    }    .tg-df-container .tg-df-carousel-eyebrow {      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      padding: 24px 16px 0 16px;      display: none;    }    .tg-df-container .tg-df-carousel-query-title {      color: #011535;      font-size: 28px;      font-weight: 600;      padding: 0 16px 24px 16px;      line-height: 1.2;      display: none;    }    .tg-df-container .tg-df-carousel-blue-box {      background-color: transparent;      border-radius: 0;      padding: 24px 24px 0 24px;      margin: 0;      color: #1F69FF;          position: relative;      overflow: hidden;    }    .tg-df-container .tg-df-carousel-bg-circle-1 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-2 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-3 {      display: none;    }    .tg-df-container .tg-df-carousel-box-content {      position: relative;      z-index: 10;    }    .tg-df-container .tg-df-carousel-box-eyebrow {      background-color: transparent;      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      display: inline-block;      padding: 0;      border-radius: 0;    }    .tg-df-container .tg-df-carousel-box-title {      font-size: 28px;      font-weight: 600;      line-height: 1.2;      margin-top: 8px;      color: #1e293b;    }    .tg-df-container .tg-df-countdown-wrapper {      position: absolute;      top: 0;      right: 0;      display: flex;      flex-direction: column;      align-items: flex-end;      gap: 12px;      transform: scale(0.67);      transform-origin: top right;    }    .tg-df-container .tg-df-countdown-title {      font-size: 14px;      font-weight: 600;      color: #011535;      margin: 0;    }    .tg-df-container .tg-df-countdown-blocks {      display: flex;      gap: 16px;    }    .tg-df-container .tg-df-countdown-item {      display: flex;      flex-direction: column;      align-items: center;      gap: 4px;    }    .tg-df-container .tg-df-countdown-box {      width: 59px;      height: 59px;      background: #03FE9E;      border-radius: 15px;      display: flex;      align-items: center;      justify-content: center;    }    .tg-df-container .tg-df-countdown-num {      font-family: 'Inter', sans-serif;      font-weight: 700;      font-size: 20px;      line-height: normal;      color: #011535;    }    .tg-df-container .tg-df-countdown-label {      font-family: 'Inter', sans-serif;      font-weight: 500;      font-size: 16px;      line-height: normal;      color: #1e293b;      text-transform: uppercase;    }    .tg-df-container .tg-df-carousel-box-subtitle {      font-size: 16px;      margin-top: 8px;      font-weight: 300;      color: #1e293b;      line-height: 24px;    }    .tg-df-container .tg-df-carousel-roundels-wrapper {      position: relative;      margin-top: 24px;      margin-left: -24px;      margin-right: -24px;    }    .tg-df-container .tg-df-carousel-roundels {      display: flex;      gap: 16px;      overflow-x: auto;            scrollbar-width: none;      padding-top: 12px;      padding-bottom: 24px;      padding-left: 24px;      padding-right: 24px;      margin-left: 0;      margin-right: 0;    }        .tg-df-container .tg-df-carousel-scroll-left,    .tg-df-container .tg-df-carousel-scroll-right {      position: absolute;      top: 50%;      transform: translateY(-50%);      height: 36px;      width: 36px;      display: flex;      align-items: center;      justify-content: center;      border-radius: 50%;      background-color: #ffffff;      border: 1px solid #e2e8f0;      box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);      color: #1F69FF;      cursor: pointer;      transition: all 0.2s;      margin-top: -4px;      z-index: 20;    }    .tg-df-container .tg-df-carousel-scroll-left { left: 8px; }    .tg-df-container .tg-df-carousel-scroll-right { right: 8px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left { left: 0px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right { right: 0px; }    .tg-df-carousel-filters-outer { margin-left: -24px; margin-right: -24px; padding-left: 24px; padding-right: 24px; }    .tg-df-grid-wrapper { position: relative; }    @container tg-df (max-width: 599px) { .tg-df-carousel-filters-outer { margin-left: -16px; margin-right: -16px; padding-left: 16px; padding-right: 16px; } }        .tg-df-container .tg-df-carousel-scroll-left:hover,    .tg-df-container .tg-df-carousel-scroll-right:hover {      background-color: rgba(255, 255, 255, 0.6);    }    .tg-df-container .tg-df-carousel-roundels::-webkit-scrollbar {      display: none;    }    .tg-df-container .tg-df-roundel {      display: flex;      flex-direction: column;      align-items: center;      gap: 8px;      cursor: pointer;      min-width: 120px;      flex-shrink: 0;    }    .tg-df-container .tg-df-roundel-img-box {      width: 120px;      height: 120px;      border-radius: 50%;      background: white;      display: flex;      align-items: center;      justify-content: center;      overflow: hidden;      box-shadow: 0px 3px 14px 0px rgba(30, 41, 59, 0.08);      transition: box-shadow 0.2s;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box img {      transform: scale(1.08);    }    .tg-df-container .tg-df-roundel-img-box img {      width: 100%;      height: 100%;      object-fit: contain;      padding: 10px;      box-sizing: border-box;      transition: transform 0.3s ease;    }    .tg-df-container .tg-df-roundel-label {      font-size: 13px;      font-weight: 400;      color: #1e293b;      text-align: center;    }    .tg-df-container .tg-df-carousel-filters-label {      font-size: 16px;      font-weight: 400;      color: #1e293b;      white-space: nowrap;      margin-right: 4px;    }    .tg-df-container .tg-df-carousel-filters-wrap {      display: flex;      align-items: center;      flex-wrap: nowrap;      gap: 8px;      margin-top: 8px;      overflow-x: auto;      scrollbar-width: none;      -webkit-overflow-scrolling: touch;      padding-bottom: 8px;      margin-left: -24px;      margin-right: -24px;      padding-left: 24px;      padding-right: 24px;    }    .tg-df-container .tg-df-carousel-filters-wrap::-webkit-scrollbar {      display: none;    }        .tg-df-container .tg-df-carousel-filter-btn img,    .tg-df-container .tg-df-carousel-filter-btn picture {      height: 20px;      width: 20px;      object-fit: contain;      object-position: center;      display: inline-flex;      align-items: center;      justify-content: center;      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn picture img {      margin-right: 0;      height: 100%;      width: 100%;    }    .tg-df-container .tg-df-carousel-filter-btn img.active-img,    .tg-df-container .tg-df-carousel-filter-btn picture:has(.active-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.inactive-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.inactive-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.active-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.active-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.active-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.active-img) {      display: inline-flex;    }    .tg-df-container .tg-df-carousel-filter-btn {      background: #ffffff;      border: 2px solid #1e293b;      color: #1e293b;      border-radius: 24px;      padding: 6px 16px;      font-size: 14px;      font-weight: 600;      cursor: pointer;      transition: all 0.2s;      flex-shrink: 0;      white-space: nowrap;    }    .tg-df-container .tg-df-carousel-filter-btn svg {      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn {      display: inline-flex;      align-items: center;    }    .tg-df-container .tg-df-carousel-filter-btn:hover {      background: #1e293b;      color: white;      border-color: #1e293b;    }    .tg-df-container .tg-df-carousel-filter-btn.active {      background: #1e293b;      color: white;      border-color: #1e293b;    }        .tg-df-grid.carousel-compact {      display: flex;      flex-wrap: nowrap;      overflow-x: auto;      gap: 16px;      padding: 16px 24px;      align-items: stretch;      scrollbar-width: none;    }    .tg-df-grid.carousel-compact::-webkit-scrollbar {      display: none;    }    .tg-df-grid.carousel-compact .tg-df-card {      flex: 0 0 auto;      width: 200px;      min-height: auto;      height: auto;      display: flex;      flex-direction: column;      border-radius: 15px;      border: none;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      overflow: visible;    }    .tg-df-grid.carousel-compact .tg-df-card-image-box {      padding: 12px;      background-color: transparent;      border-radius: 15px 15px 0 0;      height: 130px;    }    .tg-df-grid.carousel-compact .tg-df-card-image {      mix-blend-mode: normal;    }    .tg-df-grid.carousel-compact .tg-df-card-discount-badge {      border-radius: 0;      top: 0px;      left: 0px;      padding: 4px 8px;      font-size: 11px;    }    .tg-df-grid.carousel-compact .tg-df-card-body {      padding: 8px 12px 12px 12px;    }    .tg-df-grid.carousel-compact .tg-df-card-title {      font-size: 14px;      font-weight: 400;      margin-bottom: 8px;      color: #011535;    }    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):not(:has(.tg-df-tag-prime)):not(:has(.tg-df-coupon-wrapper:not([style*="none"]))) > .tg-df-card-title,    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):has(> .tg-df-card-title:first-child) > .tg-df-card-title {    }    .tg-df-grid.carousel-compact .tg-df-card-cta {      border-radius: 5px;      padding: 8px 10px;      margin-top: 4px;      background-color: #1F69FF;    }    .tg-df-grid.carousel-compact .tg-df-card-price-group {      margin-bottom: 2px;    }    .tg-df-grid.carousel-compact .tg-df-card-merchant-pill {      margin-bottom: 2px;    }    @container tg-df (max-width: 599px) {      .tg-df-container .tg-df-carousel-blue-box-title {        font-size: 24px;      }      .tg-df-container .tg-df-countdown-title {        display: none;      }      .tg-df-container .tg-df-countdown-wrapper {        position: absolute;        top: 0;        right: 0;        align-items: flex-end;        transform: scale(0.40);        transform-origin: top right;      }      .tg-df-container .tg-df-roundel {        min-width: 88px;      }      .tg-df-container .tg-df-roundel-img-box {        width: 88px;        height: 88px;      }    }    /* REPLICA BLOCK STYLES */    .tg-df-grid.layout-replica-2 { grid-template-columns: repeat(2, 1fr) !important; gap: 20px; }    .tg-df-grid.layout-replica-1 { grid-template-columns: 1fr !important; gap: 20px; }        .tg-df-container .hawk-deal-widget-container { border-bottom: 1px solid #e5e7eb; display: flex; flex-direction: column; margin: 0; padding: 20px 0; box-sizing: border-box; font-family: inherit; }    .tg-df-container .hawk-deal-widget-wrap { display: flex; flex-direction: row; align-items: flex-start; width: 100%; gap: 24px; }    .tg-df-container .hawk-deal-widget-image-container { display: flex; flex-shrink: 0; justify-content: center; width: 160px; height: 160px; align-items: center; background: white; margin-bottom: 0px; }    .tg-df-container .hawk-deal-widget-title-product-title { color: #111827; font-size: 18px; font-weight: 700; line-height: 1.4; display: inline; }    .tg-df-container .hawk-deal-widget-title-price { font-size: 18px; font-weight: 700; line-height: 1.4; white-space: nowrap; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-price-now { font-weight: 700; }    .tg-df-container .hawk-deal-widget-title-retailer-price:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-title-retailer { font-size: 18px; font-weight: 700; line-height: 1.4; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-was-price { color: #dc2626; font-size: 16px; font-weight: 500; line-height: 1.4; text-decoration: line-through; white-space: nowrap; margin-left: 8px; margin-right: 8px; }    .tg-df-container .hawk-deal-widget-text-body-container { position: relative; width: 100%; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-text-body-main { font-size: 16px; width: 100%; margin-bottom: 12px; }    .tg-df-container .hawk-deal-widget-text-body-description { display: block; font-size: 15px; margin-top: 12px; color: #4b5563; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-body-description p { margin: 0; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-cta-container { display: flex; flex-direction: column; gap: 12px; width: 100%; flex: 1; min-width: 0; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-footer { display: flex; justify-content: flex-end; width: 100%; margin-top: auto; }    .tg-df-container .hawk-deal-widget-button-wrapper { display: flex; flex-direction: column; align-items: flex-end; justify-content: flex-end; width: 100%; }    .tg-df-container .hawk-deal-widget-preferred-partner-wrapper { display: flex; flex-direction: row; }        @container tg-df (min-width: 600px) {      .tg-df-mobile-only { display: none !important; }    }    @container tg-df (max-width: 599px) {      .tg-df-desktop-only { display: none !important; }      .tg-df-grid.layout-replica-2 { grid-template-columns: 1fr !important; }      .tg-df-grid.savings-squad-cards { grid-template-columns: 1fr !important; display: flex; flex-direction: column; }    }    .tg-df-grid.savings-squad-cards .tg-df-card-title {      -webkit-line-clamp: unset !important;      display: block !important;      overflow: visible !important;    }    @container tg-df (max-width: 500px) {      .tg-df-container .hawk-deal-widget-wrap { display: block; }      .tg-df-container .hawk-deal-widget-image-container { display: block; float: left; margin: 0 16px 8px 0; width: 120px; max-width: 120px; height: auto; align-items: normal; justify-content: normal; }      .tg-df-container .hawk-deal-widget-text-cta-container { display: block; text-align: left; }      .tg-df-container .hawk-deal-widget-footer { display: block; margin-top: 16px; clear: both; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper .hawk-deal-widget-preferred-partner-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-affiliate-link-deal-button { box-sizing: border-box !important; display: flex !important; max-width: none !important; width: 100% !important; margin: 0 !important; }    }        .tg-df-container .hawk-affiliate-link-deal-button {       align-items: center; background-color: #1f69ff; box-sizing: border-box; color: #ffffff !important; display: flex; font-size: 14px; font-weight: 700; justify-content: center; letter-spacing: 0.5px; line-height: 1; min-width: 160px; padding: 14px 24px; text-align: center; text-decoration: none; text-transform: uppercase; width: 100%; word-break: normal; border-radius: 4px; border: 0; transition: background-color 0.2s;     }    .tg-df-container .hawk-affiliate-link-deal-button:hover { background-color: #0056e0; text-decoration: none; }    .tg-df-container .hawk-lazy-image-deal-widget { display: block; height: auto; margin: auto; max-height: 160px; max-width: 100%; mix-blend-mode: multiply; object-fit: contain; }    .tg-df-container .hawk-deal-widget-text-cta-container a { color: #2563eb; text-decoration: none; display: inline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:has(.hawk-deal-widget-title-product-title) { color: #111827; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-product-title,    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-retailer-price { text-decoration: underline; }    .tg-df-savings-squad-header { margin-bottom: 24px; text-align: center; display: none; }    .tg-df-banner-img-desktop { display: block; width: 100%; height: auto; margin-bottom: 32px; }    .tg-df-banner-img-mobile { display: none; width: 100%; height: auto; margin-bottom: 32px; }    @container tg-df (max-width: 600px) {      .tg-df-banner-img-desktop { display: none; }      .tg-df-banner-img-mobile { display: block; }    }    .tg-df-header-title { font-size: 28px; font-weight: 700; color: var(--tg-df-text); margin: 32px 0 12px 0; line-height: 1.3; }    .tg-df-header-subtitle { font-size: 16px; color: var(--tg-df-text-muted); margin: 0 0 32px 0; line-height: 1.5; }  \x3C/style>  \x3C!-- Widget Container --\x3E  \x3Cdiv class="tg-df-container" id="signal-deals-finder-root">    \x3Cdiv class="tg-df-savings-squad-header" id="tg-df-savings-squad-header">      \x3Cpicture>        \x3Cimg src="https://cdn.mos.cms.futurecdn.net/flexiimages/xkh2og7m3d1778189998.png" alt="Deals Banner" class="tg-df-banner-img-desktop" />        \x3Cimg src="https://cdn.mos.cms.futurecdn.net/flexiimages/gmak6rtdf41778245089.png" alt="Deals Banner Mobile" class="tg-df-banner-img-mobile" />      \x3C/picture>      \x3Cdiv class="tg-df-header-text">        \x3Ch2 class="tg-df-header-title" id="tg-df-header-title">Editor's Choice Deals\x3C/h2>        \x3Cp class="tg-df-header-subtitle" id="tg-df-header-subtitle">Discover the best discounts currently available, curated daily by the Tom's Guide Savings Squad.\x3C/p>      \x3C/div>    \x3C/div>    \x3C!-- Editor Floating Bar --\x3E    \x3Cdiv class="tg-df-editor-bar" id="tg-df-editor-bar" style="display:none;">      \x3Cdiv class="tg-df-editor-bar-text" style="display: flex; align-items: center;">        \x3Cspan id="tg-df-selected-count">0\x3C/span>\x26nbsp;Deals Selected        \x3Cbutton class="tg-df-editor-clear-btn" id="tg-df-editor-clear" type="button" style="margin-left: 12px; font-size: 13px; color: #9ca3af; background: none; border: none; cursor: pointer; text-decoration: underline;">Clear All\x3C/button>      \x3C/div>      \x3Cbutton class="tg-df-editor-copy-btn" id="tg-df-editor-copy" type="button">        \x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">\x3C/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">\x3C/path>\x3C/svg>        Copy to CMS      \x3C/button>    \x3C/div>    \x3Cdiv class="tg-df-carousel-host" id="tg-df-carousel-host" style="display: none;">      \x3Cdiv class="tg-df-carousel-eyebrow">DEAL FINDER\x3C/div>      \x3Cdiv class="tg-df-carousel-query-title" id="tg-df-carousel-title-label">Best Deals\x3C/div>            \x3Cdiv class="tg-df-carousel-blue-box">        \x3Cdiv class="tg-df-carousel-bg-circle-1" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-2" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-3" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-box-content">          \x3Cdiv class="tg-df-countdown-wrapper" id="tg-df-countdown-wrapper" style="display:none;">            \x3Cdiv class="tg-df-countdown-title" id="tg-df-countdown-title">Prime Day starts in\x3C/div>            \x3Cdiv class="tg-df-countdown-blocks">              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-days">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">DAYS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-hrs">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">HRS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-min">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">MIN\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-sec">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">SEC\x3C/div>\x3C/div>            \x3C/div>          \x3C/div>          \x3Cdiv class="tg-df-carousel-box-eyebrow">DEAL FINDER\x3C/div>          \x3Cdiv class="tg-df-carousel-box-title">Find Deals Fast\x3C/div>          \x3Cdiv class="tg-df-carousel-box-subtitle">The latest deals from the biggest retailers, all in one place\x3C/div>                    \x3Cdiv class="tg-df-carousel-roundels-wrapper">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-roundels">                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Televisions" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/wcMxTsHgqu3roMbAx7RLnT-132-100.png" alt="TVs" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">TVs\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Phones" data-pr="over50">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/G3KGaRGzj24F6PUsw4bWpT-132-100.png" alt="Phones" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Phones\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Computing" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/znNvsLzx8NEgNkD9HSFSnT-132-100.png" alt="Computing" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Computing\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Gaming" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/Pgew8yaRQeZFHqHjTzvBnT-132-100.png" alt="Gaming" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Gaming\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Mattresses" data-pr="over500">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/cW7xsaLyesxkHFVSiC4kmT-132-100.png" alt="Mattresses" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Mattresses\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Audio" data-pr="over30">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/pCvBVHuhaQVjKt3VgCjbqT-132-100.png" alt="Audio" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Audio\x3C/span>            \x3C/div>                  \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>        \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-carousel-filters-outer" style="position: relative;">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-filters-wrap">                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="0">All\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_lightning">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_prime">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-d="10">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 10% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="15">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 15% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="25">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 25% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-pr="under50">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>            Under $50\x3C/button>        \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3C/div>    \x3C/div>    \x3C/div>      \x3C!-- Search & Filter Controls --\x3E      \x3Cdiv class="tg-df-top-bar" id="tg-df-top-bar" style="position: relative; z-index: 100; margin: 0 auto 20px;">        \x3Cdiv class="tg-df-search-wrapper">          \x3Cinput type="text" class="tg-df-search-input" placeholder="Search for deals, products, or brands...">          \x3Cbutton type="button" class="tg-df-search-btn" aria-label="Search">              \x3Csvg class="tg-df-search-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">                \x3Cpath d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/>              \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-autocomplete-dropdown" id="tg-df-autocomplete">\x3C/div>        \x3C/div>      \x3C/div>    \x3Cdiv class="tg-df-controls" id="tg-df-controls" style="display:flex;">              \x3Cdiv class="tg-df-filters-container" style="position: relative; width: 100%; max-width: 800px; margin: 0 auto;">          \x3Cbutton class="tg-df-scroll-btn left" style="display: none;" onclick="this.parentElement.querySelector('.tg-df-filters').scrollBy({left: -200, behavior: 'smooth'})">            \x3Csvg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">\x3Cpath d="M15 18l-6-6 6-6"/>\x3C/svg>          \x3C/button>          \x3Cbutton class="tg-df-scroll-btn right" style="display: none;" onclick="this.parentElement.querySelector('.tg-df-filters').scrollBy({left: 200, behavior: 'smooth'})">            \x3Csvg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">\x3Cpath d="M9 18l6-6-6-6"/>\x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-filters">          \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-category-filter-wrapper" style="display: none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-category-filter" aria-label="Category">            \x3Coption value="all">All Categories\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-multiselect-container" id="tg-df-brand-filter-wrapper" style="display:none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M4.25 5.61C6.27 8.2 10 13 10 13v6c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-6s3.72-4.8 5.74-7.39A.998.998 0 0 0 18.95 4H5.04c-.83 0-1.3.95-.79 1.61z"/>          \x3C/svg>          \x3Cdiv class="tg-df-filter-select tg-df-multiselect-trigger" id="tg-df-brand-trigger" tabindex="0">            Any Brand          \x3C/div>          \x3Cdiv class="tg-df-multiselect-dropdown" id="tg-df-brand-dropdown">            \x3C!-- Populated via script --\x3E          \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-price-range-wrapper" id="tg-df-custom-price-wrapper" style="display: flex; align-items:center; justify-content:center; padding: 10px 20px; gap: 8px; border: 1px solid var(--tg-df-border); border-radius: 100px; background-color: var(--tg-df-bg);">          \x3Cspan style="font-size:14px; font-weight:500; color:var(--tg-df-text-primary);">Price\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-min" placeholder="Min" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">          \x3Cspan style="color:var(--tg-df-text-muted)">-\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-max" placeholder="Max" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-legacy-price-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-price-filter" aria-label="Filter Prices">            \x3Coption value="all">All Prices\x3C/option>            \x3Coption value="under50">Under $50\x3C/option>            \x3Coption value="50_100">$50 - $100\x3C/option>            \x3Coption value="100_200">$100 - $200\x3C/option>            \x3Coption value="200_500">$200 - $500\x3C/option>            \x3Coption value="over500">Over $500\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-discount-filter-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-discount-filter" aria-label="Discount Amount">            \x3Coption value="all">Any discount\x3C/option>            \x3Coption value="5">Min 5%\x3C/option>            \x3Coption value="10">Min 10%\x3C/option>            \x3Coption value="15">Min 15%\x3C/option>            \x3Coption value="20">Min 20%\x3C/option>            \x3Coption value="25">Min 25%\x3C/option>            \x3Coption value="30">Min 30%\x3C/option>            \x3Coption value="40">Min 40%\x3C/option>            \x3Coption value="50">Min 50%\x3C/option>            \x3Coption value="60">Min 60%\x3C/option>            \x3Coption value="70">Min 70%\x3C/option>          \x3C/select>          \x3C/div>        \x3C/div>        \x3C/div>      \x3C/div>    \x3C!-- Deals Grid Wrapper --\x3E    \x3Cdiv class="tg-df-grid-wrapper tg-df-carousel-cards-wrapper" id="tg-df-grid-wrapper">      \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3Cdiv class="tg-df-grid" id="tg-df-grid">        \x3C!-- Content populated by JavaScript --\x3E      \x3C/div>      \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>    \x3C/div>        \x3C!-- Vouchers Modal --\x3E    \x3Cdiv class="tg-df-modal-backdrop" id="tg-df-vouchers-modal">      \x3Cdiv class="tg-df-modal">        \x3Cdiv class="tg-df-modal-header">          \x3Ch3 class="tg-df-modal-title" id="tg-df-vouchers-title">Available Coupons & Deals\x3C/h3>          \x3Cbutton class="tg-df-modal-close" id="tg-df-vouchers-close">            \x3Csvg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">              \x3Cline x1="18" y1="6" x2="6" y2="18">\x3C/line>              \x3Cline x1="6" y1="6" x2="18" y2="18">\x3C/line>            \x3C/svg>          \x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-modal-body" id="tg-df-vouchers-content">          \x3C!-- Vouchers injected here --\x3E        \x3C/div>      \x3C/div>    \x3C/div>  \x3C/div>`;      if (!template) {        template = document.createElement('template');        template.innerHTML = rawTemplate;      }      let shadowRoot = null;      if (hostContainer && template) {        hostContainer.setAttribute('data-initialized', 'true');        shadowRoot = hostContainer.attachShadow({ mode: 'open' });        shadowRoot.appendChild(template.content.cloneNode(true));      }      class DealsFinderWidget {        constructor(config) {          this.rootNode = config.rootNode || document;          this.hostContainer = config.hostContainer || null;          this.rootId = config.rootId || 'signal-deals-finder-root';          this.root = this.rootNode.querySelector('#' + this.rootId);          if (!this.root) return;          this.widgetId = (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'widget-' + Date.now() + '-' + Math.random().toString(36).slice(2);          this.grid = this.root.querySelector('#tg-df-grid');          this.tagsContainer = this.root.querySelector('#tg-df-tags-container');          this.categoryFilter = this.root.querySelector('#tg-df-category-filter');          this.categoryFilterWrapper = this.root.querySelector('#tg-df-category-filter-wrapper');          this.searchInput = this.root.querySelector('.tg-df-search-input');          this.autocompleteDropdown = this.root.querySelector('#tg-df-autocomplete');          this.sortSelect = this.root.querySelector('.tg-df-sort-select');          this.searchBtn = this.root.querySelector('.tg-df-search-btn');                    this.settingsToggle = this.root.querySelector('#tg-df-settings-toggle');          this.settingsPanel = this.root.querySelector('#tg-df-settings-panel');          this.settingsBackdrop = this.root.querySelector('#tg-df-settings-backdrop');          this.regionSelect = this.root.querySelector('#tg-df-region-select');          this.retailerSelect = this.root.querySelector('#tg-df-retailer-select');          this.offerTypeSelect = this.root.querySelector('#tg-df-offer-type-select');          this.viewModeSelect = this.root.querySelector('#tg-df-view-mode-select');          this.rowsSelect = this.root.querySelector('#tg-df-rows-select');          this.dealModeToggle = this.root.querySelector('#tg-df-deal-mode');          this.editorModeToggle = this.root.querySelector('#tg-df-editor-mode');          this.priceFilter = this.root.querySelector('#tg-df-price-filter');          this.discountFilter = this.root.querySelector('#tg-df-discount-filter');                    this.editorBar = this.root.querySelector('#tg-df-editor-bar');          this.editorSelectedCount = this.root.querySelector('#tg-df-selected-count');          this.editorCopyBtn = this.root.querySelector('#tg-df-editor-copy');          this.editorClearBtn = this.root.querySelector('#tg-df-editor-clear');                    this.apiUrl = 'https://search-api.fie.future.net.uk/widget.php';          this.deals = [];          this.displayLimit = 12;          this.airedaleArticles = null;          this.airedaleTags = [];          this.airedaleTagCounts = {};          this.activeDealTag = null;          this.selectedBrands = [];          this.currentQuery = '';          this.editorMode = this.hostContainer ? this.hostContainer.hasAttribute('data-editor-mode') : false;          this.viewModeOverride = this.hostContainer ? this.hostContainer.getAttribute('data-view-mode') : null;          this.selectedDeals = new Map();                    this.brandFilterWrapper = this.root.querySelector('#tg-df-brand-filter-wrapper');          this.brandTrigger = this.root.querySelector('#tg-df-brand-trigger');          this.brandDropdown = this.root.querySelector('#tg-df-brand-dropdown');                    this.customPriceWrapper = this.root.querySelector('#tg-df-custom-price-wrapper');          this.customPriceMin = this.root.querySelector('#tg-df-custom-price-min');          this.customPriceMax = this.root.querySelector('#tg-df-custom-price-max');          this.legacyPriceWrapper = this.root.querySelector('#tg-df-legacy-price-wrapper');          this.discountFilterWrapper = this.root.querySelector('#tg-df-discount-filter-wrapper');          this.initResizeObserver();          this.init();        }        getViewMode() {          console.log("DEBUG getViewMode -> override:", this.viewModeOverride, "editorMode:", this.editorMode);          if (this.viewModeOverride && (!this.editorMode || !this.viewModeSelect)) {            return this.viewModeOverride;          }          return (this.viewModeSelect && this.viewModeSelect.value) ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');        }        applyLayoutMode() {          if (!this.grid) return;          const mode = this.getViewMode();          console.log("[DEBUG] applyLayoutMode CALLED! mode=", mode);          this.grid.classList.remove('layout-row', 'layout-grid', 'tg-df-grid-auto', 'carousel-compact', 'layout-replica-1', 'layout-replica-2');                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          const showHeaderDetails = params.get('show_header_details') !== 'false';          const carouselHost = this.root.querySelector('#tg-df-carousel-host');          const controlsDiv = this.root.querySelector('#tg-df-controls');          const topBarDiv = this.root.querySelector('#tg-df-top-bar');          const headerElement = this.root.querySelector('#tg-df-savings-squad-header');          if (headerElement) {             headerElement.style.display = (mode === 'savings_squad' && showHeaderDetails) ? 'block' : 'none';          }          if (mode === 'carousel') {             this.grid.classList.add('carousel-compact');             if (carouselHost) carouselHost.style.display = 'block';             if (controlsDiv) controlsDiv.style.display = 'none';             if (topBarDiv) topBarDiv.style.display = 'none';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.add('is-carousel');             }          } else {             if (carouselHost) carouselHost.style.display = 'none';             if (controlsDiv) controlsDiv.style.display = 'flex';             if (topBarDiv) topBarDiv.style.display = 'block';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          }          if (mode === 'grid') {            this.grid.classList.add('layout-grid');          } else if (mode === 'row') {            this.grid.classList.add('layout-row');          } else if (mode === 'savings_squad') {            this.grid.classList.add('tg-df-grid-auto', 'savings-squad-cards');          } else if (mode !== 'carousel') {            this.grid.classList.add('tg-df-grid-auto');          }                    const settingsWrapper = this.root.querySelector('.tg-df-settings-wrapper');          if (settingsWrapper) {            settingsWrapper.style.display = mode === 'auto' ? 'none' : 'block';          }          if (this.customPriceWrapper) {             this.customPriceWrapper.style.display = mode === 'auto' ? 'flex' : 'none';          }          if (this.legacyPriceWrapper) {             this.legacyPriceWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }          if (this.discountFilterWrapper) {             this.discountFilterWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }        }        initResizeObserver() {          try {            if (window.parent === window) return;          } catch (e) {            // cross origin frame check threw          }          const emitHeight = () => {            try {              const height = document.documentElement.scrollHeight || document.body.scrollHeight;              const msg = { type: 'embed-size', height: height };              if (window.parent && window.parent !== window) {                window.parent.postMessage(msg, '*');                window.parent.postMessage(JSON.stringify({ ...msg, sentinel: 'amp' }), '*');              }            } catch (e) {}          };                    if (window.ResizeObserver) {            try {              const ro = new ResizeObserver(() => emitHeight());              ro.observe(document.body);              if (this.root) ro.observe(this.root);            } catch(e){ console.warn(e); }          }          window.addEventListener('resize', emitHeight);          setTimeout(emitHeight, 300);        }        initCountdown() {          this.cdWrapper = this.root.querySelector('#tg-df-countdown-wrapper');                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          this.showCountdown = params.get('show_countdown') === 'true';          const showHeaderDetails = params.get('show_header_details') !== 'false';          const eyebrow = this.root.querySelector('.tg-df-carousel-box-eyebrow');          const title = this.root.querySelector('.tg-df-carousel-box-title');          const subtitle = this.root.querySelector('.tg-df-carousel-box-subtitle');          if (!showHeaderDetails) {            let containerElement = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (containerElement) containerElement.classList.add('hide-header-details');            if (eyebrow) eyebrow.style.display = 'none';            if (title) title.style.display = 'none';            if (subtitle) subtitle.style.display = 'none';          }          if (!this.cdWrapper) return;          this.cdTitle = this.root.querySelector('#tg-df-countdown-title');          this.cdDays = this.root.querySelector('#tg-df-cd-days');          this.cdHrs = this.root.querySelector('#tg-df-cd-hrs');          this.cdMin = this.root.querySelector('#tg-df-cd-min');          this.cdSec = this.root.querySelector('#tg-df-cd-sec');          this.updateCountdown();          this.cdInterval = setInterval(() => this.updateCountdown(), 1000);        }        updateCountdown() {          if (!this.cdWrapper) return;          if (!this.showCountdown) {            this.cdWrapper.style.display = 'none';            return;          }          const area = this.getAreaCode();          let offset = '-04:00';          if (['DE', 'FR', 'IT', 'ES', 'NL'].includes(area)) {             offset = '+02:00';          } else if (['GB', 'IE', 'UK'].includes(area)) {             offset = '+01:00';          }          const startTime = new Date('2026-06-23T00:00:00' + offset).getTime();          const endTime = new Date('2026-06-26T00:00:00' + offset).getTime();          const now = Date.now();          let targetTime = 0;          if (now < startTime) {             targetTime = startTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day starts in';             this.cdWrapper.style.display = 'flex';          } else if (now < endTime) {             targetTime = endTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day ends in';             this.cdWrapper.style.display = 'flex';          } else {             this.cdWrapper.style.display = 'none';             if (this.cdInterval) clearInterval(this.cdInterval);             return;          }          const diff = Math.max(0, targetTime - now);          const d = Math.floor(diff / (1000 * 60 * 60 * 24));          const h = Math.floor((diff / (1000 * 60 * 60)) % 24);          const m = Math.floor((diff / 1000 / 60) % 60);          const s = Math.floor((diff / 1000) % 60);          if (this.cdDays) this.cdDays.textContent = d;          if (this.cdHrs) this.cdHrs.textContent = h;          if (this.cdMin) this.cdMin.textContent = m;          if (this.cdSec) this.cdSec.textContent = s;        }        init() {          this.initCountdown();          try {            initAnalytics();          } catch (e) {            console.warn('Deals Widget Analytics Error:', e);          }                    this.bindEvents();                    let initialQuery = '';                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          let initialViewMode = params.get('view_mode');          if (!this.viewModeOverride && initialViewMode) {            this.viewModeOverride = initialViewMode;          }          if (!params.has('search') && !params.has('q') && !params.has('query') && initialViewMode !== 'savings_squad') {             initialQuery = 'Gaming laptops';          }          const website = params.get('website') || 'tomsguide';          this.website = website;          if (website === 'techradar') {            const squadHeader = this.root.querySelector('.tg-df-savings-squad-header');            if (squadHeader) {               const pic = squadHeader.querySelector('picture');               if (pic) pic.style.display = 'none';            }            const style = document.createElement('style');            style.innerHTML = `              .tg-df-container .hawk-affiliate-link-deal-button, .tg-df-container .tg-df-card-cta { background-color: #5DAF08 !important; }              .tg-df-container .hawk-affiliate-link-deal-button:hover, .tg-df-container .tg-df-card-cta:hover { background-color: #4a8c06 !important; }            `;            this.root.appendChild(style);          }                    if (this.regionSelect) {            this.regionSelect.value = params.get('region') || 'auto';            this.updatePriceDropdownCurrency();          }                    if (this.retailerSelect && params.has('retailer')) {            this.retailerSelect.value = params.get('retailer');          }                    if (params.has('brands')) {            const b = params.get('brands');            if (b) {              this.selectedBrands = b.split(',');            }          }                    if (this.offerTypeSelect && params.has('offer_type')) {            this.offerTypeSelect.value = params.get('offer_type');          }          if (this.viewModeSelect && params.has('view_mode')) {            this.viewModeSelect.value = params.get('view_mode');          }          if (this.rowsSelect && params.has('rows')) {            this.rowsSelect.value = params.get('rows');          }          if (params.has('price')) {            const priceVal = params.get('price');            if (this.priceFilter) {               // Try assigning it directly to select. If it's not present implicitly ignores               this.priceFilter.value = priceVal;            }            if (priceVal.includes('_')) {               const parts = priceVal.split('_');               if (this.customPriceMin && parts[0]) this.customPriceMin.value = parts[0];               if (this.customPriceMax && parts[1]) this.customPriceMax.value = parts[1];            }          }          if (this.discountFilter && params.has('min_discount_ratio')) {            // Need to convert back from ratio (e.g. 0.8) to select value (e.g. "20")            const ratioStr = params.get('min_discount_ratio');            const ratioFloat = parseFloat(ratioStr);            if (!isNaN(ratioFloat)) {               const percentage = Math.round((1 - ratioFloat) * 100);               this.discountFilter.value = percentage.toString();            }          }          if (this.sortSelect) {            this.sortSelect.value = params.get('sort') || 'date_desc';          }          if (this.dealModeToggle && params.has('deal_mode')) {            this.dealModeToggle.checked = params.get('deal_mode') === 'true' || params.get('deal_mode') === '1';          }          const headerTitleEl = this.root.querySelector('#tg-df-header-title');          const headerSubtitleEl = this.root.querySelector('#tg-df-header-subtitle');          if (params.has('widget_title') && headerTitleEl) {             headerTitleEl.textContent = params.get('widget_title');          }          if (params.has('widget_subtitle') && headerSubtitleEl) {             headerSubtitleEl.textContent = params.get('widget_subtitle');          }                    // Re-apply layout after params have updated control values          this.applyLayoutMode();                    if (params.get('search')) {            initialQuery = params.get('search');          } else if (params.get('q')) {            initialQuery = params.get('q');          } else if (params.get('query')) {            initialQuery = params.get('query');          }                    this.currentQuery = initialQuery;          if (this.searchInput) {            if (this.getViewMode() === 'savings_squad') {              this.searchInput.value = '';            } else {              this.searchInput.value = this.currentQuery;            }          }                    if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {            this.fetchDeals(this.currentQuery);          } else {            this.render();          }        }        updatePriceDropdownCurrency() {          if (!this.priceFilter || !this.regionSelect) return;          const currencySymbols = {            'US': '$',            'GB': '£',            'CA': '$CA',            'AU': '$AU',            'DE': '€',            'FR': '€',            'IT': '€',          };          const area = this.getAreaCode();          const cur = currencySymbols[area || 'US'] || '$';                    const options = this.priceFilter.options;          for (let i = 0; i < options.length; i++) {            const opt = options[i];            if (opt.value === 'all') {              opt.innerText = 'All Prices';            } else if (opt.value === 'under50') {              opt.innerText = `Under ${cur}50`;            } else if (opt.value === '50_100') {              opt.innerText = `${cur}50 - ${cur}100`;            } else if (opt.value === '100_200') {              opt.innerText = `${cur}100 - ${cur}200`;            } else if (opt.value === '200_500') {              opt.innerText = `${cur}200 - ${cur}500`;            } else if (opt.value === 'over500') {              opt.innerText = `Over ${cur}500`;            }          }        }        populateBrandDropdown(values) {          if (!this.brandDropdown || !this.brandFilterWrapper) return;          this.brandFilterWrapper.style.display = 'flex'; // show the wrapper                    let html = '';          const allChecked = this.selectedBrands.length === 0 ? 'checked' : '';          const _div = '<' + '/div>';          const _span = '<' + '/span>';          html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="" ${allChecked} class="tg-df-brand-chk"> Any Brand${_div}`;                    values.forEach(v => {             if (!v.formatted_value || v.formatted_value === 'Any Brand') return;             const isChecked = this.selectedBrands.includes(v.formatted_value) ? 'checked' : '';             html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="${this.escapeHTML(v.formatted_value)}" ${isChecked} class="tg-df-brand-chk"> ${this.escapeHTML(v.formatted_value)} \x3Cspan style="color:var(--tg-df-text-muted);font-size:12px">(${v.count || 0})${_span}${_div}`;          });                    this.brandDropdown.innerHTML = html;                    // Re-bind listeners          const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');          chks.forEach(chk => {            chk.addEventListener('change', (e) => {              const val = e.target.value;              if (val === '') {                this.selectedBrands = [];              } else {                if (e.target.checked) {                   if (!this.selectedBrands.includes(val)) this.selectedBrands.push(val);                } else {                   this.selectedBrands = this.selectedBrands.filter(b => b !== val);                }              }                            if (this.selectedBrands.length === 0) {                 this.brandTrigger.innerText = 'Any Brand';              } else if (this.selectedBrands.length === 1) {                 this.brandTrigger.innerText = this.selectedBrands[0];              } else {                 this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;              }                            // Only call API if changed from UI interactions              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.updateURLParams();                 this.fetchDeals(this.currentQuery);              }            });          });                    // Update button text on load          if (this.selectedBrands.length === 0) {             this.brandTrigger.innerText = 'Any Brand';          } else if (this.selectedBrands.length === 1) {             this.brandTrigger.innerText = this.selectedBrands[0];          } else {             this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;          }        }        updateURLParams() {          const url = new URL(window.location);          if (this.currentQuery && this.currentQuery !== 'Gaming laptops') {            url.searchParams.set('q', this.currentQuery);          } else {            url.searchParams.delete('q');            url.searchParams.delete('search');            url.searchParams.delete('query');          }                    if (this.regionSelect && this.regionSelect.value !== 'auto') {            url.searchParams.set('region', this.regionSelect.value);          } else {            url.searchParams.delete('region');          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.set('retailer', this.retailerSelect.value);          } else {            url.searchParams.delete('retailer');          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.set('brands', this.selectedBrands.join(','));          } else {            url.searchParams.delete('brands');          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.set('offer_type', this.offerTypeSelect.value);          } else {            url.searchParams.delete('offer_type');          }                    if (this.viewModeSelect && this.viewModeSelect.value !== 'auto') {            url.searchParams.set('view_mode', this.viewModeSelect.value);          } else {            url.searchParams.delete('view_mode');          }                    if (this.rowsSelect && this.rowsSelect.value !== '12') {            url.searchParams.set('rows', this.rowsSelect.value);          } else {            url.searchParams.delete('rows');          }                    const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             url.searchParams.set('price', `${min}_${max}`);          } else if (this.priceFilter && this.priceFilter.value !== 'all') {            url.searchParams.set('price', this.priceFilter.value);          } else {            url.searchParams.delete('price');          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {               const ratio = (100 - v) / 100;               url.searchParams.set('min_discount_ratio', ratio.toString());            }          } else {            url.searchParams.delete('min_discount_ratio');          }                    if (this.sortSelect && this.sortSelect.value !== 'date_desc') {            url.searchParams.set('sort', this.sortSelect.value);          } else {            url.searchParams.delete('sort');          }                    if (this.dealModeToggle && this.dealModeToggle.checked) {            url.searchParams.set('deal_mode', 'true');          } else {            url.searchParams.delete('deal_mode');          }                    window.history.replaceState({}, '', url);        }        bindEvents() {          const handleFiltersScroll = () => {            const filters = this.root.querySelector('.tg-df-filters');            const leftBtn = this.root.querySelector('.tg-df-scroll-btn.left');            const rightBtn = this.root.querySelector('.tg-df-scroll-btn.right');            if (filters && leftBtn && rightBtn) {              const { scrollLeft, scrollWidth, clientWidth } = filters;              leftBtn.style.display = scrollLeft > 0 ? 'flex' : 'none';              rightBtn.style.display = Math.ceil(scrollLeft + clientWidth) < scrollWidth - 5 ? 'flex' : 'none';            }          };          const filters = this.root.querySelector('.tg-df-filters');          if (filters) {            filters.addEventListener('scroll', handleFiltersScroll);            window.addEventListener('resize', handleFiltersScroll);            setTimeout(handleFiltersScroll, 100);                        // Also call after rendering dropdowns            const origRenderCategories = this.renderCategories;            if (origRenderCategories) {               this.renderCategories = (...args) => {                 origRenderCategories.apply(this, args);                 setTimeout(handleFiltersScroll, 50);               };            }          }                const roundels = this.root.querySelectorAll('.tg-df-carousel-cat');          roundels.forEach(r => {             r.addEventListener('click', () => {                const q = r.getAttribute('data-query');                const pr = r.getAttribute('data-pr');                if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: q,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = q;                const label = this.root.querySelector('#tg-df-carousel-title-label');                if (label) label.textContent = 'Best ' + q;                if (this.priceFilter) this.priceFilter.value = pr || 'all';                if (this.discountFilter) this.discountFilter.value = '5';                if (this.searchInput) this.searchInput.value = q;                                roundels.forEach(ro => ro.classList.remove('active'));                r.classList.add('active');                this.fetchDeals(this.currentQuery);             });          });          const discBtns = this.root.querySelectorAll('.tg-df-carousel-filter-btn');          discBtns.forEach(b => {             b.addEventListener('click', () => {                const d = b.getAttribute('data-d');                const pr = b.getAttribute('data-pr');                const ot = b.getAttribute('data-ot');                let label = b.innerText ? b.innerText.trim() : '';                let filterType = 'unknown';                let filterVal = 'unknown';                if (d !== null) { filterType = 'discount'; filterVal = d; }                else if (pr !== null) { filterType = 'price'; filterVal = pr; }                else if (ot !== null) { filterType = 'offertype'; filterVal = ot; }                if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-${filterType}-${filterVal}`, name: 'Filter Button', label: label });                                if (d !== null) {                   if (this.discountFilter) this.discountFilter.value = this.discountFilter.value === d ? '0' : d;                } else if (pr !== null) {                   if (this.priceFilter) this.priceFilter.value = this.priceFilter.value === pr ? 'all' : pr;                } else if (ot !== null) {                   if (this.offerTypeSelect) this.offerTypeSelect.value = this.offerTypeSelect.value === ot ? 'all' : ot;                } else {                   if (this.discountFilter) this.discountFilter.value = '0';                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.offerTypeSelect) this.offerTypeSelect.value = 'all';                }                if (d === null && pr === null && ot === null && b.getAttribute("data-type") !== "custom") {                   discBtns.forEach(ro => ro.classList.remove('active'));                   b.classList.add('active');                } else if (b.getAttribute("data-type") !== "custom") {                   // Only operate on hardcoded buttons (those without data-type)                   discBtns.forEach(ro => {                      if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active');                   });                                      let makeActive = true;                   if (d !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-d') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (pr !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-pr') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (ot !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-ot') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   }                                      if (makeActive) b.classList.add('active');                                      // Check if anything is active, if not activate "All"                   let anyActive = false;                   discBtns.forEach(ro => { if (ro.classList.contains('active') && ro.getAttribute('data-type') !== 'custom') anyActive = true; });                   if (!anyActive) {                       discBtns.forEach(ro => { if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.add('active'); });                   }                }                                this.fetchDeals(this.currentQuery);             });          });          if (this.brandTrigger && this.brandDropdown) {            this.brandTrigger.addEventListener('click', () => {              this.brandDropdown.classList.toggle('active');            });            document.addEventListener('click', (e) => {              if (this.brandFilterWrapper && !e.composedPath().includes(this.brandFilterWrapper)) {                this.brandDropdown.classList.remove('active');              }            });          }          const showAutocomplete = () => {             if (this.getViewMode() !== 'savings_squad' || !this.autocompleteDropdown || !this.airedaleTags) return;                          let terms = this.airedaleTags;             if (this.airedaleBrands) {                terms = terms.concat(this.airedaleBrands.map(b => b.formatted_value));             }             terms = [...new Set(terms)];                          const query = this.searchInput.value.trim();             let matches = [];             if (query.length > 0) {                 matches = terms.filter(t => t.toLowerCase().includes(query.toLowerCase()) && t.toLowerCase() !== query.toLowerCase());             } else {                 matches = terms;             }                          if (matches.length > 0) {                 this.autocompleteDropdown.innerHTML = matches.map(m => `\x3Cdiv class="tg-df-autocomplete-item" data-tag="${this.escapeHTML(m)}">${this.escapeHTML(m)}<` + `/div>`).join('');                 this.autocompleteDropdown.classList.add('active');             } else {                 this.autocompleteDropdown.classList.remove('active');             }          };          let debounceTimer;          if(this.searchInput) {            this.searchInput.addEventListener('focus', showAutocomplete);            this.searchInput.addEventListener('input', (e) => {              clearTimeout(debounceTimer);              const query = e.target.value.trim();              this.currentQuery = query;              showAutocomplete();              debounceTimer = setTimeout(() => {                this.updateURLParams();                if (query.length > 2) {                  this.fetchDeals(query);                } else if (query.length === 0) {                  if (this.getViewMode() === 'savings_squad') {                    this.activeDealTag = null;                    this.currentQuery = '';                    if (this.categoryFilter) this.categoryFilter.value = 'all';                    this.fetchDeals('');                  } else {                    this.deals = [];                    this.render();                  }                }              }, 400);            });            this.searchInput.addEventListener('keypress', (e) => {              if (e.key === 'Enter') {                if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');                clearTimeout(debounceTimer);                const query = e.target.value.trim();                this.currentQuery = query;                                let isTag = false;                if (this.airedaleTags && this.airedaleTags.includes(query)) isTag = true;                if (this.airedaleBrands && this.airedaleBrands.some(b => b.formatted_value === query)) isTag = true;                this.activeDealTag = isTag ? query : null;                                trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                this.updateURLParams();                if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                   if (query.length === 0 && this.getViewMode() === 'savings_squad') {                       if (this.categoryFilter) this.categoryFilter.value = 'all';                   }                   this.fetchDeals(query);                }              }            });          }          if (this.autocompleteDropdown) {             this.autocompleteDropdown.addEventListener('click', (e) => {                const item = e.target.closest('.tg-df-autocomplete-item');                if (item) {                   const tag = item.getAttribute('data-tag');                   this.currentQuery = tag;                   if (this.searchInput) this.searchInput.value = tag;                   this.activeDealTag = tag;                   if (this.categoryFilter && this.airedaleTags.includes(tag)) {                       this.categoryFilter.value = tag;                   }                   this.autocompleteDropdown.classList.remove('active');                   this.updateURLParams();                   this.fetchDeals(tag);                }             });             document.addEventListener('click', (e) => {               if (this.autocompleteDropdown && this.searchInput && !e.composedPath().includes(this.searchInput) && !e.composedPath().includes(this.autocompleteDropdown)) {                 this.autocompleteDropdown.classList.remove('active');               }             });          }          if (this.searchBtn) {            this.searchBtn.addEventListener('click', () => {              if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');              clearTimeout(debounceTimer);              const query = this.searchInput.value.trim();              trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                            let isTag = false;              if (this.airedaleTags && this.airedaleTags.includes(query)) isTag = true;              if (this.airedaleBrands && this.airedaleBrands.some(b => b.formatted_value === query)) isTag = true;              this.activeDealTag = isTag ? query : null;                            this.currentQuery = query;              this.updateURLParams();              if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                 if (query.length === 0 && this.getViewMode() === 'savings_squad') {                     if (this.categoryFilter) this.categoryFilter.value = 'all';                 }                 this.fetchDeals(query);              }            });          }          if(this.sortSelect && this.sortSelect.querySelector('option[value="date_desc"]') === null) {              const option = document.createElement('option');              option.value = "date_desc";              option.text = "Newest First";              this.sortSelect.insertBefore(option, this.sortSelect.firstChild);          }          if(this.sortSelect) this.sortSelect.addEventListener('change', () => {            trackElementInteraction({ id: `sort-option-${this.sortSelect.value}`, name: 'Sort', label: `Sort: ${this.sortSelect.options[this.sortSelect.selectedIndex].text}` });            this.updateURLParams();            if (this.deals.length > 0) {              this.sortData();              this.render();            }          });                    const priceFilter = this.root.querySelector('#tg-df-price-filter');          if (priceFilter) {            this.priceFilter = priceFilter;            this.priceFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-price-${this.priceFilter.value}`, name: 'Price', label: this.priceFilter.options[this.priceFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          const updateCustomPrice = () => {             this.updateURLParams();             if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);             } else {                this.render();             }          };          if (this.customPriceMin) {             this.customPriceMin.addEventListener('change', updateCustomPrice);             this.customPriceMin.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          if (this.customPriceMax) {             this.customPriceMax.addEventListener('change', updateCustomPrice);             this.customPriceMax.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          const discountFilter = this.root.querySelector('#tg-df-discount-filter');          if (discountFilter) {            this.discountFilter = discountFilter;            this.discountFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-discount-${this.discountFilter.value}`, name: 'Discount', label: this.discountFilter.options[this.discountFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          if (this.categoryFilter) {            this.categoryFilter.addEventListener('change', (e) => {               const val = e.target.value === 'all' ? null : e.target.value;               this.activeDealTag = val;               if (val) {                 this.currentQuery = val;               } else {                 if (this.searchInput && this.currentQuery === document.querySelector('#tg-df-brand-trigger')?.getAttribute('data-active-brand')) {                     // don't clear current query if a brand is selected                 } else if (this.searchInput) {                     this.currentQuery = '';                     this.searchInput.value = '';                 }               }               this.fetchSavingsSquad();            });          }                    if (this.settingsToggle) {            this.settingsToggle.addEventListener('click', () => {              const o = this.settingsPanel.classList.toggle('active');              this.settingsBackdrop.classList.toggle('active');              if (o) trackElementInteraction({ id: 'filter-open', name: 'Filters', label: 'Open filters' });            });          }                    if (this.settingsBackdrop) {            this.settingsBackdrop.addEventListener('click', () => {              this.settingsPanel.classList.remove('active');              this.settingsBackdrop.classList.remove('active');            });          }                    if (this.regionSelect) {            this.regionSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-region-${this.regionSelect.value}`, name: 'Region', label: this.regionSelect.options[this.regionSelect.selectedIndex].text });              this.updateURLParams();              this.updatePriceDropdownCurrency();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.retailerSelect) {            this.retailerSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-merchant-${this.retailerSelect.value}`, name: 'Retailer', label: this.retailerSelect.options[this.retailerSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.offerTypeSelect) {            this.offerTypeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-offertype-${this.offerTypeSelect.value}`, name: 'Offer Type', label: this.offerTypeSelect.options[this.offerTypeSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.viewModeSelect) {            this._prevViewMode = this.viewModeSelect.value;            this.viewModeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-viewmode-${this.viewModeSelect.value}`, name: 'View Mode', label: this.viewModeSelect.options[this.viewModeSelect.selectedIndex].text });                            // Reset all active toggles and filters to prevent config carry-over              this.selectedBrands = [];              if (this.brandTrigger) this.brandTrigger.innerText = 'Select Brands';              if (this.brandDropdown) {                const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                chks.forEach(chk => { chk.checked = false; });              }              if (this.priceFilter) this.priceFilter.value = 'all';              if (this.customPriceMin) this.customPriceMin.value = '';              if (this.customPriceMax) this.customPriceMax.value = '';              if (this.sortSelect) this.sortSelect.value = 'date_desc';              if (this.discountFilter) this.discountFilter.value = '0';              if (this.retailerSelect) this.retailerSelect.value = '';              if (this.offerTypeSelect) this.offerTypeSelect.value = '';              if (this.rowsSelect) this.rowsSelect.value = '12';              if (this.categoryFilter) this.categoryFilter.value = 'all';              this.activeDealTag = null;              this.updateURLParams();              this.applyLayoutMode();                            if (this.getViewMode() === 'savings_squad' || this._prevViewMode === 'savings_squad') {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }              this._prevViewMode = this.viewModeSelect.value;            });          }                    if (this.rowsSelect) {            this.rowsSelect.addEventListener('change', () => {              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.dealModeToggle) {            this.dealModeToggle.addEventListener('change', () => {              this.updateURLParams();              this.render();            });          }          if (this.editorModeToggle) {             this.editorModeToggle.addEventListener('change', (e) => {                this.editorMode = e.target.checked;                this.render();                this.updateFloatingCopyBar();             });          }          if (this.editorCopyBtn) {             this.editorCopyBtn.addEventListener('click', () => {                this.copySelectedDealsToCMS();             });          }          if (this.editorClearBtn) {             this.editorClearBtn.addEventListener('click', () => {                this.selectedDeals.clear();                this.render();                this.updateFloatingCopyBar();             });          }          if (this.grid) {            this.grid.addEventListener('change', (e) => {               if (e.target.classList.contains('tg-df-deal-checkbox')) {                  const dealId = e.target.getAttribute('data-id');                  if (e.target.checked) {                     const dealObj = this.deals.find(d => d.id === dealId);                     if (dealObj) this.selectedDeals.set(dealId, dealObj);                  } else {                     this.selectedDeals.delete(dealId);                  }                  this.updateFloatingCopyBar();               }            });            this.grid.addEventListener('click', (e) => {              const dealCard = e.target.closest('[data-action="deal-click"]');              const similarCard = e.target.closest('[data-action="view-similar-click"]');              const cardLink = dealCard || similarCard;              if (cardLink) {                const productName = cardLink.getAttribute('data-product-name');                const merchantName = cardLink.getAttribute('data-merchant-name');                const productId = cardLink.getAttribute('data-analytics-id');                const price = parseFloat(cardLink.getAttribute('data-price')) || null;                const prevPriceStr = cardLink.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = cardLink.getAttribute('data-original-link');                const 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 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 = this.decodeHTML(description.replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').replace(/View Deal$/i, '').trim());                summaryTitle = this.decodeHTML(summaryTitle);                                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.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) {          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.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 : '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 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)}${_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)}" ${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 ? `\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>
            </channel>
</rss>