<?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/ipads" rel="self" type="application/rss+xml" />
                            <title><![CDATA[ Latest from Tom's Guide in Ipads ]]></title>
                <link>https://www.tomsguide.com/computing/tablets/ipads</link>
        <description><![CDATA[ All the latest ipads content from the Tom's Guide team ]]></description>
                                    <lastBuildDate>Tue, 15 Sep 2026 11:00:56 +0000</lastBuildDate>
                            <language>en</language>
                                <item>
                                                            <title><![CDATA[ AppleCare One Family now live for $50 a month in time for iPhone 18 Pro launch — here's what it actually covers ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Whether you're picking up an iPhone, iPad or some other Apple device, you'll know that official repairs can get very expensive. Heck, a simple screen repair on the<a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-max-hands-on-sneaky-awesome-upgrades-but-worth-the-price-hike"> iPhone 18 Pro Max</a> is going to<a href="https://support.apple.com/iphone/repair?services=applecare" target="_blank" rel="nofollow"> cost $379</a>, which is almost a third of the cost of the phone itself. AppleCare+ makes those fees a little more palatable, so long as you're willing to subscribe and pay a monthly fee.</p><p>The problem is that paying for AppleCare on multiple devices can get pretty expensive, especially if you're part of a whole family of Apple users. AppleCare One already offers the chance to cover up to three devices on a single plan, and now<a href="https://www.apple.com/applecare/" target="_blank" rel="nofollow"> AppleCare One Family</a> offers that same coverage for up to six people — for $50 a month.</p><h2 id="what-devices-you-can-add">What devices you can add</h2><p>There are surprisingly few limits on the number of devices you can add to this plan. All devices that are covered by AppleCare will be automatically added to the Family plan when you sign up, as will any devices purchased within the previous 60 days. </p><p>However, devices that are over four years old, or AirPods and Beats that are over a year old, will need to undergo a device check to ensure they're in good condition. This can be done remotely, or by visiting your nearest Apple Store. Apple has also made it clear that you can't add more than six<a href="https://www.tomsguide.com/computing/smart-glasses/apple-vision-pro-review"> Vision Pro </a>headsets to the plan — not that anyone would. </p><p>The usual AppleCare+ service fees still apply. Battery servicing is totally free under the plan, while repairs to the screen and back glass are $29. Other accidental damage is $99, while theft or loss claims come with a $149 deductible. You're also limited to six loss and theft claims over the course of a year.</p><h2 id=""></h2><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-exgE3X"></div>                            </div>                            <script src="https://kwizly.com/embed/exgE3X.js" async></script><p>Devices will remain covered so long as you keep your AppleCare One Family Plan active, and provided they connect to an Apple server at least once every 12 months. However, Apple does note that devices can be removed from the plan if it runs out of the necessary parts to service and make repairs.</p><p>Coverage is also dependent on the devices being signed into a family member's Apple Account. If they sign out, and a non-family member later signs in, coverage will end. </p><h2 id="how-to-set-up-applecare-one-family">How to set up AppleCare One Family</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="3WLpJBKQTbfhFZ8Lhc8bZ9" name="Apple CareOne 2" alt="AppleCare One with multiple Apple devices" src="https://cdn.mos.cms.futurecdn.net/3WLpJBKQTbfhFZ8Lhc8bZ9-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>AppleCare One Family is currently only available in the United States, and the setup process can be initiated by any adult member of a Family Sharing Group. Payments are automatically made by the family organizer, regardless of which adult actually signs up. However, the person who initiated the subscription can choose their own payment method if they prefer. Other family members will be restricted from signing up for a different AppleCare plan unless they leave the family group.</p><p>If you're part of a family or friendship group that's big on using Apple products, signing up for an AppleCare One Family plan feels like a no-brainer. A simple <a href="https://www.tomsguide.com/phones/iphones/apple-announces-applecare-one-for-covering-multiple-devices-under-one-plan-starts-at-usd19-a-month">AppleCare One plan</a> costs $20 a month, and coverage for up to three devices is included in the cost plus $6 a month for each additional product.</p><p>The Family plan with a full six people means that you're paying $8.33 per person, and without any major device limitations. All you have to do is make sure the participants actually pay you their dues, which should be a lot easier considering <a href="https://www.tomsguide.com/phones/iphones/ios-18-wallet">sharing money is now as easy as bumping phones together.</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/your-phone-may-run-ios-27-but-only-these-devices-run-everything-siri-ai-can-do">Your phone may run iOS 27, but only these devices support the new Siri AI</a></li><li><a href="https://www.tomsguide.com/phones/why-your-iphone-says-optimizing-search-and-siri-in-ios-27-and-how-to-speed-it-up">Why your iPhone says 'Optimizing Search and Siri' in iOS 27 — and how to speed it up</a></li><li><a href="https://www.tomsguide.com/computing/macos/macos-golden-gate-review">I’ve used macOS Golden Gate for 3 months — and here’s what I think</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/applecare-one-family-now-live-for-usd50-a-month-in-time-for-iphone-18-pro-launch-heres-what-it-actually-covers</link>
                                                                            <description>
                            <![CDATA[ Up to six people can get full AppleCare coverage on all their devices, and it only costs $50 a month. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">BsLfx4LwAt7FxRyPrXmrXk</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/EVijA7pZz2QcghNcincgHk-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 15 Sep 2026 11:00:56 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[MacBooks]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Computing Peripherals]]></category>
                                                    <category><![CDATA[Tablets]]></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/EVijA7pZz2QcghNcincgHk-1280-80.jpg">
                                                            <media:credit><![CDATA[Hadrian | Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Apple Care plus settings app on new iPhone 12 Pro Max 5G smartphone model by Apple Computers close-up of Pacific Blue mobile phone device]]></media:description>                                                            <media:text><![CDATA[Apple Care plus settings app on new iPhone 12 Pro Max 5G smartphone model by Apple Computers close-up of Pacific Blue mobile phone device]]></media:text>
                                <media:title type="plain"><![CDATA[Apple Care plus settings app on new iPhone 12 Pro Max 5G smartphone model by Apple Computers close-up of Pacific Blue mobile phone device]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/EVijA7pZz2QcghNcincgHk-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Whether you're picking up an iPhone, iPad or some other Apple device, you'll know that official repairs can get very expensive. Heck, a simple screen repair on the<a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-max-hands-on-sneaky-awesome-upgrades-but-worth-the-price-hike"> iPhone 18 Pro Max</a> is going to<a href="https://support.apple.com/iphone/repair?services=applecare" target="_blank" rel="nofollow"> cost $379</a>, which is almost a third of the cost of the phone itself. AppleCare+ makes those fees a little more palatable, so long as you're willing to subscribe and pay a monthly fee.</p><p>The problem is that paying for AppleCare on multiple devices can get pretty expensive, especially if you're part of a whole family of Apple users. AppleCare One already offers the chance to cover up to three devices on a single plan, and now<a href="https://www.apple.com/applecare/" target="_blank" rel="nofollow"> AppleCare One Family</a> offers that same coverage for up to six people — for $50 a month.</p><h2 id="what-devices-you-can-add">What devices you can add</h2><p>There are surprisingly few limits on the number of devices you can add to this plan. All devices that are covered by AppleCare will be automatically added to the Family plan when you sign up, as will any devices purchased within the previous 60 days. </p><p>However, devices that are over four years old, or AirPods and Beats that are over a year old, will need to undergo a device check to ensure they're in good condition. This can be done remotely, or by visiting your nearest Apple Store. Apple has also made it clear that you can't add more than six<a href="https://www.tomsguide.com/computing/smart-glasses/apple-vision-pro-review"> Vision Pro </a>headsets to the plan — not that anyone would. </p><p>The usual AppleCare+ service fees still apply. Battery servicing is totally free under the plan, while repairs to the screen and back glass are $29. Other accidental damage is $99, while theft or loss claims come with a $149 deductible. You're also limited to six loss and theft claims over the course of a year.</p><h2 id=""></h2><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-exgE3X"></div>                            </div>                            <script src="https://kwizly.com/embed/exgE3X.js" async></script><p>Devices will remain covered so long as you keep your AppleCare One Family Plan active, and provided they connect to an Apple server at least once every 12 months. However, Apple does note that devices can be removed from the plan if it runs out of the necessary parts to service and make repairs.</p><p>Coverage is also dependent on the devices being signed into a family member's Apple Account. If they sign out, and a non-family member later signs in, coverage will end. </p><h2 id="how-to-set-up-applecare-one-family">How to set up AppleCare One Family</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="3WLpJBKQTbfhFZ8Lhc8bZ9" name="Apple CareOne 2" alt="AppleCare One with multiple Apple devices" src="https://cdn.mos.cms.futurecdn.net/3WLpJBKQTbfhFZ8Lhc8bZ9-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>AppleCare One Family is currently only available in the United States, and the setup process can be initiated by any adult member of a Family Sharing Group. Payments are automatically made by the family organizer, regardless of which adult actually signs up. However, the person who initiated the subscription can choose their own payment method if they prefer. Other family members will be restricted from signing up for a different AppleCare plan unless they leave the family group.</p><p>If you're part of a family or friendship group that's big on using Apple products, signing up for an AppleCare One Family plan feels like a no-brainer. A simple <a href="https://www.tomsguide.com/phones/iphones/apple-announces-applecare-one-for-covering-multiple-devices-under-one-plan-starts-at-usd19-a-month">AppleCare One plan</a> costs $20 a month, and coverage for up to three devices is included in the cost plus $6 a month for each additional product.</p><p>The Family plan with a full six people means that you're paying $8.33 per person, and without any major device limitations. All you have to do is make sure the participants actually pay you their dues, which should be a lot easier considering <a href="https://www.tomsguide.com/phones/iphones/ios-18-wallet">sharing money is now as easy as bumping phones together.</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/your-phone-may-run-ios-27-but-only-these-devices-run-everything-siri-ai-can-do">Your phone may run iOS 27, but only these devices support the new Siri AI</a></li><li><a href="https://www.tomsguide.com/phones/why-your-iphone-says-optimizing-search-and-siri-in-ios-27-and-how-to-speed-it-up">Why your iPhone says 'Optimizing Search and Siri' in iOS 27 — and how to speed it up</a></li><li><a href="https://www.tomsguide.com/computing/macos/macos-golden-gate-review">I’ve used macOS Golden Gate for 3 months — and here’s what I think</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ iPadOS 27 review: The iPad gets smarter ]]></title>
                                                                                                <dc:content><![CDATA[ <p>iPadOS 27 is here for the <a href="https://www.tomsguide.com/best-picks/best-ipad">best iPads</a> that support it! Like <a href="https://www.tomsguide.com/phones/iphones/ios-27-is-official-all-the-new-upgrades-and-features-announced-at-wwdc-2026">iOS 27</a> and <a href="https://www.tomsguide.com/computing/macos/macos-27">macOS 27</a>, iPadOS 27 focuses on overall system refinements and deeper AI integration. That last bit is especially noteworthy, as there’s now a dedicated <a href="https://www.tomsguide.com/ai/apple-finally-fixed-siri-heres-all-the-features-for-the-new-siri-ai-announced-at-wwdc">Siri AI app</a> that functions like a standard chatbot. Beyond answering questions, Siri AI can also take actions on your behalf since it’s integrated into the operating system and works with Apple’s applications.</p><p>I’ve been using iPadOS 27 since the beta launched over the summer, and have generally had a smooth experience with the latest OS update. Though I’m not a big AI user, the updated Siri can be handy — especially as it can do things on your behalf. And if you have kids, I’m sure you’ll appreciate the new child safety features.</p><p>iPadOS 27 isn’t a game-changer, but features like the overhauled Siri AI, the Liquid-Glass slider, and other quality-of-life improvements make using Apple’s tablets feel smoother and more personalized. Here is my full review of iPadOS 27.</p><h3 class="article-body__section" id="section-ipados-27-review-compatible-ipads"><span>iPadOS 27 review: Compatible iPads</span></h3><p>Here are all the iPads that support iPadOS 27.</p><ul><li><strong>iPad Pro (M4 and later)</strong></li><li><strong>iPad Pro 12.9‑inch (4th generation and later)</strong></li><li><strong>iPad Pro 11‑inch (2nd generation and later)</strong></li><li><strong>iPad Air 13-inch (M2 and later)</strong></li><li><strong>iPad Air 11-inch (M2, M3, and M4)</strong></li><li><strong>iPad Air 11-inch (4th generation and later)</strong></li><li><strong>iPad (A16)</strong></li><li><strong>iPad (9th generation and later)</strong></li><li><strong>iPad mini (A17 Pro)</strong></li><li><strong>iPad mini (6th generation)</strong></li></ul><h3 class="article-body__section" id="section-ipados-27-review-biggest-features"><span>iPadOS 27 review: Biggest features</span></h3><h2 id="the-new-siri">The new Siri</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3000px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="bUdvQNBSqmfRLjfKDiytsJ" name="iPadOS 27-3" alt="iPadOS 27" src="https://cdn.mos.cms.futurecdn.net/bUdvQNBSqmfRLjfKDiytsJ-1920-80.jpg" mos="" align="middle" fullscreen="" width="3000" height="1687" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p><a href="https://www.tomsguide.com/ai/apple-intelligence-unveiled-all-the-new-ai-features-coming-to-ios-18-ipados-18-and-macos-sequoia">Apple Intelligence</a> is finally ready for prime time on the company’s devices. Thanks to the new Siri AI app, you can now interact with Apple’s virtual assistant the same way you would with a chatbot like ChatGPT or <a href="https://www.tomsguide.com/ai/google-gemini/google-gemini-everything-you-need-to-know">Google Gemini</a>. Apple Intelligence runs on both servers and your device to offer better image understanding and more.</p><p>There is now a dedicated Siri AI app, which looks and functions like a regular chatbot app. In this window, you can ask Siri questions or have it perform tasks for you. For example, I used Siri to send a message to one of my iMessage group chats, and it did so after I approved it. Sure, I could have just done this directly in the group chat, but it’s a good demonstration of what the new Siri can do.</p><p>Siri AI also understands what's on your screen. When I had the Tom’s Guide homepage open on Google Chrome, it correctly detailed what was on the screen, including all the articles. It couldn’t open the articles or read them aloud (despite saying it could), but since I’m testing a beta version, I’ll give it an A for effort, even if it failed to complete the task.</p><p>Siri is most useful when you’re using Apple’s own apps and programs. It can create calendar events, set reminders, play music, and more. For example, when you’re looking at a schedule, you’ll see an “add to calendar” button pop up. When you right-click certain folders, files, or apps, you’ll see an “Ask Siri” option at the bottom. Selecting this will open a window where you can start texting or talking with Siri.</p><p>Though Siri can’t yet interact with many third-party applications (such as those from Google), it’s a huge improvement over the old Siri.</p><h2 id="liquid-glass-improvements">Liquid Glass improvements</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3000px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="o8qwJZchHVow7pwSPrizSQ" name="iPadOS 27-2" alt="iPadOS 27" src="https://cdn.mos.cms.futurecdn.net/o8qwJZchHVow7pwSPrizSQ-1920-80.jpg" mos="" align="middle" fullscreen="" width="3000" height="1688" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Liquid Glass hasn’t gone anywhere, as Apple is leaning more into the UI with its latest operating system updates. However, Apple is now giving you more control over how it looks with a new slider that adjusts opacity. You can’t eliminate the Liquid Glass look, but you can minimize it significantly. </p><p>Other improvements include more diffuse, complex background visuals, so text stands out more. You’ll also notice that the edges of icons are more pronounced to help further separate them from the background. The uniform corner radius of all app windows also helps them stand out more.</p><p>Even if Liquid Glass hasn’t gone anywhere, even detractors should find the updates tolerable since they do greatly improve overall readability and visibility. The Liquid Glass slider is a nice touch.</p><p>I've never had a problem with Liquid Glass because I think it’s an interesting visual effect. That said, I’m glad that folks can now fine-tune it to their liking. The slider is especially neat because it’s easy to use and clearly shows how much of a difference there is when you go from one extreme to the other.</p><h2 id="child-safety-features">Child safety features</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3000px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="scMkVXfiwMUYV5YeEAw5JV" name="iPadOS 27" alt="iPadOS 27" src="https://cdn.mos.cms.futurecdn.net/scMkVXfiwMUYV5YeEAw5JV-1920-80.jpg" mos="" align="middle" fullscreen="" width="3000" height="1688" attribution="" endorsement="" class="inline"></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 a parent, you’ll be happy to know that Apple is expanding its parental control features with iPadOS 27. This way, you can let the kiddo use Apple’s tablet without worrying too much about the kind of content they’re watching and for how long they’re using the slate.</p><p>These updates include a redesigned, more intuitive Screen Time Dashboard with one-tap controls and expanded safeguards. There are also Time Allowances for app categories, Ask to Browse website approval, Communication Safety that blurs gore or violence, and one-tap access management. You can tailor these features to suit your child.</p><p>I don’t have kids, but I did find the child safety features simple enough to use and customize. Given how much kids love iPads, it’s smart for Apple to keep refining these safety features.</p><h3 class="article-body__section" id="section-ipados-27-review-other-features"><span>iPadOS 27 review: Other features</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3000px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="7oXYaT7tBAEw2Bpdcym2Ab" name="iPadOS 27-4" alt="iPadOS 27" src="https://cdn.mos.cms.futurecdn.net/7oXYaT7tBAEw2Bpdcym2Ab-1920-80.jpg" mos="" align="middle" fullscreen="" width="3000" height="1688" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><ul><li><strong>Spatial Reframing</strong>: As the name suggests, you can now reframe a photo after it’s been taken thanks to this feature. You can also expand your shots with the Extend Tool and remove objects with the Clean Up tool.</li><li><strong>Upgraded Image Playground</strong>: Image Playground can now generate higher-quality images. You can also modify and transform existing images by describing what you want.</li><li><strong>Siri in Notes</strong>: Siri AI can assist with your handwritten or typed notes in the Notes app by (for example) organizing bullet points into a formatted agenda or turning handwritten lectures into a detailed study guide.</li><li><strong>Safari updates</strong>: In Safari, tabs can now be automatically grouped by topic, making related pages easier to find. With Safari Notify Me, you can receive an alert if there’s a price change or a restock for an item you’ve been eyeing.</li><li><strong>Describe Shortcuts</strong>: Instead of manually building complex workflows, you can now describe what you need, and Shortcuts connects actions across multiple apps to make it happen. This is useful if you want to set specific routines, such as launching a specific app when you connect a peripheral.</li></ul><h3 class="article-body__section" id="section-ipados-27-review-verdict"><span>iPadOS 27 review: Verdict</span></h3><p>I use an iPad Pro every single day and have largely been pleased with iPadOS 27. Again, it won’t set the world on fire with revolutionary new features, but the upgraded Siri AI and deeper Apple Intelligence integrations help make iPads that support the update more useful. This is especially true if you use Apple’s own apps often.</p><p>As I said in my macOS Golden Gate review, iPadOS 27 feels like a holding-pattern update for whatever big OS refresh the folks in Cupertino are cooking. But there’s also nothing wrong with not fixing what isn’t broken, so it’s fine that this isn’t a huge update. If you own a compatible iPad, you should update as soon as you can to test the new features yourself!</p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/ipads/ipados-27-review</link>
                                                                            <description>
                            <![CDATA[ iPadOS 27 puts AI front and center, thanks to the new Siri AI and deeper app integration. Though not revolutionary, this update is solid for iPad users. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">kkdJ7BJ2EZGgBZv4nofUWD</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/A8DQehgx8ELZdgM9JyFu7H-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 15 Sep 2026 10:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[Computing Peripherals]]></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/A8DQehgx8ELZdgM9JyFu7H-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPadOS 27]]></media:description>                                                            <media:text><![CDATA[iPadOS 27]]></media:text>
                                <media:title type="plain"><![CDATA[iPadOS 27]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/A8DQehgx8ELZdgM9JyFu7H-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>iPadOS 27 is here for the <a href="https://www.tomsguide.com/best-picks/best-ipad">best iPads</a> that support it! Like <a href="https://www.tomsguide.com/phones/iphones/ios-27-is-official-all-the-new-upgrades-and-features-announced-at-wwdc-2026">iOS 27</a> and <a href="https://www.tomsguide.com/computing/macos/macos-27">macOS 27</a>, iPadOS 27 focuses on overall system refinements and deeper AI integration. That last bit is especially noteworthy, as there’s now a dedicated <a href="https://www.tomsguide.com/ai/apple-finally-fixed-siri-heres-all-the-features-for-the-new-siri-ai-announced-at-wwdc">Siri AI app</a> that functions like a standard chatbot. Beyond answering questions, Siri AI can also take actions on your behalf since it’s integrated into the operating system and works with Apple’s applications.</p><p>I’ve been using iPadOS 27 since the beta launched over the summer, and have generally had a smooth experience with the latest OS update. Though I’m not a big AI user, the updated Siri can be handy — especially as it can do things on your behalf. And if you have kids, I’m sure you’ll appreciate the new child safety features.</p><p>iPadOS 27 isn’t a game-changer, but features like the overhauled Siri AI, the Liquid-Glass slider, and other quality-of-life improvements make using Apple’s tablets feel smoother and more personalized. Here is my full review of iPadOS 27.</p><h3 class="article-body__section" id="section-ipados-27-review-compatible-ipads"><span>iPadOS 27 review: Compatible iPads</span></h3><p>Here are all the iPads that support iPadOS 27.</p><ul><li><strong>iPad Pro (M4 and later)</strong></li><li><strong>iPad Pro 12.9‑inch (4th generation and later)</strong></li><li><strong>iPad Pro 11‑inch (2nd generation and later)</strong></li><li><strong>iPad Air 13-inch (M2 and later)</strong></li><li><strong>iPad Air 11-inch (M2, M3, and M4)</strong></li><li><strong>iPad Air 11-inch (4th generation and later)</strong></li><li><strong>iPad (A16)</strong></li><li><strong>iPad (9th generation and later)</strong></li><li><strong>iPad mini (A17 Pro)</strong></li><li><strong>iPad mini (6th generation)</strong></li></ul><h3 class="article-body__section" id="section-ipados-27-review-biggest-features"><span>iPadOS 27 review: Biggest features</span></h3><h2 id="the-new-siri">The new Siri</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3000px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="bUdvQNBSqmfRLjfKDiytsJ" name="iPadOS 27-3" alt="iPadOS 27" src="https://cdn.mos.cms.futurecdn.net/bUdvQNBSqmfRLjfKDiytsJ-1920-80.jpg" mos="" align="middle" fullscreen="" width="3000" height="1687" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p><a href="https://www.tomsguide.com/ai/apple-intelligence-unveiled-all-the-new-ai-features-coming-to-ios-18-ipados-18-and-macos-sequoia">Apple Intelligence</a> is finally ready for prime time on the company’s devices. Thanks to the new Siri AI app, you can now interact with Apple’s virtual assistant the same way you would with a chatbot like ChatGPT or <a href="https://www.tomsguide.com/ai/google-gemini/google-gemini-everything-you-need-to-know">Google Gemini</a>. Apple Intelligence runs on both servers and your device to offer better image understanding and more.</p><p>There is now a dedicated Siri AI app, which looks and functions like a regular chatbot app. In this window, you can ask Siri questions or have it perform tasks for you. For example, I used Siri to send a message to one of my iMessage group chats, and it did so after I approved it. Sure, I could have just done this directly in the group chat, but it’s a good demonstration of what the new Siri can do.</p><p>Siri AI also understands what's on your screen. When I had the Tom’s Guide homepage open on Google Chrome, it correctly detailed what was on the screen, including all the articles. It couldn’t open the articles or read them aloud (despite saying it could), but since I’m testing a beta version, I’ll give it an A for effort, even if it failed to complete the task.</p><p>Siri is most useful when you’re using Apple’s own apps and programs. It can create calendar events, set reminders, play music, and more. For example, when you’re looking at a schedule, you’ll see an “add to calendar” button pop up. When you right-click certain folders, files, or apps, you’ll see an “Ask Siri” option at the bottom. Selecting this will open a window where you can start texting or talking with Siri.</p><p>Though Siri can’t yet interact with many third-party applications (such as those from Google), it’s a huge improvement over the old Siri.</p><h2 id="liquid-glass-improvements">Liquid Glass improvements</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3000px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="o8qwJZchHVow7pwSPrizSQ" name="iPadOS 27-2" alt="iPadOS 27" src="https://cdn.mos.cms.futurecdn.net/o8qwJZchHVow7pwSPrizSQ-1920-80.jpg" mos="" align="middle" fullscreen="" width="3000" height="1688" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Liquid Glass hasn’t gone anywhere, as Apple is leaning more into the UI with its latest operating system updates. However, Apple is now giving you more control over how it looks with a new slider that adjusts opacity. You can’t eliminate the Liquid Glass look, but you can minimize it significantly. </p><p>Other improvements include more diffuse, complex background visuals, so text stands out more. You’ll also notice that the edges of icons are more pronounced to help further separate them from the background. The uniform corner radius of all app windows also helps them stand out more.</p><p>Even if Liquid Glass hasn’t gone anywhere, even detractors should find the updates tolerable since they do greatly improve overall readability and visibility. The Liquid Glass slider is a nice touch.</p><p>I've never had a problem with Liquid Glass because I think it’s an interesting visual effect. That said, I’m glad that folks can now fine-tune it to their liking. The slider is especially neat because it’s easy to use and clearly shows how much of a difference there is when you go from one extreme to the other.</p><h2 id="child-safety-features">Child safety features</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3000px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="scMkVXfiwMUYV5YeEAw5JV" name="iPadOS 27" alt="iPadOS 27" src="https://cdn.mos.cms.futurecdn.net/scMkVXfiwMUYV5YeEAw5JV-1920-80.jpg" mos="" align="middle" fullscreen="" width="3000" height="1688" attribution="" endorsement="" class="inline"></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 a parent, you’ll be happy to know that Apple is expanding its parental control features with iPadOS 27. This way, you can let the kiddo use Apple’s tablet without worrying too much about the kind of content they’re watching and for how long they’re using the slate.</p><p>These updates include a redesigned, more intuitive Screen Time Dashboard with one-tap controls and expanded safeguards. There are also Time Allowances for app categories, Ask to Browse website approval, Communication Safety that blurs gore or violence, and one-tap access management. You can tailor these features to suit your child.</p><p>I don’t have kids, but I did find the child safety features simple enough to use and customize. Given how much kids love iPads, it’s smart for Apple to keep refining these safety features.</p><h3 class="article-body__section" id="section-ipados-27-review-other-features"><span>iPadOS 27 review: Other features</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3000px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="7oXYaT7tBAEw2Bpdcym2Ab" name="iPadOS 27-4" alt="iPadOS 27" src="https://cdn.mos.cms.futurecdn.net/7oXYaT7tBAEw2Bpdcym2Ab-1920-80.jpg" mos="" align="middle" fullscreen="" width="3000" height="1688" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><ul><li><strong>Spatial Reframing</strong>: As the name suggests, you can now reframe a photo after it’s been taken thanks to this feature. You can also expand your shots with the Extend Tool and remove objects with the Clean Up tool.</li><li><strong>Upgraded Image Playground</strong>: Image Playground can now generate higher-quality images. You can also modify and transform existing images by describing what you want.</li><li><strong>Siri in Notes</strong>: Siri AI can assist with your handwritten or typed notes in the Notes app by (for example) organizing bullet points into a formatted agenda or turning handwritten lectures into a detailed study guide.</li><li><strong>Safari updates</strong>: In Safari, tabs can now be automatically grouped by topic, making related pages easier to find. With Safari Notify Me, you can receive an alert if there’s a price change or a restock for an item you’ve been eyeing.</li><li><strong>Describe Shortcuts</strong>: Instead of manually building complex workflows, you can now describe what you need, and Shortcuts connects actions across multiple apps to make it happen. This is useful if you want to set specific routines, such as launching a specific app when you connect a peripheral.</li></ul><h3 class="article-body__section" id="section-ipados-27-review-verdict"><span>iPadOS 27 review: Verdict</span></h3><p>I use an iPad Pro every single day and have largely been pleased with iPadOS 27. Again, it won’t set the world on fire with revolutionary new features, but the upgraded Siri AI and deeper Apple Intelligence integrations help make iPads that support the update more useful. This is especially true if you use Apple’s own apps often.</p><p>As I said in my macOS Golden Gate review, iPadOS 27 feels like a holding-pattern update for whatever big OS refresh the folks in Cupertino are cooking. But there’s also nothing wrong with not fixing what isn’t broken, so it’s fine that this isn’t a huge update. If you own a compatible iPad, you should update as soon as you can to test the new features yourself!</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ iPadOS 27: How to download it right now ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Apple's big week of operating system updates is finally here with the new <a href="https://www.tomsguide.com/computing/vr-ar/ipados-27-everything-coming-to-the-apples-beloved-tablets">iPadOS 27</a>. This year's update isn't groundbreaking; instead, it focuses on Apple Intelligence, which should make for a more personal, customized experience.</p><p>As with <a href="https://www.tomsguide.com/phones/iphones/ios-27-public-beta-is-now-live-9-features-you-need-to-try-first">iOS 27</a> and <a href="https://www.tomsguide.com/computing/macos/macos-27">macOS Golden Gate</a>, the main attraction is the reinvented Siri, which finally lives up to its potential. <a href="https://www.tomsguide.com/ai/apple-finally-fixed-siri-heres-all-the-features-for-the-new-siri-ai-announced-at-wwdc">Siri AI</a>, as it’s now called, is context-aware and understands what’s on your screen. Because it’s built into the OS, it can directly control and manage apps. It also adds new child safety features, improved readability for Liquid Glass, new photo-editing tools, and more.</p><p>Here’s how to download iPadOS 27.</p><h2 id="how-to-download-ipados-27">How to download iPadOS 27 </h2><p>As always, before you install a major update like iPadOS 27, back up your iPad in case anything goes wrong and you need to return to <a href="https://www.tomsguide.com/computing/ipads/apple-ipados-26-review">iPadOS 26</a>.</p><p>Not every iPad will be compatible with the new operating system, but if your tablet is, the upgrade is free.</p><p>Here is the full list of iPads that are compatible with iPadOS 27:</p><ul><li><strong>iPad Pro (M4 and later)</strong></li><li><strong>iPad Pro 12.9‑inch (4th generation and later)</strong></li><li><strong>iPad Pro 11‑inch (2nd generation and later)</strong></li><li><strong>iPad Air 13-inch (M2 and later)</strong></li><li><strong>iPad Air 11-inch (M2, M3, and M4)</strong></li><li><strong>iPad Air 11-inch (4th generation and later)</strong></li><li><strong>iPad (A16)</strong></li><li><strong>iPad (9th generation and later)</strong></li><li><strong>iPad mini (A17 Pro)</strong></li><li><strong>iPad mini (6th generation)</strong></li></ul><section class="howto-block">                    <h3>1. Check for software updates</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/wEZBK5bWqaVzSccB3yLyGo.png"                                        alt="iPadOS 27"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/wEZBK5bWqaVzSccB3yLyGo.png"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Apple)</div></figure>                    <p><p><strong>Launch the Settings app and tap General</strong>, followed by <strong>Software Update</strong>.</p></p>                </section><section class="howto-block">                    <h3>2. Select iPadOS 27</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/kVpfn3XeSbaSkTmVLnYcZc.png"                                        alt="How to install iPadOS 27"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/kVpfn3XeSbaSkTmVLnYcZc.png"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>If you have the latest version of iPadOS, the new iPadOS 27 should already be waiting for you.</p></p>                </section><section class="howto-block">                    <h3>3. Download the update</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/gTXJnNVcr6jNZxT5jezgcc.png"                                        alt="How to install iPadOS 27"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/gTXJnNVcr6jNZxT5jezgcc.png"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>Select either <strong>Update Now</strong>, which starts downloading the update right away, or <strong>Update Tonight</strong>, which delays the download until later.</p><p>You'll be prompted to enter your passcode. If you've selected Update Now, the download will begin. Downloading can take a while, so make sure your iPad has enough power or is connected to a charger when downloading iPadOS 27.</p></p>                </section><section class="howto-block">                    <h3>4. Install the update</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/EgTG3Pg6UwcRM3dDF6PNSc.png"                                        alt="How to install iPadOS 27"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/EgTG3Pg6UwcRM3dDF6PNSc.png"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>Once you've downloaded iPadOS 27, you'll be prompted to either <strong>install it now or wait until later</strong>. After installation, your iPad will restart. After you enter your passcode, iPadOS 27 will be installed and ready for you to check out.</p><p>And that's how you download iPadOS 27! Enjoy.</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/computing/macos/i-just-downloaded-macos-27-public-beta-skip-the-ai-and-try-these-5-hidden-features-instead">I just downloaded macOS 27 public beta — skip Siri AI and try these 5 hidden features instead</a></li><li><a href="https://www.tomsguide.com/computing/laptops/haptic-vs-mechanical-trackpads-i-put-them-both-through-a-gauntlet-and-one-almost-made-me-throw-my-laptop-into-the-sun">Haptic vs. Mechanical trackpads: I put them both through a gauntlet, and one almost made me throw my laptop into the sun</a></li><li><a href="https://www.tomsguide.com/computing/monitors/exclusive-i-asked-lenovos-gm-to-predict-the-future-of-monitors-and-its-the-end-of-our-chaotic-cable-cluttered-desks-and-monitors-that-fry-your-retinas">Exclusive: I asked Lenovo’s GM to predict the future of monitors, and it's the end of our chaotic, cable-cluttered desks and monitors that fry your retinas</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/ipads/ipados-27-how-to-download-it-right-now</link>
                                                                            <description>
                            <![CDATA[ iPadOS 27 is now live! Here's how to download the new operating system for your iPad. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">aqie7J9wKjXLnFybmdUecS</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/7oXYaT7tBAEw2Bpdcym2Ab-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 14 Sep 2026 21:30:44 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[Computing Peripherals]]></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/7oXYaT7tBAEw2Bpdcym2Ab-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPadOS 27]]></media:description>                                                            <media:text><![CDATA[iPadOS 27]]></media:text>
                                <media:title type="plain"><![CDATA[iPadOS 27]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/7oXYaT7tBAEw2Bpdcym2Ab-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Apple's big week of operating system updates is finally here with the new <a href="https://www.tomsguide.com/computing/vr-ar/ipados-27-everything-coming-to-the-apples-beloved-tablets">iPadOS 27</a>. This year's update isn't groundbreaking; instead, it focuses on Apple Intelligence, which should make for a more personal, customized experience.</p><p>As with <a href="https://www.tomsguide.com/phones/iphones/ios-27-public-beta-is-now-live-9-features-you-need-to-try-first">iOS 27</a> and <a href="https://www.tomsguide.com/computing/macos/macos-27">macOS Golden Gate</a>, the main attraction is the reinvented Siri, which finally lives up to its potential. <a href="https://www.tomsguide.com/ai/apple-finally-fixed-siri-heres-all-the-features-for-the-new-siri-ai-announced-at-wwdc">Siri AI</a>, as it’s now called, is context-aware and understands what’s on your screen. Because it’s built into the OS, it can directly control and manage apps. It also adds new child safety features, improved readability for Liquid Glass, new photo-editing tools, and more.</p><p>Here’s how to download iPadOS 27.</p><h2 id="how-to-download-ipados-27">How to download iPadOS 27 </h2><p>As always, before you install a major update like iPadOS 27, back up your iPad in case anything goes wrong and you need to return to <a href="https://www.tomsguide.com/computing/ipads/apple-ipados-26-review">iPadOS 26</a>.</p><p>Not every iPad will be compatible with the new operating system, but if your tablet is, the upgrade is free.</p><p>Here is the full list of iPads that are compatible with iPadOS 27:</p><ul><li><strong>iPad Pro (M4 and later)</strong></li><li><strong>iPad Pro 12.9‑inch (4th generation and later)</strong></li><li><strong>iPad Pro 11‑inch (2nd generation and later)</strong></li><li><strong>iPad Air 13-inch (M2 and later)</strong></li><li><strong>iPad Air 11-inch (M2, M3, and M4)</strong></li><li><strong>iPad Air 11-inch (4th generation and later)</strong></li><li><strong>iPad (A16)</strong></li><li><strong>iPad (9th generation and later)</strong></li><li><strong>iPad mini (A17 Pro)</strong></li><li><strong>iPad mini (6th generation)</strong></li></ul><section class="howto-block">                    <h3>1. Check for software updates</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/wEZBK5bWqaVzSccB3yLyGo.png"                                        alt="iPadOS 27"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/wEZBK5bWqaVzSccB3yLyGo.png"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Apple)</div></figure>                    <p><p><strong>Launch the Settings app and tap General</strong>, followed by <strong>Software Update</strong>.</p></p>                </section><section class="howto-block">                    <h3>2. Select iPadOS 27</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/kVpfn3XeSbaSkTmVLnYcZc.png"                                        alt="How to install iPadOS 27"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/kVpfn3XeSbaSkTmVLnYcZc.png"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>If you have the latest version of iPadOS, the new iPadOS 27 should already be waiting for you.</p></p>                </section><section class="howto-block">                    <h3>3. Download the update</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/gTXJnNVcr6jNZxT5jezgcc.png"                                        alt="How to install iPadOS 27"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/gTXJnNVcr6jNZxT5jezgcc.png"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>Select either <strong>Update Now</strong>, which starts downloading the update right away, or <strong>Update Tonight</strong>, which delays the download until later.</p><p>You'll be prompted to enter your passcode. If you've selected Update Now, the download will begin. Downloading can take a while, so make sure your iPad has enough power or is connected to a charger when downloading iPadOS 27.</p></p>                </section><section class="howto-block">                    <h3>4. Install the update</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/EgTG3Pg6UwcRM3dDF6PNSc.png"                                        alt="How to install iPadOS 27"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/EgTG3Pg6UwcRM3dDF6PNSc.png"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>Once you've downloaded iPadOS 27, you'll be prompted to either <strong>install it now or wait until later</strong>. After installation, your iPad will restart. After you enter your passcode, iPadOS 27 will be installed and ready for you to check out.</p><p>And that's how you download iPadOS 27! Enjoy.</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/computing/macos/i-just-downloaded-macos-27-public-beta-skip-the-ai-and-try-these-5-hidden-features-instead">I just downloaded macOS 27 public beta — skip Siri AI and try these 5 hidden features instead</a></li><li><a href="https://www.tomsguide.com/computing/laptops/haptic-vs-mechanical-trackpads-i-put-them-both-through-a-gauntlet-and-one-almost-made-me-throw-my-laptop-into-the-sun">Haptic vs. Mechanical trackpads: I put them both through a gauntlet, and one almost made me throw my laptop into the sun</a></li><li><a href="https://www.tomsguide.com/computing/monitors/exclusive-i-asked-lenovos-gm-to-predict-the-future-of-monitors-and-its-the-end-of-our-chaotic-cable-cluttered-desks-and-monitors-that-fry-your-retinas">Exclusive: I asked Lenovo’s GM to predict the future of monitors, and it's the end of our chaotic, cable-cluttered desks and monitors that fry your retinas</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 7 Apple products expected to be announced in October — touchscreen MacBook Ultra, HomePad and more ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Apple's major "Surprise and Shine" event is behind us 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>, Apple's first foldable, is finally official. But there were some omissions based on the rumors, including a lack of smart home devices. </p><p>Those devices could still be on the way. Apple typically announces new MacBooks in October, and we could see some other products then as well. Here are the seven new Apple products that we could see next month.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XYkKoW"></div>                            </div>                            <script src="https://kwizly.com/embed/XYkKoW.js" async></script><h2 id="touchscreen-macbook-ultra-with-oled">Touchscreen MacBook Ultra with 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="QPcja3jFKABn8AV7SjDfvd" name="MacBook Pro M5 Pro edit 5 final" alt="MacBook Pro M5" src="https://cdn.mos.cms.futurecdn.net/QPcja3jFKABn8AV7SjDfvd-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Apple has already released a surprising number of Mac laptops and desktops this year. We had the <a href="https://www.tomsguide.com/computing/macbooks/apple-macbook-neo-review">MacBook Neo</a>, <a href="https://www.tomsguide.com/computing/macbooks/macbook-air-m5-review">M5 MacBook Air</a>, and M5 Pro and M5 Max MacBook Pros way back in the spring, plus late <a href="https://www.tomsguide.com/computing/apple-desktops/apple-is-turbocharging-the-mac-mini-with-its-new-m6-chip-but-the-model-with-an-m5-pro-is-actually-faster">refreshes of the Mac mini </a>and <a href="https://www.tomsguide.com/computing/apple-desktops/apple-just-announced-the-new-mac-studio-with-m5-ultra-and-it-will-be-a-local-ai-powerhouse">Mac Studio</a>.</p><p>Next month we're expecting an M6 version of the iMac, which also might get some new colorways, and an M6 MacBook Pro. </p><p>But the headliner should be a new <a href="https://www.tomsguide.com/computing/laptops/macbook-ultra-everything-we-know-so-far">MacBook Pro (or Ultra)</a>. The big change here should be a new OLED touchscreen display, which would make it the first OLED MacBook.</p><p>OLED panels are thinner, so the Ultra should be both slimmer and lighter in both 14- and 16-inch versions. It could be powered by the as-yet-unannounced M6 Pro and M6 Max chipsets. This does mean that we might not see the Ultra until early 2027, as Apple has pushed announcing those chips into the first half of the year.</p><p>Unfortunately, all these new features and higher-tier silicon mean that the Ultra could have a starting price around $2,499 for the 14-inch model, up from $2,199 for the current M5 Pro models.</p><h2 id="ipad-mini-with-oled">iPad mini with 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="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>The iPad Pro has had an OLED display since 2024, but we could finally see an <a href="https://www.tomsguide.com/computing/ipads/first-oled-ipad-mini-tipped-for-october-launch-heres-why-im-excited-and-worried">iPad mini with OLED</a> this October. Coincidentally, the mini hasn't received an update since October 2024, when the <a href="https://www.tomsguide.com/tablets/ipads/ipad-mini-7-review">iPad mini 7 </a>was released.</p><p>It will likely get a faster chip, probably the A19, if not the new A20, so it can run Apple Intelligence, especially the new Siri AI. It's not clear from rumors if any other design changes will be made. However, it might be thinner and lighter since the OLED panel is thinner.</p><p>We should also see an updated entry-level iPad. As far as we're aware the only update here would be new chips.</p><h2 id="smart-home-devices">Smart Home Devices</h2><p>We warned before the iPhone event that rumors about Apple's smart home options need to be taken with a grain of salt. For years, leaks and rumor mongers have suggested that Apple is planning to introduce a suite of smart home devices, including a revamped HomePod and an AI-powered Apple TV 4K set-top box.</p><p>Rumors suggested that Apple would announce these devices during the iPhone event, which obviously did not come to fruition.</p><p>Apple seems to have finally figured out <a href="https://www.tomsguide.com/phones/iphones/i-spent-a-week-with-siri-ai-here-are-my-honest-pros-and-cons">Siri AI</a> with <a href="https://www.tomsguide.com/phones/iphones/ios-27-public-beta-hands-on-preview-the-new-siri-and-apple-intelligence-features-completely-changed-how-i-use-my-iphone">iOS 27</a>. If it releases and works as pitched, we could finally start seeing Apple Home.</p><h3 id="homepod-home-hub">HomePod Home hub</h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3000px;"><p class="vanilla-image-block" style="padding-top:50.03%;"><img id="6cHdWWcJ7vz4iYUqsWBji4" name="Apple 2026 C HomePad Touch" alt="A rendering of an Apple HomePod with iPad-style touchscreen" src="https://cdn.mos.cms.futurecdn.net/6cHdWWcJ7vz4iYUqsWBji4-1920-80.jpg" mos="" align="middle" fullscreen="" width="3000" height="1501" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide/Apple)</span></figcaption></figure><p>Previously, Bloomberg's Mark Gurman, long a reporter of the rumored HomePod updates, <a href="https://www.bloomberg.com/news/newsletters/2026-08-09/apple-explores-apple-watch-shake-up-company-prepares-for-september-iphone-event" target="_blank">believed </a>that a new <a href="https://www.tomsguide.com/reviews/apple-homepod-mini">HomePod mini</a> could launch with the iPhones alongside the rumored HomePod Home hub. </p><p>However, right before the iPhone event, <a href="https://x.com/markgurman/status/2097687667471466751" target="_blank">Gurman cheekily tweeted</a>, "If you don't see the Apple TV, HomePod mini, home display and touch MacBook today, don't worry. It's only September."</p><p>Several different iterations of this device have been rumored, including one with a <a href="https://www.tomsguide.com/home/smart-home/apples-next-big-thing-could-be-a-dollar1000-home-robot-ipad-combo">$1,000 robot arm</a>. The most common version involves a <a href="https://www.tomsguide.com/home/smart-home/apple-tipped-to-launch-ai-wall-tablet-to-control-your-home-in-march-2025-everything-we-know-so-far">wall-mounted touchpad</a> or a HomePod speaker with a touch display about the size of an iPad mini. </p><p>This device would have a FaceTime camera for video calls and presence sensors to initiate smart home routines. </p><h3 id="homepod-mini-2">HomePod mini 2</h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="vBASuHrx9nHrVPyhDjThYN" name="apple-homepod-mini-midnight.jpg" alt="Apple HomePod mini in midnight with an iPhone" src="https://cdn.mos.cms.futurecdn.net/vBASuHrx9nHrVPyhDjThYN-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>A  <a href="https://www.tomsguide.com/home/smart-home/new-apple-tv-and-homepod-mini-reportedly-launching-in-2025-with-apple-networking-chip">new HomePod mini</a> might also debut, but it might not be as big of an upgrade as the Hub. Most rumors suggest that it will feature a new chip and audio improvements. It will probably get new colors.</p><p>The HomePod mini 2 has been on our <a href="https://www.tomsguide.com/news/hoping-for-a-homepod-mini-2-to-go-with-the-new-homepod-dont-hold-your-breath">rumor radar since at least 2023</a>. The current version debuted in 2020, and like the next device, is long overdue for an update.</p><h3 id="apple-tv-4k-2026">Apple TV 4K 2026</h3><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="35tUhk2U4oNYnKewrYtsxJ" name="apple tv vpn.jpg" alt="Apple TV" src="https://cdn.mos.cms.futurecdn.net/35tUhk2U4oNYnKewrYtsxJ-1920-80.jpg" 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: Lebedev Yury/Shutterstock)</span></figcaption></figure><p>Like the HomePod series, Apple hasn't released a new version of the <a href="https://www.tomsguide.com/reviews/apple-tv-4k-2022">Apple TV 4K</a> since 2022. We're long overdue for an upgrade — even if it's only a more powerful chip for stronger performance. </p><p>Previously, it was suggested that a new Apple TV could feature <a href="https://www.tomsguide.com/entertainment/streaming-devices/new-apple-tv-4k-biggest-upgrades-just-leaked-ahead-of-launch">the A17 Pro chip</a>, but it's more likely it'll get the new A20 or, to save some money, last year's A19. The device should also get the <a href="https://www.tomsguide.com/phones/iphones/new-iphone-18-pro-chips-camera-upgrades-and-more-leaked-by-analyst-heres-what-we-know">rumored N2 chip </a>for better Wi-Fi and Bluetooth connectivity. </p><p>Outside of chips, the big upgrade would be Siri AI, which could let you connect the Apple TV as a hub for smart devices. One rumor suggested that Apple might release a <a href="https://www.bloomberg.com/news/newsletters/2024-04-07/apple-aapl-future-products-could-include-robots-and-smart-home-push-lupinmnahttps:/www.bloomberg.com/news/newsletters/2024-04-07/apple-aapl-future-products-could-include-robots-and-smart-home-push-lupinmna" target="_blank">set-top box with a camera,</a> which would allow for FaceTime calls and gesture-based controls.</p><p>However, a rumored refresh of the Apple TV has been making the rounds for multiple years now. I won't believe this one until it actually happens.</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/interview-apple-ceo-john-ternus-on-his-defining-moment-for-the-iphone-duo"><strong>I interviewed Apple CEO John Ternus on the making of the iPhone Duo — here's what made him say 'yes, that's it'</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/ai/apple-intelligence/people-are-freaking-out-about-the-new-always-listening-apple-watches-heres-what-apple-ceo-john-ternus-told-us"><strong>People are freaking out about the new 'always-listening' Apple Watches — here's what Apple CEO John Ternus told us</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/news/live/apple-event-live-foldable-iphone-iphone-18-pro-max-apple-watch-12-and-all-the-big-news"><strong>Apple Event recap — Hands-on with the iPhone Duo and all the big announcements</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/ipads/7-apple-products-expected-to-be-announced-in-october-touchscreen-macbook-ultra-homepad-and-more</link>
                                                                            <description>
                            <![CDATA[ From devices that were missing at the iPhone event to the normal releases of new MacBooks. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">XDSSh5HeF7oorNEPg8qU6d</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/e23qstJHdTZC8CzcxTVBhS-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 13 Sep 2026 10:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[MacBooks]]></category>
                                                    <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Apple TV]]></category>
                                                    <category><![CDATA[Smart Home]]></category>
                                                    <category><![CDATA[Computing Peripherals]]></category>
                                                    <category><![CDATA[Tablets]]></category>
                                                    <category><![CDATA[Laptops]]></category>
                                                    <category><![CDATA[Desktop Computers]]></category>
                                                    <category><![CDATA[Entertainment]]></category>
                                                    <category><![CDATA[Streaming]]></category>
                                                    <category><![CDATA[Home]]></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/e23qstJHdTZC8CzcxTVBhS-1280-80.jpg">
                                                            <media:credit><![CDATA[Getty Images]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[John Ternus at Apple event]]></media:description>                                                            <media:text><![CDATA[John Ternus at Apple event]]></media:text>
                                <media:title type="plain"><![CDATA[John Ternus at Apple event]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/e23qstJHdTZC8CzcxTVBhS-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Apple's major "Surprise and Shine" event is behind us 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>, Apple's first foldable, is finally official. But there were some omissions based on the rumors, including a lack of smart home devices. </p><p>Those devices could still be on the way. Apple typically announces new MacBooks in October, and we could see some other products then as well. Here are the seven new Apple products that we could see next month.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XYkKoW"></div>                            </div>                            <script src="https://kwizly.com/embed/XYkKoW.js" async></script><h2 id="touchscreen-macbook-ultra-with-oled">Touchscreen MacBook Ultra with 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="QPcja3jFKABn8AV7SjDfvd" name="MacBook Pro M5 Pro edit 5 final" alt="MacBook Pro M5" src="https://cdn.mos.cms.futurecdn.net/QPcja3jFKABn8AV7SjDfvd-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Apple has already released a surprising number of Mac laptops and desktops this year. We had the <a href="https://www.tomsguide.com/computing/macbooks/apple-macbook-neo-review">MacBook Neo</a>, <a href="https://www.tomsguide.com/computing/macbooks/macbook-air-m5-review">M5 MacBook Air</a>, and M5 Pro and M5 Max MacBook Pros way back in the spring, plus late <a href="https://www.tomsguide.com/computing/apple-desktops/apple-is-turbocharging-the-mac-mini-with-its-new-m6-chip-but-the-model-with-an-m5-pro-is-actually-faster">refreshes of the Mac mini </a>and <a href="https://www.tomsguide.com/computing/apple-desktops/apple-just-announced-the-new-mac-studio-with-m5-ultra-and-it-will-be-a-local-ai-powerhouse">Mac Studio</a>.</p><p>Next month we're expecting an M6 version of the iMac, which also might get some new colorways, and an M6 MacBook Pro. </p><p>But the headliner should be a new <a href="https://www.tomsguide.com/computing/laptops/macbook-ultra-everything-we-know-so-far">MacBook Pro (or Ultra)</a>. The big change here should be a new OLED touchscreen display, which would make it the first OLED MacBook.</p><p>OLED panels are thinner, so the Ultra should be both slimmer and lighter in both 14- and 16-inch versions. It could be powered by the as-yet-unannounced M6 Pro and M6 Max chipsets. This does mean that we might not see the Ultra until early 2027, as Apple has pushed announcing those chips into the first half of the year.</p><p>Unfortunately, all these new features and higher-tier silicon mean that the Ultra could have a starting price around $2,499 for the 14-inch model, up from $2,199 for the current M5 Pro models.</p><h2 id="ipad-mini-with-oled">iPad mini with 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="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>The iPad Pro has had an OLED display since 2024, but we could finally see an <a href="https://www.tomsguide.com/computing/ipads/first-oled-ipad-mini-tipped-for-october-launch-heres-why-im-excited-and-worried">iPad mini with OLED</a> this October. Coincidentally, the mini hasn't received an update since October 2024, when the <a href="https://www.tomsguide.com/tablets/ipads/ipad-mini-7-review">iPad mini 7 </a>was released.</p><p>It will likely get a faster chip, probably the A19, if not the new A20, so it can run Apple Intelligence, especially the new Siri AI. It's not clear from rumors if any other design changes will be made. However, it might be thinner and lighter since the OLED panel is thinner.</p><p>We should also see an updated entry-level iPad. As far as we're aware the only update here would be new chips.</p><h2 id="smart-home-devices">Smart Home Devices</h2><p>We warned before the iPhone event that rumors about Apple's smart home options need to be taken with a grain of salt. For years, leaks and rumor mongers have suggested that Apple is planning to introduce a suite of smart home devices, including a revamped HomePod and an AI-powered Apple TV 4K set-top box.</p><p>Rumors suggested that Apple would announce these devices during the iPhone event, which obviously did not come to fruition.</p><p>Apple seems to have finally figured out <a href="https://www.tomsguide.com/phones/iphones/i-spent-a-week-with-siri-ai-here-are-my-honest-pros-and-cons">Siri AI</a> with <a href="https://www.tomsguide.com/phones/iphones/ios-27-public-beta-hands-on-preview-the-new-siri-and-apple-intelligence-features-completely-changed-how-i-use-my-iphone">iOS 27</a>. If it releases and works as pitched, we could finally start seeing Apple Home.</p><h3 id="homepod-home-hub">HomePod Home hub</h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3000px;"><p class="vanilla-image-block" style="padding-top:50.03%;"><img id="6cHdWWcJ7vz4iYUqsWBji4" name="Apple 2026 C HomePad Touch" alt="A rendering of an Apple HomePod with iPad-style touchscreen" src="https://cdn.mos.cms.futurecdn.net/6cHdWWcJ7vz4iYUqsWBji4-1920-80.jpg" mos="" align="middle" fullscreen="" width="3000" height="1501" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide/Apple)</span></figcaption></figure><p>Previously, Bloomberg's Mark Gurman, long a reporter of the rumored HomePod updates, <a href="https://www.bloomberg.com/news/newsletters/2026-08-09/apple-explores-apple-watch-shake-up-company-prepares-for-september-iphone-event" target="_blank">believed </a>that a new <a href="https://www.tomsguide.com/reviews/apple-homepod-mini">HomePod mini</a> could launch with the iPhones alongside the rumored HomePod Home hub. </p><p>However, right before the iPhone event, <a href="https://x.com/markgurman/status/2097687667471466751" target="_blank">Gurman cheekily tweeted</a>, "If you don't see the Apple TV, HomePod mini, home display and touch MacBook today, don't worry. It's only September."</p><p>Several different iterations of this device have been rumored, including one with a <a href="https://www.tomsguide.com/home/smart-home/apples-next-big-thing-could-be-a-dollar1000-home-robot-ipad-combo">$1,000 robot arm</a>. The most common version involves a <a href="https://www.tomsguide.com/home/smart-home/apple-tipped-to-launch-ai-wall-tablet-to-control-your-home-in-march-2025-everything-we-know-so-far">wall-mounted touchpad</a> or a HomePod speaker with a touch display about the size of an iPad mini. </p><p>This device would have a FaceTime camera for video calls and presence sensors to initiate smart home routines. </p><h3 id="homepod-mini-2">HomePod mini 2</h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="vBASuHrx9nHrVPyhDjThYN" name="apple-homepod-mini-midnight.jpg" alt="Apple HomePod mini in midnight with an iPhone" src="https://cdn.mos.cms.futurecdn.net/vBASuHrx9nHrVPyhDjThYN-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>A  <a href="https://www.tomsguide.com/home/smart-home/new-apple-tv-and-homepod-mini-reportedly-launching-in-2025-with-apple-networking-chip">new HomePod mini</a> might also debut, but it might not be as big of an upgrade as the Hub. Most rumors suggest that it will feature a new chip and audio improvements. It will probably get new colors.</p><p>The HomePod mini 2 has been on our <a href="https://www.tomsguide.com/news/hoping-for-a-homepod-mini-2-to-go-with-the-new-homepod-dont-hold-your-breath">rumor radar since at least 2023</a>. The current version debuted in 2020, and like the next device, is long overdue for an update.</p><h3 id="apple-tv-4k-2026">Apple TV 4K 2026</h3><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="35tUhk2U4oNYnKewrYtsxJ" name="apple tv vpn.jpg" alt="Apple TV" src="https://cdn.mos.cms.futurecdn.net/35tUhk2U4oNYnKewrYtsxJ-1920-80.jpg" 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: Lebedev Yury/Shutterstock)</span></figcaption></figure><p>Like the HomePod series, Apple hasn't released a new version of the <a href="https://www.tomsguide.com/reviews/apple-tv-4k-2022">Apple TV 4K</a> since 2022. We're long overdue for an upgrade — even if it's only a more powerful chip for stronger performance. </p><p>Previously, it was suggested that a new Apple TV could feature <a href="https://www.tomsguide.com/entertainment/streaming-devices/new-apple-tv-4k-biggest-upgrades-just-leaked-ahead-of-launch">the A17 Pro chip</a>, but it's more likely it'll get the new A20 or, to save some money, last year's A19. The device should also get the <a href="https://www.tomsguide.com/phones/iphones/new-iphone-18-pro-chips-camera-upgrades-and-more-leaked-by-analyst-heres-what-we-know">rumored N2 chip </a>for better Wi-Fi and Bluetooth connectivity. </p><p>Outside of chips, the big upgrade would be Siri AI, which could let you connect the Apple TV as a hub for smart devices. One rumor suggested that Apple might release a <a href="https://www.bloomberg.com/news/newsletters/2024-04-07/apple-aapl-future-products-could-include-robots-and-smart-home-push-lupinmnahttps:/www.bloomberg.com/news/newsletters/2024-04-07/apple-aapl-future-products-could-include-robots-and-smart-home-push-lupinmna" target="_blank">set-top box with a camera,</a> which would allow for FaceTime calls and gesture-based controls.</p><p>However, a rumored refresh of the Apple TV has been making the rounds for multiple years now. I won't believe this one until it actually happens.</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/interview-apple-ceo-john-ternus-on-his-defining-moment-for-the-iphone-duo"><strong>I interviewed Apple CEO John Ternus on the making of the iPhone Duo — here's what made him say 'yes, that's it'</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/ai/apple-intelligence/people-are-freaking-out-about-the-new-always-listening-apple-watches-heres-what-apple-ceo-john-ternus-told-us"><strong>People are freaking out about the new 'always-listening' Apple Watches — here's what Apple CEO John Ternus told us</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/news/live/apple-event-live-foldable-iphone-iphone-18-pro-max-apple-watch-12-and-all-the-big-news"><strong>Apple Event recap — Hands-on with the iPhone Duo and all the big announcements</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I test tablets for a living — here are the pros and cons of using them for school ]]></title>
                                                                                                <dc:content><![CDATA[ <p>If you’re reading this, then you’re considering whether it’s beneficial to get your kid a tablet for schoolwork. That’s reasonable. The <a href="https://www.tomsguide.com/best-picks/best-tablet">best tablets</a> are lighter than most laptops, can cost less than many Chromebooks, and students already know how to use them. The appeal is pretty evident.</p><p>That said, a tablet isn’t just a small computer. It’s a distinct device with its own strengths and limitations for schoolwork. If you’re deciding whether a tablet makes sense for your child this year, you need a clear picture of both sides before you hit buy.</p><p>I’ve reviewed dozens of tablets over the years and have spent a lot of time testing whether certain models (like the <a href="https://www.tomsguide.com/computing/i-switched-from-my-laptop-to-the-ipad-pro-m5-and-its-now-a-tablet-i-can-finally-work-on">iPad Pro</a>) can realistically replace a laptop. The answers aren’t always cut and dry, but I have a solid sense of when a tablet works for schoolwork and when it falls short.</p><p>Here’s a breakdown of the pros and cons of using a tablet for school to help you make the right call.</p><h2 id="tablets-for-school-the-pros">Tablets for school: The pros</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="P2onUe3S65XPF97vszhBNX" name="iPad Air M4 held in portrait mode" alt="iPad Air M4 held in portrait mode" src="https://cdn.mos.cms.futurecdn.net/P2onUe3S65XPF97vszhBNX-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>A tablet’s form factor is hard to beat. Most students can toss an iPad or mid-range Android tablet into a backpack without thinking twice because they’re so thin and light. Better options last a full school day on a charge, and they’re ready the second you take them out of rest mode or open the case. That lower friction is especially helpful for younger students.</p><p>Tablets are also strong for more visual, interactive schoolwork. Reading digital textbooks, annotating PDFs with a stylus, watching short instructional videos, and using educational apps all feel natural on a tablet. Many schools already deliver content through Google Classroom or similar platforms that work cleanly with tablets. If your kid needs to sketch, snap photos of notes, or complete interactive worksheets, a tablet with a decent stylus can feel more intuitive than a traditional laptop.</p><p>Cost is another factor. A solid mid-range tablet paired with a keyboard case can sometimes be cheaper than a budget laptop, and there’s generally less to break or keep updated. For a student who mainly needs a device for reading, research, light writing, and school apps, a tablet can cover a lot of ground without the extra complexity of a full computer.</p><p>If you've already decided to get a tablet for back-to-school, here are some options I recommend.</p><div class="product"><a data-dimension112="ceff20e6-9d9e-11f1-89b3-9571a5772d43" data-action="Deal Block" data-label="11" iPad (WiFi/128GB)" data-dimension48="11" iPad (WiFi/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="ceff20e6-9d9e-11f1-89b3-9571a5772d43" data-action="Deal Block" data-label='11" iPad (WiFi/128GB)' data-dimension48='11" iPad (WiFi/128GB)' data-dimension25="$399">11" iPad (WiFi/128GB): was $499 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.<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="ceff20e6-9d9e-11f1-89b3-9571a5772d43" data-action="Deal Block" data-label="11" iPad (WiFi/128GB)" data-dimension48="11" iPad (WiFi/128GB)" data-dimension25="$399">View Deal</a></p></div><div class="product"><a data-dimension112="ceff21b8-9d9e-11f1-ad8f-510af24ad226" data-action="Deal Block" data-label="Edge (for iPad 11)" data-dimension48="Edge (for iPad 11)" data-dimension25="$71" href="https://www.amazon.com/typecase-Edge-Keyboard-Case-iPad/dp/B0DL2V54T9?th=1" 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:97.00%;"><img id="3LoA6pCGdej2NiqF73RPh" name="typecase Edge for iPad 11" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/3LoA6pCGdej2NiqF73RPh-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="1455" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/typecase-Edge-Keyboard-Case-iPad/dp/B0DL2V54T9?th=1" target="_blank" rel="nofollow" data-dimension112="ceff21b8-9d9e-11f1-ad8f-510af24ad226" data-action="Deal Block" data-label="Edge (for iPad 11)" data-dimension48="Edge (for iPad 11)" data-dimension25="$71">Edge (for iPad 11): was $79 now $71</a></strong><br>The typecase Edge is a perfect partner for the entry-level iPad. Its floating magnetic stand holds the iPad above the keyboard for more comfortable typing, while its backlit keys let you work in the dark.<a class="view-deal button" href="https://www.amazon.com/typecase-Edge-Keyboard-Case-iPad/dp/B0DL2V54T9?th=1" target="_blank" rel="nofollow" data-dimension112="ceff21b8-9d9e-11f1-ad8f-510af24ad226" data-action="Deal Block" data-label="Edge (for iPad 11)" data-dimension48="Edge (for iPad 11)" data-dimension25="$71">View Deal</a></p></div><div class="product"><a data-dimension112="ceff226c-9d9e-11f1-8a6b-4df6e8529c28" data-action="Deal Block" data-label="11" iPad Air (WiFi/128GB)" data-dimension48="11" iPad Air (WiFi/128GB)" data-dimension25="$649" href="https://www.amazon.com/Apple-iPad-Air-11-inch-M4/dp/B0GQVBJT4J" 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/B0GQVBJT4J" target="_blank" rel="nofollow" data-dimension112="ceff226c-9d9e-11f1-8a6b-4df6e8529c28" data-action="Deal Block" data-label='11" iPad Air (WiFi/128GB)' data-dimension48='11" iPad Air (WiFi/128GB)' data-dimension25="$649">11" iPad Air (WiFi/128GB): was $749 now $649</a></strong><br>The 2026 iPad Air packs Apple's M4 processor, which Apple states is up to 30 percent faster than the 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, 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/B0GQVBJT4J" target="_blank" rel="nofollow" data-dimension112="ceff226c-9d9e-11f1-8a6b-4df6e8529c28" data-action="Deal Block" data-label="11" iPad Air (WiFi/128GB)" data-dimension48="11" iPad Air (WiFi/128GB)" data-dimension25="$649">View Deal</a></p></div><div class="product"><a data-dimension112="ceff232a-9d9e-11f1-bc78-79761be42074" data-action="Deal Block" data-label="ZAGG iPad cases/keyboards: up to 35% off @ Amazon" data-dimension48="ZAGG iPad cases/keyboards: up to 35% off @ Amazon" href="https://www.amazon.com/stores/page/95B57F20-ECDA-432D-9A36-8F6767ABF8F8" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1019px;"><p class="vanilla-image-block" style="padding-top:96.66%;"><img id="mnQ5ank7EYesxjauvV63vF" name="ZAGG Pro Keys Wireless Keyboard and Detachable Case.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/mnQ5ank7EYesxjauvV63vF-1920-80.jpg" mos="" align="middle" fullscreen="" width="1019" height="985" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>ZAGG iPad cases/keyboards: </strong><a href="https://www.amazon.com/stores/page/95B57F20-ECDA-432D-9A36-8F6767ABF8F8" target="_blank" rel="nofollow" data-dimension112="ceff232a-9d9e-11f1-bc78-79761be42074" data-action="Deal Block" data-label="ZAGG iPad cases/keyboards: up to 35% off @ Amazon" data-dimension48="ZAGG iPad cases/keyboards: up to 35% off @ Amazon" data-dimension25=""><strong>up to 35% off @ Amazon</strong></a><br>Amazon is taking up to 35% off select ZAGG iPad cases and accessories. After discount, prices start as low as $47. It's one of the best iPad deals we've seen on these accessories. <a class="view-deal button" href="https://www.amazon.com/stores/page/95B57F20-ECDA-432D-9A36-8F6767ABF8F8" target="_blank" rel="nofollow" data-dimension112="ceff232a-9d9e-11f1-bc78-79761be42074" data-action="Deal Block" data-label="ZAGG iPad cases/keyboards: up to 35% off @ Amazon" data-dimension48="ZAGG iPad cases/keyboards: up to 35% off @ Amazon" data-dimension25="">View Deal</a></p></div><h2 id="tablets-for-school-the-cons">Tablets for school: The cons</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="2DjYj7Z2JwEmzSkBiDfqkB" name="iPad Air M4" alt="iPad Air M4 being held in landscape mode" src="https://cdn.mos.cms.futurecdn.net/2DjYj7Z2JwEmzSkBiDfqkB-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>While tablets can work well for school, they come with some serious drawbacks.</p><p>Serious tasks like writing longer papers, building spreadsheets, coding, or juggling multiple apps are still noticeably harder on a tablet than on a laptop. Even with a keyboard attached, multitasking and file management often feel limited. If your child’s schoolwork involves a lot of writing or switching between documents, a tablet can slow them down.</p><p>You’ll also need to account for the cost of peripherals if you want real school use out of the tablet. Something like <a href="https://www.tomsguide.com/reviews/ipad-pro-magic-keyboard">Apple’s Magic Keyboard</a> makes typing far more comfortable than the on-screen keyboard, and keeps an iPad protected from accidental drops. A stylus isn’t always essential, but it can be if your child takes notes by hand or does any drawing. The cost of these peripherals can erase the tablet’s initial price advantage.</p><p>Not every school’s software or testing platform plays nicely with tablets, either. Some require specific browsers or extensions that work more reliably on a laptop. If your kid’s school leans heavily on certain tools, a tablet can create more headaches than it solves.</p><p>Finally, distraction is a bigger issue on a tablet. It’s much easier for a student to fire up a game, fall into YouTube, or get lost on social media instead of finishing homework or getting to bed on time. Those same temptations exist on laptops, but the tablet form factor makes them easier to slip into.</p><p>If these cons are a deal-breaker, here are two excellent and budget-friendly laptops I suggest you get for your kid instead.</p><div class="product"><a data-dimension112="1b1b1a0c-9d9f-11f1-8c07-b18868904660" data-action="Deal Block" data-label="XPS 13 (2026)" data-dimension48="XPS 13 (2026)" data-dimension25="$699" href="https://www.dell.com/en-us/shop/dell-laptops/new-xps-13-laptop/spd/xps13dx13260laptop" 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:100.00%;"><img id="yVpTsWNESwCtxxLQmbPTgh" name="Dell XPS 13 (2026) deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yVpTsWNESwCtxxLQmbPTgh-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.dell.com/en-us/shop/dell-laptops/new-xps-13-laptop/spd/xps13dx13260laptop" target="_blank" rel="nofollow" data-dimension112="1b1b1a0c-9d9f-11f1-8c07-b18868904660" data-action="Deal Block" data-label="XPS 13 (2026)" data-dimension48="XPS 13 (2026)" data-dimension25="$699">XPS 13 (2026): $699</a></strong><br>The new Dell XPS 13 is here to help you beat the RAMageddon blues. This model has a 13.4-inch InfinityEdge 2.5K touch display, an Intel Core Series 3 "Wildcat Lake" CPU, 8GB of RAM, and 512GB of SSD storage. It's wrapped in an aluminum design that's just 0.5 inches thick and weighs 2.2 pounds.<a class="view-deal button" href="https://www.dell.com/en-us/shop/dell-laptops/new-xps-13-laptop/spd/xps13dx13260laptop" target="_blank" rel="nofollow" data-dimension112="1b1b1a0c-9d9f-11f1-8c07-b18868904660" data-action="Deal Block" data-label="XPS 13 (2026)" data-dimension48="XPS 13 (2026)" data-dimension25="$699">View Deal</a></p></div><div class="product"><a data-dimension112="1b1b1a84-9d9f-11f1-9105-01f7f7962f19" data-action="Deal Block" data-label="13" MacBook Neo" data-dimension48="13" MacBook Neo" data-dimension25="$699" href="https://www.apple.com/shop/buy-mac/macbook-air/13-inch" 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.apple.com/shop/buy-mac/macbook-air/13-inch" target="_blank" rel="nofollow" data-dimension112="1b1b1a84-9d9f-11f1-9105-01f7f7962f19" data-action="Deal Block" data-label='13" MacBook Neo' data-dimension48='13" MacBook Neo' data-dimension25="$699">13" MacBook Neo: $699</a></strong><br>The MacBook Neo is Apple's most affordable Mac. The $699 laptop sports a 13-inch Liquid Retina (2408 x 1506) display, an A18 Pro chipset, 8GB of RAM, a 256GB SSD, and a 1080p FaceTime HD camera. There's also the option to add Touch ID and a 512GB SSD for a total price of $799. The 2.7-lb. laptop is available in Indigo, Blush, Citrus, and Silver.<a class="view-deal button" href="https://www.apple.com/shop/buy-mac/macbook-air/13-inch" target="_blank" rel="nofollow" data-dimension112="1b1b1a84-9d9f-11f1-9105-01f7f7962f19" data-action="Deal Block" data-label="13" MacBook Neo" data-dimension48="13" MacBook Neo" data-dimension25="$699">View Deal</a></p></div><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XmxNPO"></div>                            </div>                            <script src="https://kwizly.com/embed/XmxNPO.js" async></script><h2 id="bottom-line">Bottom line</h2><p>A tablet can be a fantastic tool for schoolwork, but only if it matches how your kid works and what their school expects.</p><p>For younger children focused on reading, interactive lessons, and lighter assignments, a tablet is often the better fit. For older students handling longer writing, research projects, or heavier software, a proper laptop is usually the smarter daily driver. Solid options in that category that I recommend include the <a href="https://www.tomsguide.com/computing/laptops/dell-xps-13-2026-review">Dell XPS 13</a> or <a href="https://www.tomsguide.com/computing/macbooks/apple-macbook-neo-review">MacBook Neo</a>, both of which currently start at $699.</p><p>If you decide to go the tablet route, pair it with a good keyboard case, enable strong parental controls, and set clear rules about when it’s a school device versus a fun distraction. This keeps the advantages while limiting the downsides.</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/computing/laptops/dell-xps-13-vs-macbook-neo-which-usd699-laptop-is-right-for-you"><strong>Dell XPS 13 vs. MacBook Neo: Which $699 laptop is right for you?</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/computing/laptops/im-a-laptop-reviewer-12-essential-back-to-school-laptop-accessories-under-usd50-i-recommend"><strong>12 essential back-to-school laptop accessories under $50 I recommend</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/computing/laptops/i-tested-the-new-dell-xps-13-for-two-weeks-heres-3-things-i-love-and-1-i-hate"><strong>I tested the new Dell XPS 13 for two weeks — here's 3 things I love (and 1 I hate)</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/tablets/i-test-tablets-for-a-living-here-are-the-pros-and-cons-of-using-them-for-school</link>
                                                                            <description>
                            <![CDATA[ Wondering whether a tablet is right for your kid’s schoolwork? Here’s a breakdown of the advantages, drawbacks, and what parents should consider. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">qhTvXCVzG6KJ7jsCUHjEoH</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/7xaBCkUaZ6h5SShfW5XoBK-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 22 Aug 2026 09:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Tablets]]></category>
                                                    <category><![CDATA[Computing Peripherals]]></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/7xaBCkUaZ6h5SShfW5XoBK-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPad Air M4 with magic keyboard folio]]></media:description>                                                            <media:text><![CDATA[iPad Air M4 with magic keyboard folio]]></media:text>
                                <media:title type="plain"><![CDATA[iPad Air M4 with magic keyboard folio]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/7xaBCkUaZ6h5SShfW5XoBK-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>If you’re reading this, then you’re considering whether it’s beneficial to get your kid a tablet for schoolwork. That’s reasonable. The <a href="https://www.tomsguide.com/best-picks/best-tablet">best tablets</a> are lighter than most laptops, can cost less than many Chromebooks, and students already know how to use them. The appeal is pretty evident.</p><p>That said, a tablet isn’t just a small computer. It’s a distinct device with its own strengths and limitations for schoolwork. If you’re deciding whether a tablet makes sense for your child this year, you need a clear picture of both sides before you hit buy.</p><p>I’ve reviewed dozens of tablets over the years and have spent a lot of time testing whether certain models (like the <a href="https://www.tomsguide.com/computing/i-switched-from-my-laptop-to-the-ipad-pro-m5-and-its-now-a-tablet-i-can-finally-work-on">iPad Pro</a>) can realistically replace a laptop. The answers aren’t always cut and dry, but I have a solid sense of when a tablet works for schoolwork and when it falls short.</p><p>Here’s a breakdown of the pros and cons of using a tablet for school to help you make the right call.</p><h2 id="tablets-for-school-the-pros">Tablets for school: The pros</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="P2onUe3S65XPF97vszhBNX" name="iPad Air M4 held in portrait mode" alt="iPad Air M4 held in portrait mode" src="https://cdn.mos.cms.futurecdn.net/P2onUe3S65XPF97vszhBNX-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>A tablet’s form factor is hard to beat. Most students can toss an iPad or mid-range Android tablet into a backpack without thinking twice because they’re so thin and light. Better options last a full school day on a charge, and they’re ready the second you take them out of rest mode or open the case. That lower friction is especially helpful for younger students.</p><p>Tablets are also strong for more visual, interactive schoolwork. Reading digital textbooks, annotating PDFs with a stylus, watching short instructional videos, and using educational apps all feel natural on a tablet. Many schools already deliver content through Google Classroom or similar platforms that work cleanly with tablets. If your kid needs to sketch, snap photos of notes, or complete interactive worksheets, a tablet with a decent stylus can feel more intuitive than a traditional laptop.</p><p>Cost is another factor. A solid mid-range tablet paired with a keyboard case can sometimes be cheaper than a budget laptop, and there’s generally less to break or keep updated. For a student who mainly needs a device for reading, research, light writing, and school apps, a tablet can cover a lot of ground without the extra complexity of a full computer.</p><p>If you've already decided to get a tablet for back-to-school, here are some options I recommend.</p><div class="product"><a data-dimension112="ceff20e6-9d9e-11f1-89b3-9571a5772d43" data-action="Deal Block" data-label="11" iPad (WiFi/128GB)" data-dimension48="11" iPad (WiFi/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="ceff20e6-9d9e-11f1-89b3-9571a5772d43" data-action="Deal Block" data-label='11" iPad (WiFi/128GB)' data-dimension48='11" iPad (WiFi/128GB)' data-dimension25="$399">11" iPad (WiFi/128GB): was $499 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.<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="ceff20e6-9d9e-11f1-89b3-9571a5772d43" data-action="Deal Block" data-label="11" iPad (WiFi/128GB)" data-dimension48="11" iPad (WiFi/128GB)" data-dimension25="$399">View Deal</a></p></div><div class="product"><a data-dimension112="ceff21b8-9d9e-11f1-ad8f-510af24ad226" data-action="Deal Block" data-label="Edge (for iPad 11)" data-dimension48="Edge (for iPad 11)" data-dimension25="$71" href="https://www.amazon.com/typecase-Edge-Keyboard-Case-iPad/dp/B0DL2V54T9?th=1" 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:97.00%;"><img id="3LoA6pCGdej2NiqF73RPh" name="typecase Edge for iPad 11" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/3LoA6pCGdej2NiqF73RPh-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="1455" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/typecase-Edge-Keyboard-Case-iPad/dp/B0DL2V54T9?th=1" target="_blank" rel="nofollow" data-dimension112="ceff21b8-9d9e-11f1-ad8f-510af24ad226" data-action="Deal Block" data-label="Edge (for iPad 11)" data-dimension48="Edge (for iPad 11)" data-dimension25="$71">Edge (for iPad 11): was $79 now $71</a></strong><br>The typecase Edge is a perfect partner for the entry-level iPad. Its floating magnetic stand holds the iPad above the keyboard for more comfortable typing, while its backlit keys let you work in the dark.<a class="view-deal button" href="https://www.amazon.com/typecase-Edge-Keyboard-Case-iPad/dp/B0DL2V54T9?th=1" target="_blank" rel="nofollow" data-dimension112="ceff21b8-9d9e-11f1-ad8f-510af24ad226" data-action="Deal Block" data-label="Edge (for iPad 11)" data-dimension48="Edge (for iPad 11)" data-dimension25="$71">View Deal</a></p></div><div class="product"><a data-dimension112="ceff226c-9d9e-11f1-8a6b-4df6e8529c28" data-action="Deal Block" data-label="11" iPad Air (WiFi/128GB)" data-dimension48="11" iPad Air (WiFi/128GB)" data-dimension25="$649" href="https://www.amazon.com/Apple-iPad-Air-11-inch-M4/dp/B0GQVBJT4J" 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/B0GQVBJT4J" target="_blank" rel="nofollow" data-dimension112="ceff226c-9d9e-11f1-8a6b-4df6e8529c28" data-action="Deal Block" data-label='11" iPad Air (WiFi/128GB)' data-dimension48='11" iPad Air (WiFi/128GB)' data-dimension25="$649">11" iPad Air (WiFi/128GB): was $749 now $649</a></strong><br>The 2026 iPad Air packs Apple's M4 processor, which Apple states is up to 30 percent faster than the 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, 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/B0GQVBJT4J" target="_blank" rel="nofollow" data-dimension112="ceff226c-9d9e-11f1-8a6b-4df6e8529c28" data-action="Deal Block" data-label="11" iPad Air (WiFi/128GB)" data-dimension48="11" iPad Air (WiFi/128GB)" data-dimension25="$649">View Deal</a></p></div><div class="product"><a data-dimension112="ceff232a-9d9e-11f1-bc78-79761be42074" data-action="Deal Block" data-label="ZAGG iPad cases/keyboards: up to 35% off @ Amazon" data-dimension48="ZAGG iPad cases/keyboards: up to 35% off @ Amazon" href="https://www.amazon.com/stores/page/95B57F20-ECDA-432D-9A36-8F6767ABF8F8" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1019px;"><p class="vanilla-image-block" style="padding-top:96.66%;"><img id="mnQ5ank7EYesxjauvV63vF" name="ZAGG Pro Keys Wireless Keyboard and Detachable Case.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/mnQ5ank7EYesxjauvV63vF-1920-80.jpg" mos="" align="middle" fullscreen="" width="1019" height="985" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>ZAGG iPad cases/keyboards: </strong><a href="https://www.amazon.com/stores/page/95B57F20-ECDA-432D-9A36-8F6767ABF8F8" target="_blank" rel="nofollow" data-dimension112="ceff232a-9d9e-11f1-bc78-79761be42074" data-action="Deal Block" data-label="ZAGG iPad cases/keyboards: up to 35% off @ Amazon" data-dimension48="ZAGG iPad cases/keyboards: up to 35% off @ Amazon" data-dimension25=""><strong>up to 35% off @ Amazon</strong></a><br>Amazon is taking up to 35% off select ZAGG iPad cases and accessories. After discount, prices start as low as $47. It's one of the best iPad deals we've seen on these accessories. <a class="view-deal button" href="https://www.amazon.com/stores/page/95B57F20-ECDA-432D-9A36-8F6767ABF8F8" target="_blank" rel="nofollow" data-dimension112="ceff232a-9d9e-11f1-bc78-79761be42074" data-action="Deal Block" data-label="ZAGG iPad cases/keyboards: up to 35% off @ Amazon" data-dimension48="ZAGG iPad cases/keyboards: up to 35% off @ Amazon" data-dimension25="">View Deal</a></p></div><h2 id="tablets-for-school-the-cons">Tablets for school: The cons</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="2DjYj7Z2JwEmzSkBiDfqkB" name="iPad Air M4" alt="iPad Air M4 being held in landscape mode" src="https://cdn.mos.cms.futurecdn.net/2DjYj7Z2JwEmzSkBiDfqkB-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>While tablets can work well for school, they come with some serious drawbacks.</p><p>Serious tasks like writing longer papers, building spreadsheets, coding, or juggling multiple apps are still noticeably harder on a tablet than on a laptop. Even with a keyboard attached, multitasking and file management often feel limited. If your child’s schoolwork involves a lot of writing or switching between documents, a tablet can slow them down.</p><p>You’ll also need to account for the cost of peripherals if you want real school use out of the tablet. Something like <a href="https://www.tomsguide.com/reviews/ipad-pro-magic-keyboard">Apple’s Magic Keyboard</a> makes typing far more comfortable than the on-screen keyboard, and keeps an iPad protected from accidental drops. A stylus isn’t always essential, but it can be if your child takes notes by hand or does any drawing. The cost of these peripherals can erase the tablet’s initial price advantage.</p><p>Not every school’s software or testing platform plays nicely with tablets, either. Some require specific browsers or extensions that work more reliably on a laptop. If your kid’s school leans heavily on certain tools, a tablet can create more headaches than it solves.</p><p>Finally, distraction is a bigger issue on a tablet. It’s much easier for a student to fire up a game, fall into YouTube, or get lost on social media instead of finishing homework or getting to bed on time. Those same temptations exist on laptops, but the tablet form factor makes them easier to slip into.</p><p>If these cons are a deal-breaker, here are two excellent and budget-friendly laptops I suggest you get for your kid instead.</p><div class="product"><a data-dimension112="1b1b1a0c-9d9f-11f1-8c07-b18868904660" data-action="Deal Block" data-label="XPS 13 (2026)" data-dimension48="XPS 13 (2026)" data-dimension25="$699" href="https://www.dell.com/en-us/shop/dell-laptops/new-xps-13-laptop/spd/xps13dx13260laptop" 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:100.00%;"><img id="yVpTsWNESwCtxxLQmbPTgh" name="Dell XPS 13 (2026) deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yVpTsWNESwCtxxLQmbPTgh-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.dell.com/en-us/shop/dell-laptops/new-xps-13-laptop/spd/xps13dx13260laptop" target="_blank" rel="nofollow" data-dimension112="1b1b1a0c-9d9f-11f1-8c07-b18868904660" data-action="Deal Block" data-label="XPS 13 (2026)" data-dimension48="XPS 13 (2026)" data-dimension25="$699">XPS 13 (2026): $699</a></strong><br>The new Dell XPS 13 is here to help you beat the RAMageddon blues. This model has a 13.4-inch InfinityEdge 2.5K touch display, an Intel Core Series 3 "Wildcat Lake" CPU, 8GB of RAM, and 512GB of SSD storage. It's wrapped in an aluminum design that's just 0.5 inches thick and weighs 2.2 pounds.<a class="view-deal button" href="https://www.dell.com/en-us/shop/dell-laptops/new-xps-13-laptop/spd/xps13dx13260laptop" target="_blank" rel="nofollow" data-dimension112="1b1b1a0c-9d9f-11f1-8c07-b18868904660" data-action="Deal Block" data-label="XPS 13 (2026)" data-dimension48="XPS 13 (2026)" data-dimension25="$699">View Deal</a></p></div><div class="product"><a data-dimension112="1b1b1a84-9d9f-11f1-9105-01f7f7962f19" data-action="Deal Block" data-label="13" MacBook Neo" data-dimension48="13" MacBook Neo" data-dimension25="$699" href="https://www.apple.com/shop/buy-mac/macbook-air/13-inch" 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.apple.com/shop/buy-mac/macbook-air/13-inch" target="_blank" rel="nofollow" data-dimension112="1b1b1a84-9d9f-11f1-9105-01f7f7962f19" data-action="Deal Block" data-label='13" MacBook Neo' data-dimension48='13" MacBook Neo' data-dimension25="$699">13" MacBook Neo: $699</a></strong><br>The MacBook Neo is Apple's most affordable Mac. The $699 laptop sports a 13-inch Liquid Retina (2408 x 1506) display, an A18 Pro chipset, 8GB of RAM, a 256GB SSD, and a 1080p FaceTime HD camera. There's also the option to add Touch ID and a 512GB SSD for a total price of $799. The 2.7-lb. laptop is available in Indigo, Blush, Citrus, and Silver.<a class="view-deal button" href="https://www.apple.com/shop/buy-mac/macbook-air/13-inch" target="_blank" rel="nofollow" data-dimension112="1b1b1a84-9d9f-11f1-9105-01f7f7962f19" data-action="Deal Block" data-label="13" MacBook Neo" data-dimension48="13" MacBook Neo" data-dimension25="$699">View Deal</a></p></div><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XmxNPO"></div>                            </div>                            <script src="https://kwizly.com/embed/XmxNPO.js" async></script><h2 id="bottom-line">Bottom line</h2><p>A tablet can be a fantastic tool for schoolwork, but only if it matches how your kid works and what their school expects.</p><p>For younger children focused on reading, interactive lessons, and lighter assignments, a tablet is often the better fit. For older students handling longer writing, research projects, or heavier software, a proper laptop is usually the smarter daily driver. Solid options in that category that I recommend include the <a href="https://www.tomsguide.com/computing/laptops/dell-xps-13-2026-review">Dell XPS 13</a> or <a href="https://www.tomsguide.com/computing/macbooks/apple-macbook-neo-review">MacBook Neo</a>, both of which currently start at $699.</p><p>If you decide to go the tablet route, pair it with a good keyboard case, enable strong parental controls, and set clear rules about when it’s a school device versus a fun distraction. This keeps the advantages while limiting the downsides.</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/computing/laptops/dell-xps-13-vs-macbook-neo-which-usd699-laptop-is-right-for-you"><strong>Dell XPS 13 vs. MacBook Neo: Which $699 laptop is right for you?</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/computing/laptops/im-a-laptop-reviewer-12-essential-back-to-school-laptop-accessories-under-usd50-i-recommend"><strong>12 essential back-to-school laptop accessories under $50 I recommend</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/computing/laptops/i-tested-the-new-dell-xps-13-for-two-weeks-heres-3-things-i-love-and-1-i-hate"><strong>I tested the new Dell XPS 13 for two weeks — here's 3 things I love (and 1 I hate)</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple may have accidentally teased its own roadmap with 14 unreleased devices revealed — but this long overdue update has me most excited ]]></title>
                                                                                                <dc:content><![CDATA[ <p>This week Apple released <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-18-event-all-the-new-products-expected-to-launch-in-september">macOS version 26.7</a>, and apparently hidden in the code are references to multiple unreleased Apple devices that all could launch in the coming months. </p><p>In total, the apparent accidental leaks reveal at least 14 products, including <a href="https://www.tomsguide.com/audio/airpods/airpods-ultra-with-cameras-just-appeared-in-leaked-video-and-the-privacy-debate-has-already-started">AirPods with cameras</a>, the expected foldable <a href="https://www.tomsguide.com/phones/iphones/iphone-ultra-trade-offs-the-biggest-things-youre-not-getting-versus-iphone-18-pro">iPhone Ultra</a>, new OLED models of the MacBook and iPad mini and a next-generation Apple TV. The leak was discovered by <a href="https://x.com/aaronp613?lang=en" target="_blank">Aaron Perris</a> of MacRumors.</p><p>For many of these devices, the best we can note from the code is that they exist or will exist at some point. But it does give us an idea of what Apple could be working on and what's next.</p><p>Here's the full list for now:</p><ul><li><strong>Apple Home Hub</strong></li><li><strong>HomePod mini 3</strong></li><li><strong>Apple Security Camera</strong></li><li><strong>Home Accessory</strong></li><li><strong>iPhone Air 2</strong></li><li><strong>iPhone 18 Pro</strong></li><li><strong>iPhone 18 Pro Max</strong></li><li><strong>iPhone 18</strong></li><li><strong>iPhone Ultra</strong></li><li><strong>MacBook Pro 14” M6</strong></li><li><strong>iMac M6</strong></li><li><strong>MacBook Pro OLED touchscreen</strong></li><li><strong>iPad mini OLED</strong></li><li><strong>AirPod Ultra (with camera)</strong></li><li><strong>Beats headphones</strong></li></ul><p>With Apple's annual iPhone event around the corner, we're expecting a majority of that list to be announced next month. That includes the iPhone 18 Pro models, the iPhone Ultra, and the AirPods Ultra with cameras that were revealed in a leaked video this week.</p><p>The leaked code doesn't appear to have release dates, not that it would. With that in mind, of the devices on the list, the base model <a href="https://www.tomsguide.com/phones/iphones/i-was-worried-about-apples-rumored-iphone-18-release-plans-but-now-i-think-users-will-benefit">iPhone 18</a> and super-thin <a href="https://www.tomsguide.com/phones/iphones/iphone-air-2-all-the-rumors-so-far">iPhone Air 2</a> likely won't debut until next spring with Apple's rumored split launch.</p><p>There are two interesting reveals in the OLED devices and the suite of smart home devices.</p><h2 id="oled-macbook-and-ipad-mini">OLED MacBook and 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="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>Apple doesn't release MacBooks until later in the fall, typically in mid-October. The most recent leaks have suggested that Apple will add the MacBook to its burgeoning "Ultra" line. </p><p>The <a href="https://www.tomsguide.com/computing/laptops/macbook-ultra-everything-we-know-so-far">Apple MacBook Ultra</a> is supposed to debut this year with an OLED touchscreen panel and the M6 chipset. The OLED panel and touchscreen would be <a href="https://www.tomsguide.com/computing/macbooks/the-touchscreen-macbook-is-real-and-it-will-have-three-firsts-for-apple">among three firsts for Apple laptops,</a> including a new iPhone-esque Dynamic Island. <a href="https://www.bloomberg.com/news/articles/2026-06-26/apple-s-touchscreen-macbook-to-use-m5-pro-max-chips-m7-pro-max-models-in-2027" target="_blank">Bloomberg's Mark Gurman</a> has suggested that it will also get a redesign, though he declined to elaborate on what Apple is changing.</p><p>As for the iPad mini, the OLED redesign has been rumored for a couple of years, but recent rumors have <a href="https://www.tomsguide.com/computing/ipads/first-oled-ipad-mini-tipped-for-october-launch-heres-why-im-excited-and-worried">settled on an October debut</a>. The big change is the screen, but it should also feature a faster chip. So far, rumors haven't revealed any other changes.</p><h2 id="apple-s-smart-home-ambitions">Apple's Smart Home ambitions</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.30%;"><img id="CFksdCwX7br5GVNMLpQ7FY" name="Homepod 2 lede.jpg" alt="Apple HomePod (2nd Generation) on a wooden counter next to photos frames and a record player" src="https://cdn.mos.cms.futurecdn.net/CFksdCwX7br5GVNMLpQ7FY-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1126" attribution="" endorsement="" 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 Apple revealed <a href="https://www.tomsguide.com/ai/apple-intelligence-all-the-major-announcements-made-at-wwdc-2026">Apple Intelligence</a> in 2024, rumors about an AI-boosted suite of smart home devices have been repeatedly leaked, though the delay of Siri 2.0 seemingly kept getting in the way.</p><p>It's being built around a new version of the <a href="https://www.tomsguide.com/reviews/apple-homepod-2nd-generation">Apple HomePod</a>. Per MacRumors, this code leak potentially revealed two versions of the HomePod: one that <a href="https://www.tomsguide.com/home/smart-home/apple-tipped-to-launch-ai-wall-tablet-to-control-your-home-in-march-2025-everything-we-know-so-far">mounts on the wall </a>and one with a built-in base that may or may not be a speaker with essentially an iPad on it.</p><p>One of the code names, "B525" apparently refers to what may be the <a href="https://www.tomsguide.com/reviews/apple-homepod-mini">HomePod mini</a> 2, as the current version had a B520 codename.</p><p>The Apple Security Camera is both a surprise since it hasn't really been revealed previously, but also not that shocking. At WWDC 2026, Apple announced an upgrade to Apple Home Secure Video that adds AI for natural language search, detailed video descriptions and more. Apple is clearly thinking about security cameras.</p><p>The other interesting reference is to something labeled Pebble, which may be a smart home OS that we had previously <a href="https://www.tomsguide.com/home/smart-home/apple-is-building-a-secret-new-operating-system-and-its-not-for-your-iphone-or-mac">seen codenamed as "Charismatic."</a></p><h2 id="new-apple-tv-4k-and-siri-remote">New Apple TV 4K and Siri remote</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.30%;"><img id="h9NRjsFvUduNF9YBTd2Py6" name="TG_Apple-TV-4K-2022-18.jpg" alt="The Apple TV 4K (2022) remote in hand." src="https://cdn.mos.cms.futurecdn.net/h9NRjsFvUduNF9YBTd2Py6-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1126" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Henry T. Casey / Tom's Guide)</span></figcaption></figure><p>The one I'm most curious about is the long-rumored next-generation Apple TV 4K set-top streaming box Apparently, the code reveals a new, upgraded Siri remote too. </p><p>The code doesn't reveal any changes, but it seems to suggest that an Apple TV update is coming after years of rumors. Some rumors have suggested the new streaming box could have a <a href="https://www.bloomberg.com/news/newsletters/2024-04-07/apple-aapl-future-products-could-include-robots-and-smart-home-push-lupinmnahttps:/www.bloomberg.com/news/newsletters/2024-04-07/apple-aapl-future-products-could-include-robots-and-smart-home-push-lupinmna">camera for FaceTime calls</a>.</p><p>Otherwise, we're mostly expecting internal upgrades with the <a href="https://www.tomsguide.com/phones/iphones/new-iphone-18-pro-chips-camera-upgrades-and-more-leaked-by-analyst-heres-what-we-know">rumored N2 chip </a>for better Wi-Fi and Bluetooth connectivity, and at the very least <a href="https://www.tomsguide.com/entertainment/streaming-devices/new-apple-tv-4k-biggest-upgrades-just-leaked-ahead-of-launch">the A17 Pro chip</a>, though I expect something higher at this point.</p><p>We'll be tracking all of these potential devices in the coming months, with the iPhone lineup the first to hit in September.</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-ultra-trade-offs-the-biggest-things-youre-not-getting-versus-iphone-18-pro"><strong>iPhone Ultra trade-offs: The biggest things you’re not getting versus iPhone 18 Pro</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/sales-events/i-found-the-15-best-apple-deals-in-best-buys-massive-60th-anniversary-sale-airpods-apple-watches-macbooks-and-more"><strong>I found the 15 best Apple deals in Best Buy's massive 60th Anniversary sale — AirPods, Apple Watches, MacBooks and more</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/iphone-ultra-leakers-reveal-new-details-around-release-and-extremely-limited-availability"><strong>iPhone Ultra leakers reveal new details around release and 'extremely limited' availability</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/apple-may-have-accidentally-teased-its-own-roadmap-with-14-unreleased-devices-revealed-but-this-long-overdue-update-has-me-most-excited</link>
                                                                            <description>
                            <![CDATA[ Apple code apparently reveals several unreleased products that could launch over the next few months including a few surprises. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">MXGtPb3EMJ3jKcaTGWDx9J</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/sTDBQSgzZKANHK3AZ4km5h-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 19 Aug 2026 22:51:22 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Computing Peripherals]]></category>
                                                    <category><![CDATA[Desktop Computers]]></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/sTDBQSgzZKANHK3AZ4km5h-1280-80.jpg">
                                                            <media:credit><![CDATA[Eric Thayer/Getty Images]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Apple logo on building ]]></media:description>                                                            <media:text><![CDATA[Apple logo on building ]]></media:text>
                                <media:title type="plain"><![CDATA[Apple logo on building ]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/sTDBQSgzZKANHK3AZ4km5h-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>This week Apple released <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-18-event-all-the-new-products-expected-to-launch-in-september">macOS version 26.7</a>, and apparently hidden in the code are references to multiple unreleased Apple devices that all could launch in the coming months. </p><p>In total, the apparent accidental leaks reveal at least 14 products, including <a href="https://www.tomsguide.com/audio/airpods/airpods-ultra-with-cameras-just-appeared-in-leaked-video-and-the-privacy-debate-has-already-started">AirPods with cameras</a>, the expected foldable <a href="https://www.tomsguide.com/phones/iphones/iphone-ultra-trade-offs-the-biggest-things-youre-not-getting-versus-iphone-18-pro">iPhone Ultra</a>, new OLED models of the MacBook and iPad mini and a next-generation Apple TV. The leak was discovered by <a href="https://x.com/aaronp613?lang=en" target="_blank">Aaron Perris</a> of MacRumors.</p><p>For many of these devices, the best we can note from the code is that they exist or will exist at some point. But it does give us an idea of what Apple could be working on and what's next.</p><p>Here's the full list for now:</p><ul><li><strong>Apple Home Hub</strong></li><li><strong>HomePod mini 3</strong></li><li><strong>Apple Security Camera</strong></li><li><strong>Home Accessory</strong></li><li><strong>iPhone Air 2</strong></li><li><strong>iPhone 18 Pro</strong></li><li><strong>iPhone 18 Pro Max</strong></li><li><strong>iPhone 18</strong></li><li><strong>iPhone Ultra</strong></li><li><strong>MacBook Pro 14” M6</strong></li><li><strong>iMac M6</strong></li><li><strong>MacBook Pro OLED touchscreen</strong></li><li><strong>iPad mini OLED</strong></li><li><strong>AirPod Ultra (with camera)</strong></li><li><strong>Beats headphones</strong></li></ul><p>With Apple's annual iPhone event around the corner, we're expecting a majority of that list to be announced next month. That includes the iPhone 18 Pro models, the iPhone Ultra, and the AirPods Ultra with cameras that were revealed in a leaked video this week.</p><p>The leaked code doesn't appear to have release dates, not that it would. With that in mind, of the devices on the list, the base model <a href="https://www.tomsguide.com/phones/iphones/i-was-worried-about-apples-rumored-iphone-18-release-plans-but-now-i-think-users-will-benefit">iPhone 18</a> and super-thin <a href="https://www.tomsguide.com/phones/iphones/iphone-air-2-all-the-rumors-so-far">iPhone Air 2</a> likely won't debut until next spring with Apple's rumored split launch.</p><p>There are two interesting reveals in the OLED devices and the suite of smart home devices.</p><h2 id="oled-macbook-and-ipad-mini">OLED MacBook and 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="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>Apple doesn't release MacBooks until later in the fall, typically in mid-October. The most recent leaks have suggested that Apple will add the MacBook to its burgeoning "Ultra" line. </p><p>The <a href="https://www.tomsguide.com/computing/laptops/macbook-ultra-everything-we-know-so-far">Apple MacBook Ultra</a> is supposed to debut this year with an OLED touchscreen panel and the M6 chipset. The OLED panel and touchscreen would be <a href="https://www.tomsguide.com/computing/macbooks/the-touchscreen-macbook-is-real-and-it-will-have-three-firsts-for-apple">among three firsts for Apple laptops,</a> including a new iPhone-esque Dynamic Island. <a href="https://www.bloomberg.com/news/articles/2026-06-26/apple-s-touchscreen-macbook-to-use-m5-pro-max-chips-m7-pro-max-models-in-2027" target="_blank">Bloomberg's Mark Gurman</a> has suggested that it will also get a redesign, though he declined to elaborate on what Apple is changing.</p><p>As for the iPad mini, the OLED redesign has been rumored for a couple of years, but recent rumors have <a href="https://www.tomsguide.com/computing/ipads/first-oled-ipad-mini-tipped-for-october-launch-heres-why-im-excited-and-worried">settled on an October debut</a>. The big change is the screen, but it should also feature a faster chip. So far, rumors haven't revealed any other changes.</p><h2 id="apple-s-smart-home-ambitions">Apple's Smart Home ambitions</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.30%;"><img id="CFksdCwX7br5GVNMLpQ7FY" name="Homepod 2 lede.jpg" alt="Apple HomePod (2nd Generation) on a wooden counter next to photos frames and a record player" src="https://cdn.mos.cms.futurecdn.net/CFksdCwX7br5GVNMLpQ7FY-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1126" attribution="" endorsement="" 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 Apple revealed <a href="https://www.tomsguide.com/ai/apple-intelligence-all-the-major-announcements-made-at-wwdc-2026">Apple Intelligence</a> in 2024, rumors about an AI-boosted suite of smart home devices have been repeatedly leaked, though the delay of Siri 2.0 seemingly kept getting in the way.</p><p>It's being built around a new version of the <a href="https://www.tomsguide.com/reviews/apple-homepod-2nd-generation">Apple HomePod</a>. Per MacRumors, this code leak potentially revealed two versions of the HomePod: one that <a href="https://www.tomsguide.com/home/smart-home/apple-tipped-to-launch-ai-wall-tablet-to-control-your-home-in-march-2025-everything-we-know-so-far">mounts on the wall </a>and one with a built-in base that may or may not be a speaker with essentially an iPad on it.</p><p>One of the code names, "B525" apparently refers to what may be the <a href="https://www.tomsguide.com/reviews/apple-homepod-mini">HomePod mini</a> 2, as the current version had a B520 codename.</p><p>The Apple Security Camera is both a surprise since it hasn't really been revealed previously, but also not that shocking. At WWDC 2026, Apple announced an upgrade to Apple Home Secure Video that adds AI for natural language search, detailed video descriptions and more. Apple is clearly thinking about security cameras.</p><p>The other interesting reference is to something labeled Pebble, which may be a smart home OS that we had previously <a href="https://www.tomsguide.com/home/smart-home/apple-is-building-a-secret-new-operating-system-and-its-not-for-your-iphone-or-mac">seen codenamed as "Charismatic."</a></p><h2 id="new-apple-tv-4k-and-siri-remote">New Apple TV 4K and Siri remote</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.30%;"><img id="h9NRjsFvUduNF9YBTd2Py6" name="TG_Apple-TV-4K-2022-18.jpg" alt="The Apple TV 4K (2022) remote in hand." src="https://cdn.mos.cms.futurecdn.net/h9NRjsFvUduNF9YBTd2Py6-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1126" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Henry T. Casey / Tom's Guide)</span></figcaption></figure><p>The one I'm most curious about is the long-rumored next-generation Apple TV 4K set-top streaming box Apparently, the code reveals a new, upgraded Siri remote too. </p><p>The code doesn't reveal any changes, but it seems to suggest that an Apple TV update is coming after years of rumors. Some rumors have suggested the new streaming box could have a <a href="https://www.bloomberg.com/news/newsletters/2024-04-07/apple-aapl-future-products-could-include-robots-and-smart-home-push-lupinmnahttps:/www.bloomberg.com/news/newsletters/2024-04-07/apple-aapl-future-products-could-include-robots-and-smart-home-push-lupinmna">camera for FaceTime calls</a>.</p><p>Otherwise, we're mostly expecting internal upgrades with the <a href="https://www.tomsguide.com/phones/iphones/new-iphone-18-pro-chips-camera-upgrades-and-more-leaked-by-analyst-heres-what-we-know">rumored N2 chip </a>for better Wi-Fi and Bluetooth connectivity, and at the very least <a href="https://www.tomsguide.com/entertainment/streaming-devices/new-apple-tv-4k-biggest-upgrades-just-leaked-ahead-of-launch">the A17 Pro chip</a>, though I expect something higher at this point.</p><p>We'll be tracking all of these potential devices in the coming months, with the iPhone lineup the first to hit in September.</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-ultra-trade-offs-the-biggest-things-youre-not-getting-versus-iphone-18-pro"><strong>iPhone Ultra trade-offs: The biggest things you’re not getting versus iPhone 18 Pro</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/sales-events/i-found-the-15-best-apple-deals-in-best-buys-massive-60th-anniversary-sale-airpods-apple-watches-macbooks-and-more"><strong>I found the 15 best Apple deals in Best Buy's massive 60th Anniversary sale — AirPods, Apple Watches, MacBooks and more</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/phones/iphones/iphone-ultra-leakers-reveal-new-details-around-release-and-extremely-limited-availability"><strong>iPhone Ultra leakers reveal new details around release and 'extremely limited' availability</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I found the 15 best Apple deals in Best Buy's massive 60th Anniversary sale — AirPods, Apple Watches, MacBooks and more ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Best Buy has just turned 60 years old. To celebrate, the retailer is holding a massive online sale that runs until Sunday, August 23. There's huge savings to be had across thousands of products and brands.</p><p>For this particular article I've narrowed down the search to Apple products. The company makes some of the most powerful, easy-to-use, and desirable technology out there, but they can be expensive, so any opportunity to save some money is welcome! </p><p>I've picked out a range of MacBooks, iPhones, Apple Watches, and other great bits of kit here, with prices starting at under $100. Take a look at the selection below – and happy shopping!</p>        <div class="featured_product_block featured_block_hero" data-id="229a3dde-9b20-11f1-a8ad-2bc1820dfb1f">            <a href="https://www.bestbuy.com/product/apple-airtag-4-pack-2nd-generation-2026-white/JJGCQLTTF3/sku/6377586" data-model-name="Apple AirTag (4-pack)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/HCUqWkUuUEZJCvXyEu4wwk.jpg" alt="Apple, Apple - AirTag 4 pack (2nd generation) - 2026 - White"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple AirTag (4-pack)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2f455d28-9b18-11f1-95c6-4df511c756f2">            <a href="https://www.bestbuy.com/product/apple-pencil-pro-white/JJGCQ35H4Q/sku/6535042" data-model-name="Apple - Pencil Pro - White" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/pDXtoubvQocViH8rANAz4g.jpg" alt="Apple, Apple - Pencil Pro - White"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple - Pencil Pro - White</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2f4558d2-9b18-11f1-9f99-39f12c584945">            <a href="https://www.bestbuy.com/product/beats-studio-pro-wireless-noise-cancelling-over-the-ear-headphones-black/JJ8ZHR9K2T/sku/6501017" data-model-name="Beats Studio Pro Wireless Noise Cancelling Headphones " data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/MX8CCAemvUcSzJjWB5PjRm.jpg" alt="Beats, Beats - Studio Pro - Wireless Noise Cancelling Over-the-Ear Headphones - Black"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Beats</div>                                        <div class="featured__title">Beats Studio Pro Wireless Noise Cancelling Headphones </div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2f45594a-9b18-11f1-8d3a-3f795142c6b4">            <a href="https://www.bestbuy.com/product/apple-airpods-pro-3-wireless-active-noise-cancelling-earbuds-with-heart-rate-sensing-feature-white/JJGCQLYK5F/sku/6376563" data-model-name="Apple Airpods Pro 3 Active Noise Cancelling Earbuds" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:62.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/QKX3yP5J3zLeK2oNnJTHw3.jpg" alt="Apple - Airpods pro 3, Wireless Active Noise Cancelling Earbuds With Heart Rate Sensing Feature - White"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple Airpods Pro 3 Active Noise Cancelling Earbuds</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2f4559ae-9b18-11f1-b7be-d7af9322d684">            <a href="https://www.bestbuy.com/product/apple-watch-se-3-gps-cellular-40mm-aluminum-case-with-starlight-sport-band-s-m-starlight-2025/JJGCQLC9JX/sku/6572832" data-model-name="Apple Watch SE 3 With Starlight Sport Band" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/QhX3dp7B5duEvgTAZnHgz9.jpg" alt="Apple, Apple Watch Se 3 (gps+cellular) 40mm aluminum Case With Starlight Sport Band - S/m - Starlight - (2025)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple Watch SE 3 With Starlight Sport Band</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2f455a12-9b18-11f1-86e2-a70cab541063">            <a href="https://www.bestbuy.com/product/apple-watch-series-11-gps-42mm-jet-black-aluminum-case-with-black-sport-band-s-m-jet-black-2025/JJGCQLX4W6/sku/6572702" data-model-name="Apple Watch Series 11 With Black Sport Band" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/fAGqDEvSUbGxeqZuUj5VkG.jpg" alt="Apple, Apple Watch Series 11 (gps) 42mm Jet Black Aluminum Case With Black Sport Band - S/m - Jet Black - (2025)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple Watch Series 11 With Black Sport Band</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2f455a76-9b18-11f1-96c3-21b4d33ca2dd">            <a href="https://www.bestbuy.com/product/apple-watch-series-11-gps-46mm-rose-gold-aluminum-case-with-light-blush-sport-band-m-l-rose-gold-2025/JJGCQLXT2T/sku/6572715" data-model-name="Apple Watch Series 11 With Light Blush Sport Band" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/2keUxVRfvnPpgWarcXAkkP.jpg" alt="Apple, Apple Watch Series 11 with Light Blush Sport Band"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple Watch Series 11 With Light Blush Sport Band</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2f455ada-9b18-11f1-892e-ab0e7fc9f3e2">            <a href="https://www.bestbuy.com/product/apple-airpods-max-2-usb-c-midnight/JJGCQYH99P/sku/6494847" data-model-name="Apple Airpods Max 2" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:110.68%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/FTHKgFy27Dcq8Xp7iFiCNi.jpg" alt="Apple - Airpods Max 2 (usb-C) - Midnight"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple Airpods Max 2</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="229a3f32-9b20-11f1-9b47-91311500cc11">            <a href="https://www.bestbuy.com/product/apple-iphone-16e-128gb-apple-intelligence-unlocked-white/JJGCQG2GTF/sku/6507524" data-model-name="Apple iPhone 16E 128GB (Unlocked)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/jffkuVdBTDMjT46QohdWx9.jpg" alt="Apple, Apple - iPhone 16e 128GB - Apple Intelligence (Unlocked) - White"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple iPhone 16E 128GB (Unlocked)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="229a3e88-9b20-11f1-a239-e16608594883">            <a href="https://www.bestbuy.com/product/apple-iphone-air-512gb-unlocked-space-black/JJGCQLRKLR/sku/6513658" data-model-name="Apple iPhone Air 512GB (unlocked) - Space Black" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/VPeJMGgAbAvVAyz38diRP4.jpg" alt="Apple, Apple - Iphone Air 512gb (unlocked) - Space Black"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple iPhone Air 512GB (unlocked) - Space Black</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2f455b3e-9b18-11f1-b6c5-dbd9f13bf6fd">            <a href="https://www.bestbuy.com/product/apple-13-inch-ipad-air-m4-chip-wi-fi-256gb-purple/JJGCQYJXJ5/sku/6533613" data-model-name="Apple 13-Inch iPad Air M4 Chip" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/YQEvcEHiKNKW7EgzTgHcA6.jpg" alt="Apple -13-Inch iPad Air M4 Chip"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple 13-Inch iPad Air M4 Chip</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2f455ba2-9b18-11f1-936a-eddcabdc73a6">            <a href="https://www.bestbuy.com/product/apple-11-inch-ipad-pro-m5-chip-wi-fi-cellular-512gb-with-oled-silver-unlocked/JJGCQL7TPH/sku/6457191" data-model-name="Apple 11-Inch iPad Pro M5 Chip" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/U6RjHYDM4HTrmpM6rPp8KC.jpg" alt="Apple, Apple - 11-inch iPad Pro M5 chip Wi-Fi + Cellular 512GB with OLED - Silver (Unlocked)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple 11-Inch iPad Pro M5 Chip</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2f455c06-9b18-11f1-b4c4-478d6ed75299">            <a href="https://www.bestbuy.com/product/apple-macbook-pro-14-inch-laptop-apple-m4-pro-chip-built-for-apple-intelligence-24gb-memory-512gb-ssd-silver/JJGCQ8H5RP/sku/6602745" data-model-name="Apple MacBook Pro 14-inch Laptop, M4 Pro Chip" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/x3vNVm794TGAvLSnUyXK6Q.jpg" alt="Apple, Apple - MacBook Pro 14-inch Laptop - Apple M4 Pro chip Built for Apple Intelligence - 24GB Memory - 512GB SSD - Silver"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple MacBook Pro 14-inch Laptop, M4 Pro Chip</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2f455c60-9b18-11f1-8468-39ef0a1fd46f">            <a href="https://www.bestbuy.com/product/apple-macbook-pro-14-inch-laptop-m5-pro-chip-with-15-core-cpu-and-16-core-gpu-24gb-memory-1tb-ssd-space-black/JJGCQLZV5J/sku/6615860" data-model-name="Apple MacBook Pro 14-inch Laptop, M5 Pro Chip" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/WnCAEAXSPmSgiibG3ioEYT.jpg" alt="Apple, Apple - MacBook Pro 14-inch Laptop - M5 Pro chip with 15-core CPU and 16-core GPU - 24GB Memory - 1TB SSD - Space Black"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple MacBook Pro 14-inch Laptop, M5 Pro Chip</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2f455cc4-9b18-11f1-935c-eba0153d6339">            <a href="https://www.bestbuy.com/product/apple-macbook-pro-16-inch-laptop-m5-pro-chip-with-18-core-cpu-and-20-core-gpu-48gb-memory-1tb-ssd-space-black/JJGCQLZKLT/sku/6615872" data-model-name="Apple MacBook Pro 16-inch Laptop, M5 Pro Chip (Black)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/8oHwmSrepfzCaeJCvVfqLa.jpg" alt="Apple, Apple - Macbook Pro 16-Inch Laptop - M5 Pro Chip With 18-Core Cpu and 20-Core Gpu - 48gb Memory - 1tb Ssd - Space Black"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple MacBook Pro 16-inch Laptop, M5 Pro Chip (Black)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/sales-events/i-found-the-15-best-apple-deals-in-best-buys-massive-60th-anniversary-sale-airpods-apple-watches-macbooks-and-more</link>
                                                                            <description>
                            <![CDATA[ Best Buy currently have a massive sale on that is running until Sunday, August 23. We've picked out 15 of the best deals to be found on Apple products, including MacBooks, iPhones, iPads, and more. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">qCJBMYvAPgj9wjyCURuUje</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/BXhV24KJt9zwMmGe6SeiTR-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 19 Aug 2026 13:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Sales Events]]></category>
                                                                                                                    <dc:creator><![CDATA[ Will Salmon ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/HpRWP7Mh9ErgRGoTvZBbBJ-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Will Salmon is Tom&#039;s Guide&#039;s Collections Editor, curating advice on the best products to spend your money on. Will has been writing about tech and entertainment for almost 20 years, including stints as GamesRadar+&#039;s Streaming Editor, editing comics website Newsarama, and writing for lots and lots of magazines.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/BXhV24KJt9zwMmGe6SeiTR-1280-80.jpg">
                                                            <media:credit><![CDATA[Apple / Edited by Gemini]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A selection of Apple products at Best Buy.]]></media:description>                                                            <media:text><![CDATA[A selection of Apple products at Best Buy.]]></media:text>
                                <media:title type="plain"><![CDATA[A selection of Apple products at Best Buy.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/BXhV24KJt9zwMmGe6SeiTR-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Best Buy has just turned 60 years old. To celebrate, the retailer is holding a massive online sale that runs until Sunday, August 23. There's huge savings to be had across thousands of products and brands.</p><p>For this particular article I've narrowed down the search to Apple products. The company makes some of the most powerful, easy-to-use, and desirable technology out there, but they can be expensive, so any opportunity to save some money is welcome! </p><p>I've picked out a range of MacBooks, iPhones, Apple Watches, and other great bits of kit here, with prices starting at under $100. Take a look at the selection below – and happy shopping!</p>        <div class="featured_product_block featured_block_hero" data-id="229a3dde-9b20-11f1-a8ad-2bc1820dfb1f">            <a href="https://www.bestbuy.com/product/apple-airtag-4-pack-2nd-generation-2026-white/JJGCQLTTF3/sku/6377586" data-model-name="Apple AirTag (4-pack)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/HCUqWkUuUEZJCvXyEu4wwk.jpg" alt="Apple, Apple - AirTag 4 pack (2nd generation) - 2026 - White"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple AirTag (4-pack)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2f455d28-9b18-11f1-95c6-4df511c756f2">            <a href="https://www.bestbuy.com/product/apple-pencil-pro-white/JJGCQ35H4Q/sku/6535042" data-model-name="Apple - Pencil Pro - White" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/pDXtoubvQocViH8rANAz4g.jpg" alt="Apple, Apple - Pencil Pro - White"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple - Pencil Pro - White</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2f4558d2-9b18-11f1-9f99-39f12c584945">            <a href="https://www.bestbuy.com/product/beats-studio-pro-wireless-noise-cancelling-over-the-ear-headphones-black/JJ8ZHR9K2T/sku/6501017" data-model-name="Beats Studio Pro Wireless Noise Cancelling Headphones " data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/MX8CCAemvUcSzJjWB5PjRm.jpg" alt="Beats, Beats - Studio Pro - Wireless Noise Cancelling Over-the-Ear Headphones - Black"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Beats</div>                                        <div class="featured__title">Beats Studio Pro Wireless Noise Cancelling Headphones </div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2f45594a-9b18-11f1-8d3a-3f795142c6b4">            <a href="https://www.bestbuy.com/product/apple-airpods-pro-3-wireless-active-noise-cancelling-earbuds-with-heart-rate-sensing-feature-white/JJGCQLYK5F/sku/6376563" data-model-name="Apple Airpods Pro 3 Active Noise Cancelling Earbuds" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:62.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/QKX3yP5J3zLeK2oNnJTHw3.jpg" alt="Apple - Airpods pro 3, Wireless Active Noise Cancelling Earbuds With Heart Rate Sensing Feature - White"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple Airpods Pro 3 Active Noise Cancelling Earbuds</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2f4559ae-9b18-11f1-b7be-d7af9322d684">            <a href="https://www.bestbuy.com/product/apple-watch-se-3-gps-cellular-40mm-aluminum-case-with-starlight-sport-band-s-m-starlight-2025/JJGCQLC9JX/sku/6572832" data-model-name="Apple Watch SE 3 With Starlight Sport Band" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/QhX3dp7B5duEvgTAZnHgz9.jpg" alt="Apple, Apple Watch Se 3 (gps+cellular) 40mm aluminum Case With Starlight Sport Band - S/m - Starlight - (2025)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple Watch SE 3 With Starlight Sport Band</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2f455a12-9b18-11f1-86e2-a70cab541063">            <a href="https://www.bestbuy.com/product/apple-watch-series-11-gps-42mm-jet-black-aluminum-case-with-black-sport-band-s-m-jet-black-2025/JJGCQLX4W6/sku/6572702" data-model-name="Apple Watch Series 11 With Black Sport Band" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/fAGqDEvSUbGxeqZuUj5VkG.jpg" alt="Apple, Apple Watch Series 11 (gps) 42mm Jet Black Aluminum Case With Black Sport Band - S/m - Jet Black - (2025)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple Watch Series 11 With Black Sport Band</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2f455a76-9b18-11f1-96c3-21b4d33ca2dd">            <a href="https://www.bestbuy.com/product/apple-watch-series-11-gps-46mm-rose-gold-aluminum-case-with-light-blush-sport-band-m-l-rose-gold-2025/JJGCQLXT2T/sku/6572715" data-model-name="Apple Watch Series 11 With Light Blush Sport Band" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/2keUxVRfvnPpgWarcXAkkP.jpg" alt="Apple, Apple Watch Series 11 with Light Blush Sport Band"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple Watch Series 11 With Light Blush Sport Band</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2f455ada-9b18-11f1-892e-ab0e7fc9f3e2">            <a href="https://www.bestbuy.com/product/apple-airpods-max-2-usb-c-midnight/JJGCQYH99P/sku/6494847" data-model-name="Apple Airpods Max 2" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:110.68%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/FTHKgFy27Dcq8Xp7iFiCNi.jpg" alt="Apple - Airpods Max 2 (usb-C) - Midnight"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple Airpods Max 2</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="229a3f32-9b20-11f1-9b47-91311500cc11">            <a href="https://www.bestbuy.com/product/apple-iphone-16e-128gb-apple-intelligence-unlocked-white/JJGCQG2GTF/sku/6507524" data-model-name="Apple iPhone 16E 128GB (Unlocked)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/jffkuVdBTDMjT46QohdWx9.jpg" alt="Apple, Apple - iPhone 16e 128GB - Apple Intelligence (Unlocked) - White"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple iPhone 16E 128GB (Unlocked)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="229a3e88-9b20-11f1-a239-e16608594883">            <a href="https://www.bestbuy.com/product/apple-iphone-air-512gb-unlocked-space-black/JJGCQLRKLR/sku/6513658" data-model-name="Apple iPhone Air 512GB (unlocked) - Space Black" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/VPeJMGgAbAvVAyz38diRP4.jpg" alt="Apple, Apple - Iphone Air 512gb (unlocked) - Space Black"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple iPhone Air 512GB (unlocked) - Space Black</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2f455b3e-9b18-11f1-b6c5-dbd9f13bf6fd">            <a href="https://www.bestbuy.com/product/apple-13-inch-ipad-air-m4-chip-wi-fi-256gb-purple/JJGCQYJXJ5/sku/6533613" data-model-name="Apple 13-Inch iPad Air M4 Chip" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/YQEvcEHiKNKW7EgzTgHcA6.jpg" alt="Apple -13-Inch iPad Air M4 Chip"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple 13-Inch iPad Air M4 Chip</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2f455ba2-9b18-11f1-936a-eddcabdc73a6">            <a href="https://www.bestbuy.com/product/apple-11-inch-ipad-pro-m5-chip-wi-fi-cellular-512gb-with-oled-silver-unlocked/JJGCQL7TPH/sku/6457191" data-model-name="Apple 11-Inch iPad Pro M5 Chip" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/U6RjHYDM4HTrmpM6rPp8KC.jpg" alt="Apple, Apple - 11-inch iPad Pro M5 chip Wi-Fi + Cellular 512GB with OLED - Silver (Unlocked)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple 11-Inch iPad Pro M5 Chip</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2f455c06-9b18-11f1-b4c4-478d6ed75299">            <a href="https://www.bestbuy.com/product/apple-macbook-pro-14-inch-laptop-apple-m4-pro-chip-built-for-apple-intelligence-24gb-memory-512gb-ssd-silver/JJGCQ8H5RP/sku/6602745" data-model-name="Apple MacBook Pro 14-inch Laptop, M4 Pro Chip" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/x3vNVm794TGAvLSnUyXK6Q.jpg" alt="Apple, Apple - MacBook Pro 14-inch Laptop - Apple M4 Pro chip Built for Apple Intelligence - 24GB Memory - 512GB SSD - Silver"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple MacBook Pro 14-inch Laptop, M4 Pro Chip</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2f455c60-9b18-11f1-8468-39ef0a1fd46f">            <a href="https://www.bestbuy.com/product/apple-macbook-pro-14-inch-laptop-m5-pro-chip-with-15-core-cpu-and-16-core-gpu-24gb-memory-1tb-ssd-space-black/JJGCQLZV5J/sku/6615860" data-model-name="Apple MacBook Pro 14-inch Laptop, M5 Pro Chip" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/WnCAEAXSPmSgiibG3ioEYT.jpg" alt="Apple, Apple - MacBook Pro 14-inch Laptop - M5 Pro chip with 15-core CPU and 16-core GPU - 24GB Memory - 1TB SSD - Space Black"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple MacBook Pro 14-inch Laptop, M5 Pro Chip</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2f455cc4-9b18-11f1-935c-eba0153d6339">            <a href="https://www.bestbuy.com/product/apple-macbook-pro-16-inch-laptop-m5-pro-chip-with-18-core-cpu-and-20-core-gpu-48gb-memory-1tb-ssd-space-black/JJGCQLZKLT/sku/6615872" data-model-name="Apple MacBook Pro 16-inch Laptop, M5 Pro Chip (Black)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/8oHwmSrepfzCaeJCvVfqLa.jpg" alt="Apple, Apple - Macbook Pro 16-Inch Laptop - M5 Pro Chip With 18-Core Cpu and 20-Core Gpu - 48gb Memory - 1tb Ssd - Space Black"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple MacBook Pro 16-inch Laptop, M5 Pro Chip (Black)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Experts call Apple's new lease plan an attempt to 'mask the effect of rising hardware costs' ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Today <a href="https://www.apple.com/newsroom/2026/07/apple-upgrade-launches-in-the-united-states/" target="_blank">Apple announced</a> its new leasing program, Apple Upgrade which is undergirded by Klarna for iPhone, Apple Watch, Mac and iPad.</p><p>The program lets customers sign up for a plan, similar to how you would lease a car, for fixed 12-, 24- and 36-month terms depending on the device.  There are options to upgrade to a new device early or return it at the end of the lease.</p><p>Apple called the new plan a "more flexible way to pay for products."</p><p>It's possible this does offer some flexibility from paying an upfront lump sum or tying yourself to an onerous contract via a network carrier like Verizon or T-Mobile. </p><p>However, experts I spoke with think the Upgrade plan is meant to cover <a href="https://www.tomsguide.com/computing/hardware/sk-hynix-warns-2027-will-be-worst-year-for-ram-prices-right-as-a-damning-report-reveals-something-that-will-add-fuel-to-the-price-fixing-lawsuit">rising component costs</a>. </p><p>"By shifting the focus to lower monthly payments, it helps mask the effect of rising hardware costs and makes premium devices feel more affordable and attainable for a broader range of consumers," Jitesh Ubrani, a director at IDC, said. </p><p>They added that it could entice people who don't want to pay the higher upfront costs, as even <a href="https://www.tomsguide.com/computing/macbooks/for-first-time-since-1984-thinking-about-bailing-on-apple-customers-react-apple-price-hikes">Apple has hiked prices recently</a>. It also gives Apple a "steady stream of trade-ins" that the company can resell to expand its customer base.</p><p>"Many people are effectively leasing their phones already through carrier plans; leasing a watch or a Mac -- when you know that these are also devices that have upgrade cycles -- can make sense," Techsponential's Avi Greengart told Tom's Guide.  "it's still a lease, so you won't be able to use it until it dies unless you buy out the lease, and it may not be the absolute most economical approach."</p><p>Beyond upfront prices, is Apple Upgrade better for you? Let's take a look at how the program works.</p><h2 id="how-apple-upgrade-works">How Apple Upgrade works</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:692px;"><p class="vanilla-image-block" style="padding-top:56.36%;"><img id="LAQo6BPWq3WqYSvFeCV5hY" name="Apple-Upgrade-hero_big.jpg.medium" alt="Apple Upgrade program" src="https://cdn.mos.cms.futurecdn.net/LAQo6BPWq3WqYSvFeCV5hY-1920-80.jpg" mos="" align="middle" fullscreen="" width="692" height="390" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Apple)</span></figcaption></figure><p>Apple Upgrade offers 12- or 24-month lease terms for eligible iPhones and Apple Watches. For those seeking a Mac or iPad, there are 24- or 36-month options. </p><p>Prices start as low as $11.99 per month for the Apple Watch and iPad, depending on size and storage capacity. iPhones start at $17.99, while Macs can be leased starting at $24.99 a month.</p><p>You can sign up online or at an Apple Store, where you will be approved by Klarna, which does require a soft credit check that should not impact your credit score. </p><p>At the end of the lease term, you can return the device or upgrade to a newer generation or purchase it with a one-time payment.</p><p>Compared to the outgoing iPhone Upgrade program, the Apple Upgrade Program does not include AppleCare, which is a separate subscription price and varies in price depending on your device.</p><p>Per <a href="https://www.macrumors.com/2026/07/28/apple-upgrade-program-klarna/" target="_blank">MacRumors</a>, if you miss a payment, it will be rolled into the next month's payment with no late fees. However, if you miss three consecutive payments, the lease will end, and you will have to pay the full outstanding balance, minus the value of the device when returned. If Klarna can't collect, a debt collection agency will be sent your information.</p><h2 id="apple-upgrade-prices">Apple Upgrade prices</h2><p>Apple is offering the entire iPhone 17 lineup, plus the iPhone Air, both the Apple Watch Series 11 and Apple Watch Ultra 3 and three iPad options, including the iPad Air, iPad Pro and iPad mini.</p><p>For Macs, you can lease the MacBook Air, MacBook Pro, iMac and Mac Studio. </p><p>Apple defaults to the 24-month leasing option, so we'll share that. The other options can lower or raise your price. Additionally, higher storage capacity or chip versions will also increase the monthly price.</p><p>Finally, the price does not include taxes and fees.</p><p>Here's how much the base model of each device will cost you. </p><div ><table><caption>Apple Upgrade Prices - iPhones and Watches</caption><thead><tr><th class="firstcol " ><p>Device</p></th><th  ><p>Upfront cost</p></th><th  ><p>Per month cost</p></th><th  ><p><strong>Total after 24 months</strong></p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>iPhone 17e</strong></p></td><td  ><p>$599</p></td><td  ><p>$17.99</p></td><td  ><p>$431.76</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone Air</strong></p></td><td  ><p>$999</p></td><td  ><p>$28.99</p></td><td  ><p>$695.76</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 17</strong></p></td><td  ><p>$799</p></td><td  ><p>$22.99</p></td><td  ><p>$551.76</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 17 Pro</strong></p></td><td  ><p>$1,099</p></td><td  ><p>$31.99</p></td><td  ><p>$767.76</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 17 Pro Max</strong></p></td><td  ><p>$1,199</p></td><td  ><p>$34.99</p></td><td  ><p>$839.76</p></td></tr><tr><td class="firstcol " ><p><strong>Apple Watch Series 11</strong></p></td><td  ><p>$399</p></td><td  ><p>$11.99</p></td><td  ><p>$287.76</p></td></tr><tr><td class="firstcol " ><p><strong>Apple Watch Ultra 3</strong></p></td><td  ><p>$799</p></td><td  ><p>$24.99</p></td><td  ><p>$599.76</p></td></tr></tbody></table></div><p>We've separated the iPads and Macs out because these devices can have the longer 36-month term. Again, the prices below are for the base model of each device and the 24-month term.</p><div ><table><caption>Apple Upgrade Prices - Macs and iPads</caption><thead><tr><th class="firstcol " ><p>Device</p></th><th  ><p>Upfront cost</p></th><th  ><p>Per month cost</p></th><th  ><p><strong>Total after 24 months</strong></p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>iPad Air</strong></p></td><td  ><p>$749</p></td><td  ><p>$15.99</p></td><td  ><p>$383.76</p></td></tr><tr><td class="firstcol " ><p><strong>iPad Pro</strong></p></td><td  ><p>$1,199</p></td><td  ><p>$24.99</p></td><td  ><p>$599.76</p></td></tr><tr><td class="firstcol " ><p><strong>iPad mini</strong></p></td><td  ><p>$599</p></td><td  ><p>$11.99</p></td><td  ><p>$287.76</p></td></tr><tr><td class="firstcol " ><p><strong>MacBook Air</strong></p></td><td  ><p>$1,299</p></td><td  ><p>$24.99</p></td><td  ><p>$599.76</p></td></tr><tr><td class="firstcol " ><p><strong>MacBook Pro</strong></p></td><td  ><p>$1,999</p></td><td  ><p>$38.99</p></td><td  ><p>$935.76</p></td></tr><tr><td class="firstcol " ><p><strong>iMac</strong></p></td><td  ><p>$1,499</p></td><td  ><p>$28.99</p></td><td  ><p>695.75</p></td></tr><tr><td class="firstcol " ><p><strong>Mac Studio</strong></p></td><td  ><p>$2,499</p></td><td  ><p>$48.99</p></td><td  ><p>$1,175.76</p></td></tr></tbody></table></div><h2 id="no-leasing-entry-level-devices">No leasing entry-level devices</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="XAXaMxrdpoER4r7t5G88jh" name="mac-mini-front.jpg" alt="New Mac mini just leaked — what you need to know" src="https://cdn.mos.cms.futurecdn.net/XAXaMxrdpoER4r7t5G88jh-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: Jon Prosser & Ian Zelbo)</span></figcaption></figure><p>You may have noticed several Apple devices aren't eligible for the upgrade program. It includes the vanilla iPhone 16 and iPhone 16 Plus, as well as the entry-level models of almost every device category. </p><p>Here's the full list of Apple products you can't lease:</p><ul><li>iPhone 16</li><li>iPhone 16 Plus</li><li>Apple Watch SE</li><li>MacBook Neo</li><li>Mac mini</li><li>iPad (A16)</li><li>Studio Display</li></ul><h2 id="availability">Availability</h2><p>Apple Upgrade is available now for all of the listed devices. Apple says that a security deposit is not required and that a trade-in device could reduce monthly payments. </p><p>I will note that if you end a lease early, you could see termination fees. Also, if you don't do anything at the end of the lease, you'll be charged the purchase fee. </p><p>Lastly, hidden in the fine print, upgrading a device could increase your monthly payments, which is true for both higher-capacity versions of devices and more expensive models when new generations launch in the coming years.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/we-asked-368-people-what-they-want-from-the-apple-watch-ultra-4-heres-the-resounding-answer-and-its-not-ai">We asked 368 people what they want from the Apple Watch Ultra 4. Here’s the resounding answer (and it’s not AI)</a></li><li><a href="https://www.tomsguide.com/phones/iphones/ios-27-quietly-fixes-the-most-annoying-iphone-workaround-we-all-use">iOS 27 finally fixes the most annoying iPhone workaround we all use</a></li><li><a href="https://www.tomsguide.com/phones/iphones/new-iphone-20-video-reveals-the-8-biggest-upgrades-to-expect-from-the-20th-anniversary-iphone">New iPhone 20 video reveals the 8 biggest upgrades to expect from the 20th anniversary iPhone</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/experts-call-apples-new-lease-plan-an-attempt-to-mask-the-effect-of-rising-hardware-costs</link>
                                                                            <description>
                            <![CDATA[ Apple Upgrade is a new leasing program from the tech giant that lets you rent Apple devices for fixed terms. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">ZU3aeASc6zYAaDx3mAynmX</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/sTDBQSgzZKANHK3AZ4km5h-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 28 Jul 2026 17:35:07 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[MacBooks]]></category>
                                                    <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Laptops]]></category>
                                                    <category><![CDATA[Tablets]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                                                                <author><![CDATA[ scott.younker@futurenet.com (Scott Younker) ]]></author>                    <dc:creator><![CDATA[ Scott Younker ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/RZsUpqcJ6Uj2q83oCUwNhQ-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Scott Younker is the West Coast Reporter at Tom’s Guide. He covers all the latest tech news, including phones, computing and more. He’s been involved in tech since 2011 covering everything from cameras and swimming pool equipment to the latest gaming consoles and smart TVs. He is on a seemingly never ending hunt to build the easiest to use home media system. &lt;/p&gt;&lt;p&gt;Before Tom’s Guide, Scott worked for publications like &lt;em&gt;Digital Trends, Outdoor Photographer, Dead Beats Panel&lt;/em&gt;, and in a brief detour, &lt;em&gt;America’s Funniest Home Videos&lt;/em&gt;. Yes, he has seen more pratfalls, silly pets and ridiculous home movie fails than is reasonably healthy. &lt;/p&gt;&lt;p&gt;When not writing about the latest devices or advances in chipsets, be sure to ask about Scott about disc golf and sustainability, or just if you’re being cheeky, ask about his noodle arm. If you truly want to get nerdy, bring up board games and his ongoing losing streak. &lt;/p&gt;&lt;p&gt;Scott joined Tom&#039;s Guide in 2024 as the West Coast Reporter. He graduated from the School of Journalism at the University of Oregon with a degree in magazine journalism and a minor in communications. While there he blogged or wrote for several magazines including the Fluxx, Ethos and the Oregon Commentator. He briefly wrote and managed a moderately successful blog focused on web comics. &lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/sTDBQSgzZKANHK3AZ4km5h-1280-80.jpg">
                                                            <media:credit><![CDATA[Eric Thayer/Getty Images]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Apple logo on building ]]></media:description>                                                            <media:text><![CDATA[Apple logo on building ]]></media:text>
                                <media:title type="plain"><![CDATA[Apple logo on building ]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/sTDBQSgzZKANHK3AZ4km5h-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Today <a href="https://www.apple.com/newsroom/2026/07/apple-upgrade-launches-in-the-united-states/" target="_blank">Apple announced</a> its new leasing program, Apple Upgrade which is undergirded by Klarna for iPhone, Apple Watch, Mac and iPad.</p><p>The program lets customers sign up for a plan, similar to how you would lease a car, for fixed 12-, 24- and 36-month terms depending on the device.  There are options to upgrade to a new device early or return it at the end of the lease.</p><p>Apple called the new plan a "more flexible way to pay for products."</p><p>It's possible this does offer some flexibility from paying an upfront lump sum or tying yourself to an onerous contract via a network carrier like Verizon or T-Mobile. </p><p>However, experts I spoke with think the Upgrade plan is meant to cover <a href="https://www.tomsguide.com/computing/hardware/sk-hynix-warns-2027-will-be-worst-year-for-ram-prices-right-as-a-damning-report-reveals-something-that-will-add-fuel-to-the-price-fixing-lawsuit">rising component costs</a>. </p><p>"By shifting the focus to lower monthly payments, it helps mask the effect of rising hardware costs and makes premium devices feel more affordable and attainable for a broader range of consumers," Jitesh Ubrani, a director at IDC, said. </p><p>They added that it could entice people who don't want to pay the higher upfront costs, as even <a href="https://www.tomsguide.com/computing/macbooks/for-first-time-since-1984-thinking-about-bailing-on-apple-customers-react-apple-price-hikes">Apple has hiked prices recently</a>. It also gives Apple a "steady stream of trade-ins" that the company can resell to expand its customer base.</p><p>"Many people are effectively leasing their phones already through carrier plans; leasing a watch or a Mac -- when you know that these are also devices that have upgrade cycles -- can make sense," Techsponential's Avi Greengart told Tom's Guide.  "it's still a lease, so you won't be able to use it until it dies unless you buy out the lease, and it may not be the absolute most economical approach."</p><p>Beyond upfront prices, is Apple Upgrade better for you? Let's take a look at how the program works.</p><h2 id="how-apple-upgrade-works">How Apple Upgrade works</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:692px;"><p class="vanilla-image-block" style="padding-top:56.36%;"><img id="LAQo6BPWq3WqYSvFeCV5hY" name="Apple-Upgrade-hero_big.jpg.medium" alt="Apple Upgrade program" src="https://cdn.mos.cms.futurecdn.net/LAQo6BPWq3WqYSvFeCV5hY-1920-80.jpg" mos="" align="middle" fullscreen="" width="692" height="390" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Apple)</span></figcaption></figure><p>Apple Upgrade offers 12- or 24-month lease terms for eligible iPhones and Apple Watches. For those seeking a Mac or iPad, there are 24- or 36-month options. </p><p>Prices start as low as $11.99 per month for the Apple Watch and iPad, depending on size and storage capacity. iPhones start at $17.99, while Macs can be leased starting at $24.99 a month.</p><p>You can sign up online or at an Apple Store, where you will be approved by Klarna, which does require a soft credit check that should not impact your credit score. </p><p>At the end of the lease term, you can return the device or upgrade to a newer generation or purchase it with a one-time payment.</p><p>Compared to the outgoing iPhone Upgrade program, the Apple Upgrade Program does not include AppleCare, which is a separate subscription price and varies in price depending on your device.</p><p>Per <a href="https://www.macrumors.com/2026/07/28/apple-upgrade-program-klarna/" target="_blank">MacRumors</a>, if you miss a payment, it will be rolled into the next month's payment with no late fees. However, if you miss three consecutive payments, the lease will end, and you will have to pay the full outstanding balance, minus the value of the device when returned. If Klarna can't collect, a debt collection agency will be sent your information.</p><h2 id="apple-upgrade-prices">Apple Upgrade prices</h2><p>Apple is offering the entire iPhone 17 lineup, plus the iPhone Air, both the Apple Watch Series 11 and Apple Watch Ultra 3 and three iPad options, including the iPad Air, iPad Pro and iPad mini.</p><p>For Macs, you can lease the MacBook Air, MacBook Pro, iMac and Mac Studio. </p><p>Apple defaults to the 24-month leasing option, so we'll share that. The other options can lower or raise your price. Additionally, higher storage capacity or chip versions will also increase the monthly price.</p><p>Finally, the price does not include taxes and fees.</p><p>Here's how much the base model of each device will cost you. </p><div ><table><caption>Apple Upgrade Prices - iPhones and Watches</caption><thead><tr><th class="firstcol " ><p>Device</p></th><th  ><p>Upfront cost</p></th><th  ><p>Per month cost</p></th><th  ><p><strong>Total after 24 months</strong></p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>iPhone 17e</strong></p></td><td  ><p>$599</p></td><td  ><p>$17.99</p></td><td  ><p>$431.76</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone Air</strong></p></td><td  ><p>$999</p></td><td  ><p>$28.99</p></td><td  ><p>$695.76</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 17</strong></p></td><td  ><p>$799</p></td><td  ><p>$22.99</p></td><td  ><p>$551.76</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 17 Pro</strong></p></td><td  ><p>$1,099</p></td><td  ><p>$31.99</p></td><td  ><p>$767.76</p></td></tr><tr><td class="firstcol " ><p><strong>iPhone 17 Pro Max</strong></p></td><td  ><p>$1,199</p></td><td  ><p>$34.99</p></td><td  ><p>$839.76</p></td></tr><tr><td class="firstcol " ><p><strong>Apple Watch Series 11</strong></p></td><td  ><p>$399</p></td><td  ><p>$11.99</p></td><td  ><p>$287.76</p></td></tr><tr><td class="firstcol " ><p><strong>Apple Watch Ultra 3</strong></p></td><td  ><p>$799</p></td><td  ><p>$24.99</p></td><td  ><p>$599.76</p></td></tr></tbody></table></div><p>We've separated the iPads and Macs out because these devices can have the longer 36-month term. Again, the prices below are for the base model of each device and the 24-month term.</p><div ><table><caption>Apple Upgrade Prices - Macs and iPads</caption><thead><tr><th class="firstcol " ><p>Device</p></th><th  ><p>Upfront cost</p></th><th  ><p>Per month cost</p></th><th  ><p><strong>Total after 24 months</strong></p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>iPad Air</strong></p></td><td  ><p>$749</p></td><td  ><p>$15.99</p></td><td  ><p>$383.76</p></td></tr><tr><td class="firstcol " ><p><strong>iPad Pro</strong></p></td><td  ><p>$1,199</p></td><td  ><p>$24.99</p></td><td  ><p>$599.76</p></td></tr><tr><td class="firstcol " ><p><strong>iPad mini</strong></p></td><td  ><p>$599</p></td><td  ><p>$11.99</p></td><td  ><p>$287.76</p></td></tr><tr><td class="firstcol " ><p><strong>MacBook Air</strong></p></td><td  ><p>$1,299</p></td><td  ><p>$24.99</p></td><td  ><p>$599.76</p></td></tr><tr><td class="firstcol " ><p><strong>MacBook Pro</strong></p></td><td  ><p>$1,999</p></td><td  ><p>$38.99</p></td><td  ><p>$935.76</p></td></tr><tr><td class="firstcol " ><p><strong>iMac</strong></p></td><td  ><p>$1,499</p></td><td  ><p>$28.99</p></td><td  ><p>695.75</p></td></tr><tr><td class="firstcol " ><p><strong>Mac Studio</strong></p></td><td  ><p>$2,499</p></td><td  ><p>$48.99</p></td><td  ><p>$1,175.76</p></td></tr></tbody></table></div><h2 id="no-leasing-entry-level-devices">No leasing entry-level devices</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="XAXaMxrdpoER4r7t5G88jh" name="mac-mini-front.jpg" alt="New Mac mini just leaked — what you need to know" src="https://cdn.mos.cms.futurecdn.net/XAXaMxrdpoER4r7t5G88jh-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: Jon Prosser & Ian Zelbo)</span></figcaption></figure><p>You may have noticed several Apple devices aren't eligible for the upgrade program. It includes the vanilla iPhone 16 and iPhone 16 Plus, as well as the entry-level models of almost every device category. </p><p>Here's the full list of Apple products you can't lease:</p><ul><li>iPhone 16</li><li>iPhone 16 Plus</li><li>Apple Watch SE</li><li>MacBook Neo</li><li>Mac mini</li><li>iPad (A16)</li><li>Studio Display</li></ul><h2 id="availability">Availability</h2><p>Apple Upgrade is available now for all of the listed devices. Apple says that a security deposit is not required and that a trade-in device could reduce monthly payments. </p><p>I will note that if you end a lease early, you could see termination fees. Also, if you don't do anything at the end of the lease, you'll be charged the purchase fee. </p><p>Lastly, hidden in the fine print, upgrading a device could increase your monthly payments, which is true for both higher-capacity versions of devices and more expensive models when new generations launch in the coming years.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/we-asked-368-people-what-they-want-from-the-apple-watch-ultra-4-heres-the-resounding-answer-and-its-not-ai">We asked 368 people what they want from the Apple Watch Ultra 4. Here’s the resounding answer (and it’s not AI)</a></li><li><a href="https://www.tomsguide.com/phones/iphones/ios-27-quietly-fixes-the-most-annoying-iphone-workaround-we-all-use">iOS 27 finally fixes the most annoying iPhone workaround we all use</a></li><li><a href="https://www.tomsguide.com/phones/iphones/new-iphone-20-video-reveals-the-8-biggest-upgrades-to-expect-from-the-20th-anniversary-iphone">New iPhone 20 video reveals the 8 biggest upgrades to expect from the 20th anniversary iPhone</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ First OLED iPad mini tipped for October launch — here's why I'm excited (and worried) ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Apple will reportedly launch the first OLED iPad mini. That’s according to Bloomberg reporter and Apple tipster <a href="https://www.bloomberg.com/news/articles/2026-07-16/apple-nears-launch-of-oled-ipad-mini-new-ipad-air-and-base-ipad-in-2027" target="_blank">Mark Gurman</a>, whose sources claim this updated iPad mini could arrive as early as this October. If true, this would be the biggest upgrade for the company’s smallest tablet. This has me both excited and worried.</p><p>The iPad mini was last updated in October 2024 with the <a href="https://www.tomsguide.com/tablets/ipads/ipad-mini-7-review">iPad mini 7</a>. Besides the A17 Pro chip, it retained the same design introduced in 2021. </p><p>This reported 8th-generation iPad mini model, currently code-named J510, would presumably have a faster chip along with the OLED panel. The report doesn’t specify if the tablet will receive other design upgrades, like thinner bezels.</p><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>Gurman’s report also discusses other upcoming iPad models. This includes an updated entry-level iPad, code-named J581, reportedly set for release early next year, according to Gurman’s sources. New iPad Air models, in both 11- and 13-inch variants, code-named J807 and J837, are allegedly dropping in Spring of 2027, along with new iPad Pro models around the same time.</p><p>Regarding the other iPads, Gurman doesn’t say whether or not the iPad Air line will get the same OLED upgrade as the iPad mini 8. If the iPad Air keeps the same Liquid Retina display, it would be the only iPad model without an OLED panel.</p><p>The iPad mini 7 currently starts at $599, which is $100 more than its original cost, 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>. Given the volatility of prices thanks to the ongoing <a href="https://www.tomsguide.com/computing/the-ram-crisis-is-so-much-bigger-than-pcs-heres-the-rest-of-the-products-caught-in-the-crossfire">RAM crisis</a>, it’s difficult to say how much the iPad mini 8 could cost. However, the introduction of an OLED panel would naturally make this tablet more expensive.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OLqKbX"></div>                            </div>                            <script src="https://kwizly.com/embed/OLqKbX.js" async></script><h2 id="outlook">Outlook</h2><p>Though Mark Gurman has a stellar track record for Apple scoops, it’s best to take this report with a grain of salt, as Apple has yet to officially announce the new iPad mini or new iPads in general. We’ll keep our ears to the ground on this one, so stay tuned for more as we hear 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/the-4-biggest-allegations-in-apples-lawsuit-against-openai">The 4 biggest allegations in Apple's lawsuit against OpenAI</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-ultra-4-these-are-the-upgrades-apple-needs-to-make-to-remain-the-smartwatch-king">Apple Watch Ultra 4 — these are the upgrades it needs</a></li><li><a href="https://www.tomsguide.com/phones/iphones/7-hidden-ios-27-features-apple-didnt-tell-you-about-at-wwdc">7 hidden iOS 27 features Apple didn't tell you about</a></li></ul><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=ipads&brands=Apple&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="12" selected>12 Items\x3C/option>                \x3Coption value="24">24 Items\x3C/option>                \x3Coption value="48">48 Items\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item tg-df-dl-row">              \x3Cdiv>                \x3Cspan class="tg-df-dl-row-text">Deal Mode\x3C/span>                \x3Cspan class="tg-df-dl-row-subtext">Only show products with active offers or previous prices (was_price)\x3C/span>              \x3C/div>              \x3Clabel class="tg-df-toggle">                \x3Cinput type="checkbox" id="tg-df-deal-mode">                \x3Cspan class="tg-df-slider">\x3C/span>              \x3C/label>            \x3C/div>            \x3Cdiv class="tg-df-setting-item tg-df-dl-row">              \x3Cdiv>                \x3Cspan class="tg-df-dl-row-text">Editor Mode\x3C/span>                \x3Cspan class="tg-df-dl-row-subtext">Enable multi-select to copy deals to CMS\x3C/span>              \x3C/div>              \x3Clabel class="tg-df-toggle">                \x3Cinput type="checkbox" id="tg-df-editor-mode">                \x3Cspan class="tg-df-slider">\x3C/span>              \x3C/label>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">View Mode\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-view-mode-select">                \x3Coption value="auto">Auto Collection\x3C/option>                \x3Coption value="carousel">Carousel\x3C/option>                \x3Coption value="savings_squad">Savings Squad\x3C/option>                \x3Coption value="grid">Grid (Columns)\x3C/option>                \x3Coption value="row">Row (List)\x3C/option>              \x3C/select>            \x3C/div>          \x3C/div>        \x3C/div>      \x3C/div>      \x3Cdiv class="tg-df-filters">        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-category-filter-wrapper" style="display: none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-category-filter" aria-label="Category">            \x3Coption value="all">All Categories\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-multiselect-container" id="tg-df-brand-filter-wrapper" style="display:none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M4.25 5.61C6.27 8.2 10 13 10 13v6c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-6s3.72-4.8 5.74-7.39A.998.998 0 0 0 18.95 4H5.04c-.83 0-1.3.95-.79 1.61z"/>          \x3C/svg>          \x3Cdiv class="tg-df-filter-select tg-df-multiselect-trigger" id="tg-df-brand-trigger" tabindex="0">            Any Brand          \x3C/div>          \x3Cdiv class="tg-df-multiselect-dropdown" id="tg-df-brand-dropdown">            \x3C!-- Populated via script --\x3E          \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M9 3L5 6.99h3V14h2V6.99h3L9 3zm7 14.01V10h-2v7.01h-3L15 21l4-3.99h-3z"/>          \x3C/svg>          \x3Cselect class="tg-df-sort-select" aria-label="Sort Deals">            \x3Coption value="date_desc">Newest First\x3C/option>            \x3Coption value="best_match">Sort by: Match\x3C/option>            \x3Coption value="price_asc">Price Low to High\x3C/option>            \x3Coption value="price_desc">Price High to Low\x3C/option>            \x3Coption value="discount_desc">Biggest Discount\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-price-range-wrapper" id="tg-df-custom-price-wrapper" style="display: flex; align-items:center; justify-content:center; padding: 10px 20px; gap: 8px; border: 1px solid var(--tg-df-border); border-radius: 100px; background-color: var(--tg-df-bg);">          \x3Cspan style="font-size:14px; font-weight:500; color:var(--tg-df-text-primary);">Price\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-min" placeholder="Min" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">          \x3Cspan style="color:var(--tg-df-text-muted)">-\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-max" placeholder="Max" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-legacy-price-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-price-filter" aria-label="Filter Prices">            \x3Coption value="all">All Prices\x3C/option>            \x3Coption value="under50">Under $50\x3C/option>            \x3Coption value="50_100">$50 - $100\x3C/option>            \x3Coption value="100_200">$100 - $200\x3C/option>            \x3Coption value="200_500">$200 - $500\x3C/option>            \x3Coption value="over500">Over $500\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-discount-filter-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-discount-filter" aria-label="Discount Amount">            \x3Coption value="all">Any discount\x3C/option>            \x3Coption value="5">Min 5%\x3C/option>            \x3Coption value="10">Min 10%\x3C/option>            \x3Coption value="15">Min 15%\x3C/option>            \x3Coption value="20">Min 20%\x3C/option>            \x3Coption value="25">Min 25%\x3C/option>            \x3Coption value="30">Min 30%\x3C/option>            \x3Coption value="40">Min 40%\x3C/option>            \x3Coption value="50">Min 50%\x3C/option>            \x3Coption value="60">Min 60%\x3C/option>            \x3Coption value="70">Min 70%\x3C/option>          \x3C/select>        \x3C/div>      \x3C/div>    \x3C/div>    \x3C!-- Deals Grid Wrapper --\x3E    \x3Cdiv class="tg-df-grid-wrapper tg-df-carousel-cards-wrapper" id="tg-df-grid-wrapper">      \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3Cdiv class="tg-df-grid" id="tg-df-grid">        \x3C!-- Content populated by JavaScript --\x3E      \x3C/div>      \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>    \x3C/div>        \x3C!-- Vouchers Modal --\x3E    \x3Cdiv class="tg-df-modal-backdrop" id="tg-df-vouchers-modal">      \x3Cdiv class="tg-df-modal">        \x3Cdiv class="tg-df-modal-header">          \x3Ch3 class="tg-df-modal-title" id="tg-df-vouchers-title">Available Coupons & Deals\x3C/h3>          \x3Cbutton class="tg-df-modal-close" id="tg-df-vouchers-close">            \x3Csvg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">              \x3Cline x1="18" y1="6" x2="6" y2="18">\x3C/line>              \x3Cline x1="6" y1="6" x2="18" y2="18">\x3C/line>            \x3C/svg>          \x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-modal-body" id="tg-df-vouchers-content">          \x3C!-- Vouchers injected here --\x3E        \x3C/div>      \x3C/div>    \x3C/div>  \x3C/div>`;      if (!template) {        template = document.createElement('template');        template.innerHTML = rawTemplate;      }      let shadowRoot = null;      if (hostContainer && template) {        hostContainer.setAttribute('data-initialized', 'true');        shadowRoot = hostContainer.attachShadow({ mode: 'open' });        shadowRoot.appendChild(template.content.cloneNode(true));      }      class DealsFinderWidget {        constructor(config) {          this.rootNode = config.rootNode || document;          this.hostContainer = config.hostContainer || null;          this.rootId = config.rootId || 'signal-deals-finder-root';          this.root = this.rootNode.querySelector('#' + this.rootId);          if (!this.root) return;          this.widgetId = (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'widget-' + Date.now() + '-' + Math.random().toString(36).slice(2);          this.grid = this.root.querySelector('#tg-df-grid');          this.tagsContainer = this.root.querySelector('#tg-df-tags-container');          this.categoryFilter = this.root.querySelector('#tg-df-category-filter');          this.categoryFilterWrapper = this.root.querySelector('#tg-df-category-filter-wrapper');          this.searchInput = this.root.querySelector('.tg-df-search-input');          this.autocompleteDropdown = this.root.querySelector('#tg-df-autocomplete');          this.sortSelect = this.root.querySelector('.tg-df-sort-select');          this.searchBtn = this.root.querySelector('.tg-df-search-btn');                    this.settingsToggle = this.root.querySelector('#tg-df-settings-toggle');          this.settingsPanel = this.root.querySelector('#tg-df-settings-panel');          this.settingsBackdrop = this.root.querySelector('#tg-df-settings-backdrop');          this.regionSelect = this.root.querySelector('#tg-df-region-select');          this.retailerSelect = this.root.querySelector('#tg-df-retailer-select');          this.offerTypeSelect = this.root.querySelector('#tg-df-offer-type-select');          this.viewModeSelect = this.root.querySelector('#tg-df-view-mode-select');          this.rowsSelect = this.root.querySelector('#tg-df-rows-select');          this.dealModeToggle = this.root.querySelector('#tg-df-deal-mode');          this.editorModeToggle = this.root.querySelector('#tg-df-editor-mode');          this.priceFilter = this.root.querySelector('#tg-df-price-filter');          this.discountFilter = this.root.querySelector('#tg-df-discount-filter');                    this.editorBar = this.root.querySelector('#tg-df-editor-bar');          this.editorSelectedCount = this.root.querySelector('#tg-df-selected-count');          this.editorCopyBtn = this.root.querySelector('#tg-df-editor-copy');          this.editorClearBtn = this.root.querySelector('#tg-df-editor-clear');                    this.apiUrl = 'https://search-api.fie.future.net.uk/widget.php';          this.deals = [];          this.displayLimit = 12;          this.airedaleArticles = null;          this.airedaleTags = [];          this.airedaleTagCounts = {};          this.activeDealTag = null;          this.selectedBrands = [];          this.currentQuery = '';          this.editorMode = this.hostContainer ? this.hostContainer.hasAttribute('data-editor-mode') : false;          this.viewModeOverride = this.hostContainer ? this.hostContainer.getAttribute('data-view-mode') : null;          this.selectedDeals = new Map();                    this.brandFilterWrapper = this.root.querySelector('#tg-df-brand-filter-wrapper');          this.brandTrigger = this.root.querySelector('#tg-df-brand-trigger');          this.brandDropdown = this.root.querySelector('#tg-df-brand-dropdown');                    this.customPriceWrapper = this.root.querySelector('#tg-df-custom-price-wrapper');          this.customPriceMin = this.root.querySelector('#tg-df-custom-price-min');          this.customPriceMax = this.root.querySelector('#tg-df-custom-price-max');          this.legacyPriceWrapper = this.root.querySelector('#tg-df-legacy-price-wrapper');          this.discountFilterWrapper = this.root.querySelector('#tg-df-discount-filter-wrapper');          this.initResizeObserver();          this.init();            if (['carousel', 'carousel-compact', 'auto', 'grid', 'row'].includes(this.getViewMode())) { this.loadCarouselSpreadsheet(); }        }        getViewMode() {          if (this.viewModeOverride && (!this.editorMode || !this.viewModeSelect)) {            return this.viewModeOverride;          }          return (this.viewModeSelect && this.viewModeSelect.value) ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');        }        applyLayoutMode() {          if (!this.grid) return;          const mode = this.getViewMode();          this.grid.classList.remove('layout-row', 'layout-grid', 'tg-df-grid-auto', 'carousel-compact', 'layout-replica-1', 'layout-replica-2');                    const carouselHost = this.root.querySelector('#tg-df-carousel-host');          const controlsDiv = this.root.querySelector('#tg-df-controls');          if (mode === 'carousel' || mode === 'auto' || mode === 'grid' || mode === 'row') {             if (mode === 'carousel') this.grid.classList.add('carousel-compact');             if (carouselHost) carouselHost.style.display = 'block';             if (controlsDiv) controlsDiv.style.display = 'none';             if (this.root.classList.contains('tg-df-container') && mode === 'carousel') {               this.root.classList.add('is-carousel');             } else if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          } else {             if (carouselHost) carouselHost.style.display = 'none';             if (controlsDiv) controlsDiv.style.display = 'flex';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          }          if (mode === 'grid') {            this.grid.classList.add('layout-grid');          } else if (mode === 'row') {            this.grid.classList.add('layout-row');          } else if (mode === 'savings_squad') {            this.grid.classList.add('tg-df-grid-auto', 'savings-squad-cards');          } else if (mode !== 'carousel') {            this.grid.classList.add('tg-df-grid-auto');          }                    const settingsWrapper = this.root.querySelector('.tg-df-settings-wrapper');          if (settingsWrapper) {            settingsWrapper.style.display = mode === 'auto' ? 'none' : 'block';          }          if (this.customPriceWrapper) {             this.customPriceWrapper.style.display = mode === 'auto' ? 'flex' : 'none';          }          if (this.legacyPriceWrapper) {             this.legacyPriceWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }          if (this.discountFilterWrapper) {             this.discountFilterWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }        }        initResizeObserver() {          try {            if (window.parent === window) return;          } catch (e) {            // cross origin frame check threw          }          const emitHeight = () => {            try {              const height = document.documentElement.scrollHeight || document.body.scrollHeight;              const msg = { type: 'embed-size', height: height };              if (window.parent && window.parent !== window) {                window.parent.postMessage(msg, '*');                window.parent.postMessage(JSON.stringify({ ...msg, sentinel: 'amp' }), '*');              }            } catch (e) {}          };                    if (window.ResizeObserver) {            try {              const ro = new ResizeObserver(() => emitHeight());              ro.observe(document.body);              if (this.root) ro.observe(this.root);            } catch(e){ console.warn(e); }          }          window.addEventListener('resize', emitHeight);          setTimeout(emitHeight, 300);        }        initCountdown() {          this.cdWrapper = this.root.querySelector('#tg-df-countdown-wrapper');                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          this.showCountdown = params.get('show_countdown') === 'true';          const showHeaderDetails = params.get('show_header_details') !== 'false';          const eyebrow = this.root.querySelector('.tg-df-carousel-box-eyebrow');          const title = this.root.querySelector('.tg-df-carousel-box-title');          const subtitle = this.root.querySelector('.tg-df-carousel-box-subtitle');          if (!showHeaderDetails) {            let containerElement = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (containerElement) containerElement.classList.add('hide-header-details');            if (eyebrow) eyebrow.style.display = 'none';            if (title) title.style.display = 'none';            if (subtitle) subtitle.style.display = 'none';          }          if (!this.cdWrapper) return;          this.cdTitle = this.root.querySelector('#tg-df-countdown-title');          this.cdDays = this.root.querySelector('#tg-df-cd-days');          this.cdHrs = this.root.querySelector('#tg-df-cd-hrs');          this.cdMin = this.root.querySelector('#tg-df-cd-min');          this.cdSec = this.root.querySelector('#tg-df-cd-sec');          this.updateCountdown();          this.cdInterval = setInterval(() => this.updateCountdown(), 1000);        }        updateCountdown() {          if (!this.cdWrapper) return;          if (!this.showCountdown) {            this.cdWrapper.style.display = 'none';            return;          }          const area = this.getAreaCode();          let offset = '-04:00';          if (['DE', 'FR', 'IT', 'ES', 'NL'].includes(area)) {             offset = '+02:00';          } else if (['GB', 'IE', 'UK'].includes(area)) {             offset = '+01:00';          }          const startTime = new Date('2026-06-23T00:00:00' + offset).getTime();          const endTime = new Date('2026-06-26T00:00:00' + offset).getTime();          const now = Date.now();          let targetTime = 0;          if (now < startTime) {             targetTime = startTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day starts in';             this.cdWrapper.style.display = 'flex';          } else if (now < endTime) {             targetTime = endTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day ends in';             this.cdWrapper.style.display = 'flex';          } else {             this.cdWrapper.style.display = 'none';             if (this.cdInterval) clearInterval(this.cdInterval);             return;          }          const diff = Math.max(0, targetTime - now);          const d = Math.floor(diff / (1000 * 60 * 60 * 24));          const h = Math.floor((diff / (1000 * 60 * 60)) % 24);          const m = Math.floor((diff / 1000 / 60) % 60);          const s = Math.floor((diff / 1000) % 60);          if (this.cdDays) this.cdDays.textContent = d;          if (this.cdHrs) this.cdHrs.textContent = h;          if (this.cdMin) this.cdMin.textContent = m;          if (this.cdSec) this.cdSec.textContent = s;        }        init() {          this.initCountdown();          try {            initAnalytics();          } catch (e) {            console.warn('Deals Widget Analytics Error:', e);          }                    this.bindEvents();                    let initialQuery = '';                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          let initialViewMode = params.get('view_mode');          if (!params.has('search') && !params.has('q') && !params.has('query') && initialViewMode !== 'savings_squad') {             initialQuery = 'Everything';             if (this.discountFilter && !params.has('min_discount_ratio')) {               this.discountFilter.value = '5';             }          }          const website = params.get('website') || 'tomsguide';          this.website = website;          if (website === 'techradar') {            const squadHeader = this.root.querySelector('.tg-df-savings-squad-header');            if (squadHeader) {               const pic = squadHeader.querySelector('picture');               if (pic) pic.style.display = 'none';            }            const style = document.createElement('style');            style.innerHTML = `              .tg-df-container .hawk-affiliate-link-deal-button, .tg-df-container .tg-df-card-cta { background-color: #5DAF08 !important; }              .tg-df-container .hawk-affiliate-link-deal-button:hover, .tg-df-container .tg-df-card-cta:hover { background-color: #4a8c06 !important; }            `;            this.root.appendChild(style);          }                    if (this.regionSelect) {            this.regionSelect.value = params.get('region') || 'auto';            this.updatePriceDropdownCurrency();          }                    if (this.retailerSelect && params.has('retailer')) {            this.retailerSelect.value = params.get('retailer');          }                    if (params.has('brands')) {            const b = params.get('brands');            if (b) {              this.selectedBrands = b.split(',');            }          }                    if (this.offerTypeSelect && params.has('offer_type')) {            this.offerTypeSelect.value = params.get('offer_type');          }          if (params.has('bg_color')) {            const bg = params.get('bg_color');            if (bg === 'white') {              this.root.style.setProperty('background-color', '#ffffff', 'important');            } else if (bg === 'transparent') {              this.root.style.setProperty('background-color', 'transparent', 'important');            } else if (bg === 'light_blue') {              this.root.style.setProperty('background-color', '#E7F0FF', 'important');            }          } else {             this.root.style.removeProperty('background-color');          }                    if (params.has('view_mode')) {            if (this.viewModeSelect) {              this.viewModeSelect.value = params.get('view_mode');            } else {              this.viewModeOverride = params.get('view_mode');            }          }          if (this.rowsSelect && params.has('rows')) {            this.rowsSelect.value = params.get('rows');          }          if (params.has('price')) {            const priceVal = params.get('price');            if (this.priceFilter) {               // Try assigning it directly to select. If it's not present implicitly ignores               this.priceFilter.value = priceVal;            }            if (priceVal.includes('_')) {               const parts = priceVal.split('_');               if (this.customPriceMin && parts[0]) this.customPriceMin.value = parts[0];               if (this.customPriceMax && parts[1]) this.customPriceMax.value = parts[1];            }          }          if (this.discountFilter && params.has('min_discount_ratio')) {            // Need to convert back from ratio (e.g. 0.8) to select value (e.g. "20")            const ratioStr = params.get('min_discount_ratio');            const ratioFloat = parseFloat(ratioStr);            if (!isNaN(ratioFloat)) {               const percentage = Math.round((1 - ratioFloat) * 100);               this.discountFilter.value = percentage.toString();            }          }          if (this.sortSelect) {            this.sortSelect.value = params.get('sort') || 'discount_desc';          }          if (this.dealModeToggle && params.has('deal_mode')) {            this.dealModeToggle.checked = params.get('deal_mode') === 'true' || params.get('deal_mode') === '1';          }                    // Re-apply layout after params have updated control values          this.applyLayoutMode();                    if (params.get('search')) {            initialQuery = params.get('search');          } else if (params.get('q')) {            initialQuery = params.get('q');          } else if (params.get('query')) {            initialQuery = params.get('query');          }                    this.currentQuery = initialQuery;          if (this.searchInput) {            this.searchInput.value = this.currentQuery;          }                    if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {            this.fetchDeals(this.currentQuery);          } else {            this.render();          }        }        updatePriceDropdownCurrency() {          if (!this.priceFilter || !this.regionSelect) return;          const currencySymbols = {            'US': '$',            'GB': '£',            'CA': '$CA',            'AU': '$AU',            'DE': '€',            'FR': '€',            'IT': '€',          };          const area = this.getAreaCode();          const cur = currencySymbols[area || 'US'] || '$';                    const options = this.priceFilter.options;          for (let i = 0; i < options.length; i++) {            const opt = options[i];            if (opt.value === 'all') {              opt.innerText = 'All Prices';            } else if (opt.value === 'under50') {              opt.innerText = `Under ${cur}50`;            } else if (opt.value === '50_100') {              opt.innerText = `${cur}50 - ${cur}100`;            } else if (opt.value === '100_200') {              opt.innerText = `${cur}100 - ${cur}200`;            } else if (opt.value === '200_500') {              opt.innerText = `${cur}200 - ${cur}500`;            } else if (opt.value === 'over500') {              opt.innerText = `Over ${cur}500`;            }          }        }        populateBrandDropdown(values) {          if (!this.brandDropdown || !this.brandFilterWrapper) return;          this.brandFilterWrapper.style.display = 'flex'; // show the wrapper                    let html = '';          const allChecked = this.selectedBrands.length === 0 ? 'checked' : '';          const _div = '<' + '/div>';          const _span = '<' + '/span>';          html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="" ${allChecked} class="tg-df-brand-chk"> Any Brand${_div}`;                    values.forEach(v => {             if (!v.formatted_value || v.formatted_value === 'Any Brand') return;             const isChecked = this.selectedBrands.includes(v.formatted_value) ? 'checked' : '';             html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="${this.escapeHTML(v.formatted_value)}" ${isChecked} class="tg-df-brand-chk"> ${this.escapeHTML(v.formatted_value)} \x3Cspan style="color:var(--tg-df-text-muted);font-size:12px">(${v.count || 0})${_span}${_div}`;          });                    this.brandDropdown.innerHTML = html;                    // Re-bind listeners          const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');          chks.forEach(chk => {            chk.addEventListener('change', (e) => {              const val = e.target.value;              if (val === '') {                this.selectedBrands = [];              } else {                if (e.target.checked) {                   if (!this.selectedBrands.includes(val)) this.selectedBrands.push(val);                } else {                   this.selectedBrands = this.selectedBrands.filter(b => b !== val);                }              }                            if (this.selectedBrands.length === 0) {                 this.brandTrigger.innerText = 'Any Brand';              } else if (this.selectedBrands.length === 1) {                 this.brandTrigger.innerText = this.selectedBrands[0];              } else {                 this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;              }                            // Only call API if changed from UI interactions              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.updateURLParams();                 this.fetchDeals(this.currentQuery);              }            });          });                    // Update button text on load          if (this.selectedBrands.length === 0) {             this.brandTrigger.innerText = 'Any Brand';          } else if (this.selectedBrands.length === 1) {             this.brandTrigger.innerText = this.selectedBrands[0];          } else {             this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;          }        }        updateURLParams() {          const url = new URL(window.location);          if (this.currentQuery && this.currentQuery !== 'Gaming laptops') {            url.searchParams.set('q', this.currentQuery);          } else {            url.searchParams.delete('q');            url.searchParams.delete('search');            url.searchParams.delete('query');          }                    if (this.regionSelect && this.regionSelect.value !== 'auto') {            url.searchParams.set('region', this.regionSelect.value);          } else {            url.searchParams.delete('region');          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.set('retailer', this.retailerSelect.value);          } else {            url.searchParams.delete('retailer');          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.set('brands', this.selectedBrands.join(','));          } else {            url.searchParams.delete('brands');          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.set('offer_type', this.offerTypeSelect.value);          } else {            url.searchParams.delete('offer_type');          }                    if (this.viewModeSelect && this.viewModeSelect.value !== 'auto') {            url.searchParams.set('view_mode', this.viewModeSelect.value);          } else {            url.searchParams.delete('view_mode');          }                    if (this.rowsSelect && this.rowsSelect.value !== '12') {            url.searchParams.set('rows', this.rowsSelect.value);          } else {            url.searchParams.delete('rows');          }                    const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             url.searchParams.set('price', `${min}_${max}`);          } else if (this.priceFilter && this.priceFilter.value !== 'all') {            url.searchParams.set('price', this.priceFilter.value);          } else {            url.searchParams.delete('price');          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {               const ratio = (100 - v) / 100;               url.searchParams.set('min_discount_ratio', ratio.toString());            }          } else {            url.searchParams.delete('min_discount_ratio');          }                    if (this.sortSelect && this.sortSelect.value !== 'discount_desc') {            url.searchParams.set('sort', this.sortSelect.value);          } else {            url.searchParams.delete('sort');          }                    if (this.dealModeToggle && this.dealModeToggle.checked) {            url.searchParams.set('deal_mode', 'true');          } else {            url.searchParams.delete('deal_mode');          }                    window.history.replaceState({}, '', url);        }        bindEvents() {          const roundels = this.root.querySelectorAll('.tg-df-carousel-cat.original-hardcoded');          roundels.forEach(r => {             r.addEventListener('click', () => {                const q = r.getAttribute('data-query');                const pr = r.getAttribute('data-pr');                if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: q,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = q;                const label = this.root.querySelector('#tg-df-carousel-title-label');                if (label) label.textContent = 'Best ' + q;                if (this.priceFilter) this.priceFilter.value = pr || 'all';                if (this.discountFilter) this.discountFilter.value = '5';                if (this.searchInput) this.searchInput.value = q;                                roundels.forEach(ro => ro.classList.remove('active'));                r.classList.add('active');                this.fetchDeals(this.currentQuery);             });          });          const discBtns = this.root.querySelectorAll('.tg-df-carousel-filter-btn');          discBtns.forEach(b => {             b.addEventListener('click', () => {                const d = b.getAttribute('data-d');                const pr = b.getAttribute('data-pr');                const ot = b.getAttribute('data-ot');                let label = b.innerText ? b.innerText.trim() : '';                let filterType = 'unknown';                let filterVal = 'unknown';                if (d !== null) { filterType = 'discount'; filterVal = d; }                else if (pr !== null) { filterType = 'price'; filterVal = pr; }                else if (ot !== null) { filterType = 'offertype'; filterVal = ot; }                if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-${filterType}-${filterVal}`, name: 'Filter Button', label: label });                                if (d !== null) {                   if (this.discountFilter) this.discountFilter.value = this.discountFilter.value === d ? '0' : d;                } else if (pr !== null) {                   if (this.priceFilter) this.priceFilter.value = this.priceFilter.value === pr ? 'all' : pr;                } else if (ot !== null) {                   if (this.offerTypeSelect) this.offerTypeSelect.value = this.offerTypeSelect.value === ot ? 'all' : ot;                } else {                   if (this.discountFilter) this.discountFilter.value = '0';                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.offerTypeSelect) this.offerTypeSelect.value = 'all';                }                if (d === null && pr === null && ot === null && b.getAttribute("data-type") !== "custom") {                   discBtns.forEach(ro => ro.classList.remove('active'));                   b.classList.add('active');                } else if (b.getAttribute("data-type") !== "custom") {                   // Only operate on hardcoded buttons (those without data-type)                   discBtns.forEach(ro => {                      if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active');                   });                                      let makeActive = true;                   if (d !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-d') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (pr !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-pr') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (ot !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-ot') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   }                                      if (makeActive) b.classList.add('active');                                      // Check if anything is active, if not activate "All"                   let anyActive = false;                   discBtns.forEach(ro => { if (ro.classList.contains('active') && ro.getAttribute('data-type') !== 'custom') anyActive = true; });                   if (!anyActive) {                       discBtns.forEach(ro => { if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.add('active'); });                   }                }                                this.fetchDeals(this.currentQuery);             });          });          if (this.brandTrigger && this.brandDropdown) {            this.brandTrigger.addEventListener('click', () => {              this.brandDropdown.classList.toggle('active');            });            document.addEventListener('click', (e) => {              if (this.brandFilterWrapper && !e.composedPath().includes(this.brandFilterWrapper)) {                this.brandDropdown.classList.remove('active');              }            });          }          let debounceTimer;          if(this.searchInput) {            this.searchInput.addEventListener('input', (e) => {              clearTimeout(debounceTimer);              const query = e.target.value.trim();              this.currentQuery = query;              if (this.getViewMode() === 'savings_squad' && this.autocompleteDropdown && this.airedaleTags && query.length > 0) {                 const matches = this.airedaleTags.filter(t => t.toLowerCase().includes(query.toLowerCase()) && t.toLowerCase() !== query.toLowerCase()).slice(0, 5);                 if (matches.length > 0) {                    this.autocompleteDropdown.innerHTML = matches.map(m => `\x3Cdiv class="tg-df-autocomplete-item" data-tag="${this.escapeHTML(m)}">${this.escapeHTML(m)}<` + `/div>`).join('');                    this.autocompleteDropdown.classList.add('active');                 } else {                    this.autocompleteDropdown.classList.remove('active');                 }              } else if (this.autocompleteDropdown) {                 this.autocompleteDropdown.classList.remove('active');              }              debounceTimer = setTimeout(() => {                this.updateURLParams();                if (query.length > 2) {                  this.fetchDeals(query);                } else if (query.length === 0) {                  this.deals = [];                  this.render();                }              }, 400);            });            this.searchInput.addEventListener('keypress', (e) => {              if (e.key === 'Enter') {                if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');                clearTimeout(debounceTimer);                const query = e.target.value.trim();                this.currentQuery = query;                this.activeDealTag = null;                trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                this.updateURLParams();                if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                   this.fetchDeals(query);                }              }            });          }          if (this.autocompleteDropdown) {             this.autocompleteDropdown.addEventListener('click', (e) => {                const item = e.target.closest('.tg-df-autocomplete-item');                if (item) {                   const tag = item.getAttribute('data-tag');                   this.currentQuery = tag;                   if (this.searchInput) this.searchInput.value = tag;                   this.activeDealTag = tag;                   this.autocompleteDropdown.classList.remove('active');                   this.updateURLParams();                   this.fetchDeals(tag);                }             });             document.addEventListener('click', (e) => {               if (this.autocompleteDropdown && this.searchInput && !e.composedPath().includes(this.searchInput) && !e.composedPath().includes(this.autocompleteDropdown)) {                 this.autocompleteDropdown.classList.remove('active');               }             });          }          if (this.searchBtn) {            this.searchBtn.addEventListener('click', () => {              if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');              clearTimeout(debounceTimer);              const query = this.searchInput.value.trim();              trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });              this.activeDealTag = null;              this.currentQuery = query;              this.updateURLParams();              if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.fetchDeals(query);              }            });          }          if(this.sortSelect) this.sortSelect.addEventListener('change', () => {            trackElementInteraction({ id: `sort-option-${this.sortSelect.value}`, name: 'Sort', label: `Sort: ${this.sortSelect.options[this.sortSelect.selectedIndex].text}` });            this.updateURLParams();            if (this.deals.length > 0) {              this.sortData();              this.render();            }          });                    const priceFilter = this.root.querySelector('#tg-df-price-filter');          if (priceFilter) {            this.priceFilter = priceFilter;            this.priceFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-price-${this.priceFilter.value}`, name: 'Price', label: this.priceFilter.options[this.priceFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          const updateCustomPrice = () => {             this.updateURLParams();             if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);             } else {                this.render();             }          };          if (this.customPriceMin) {             this.customPriceMin.addEventListener('change', updateCustomPrice);             this.customPriceMin.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          if (this.customPriceMax) {             this.customPriceMax.addEventListener('change', updateCustomPrice);             this.customPriceMax.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          const discountFilter = this.root.querySelector('#tg-df-discount-filter');          if (discountFilter) {            this.discountFilter = discountFilter;            this.discountFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-discount-${this.discountFilter.value}`, name: 'Discount', label: this.discountFilter.options[this.discountFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          if (this.categoryFilter) {            this.categoryFilter.addEventListener('change', (e) => {               const val = e.target.value === 'all' ? null : e.target.value;               this.activeDealTag = val;               this.fetchSavingsSquad();            });          }                    if (this.settingsToggle) {            this.settingsToggle.addEventListener('click', () => {              const o = this.settingsPanel.classList.toggle('active');              this.settingsBackdrop.classList.toggle('active');              if (o) trackElementInteraction({ id: 'filter-open', name: 'Filters', label: 'Open filters' });            });          }                    if (this.settingsBackdrop) {            this.settingsBackdrop.addEventListener('click', () => {              this.settingsPanel.classList.remove('active');              this.settingsBackdrop.classList.remove('active');            });          }                    if (this.regionSelect) {            this.regionSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-region-${this.regionSelect.value}`, name: 'Region', label: this.regionSelect.options[this.regionSelect.selectedIndex].text });              this.updateURLParams();              this.updatePriceDropdownCurrency();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.retailerSelect) {            this.retailerSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-merchant-${this.retailerSelect.value}`, name: 'Retailer', label: this.retailerSelect.options[this.retailerSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.offerTypeSelect) {            this.offerTypeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-offertype-${this.offerTypeSelect.value}`, name: 'Offer Type', label: this.offerTypeSelect.options[this.offerTypeSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.viewModeSelect) {            this._prevViewMode = this.viewModeSelect.value;            this.viewModeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-viewmode-${this.viewModeSelect.value}`, name: 'View Mode', label: this.viewModeSelect.options[this.viewModeSelect.selectedIndex].text });                            // Reset all active toggles and filters to prevent config carry-over              this.selectedBrands = [];              if (this.brandTrigger) this.brandTrigger.innerText = 'Select Brands';              if (this.brandDropdown) {                const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                chks.forEach(chk => { chk.checked = false; });              }              if (this.priceFilter) this.priceFilter.value = 'all';              if (this.customPriceMin) this.customPriceMin.value = '';              if (this.customPriceMax) this.customPriceMax.value = '';              if (this.sortSelect) this.sortSelect.value = this.viewModeSelect.value === 'savings_squad' ? 'date_desc' : 'discount_desc';              if (this.discountFilter) this.discountFilter.value = '0';              if (this.retailerSelect) this.retailerSelect.value = '';              if (this.offerTypeSelect) this.offerTypeSelect.value = '';              if (this.rowsSelect) this.rowsSelect.value = '12';              if (this.categoryFilter) this.categoryFilter.value = 'all';              this.activeDealTag = null;              this.updateURLParams();              this.applyLayoutMode();                            if (this.getViewMode() === 'savings_squad' || this._prevViewMode === 'savings_squad') {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }              this._prevViewMode = this.viewModeSelect.value;            });          }                    if (this.rowsSelect) {            this.rowsSelect.addEventListener('change', () => {              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.dealModeToggle) {            this.dealModeToggle.addEventListener('change', () => {              this.updateURLParams();              this.render();            });          }          if (this.editorModeToggle) {             this.editorModeToggle.addEventListener('change', (e) => {                this.editorMode = e.target.checked;                this.render();                this.updateFloatingCopyBar();             });          }          if (this.editorCopyBtn) {             this.editorCopyBtn.addEventListener('click', () => {                this.copySelectedDealsToCMS();             });          }          if (this.editorClearBtn) {             this.editorClearBtn.addEventListener('click', () => {                this.selectedDeals.clear();                this.render();                this.updateFloatingCopyBar();             });          }          if (this.grid) {            this.grid.addEventListener('change', (e) => {               if (e.target.classList.contains('tg-df-deal-checkbox')) {                  const dealId = e.target.getAttribute('data-id');                  if (e.target.checked) {                     const dealObj = this.deals.find(d => d.id === dealId);                     if (dealObj) this.selectedDeals.set(dealId, dealObj);                  } else {                     this.selectedDeals.delete(dealId);                  }                  this.updateFloatingCopyBar();               }            });            this.grid.addEventListener('click', (e) => {              const dealCard = e.target.closest('[data-action="deal-click"]');              const similarCard = e.target.closest('[data-action="view-similar-click"]');              const cardLink = dealCard || similarCard;              if (cardLink) {                const productName = cardLink.getAttribute('data-product-name');                const merchantName = cardLink.getAttribute('data-merchant-name');                const productId = cardLink.getAttribute('data-analytics-id');                const price = parseFloat(cardLink.getAttribute('data-price')) || null;                const prevPriceStr = cardLink.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = cardLink.getAttribute('data-original-link');                const rewrittenLink = cardLink.getAttribute('href');                const revenueId = cardLink.getAttribute('data-revenue-id');                const index = parseInt(cardLink.getAttribute('data-index'), 10) || 0;                const inStock = cardLink.getAttribute('data-in-stock') === 'true';                const totalText = cardLink.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: cardLink.getAttribute('data-model-id') || null,                    matchId: cardLink.getAttribute('data-match-id') || null,                    brand: cardLink.getAttribute('data-model-brand') || null,                    parent: cardLink.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: cardLink.getAttribute('data-merchant-id') || null,                    network: cardLink.getAttribute('data-merchant-network') || null,                    url: cardLink.getAttribute('data-merchant-url') || null,                    name: merchantName                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: normalizeCurrency(this.escapeHTML(cardLink.getAttribute('data-currency') || '$'))                };                if (dealCard) {                  trackDealClick(trackingParams);                } else {                  trackViewSimilarClick(trackingParams);                }              }              const couponsBtn = e.target.closest('[data-action="coupons-click"]');              if (couponsBtn) {                trackElementInteraction({                  id: 'product-card-show-coupons',                  name: 'Coupons',                  label: `Product card coupons: ${couponsBtn.getAttribute('data-merchant')}`                });              }            });          }          this.setupScrollListeners();        }        setupScrollListeners() {          const containers = [             this.root.querySelector('.tg-df-carousel-roundels'),             this.root.querySelector('.tg-df-carousel-filters-wrap'),             this.root.querySelector('#tg-df-grid')          ];                    containers.forEach(container => {             if (!container) return;                          const checkScroll = () => {                if (!container.parentElement) return;                const leftBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-left');                const rightBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-right');                                if (leftBtn) {                   if (container.scrollLeft <= 5) leftBtn.style.display = 'none';                   else leftBtn.style.display = 'flex';                }                                if (rightBtn) {                   if (container.scrollWidth <= container.clientWidth) {                       rightBtn.style.display = 'none';                   } else if (container.scrollLeft >= container.scrollWidth - container.clientWidth - 5) {                       rightBtn.style.display = 'none';                   } else {                       rightBtn.style.display = 'flex';                   }                }             };                          container.addEventListener('scroll', checkScroll);             checkScroll();                          window.addEventListener('resize', checkScroll);                          const observer = new MutationObserver(checkScroll);             observer.observe(container, { childList: true, subtree: true, characterData: false });          });        }        get widgetTypeName() {          const mode = this.viewModeSelect ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');          switch(mode) {              case 'carousel': return 'Carousel';              case 'savings_squad': return 'Savings Squad';              case 'grid': return 'Grid';              case 'row': return 'Row';              default: return 'Auto Collection';          }        }        getRowsLimit() {          if (this.rowsSelect && this.rowsSelect.value) return parseInt(this.rowsSelect.value, 10);          let configSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {             configSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {             configSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(configSource);          if (params.has('rows')) return parseInt(params.get('rows'), 10) || 12;          return 12;        }        getAreaCode() {          if (this.regionSelect && this.regionSelect.value) {            if (this.regionSelect.value === 'auto') return null;            return this.regionSelect.value;          }          let area = null;          try {            const locale = window.navigator.language || window.navigator.userLanguage;            if (locale && locale.includes('-')) {              area = locale.split('-')[1].toUpperCase();            } else if (locale && locale.length === 2) {              if (locale.toUpperCase() === 'EN') { area = 'US'; }              else { area = locale.toUpperCase(); }            }          } catch (e) { /* Ignore */ }                    // Map to known valid options or fallback to US          const valid = ['US', 'GB', 'CA', 'AU', 'DE', 'FR', 'IT'];          if (area === 'UK') area = 'GB';          if (valid.includes(area)) {             return area;          }          return 'US';        }                async loadCarouselSpreadsheet() {          try {              const parseCSVRow = (str) => {                  let result = [], cur = '', inQuotes = false;                  for (let i = 0; i < str.length; i++) {                      let char = str[i];                      if (inQuotes) {                          if (char === '"') {                              if (str[i + 1] === '"') { cur += '"'; i++; }                              else { inQuotes = false; }                          } else { cur += char; }                      } else {                          if (char === '"') { inQuotes = true; }                          else if (char === ',') { result.push(cur); cur = ''; }                          else { cur += char; }                      }                  }                  result.push(cur); return result;              };              const parseCSV = (str) => {                  const rows = []; let curRow = '', inQuotes = false;                  for (let i = 0; i < str.length; i++) {                      let char = str[i];                      if (char === '"') inQuotes = !inQuotes;                      if ((char === '\n' || char === '\r') && !inQuotes) {                          if (char === '\r' && str[i+1] === '\n') i++;                          if (curRow) rows.push(parseCSVRow(curRow));                          curRow = '';                      } else { curRow += char; }                  }                  if (curRow) rows.push(parseCSVRow(curRow));                  return rows;              };              const preloadedCSV = decodeURIComponent(escape(atob("LCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNQ0KUm91bmRlbCB0ZXh0LEFsbCxUVnMsRm9vdHdlYXIsQXBwYXJlbCxNYXR0cmVzZXMsQXBwbGlhbmNlcyxXZWFyYWJsZSB0ZWNoLEhlYWRwaG9uZXMsU21hcnQgSG9tZSxTcGVha2VycyxMYXB0b3BzLFRhYmxldHMsQ29tcHV0aW5nLFBob25lcyxHYW1pbmcsTGVnbw0KUm91bmRlbCBpbWFnZSxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL2FpLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3R2cy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvN2IzYTIyNGIwNzk2M2M2MjdiNmI5MDliZDc4MzM4MzZlMDJmZjgxOS5qcGcud2VicCxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy84NGRhYzVkNDhlZDJkNDQ4NTU5ZWJhNjdhY2U4MzE0Y2M2N2NjZDk0LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vcHJvZHVjdHMvY2Fyb3VzZWwvbWF0dHJlc3Nlcy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvNzY4ZTk3Y2ViMDcxODAxZmFlMjA5MTBkMDgyMGIxNmY3NDdhZjkzOS5qcGcud2VicCxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3dlbGxuZXNzLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL2hlYWRwaG9uZXMuanBnLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzg5NTM1YmVlYmUyMGRiYmQ0YTM0NmQ2ZDZiZGZlOTFkOGE4ODRhMjEuanBnLndlYnAsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9hdWRpby5qcGcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9sYXB0b3BzLmpwZyxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy8yMzk3NTY0ZWQ3YTVmZjk0N2U5YjZiMzBlNTRmNDc0OTRiODQxZjg5LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vcHJvZHVjdHMvY2Fyb3VzZWwvY29tcHV0aW5nLmpwZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3Bob25lcy5wbmcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9nYW1pbmcucG5nLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzRmNmM2MjFjYWMwYmMxYTg1ZDU5M2UzNTk0YmE1YjM0OWVmZmQyOTIuanBnLndlYnANClNlYXJjaCBRdWVyeSxFdmVyeXRoaW5nLFRlbGV2aXNpb25zLCJTbmVha2VycywgcnVubmluZyBzaG9lcywgc2FuZGFscyIsQ2xvdGhpbmcsTWF0dHJlc3NlcyxIb21lIEFwcGxpYW5jZXMsV2VhcmFibGVzICYgRml0bmVzcyBUZWNoLEhlYWRwaG9uZXMsSG9tZSBUZWNoLFNwZWFrZXJzLExhcHRvcHMsVGFibGV0cyxDb21wdXRpbmcsUGhvbmVzLEdhbWluZyxDb25zdHJ1Y3Rpb24gVG95cw0KRGlzY291bnQgQW1vdW50LG1pbiA1JSxtaW4gMTAlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUNClByaWNlIFJhbmdlLCwsLCxtaW4gJDQwMCwsLCxtaW4gJDI1LCxtaW4gJDMwMCwsLG1pbiAkMTAwLCwNCkJyYW5kIFNlbGVjdGlvbiwsLCwsLCwsLCwsLCwsLCwNCkZpbHRlciBidXR0b25zLCwsLCwsLCwsLCwsLCwsLA0KMSxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMNCjIsQW1hem9uIGRlYWxzLFVuZGVyICQxMDAwLDUwJSBvZmYsQWRpZGFzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsNTAlIG9mZixBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscw0KMyxPdmVyICQ0MDAsVW5kZXIgJDUwMCxIb2thLE5pa2UsU2FhdHZhLE5pbmphLDQwJSBvZmYsSkxhYiwsSkJMLERlbGwsLEFzdXMsQXBwbGUsQ29uc29sZXMsU3RhciBXYXJzDQo0LFVuZGVyICQxMDAwLDUwJSBvZmYsU2tlY2hlcnMsVW5kZXIgQXJtb3VyLEhlbGl4LFNoYXJrLEdhcm1pbixBbmtlciBTb3VuZGNvcmUsUmluZyxTb25vcyxBcHBsZSxBcHBsZSxUUC1saW5rLFNhbXN1bmcsQWNjZXNzb3JpZXMsVW5kZXIgJDI1DQo1LFVuZGVyICQ1MDAsTEcsQXNpY3MsQ29sdW1iaWEsRHJlYW1DbG91ZCxLZXVyaWcsQXBwbGUsU29ueSxHb3ZlZSxUcmliaXQsTGVub3ZvLFNhbXN1bmcsRWVybyxHb29nbGUsR2FtZXMsVW5kZXIgJDUwDQo2LDUwJSBvZmYsU2Ftc3VuZyxOaWtlLFBhdGFnb25pYSxOZWN0YXIsRGUnTG9uZ2hpLEFtYXpmaXQsQXBwbGUsS2FzYSBzbWFydCxTb255LEFsaWVud2FyZSxUQ0wsTmV0Z2VhcixNb3Rvcm9sYSxOaW50ZW5kbyxCb3RhbmljYWxzDQo3LEFtYXpvbixIaXNlbnNlLE5ldyBCYWxhbmNlLEFyYyd0ZXJ5eCxUZW1wdXItcGVkaWMsRHlzb24sRml0Yml0LEJlYXRzLFBoaWxpcHMgSHVlLEFua2VyLEFjZXIsT25lUGx1cyxEZWxsLE9uZVBsdXMsU29ueSxEaXNuZXkNCjgsQXBwbGUsVENMLEFkaWRhcyxDYXJoYXJ0dCxCZWFyLEJpc3NlbGwsU2Ftc3VuZyxFYXJmdW4sQmxpbmssQmVhdHMsTVNJLE1pY3Jvc29mdCxBY2VyLE5vdGhpbmcsWGJveCxNYXJ2ZWwNCjksLFNvbnksU2F1Y29ueSxUaGUgTm9ydGggRmFjZSxTaWVuYSxOdXRyaWJ1bGxldCxPdXJhLFNhbXN1bmcsR29vZ2xlIE5lc3QgLE1hcnNoYWxsLFNhbXN1bmcsTGVub3ZvLExlbm92bywsLFBva2Vtb24NCjEwLCxSb2t1LEJpcmtlbnN0b2NrLENSWiBZb2dhLFdpbmtCZWRzLEJsYWNrIGFuZCBEZWNrZXIsUmluZ2Nvbm4sQ01GLEV1ZnksU2Ftc3VuZyxNaWNyb3NvZnQsUmVNYXJrYWJsZSxBbGllbndhcmUsLCwNCjExLCwsQnJvb2tzLFRoZSBHeW0gUGVvcGxlLEJyb29rbHluIGJlZGRpbmcsTmVzcHJlc3NvLCwxTW9yZSxBcmxvLCxSYXplciwsQ29yc2FpciwsLA0KMTIsLCxDcm9jcywsRWlnaHQgU2xlZXAsQ3Vpc2luYXJ0LCxKQkwsLCwsLEhQLCwsDQpOb3RlcywsLCwsLCwsLCwsLCwsLCwNCiwsIlByaW9yaXRpc2UgYmlnZ2VzdCAlLyQgZGlzY291bnQsIFR2cyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiB0aGUgbW9zdCBwb3B1bGFyIGV2ZW4gaWYgdGhleSBhcmUgc3RpbGwgZXhwZW5zaXZlIiwiTm8gcGF0dGVybiB0byBwcmljaW5nL2Rpc2NvdW50LCByZWFkZXJzIG1haW5seSBzaG9wIGJ5IGJyYW5kL3JlY29nbmlzYWJsZSBzaG9lcyIsIk5vIHBhdHRlcm4gdG8gcHJpY2luZy9kaXNjb3VudCwgcmVhZGVycyBtYWlubHkgc2hvcCBieSBicmFuZCIsIkEgbGFiZWwgd2lsbCBkZWZpbml0ZWx5IGhlbHAgaGVyZSBlLmcuIGJlc3QgZm9yIHNpZGUgc2xlZXBlciwgYmVzdCBtZW1vcnkgZm9hbSIsIkFwcGxpYW5jZXMgaXMgYSBiaWcgY2F0ZWdvcnksIGlzIGl0IHBvc3NpYmxlIHRvIHNwbGl0IGludG8ga2l0Y2hlbiBhcHBsaWFuY2VzLCBmbG9vcmNhcmUsIGFpciBoZWFsdGgvY29vbGluZz8gT3Igc2ltaWxhciIsIkZvY3VzIG9uIHZhbHVlIGZvciBtb25leSwgR2FybWlucyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiBwb3B1bGFyIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIHN0aWxsICQ1MDAiLCwsLCxJbmNsdWRlIEtpbmRsZXMsSSB3b3VsZCBpbmNsdWRlIHdpZmkgcm91dGVycyBoZXJlIGluc3RlYWQgb2Ygc21hcnQgaG9tZSxDYW4gd2Ugc3VyZmFjZSBwaG9uZSBwcm92aWRlciBkZWFscz8gVC1tb2JpbGUgYW5kIHZlcml6b24gd291bGQgbWFrZSBhIGxvdCBtb3JlIG1vbmV5IHRoYW4gQW1hem9uLCwNCiwsaGF2aW5nIGEgJ2Jlc3QgZm9yJyBsYWJlbCB3b3VsZCBiZSBoZWxwZnVsIGUuZy4gYmVzdCBmb3IgYnJpZ2h0IHJvb20sQ2FuIHdlIHN0b3Aga2lkcyBzaG9lcyBmcm9tIHB1bGxpbmcgdGhyb3VnaD8sIldpbGwgdGhpcyBpbmNsdWRlIGFjY2Vzc29yaWVzIGUuZy4gY2FwcywgYmFncywgaWYgc28gbWFrZSBzdXJlIHRoZXNlIGFyZSBtaXhlZCB0aHJvdWdob3V0IGNsb3RoaW5nIGRlYWxzIixXaWxsIHRoaXMgaW5jbHVkZSB0b3BwZXJzIGFuZCBwaWxsb3dzPyBTZWVpbmcgbW9yZSBtb21lbnR1bSB3aXRoIHRoaXMgY2F0ZWdvcnkgcmVjZW50bHkgc28gYSBiZWRkaW5nIHRhYiBtaWdodCB3b3JrLCwiTmVlZCB0byBtYWtlIHN1cmUgYmFuZHMsIHNjcmVlbiBwcm90ZWN0b3JzIGV0Yy4gZG9uJ3QgcHVsbCBpbnRvIGhlcmUiLCwsLCwsLCwsDQosLCJQcmlvcml0aXNlIDY1JycgYW5kIDU1JyBpbmNoIFRWcywgdGhlbiBiaWdnZXIgc2NyZWVucyBiZWZvcmUgdGhlIHNtYWxsZXIgc2l6ZXMiLCwsUXVlZW4gaXMgdGhlIG1vc3QgcG9wdWxhciBzaXplIGluIHRoZSBVUyAtIHByaW9yaXRpc2UgZGVhbHMgZm9yIHRoaXMgc2l6ZSwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpDYXRlZ29yaWVzIHRvIGNvbnNpZGVyLCxQcm9kdWN0cyBpbmNsdWRlZCwsLCwsLCwsLCwsLCwsDQpVbmRlciAkNTA/LCxBaXIgdGFncywsLCwsLCwsLCwsLCwsDQosLFBvcnRhYmxlIGNoYXJnZXJzL3dpcmVsZXNzIGNoYXJnZXJzLCwsLCwsLCwsLCwsLCwNCiwsIldhdGVyIGJvdHRsZXMgKHN0YW5sZXlzLCBPd2FsYSwgSHlkcm8gZmxhc2ssIFlldGkpIiwsLCwsLCwsLCwsLCwsDQosLEhhbmQgaGVsZCBmYW5zLCwsLCwsLCwsLCwsLCwNCiwsLCwsLCwsLCwsLCwsLCwNCmhvbWUgb2ZmaWNlLCxvZmZpY2UgY2hhaXJzLCwsLCwsLCwsLCwsLCwNCiwsc3RhbmRpbmcgZGVza3MsLCwsLCwsLCwsLCwsLA0KLCxtb25pdG9ycywsLCwsLCwsLCwsLCwsDQosLEtleWJvYXJkcywsLCwsLCwsLCwsLCwsDQosLGRvY2tpbmcgc3RhdGlvbiwsLCwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpHYW1pbmcsLENvbnNvbGVzLCwsLCwsLCwsLCwsLCwNCiwsQWNjZXNzb3JpZXMsLCwsLCwsLCwsLCwsLA0KLCxHYW1lcywsLCwsLCwsLCwsLCwsDQosLENvdWxkIGluY2x1ZGUgTGVnbz8sLCwsLCwsLCwsLCwsLA==")));              const text = preloadedCSV;              const parsed = parseCSV(text);                            const rowsByName = {};              let filterStart = -1;              parsed.forEach((rc, i) => {                 if (rc && rc.length > 0 && rc[0]) rowsByName[rc[0]] = rc;                 if (rc && rc.length > 0 && rc[0] === 'Filter buttons') filterStart = i;              });                            const cols = [];              if(rowsByName['Roundel text']) {                const headerRow = rowsByName['Roundel text'];                for(let col = 1; col < headerRow.length; col++) {                   let label = headerRow[col];                   if (!label) continue;                                      let q = rowsByName['Search Query'] && rowsByName['Search Query'][col] ? rowsByName['Search Query'][col] : '';                   let img = rowsByName['Roundel image'] && rowsByName['Roundel image'][col] ? rowsByName['Roundel image'][col] : '';                   let ds = rowsByName['Discount Amount'] && rowsByName['Discount Amount'][col] ? rowsByName['Discount Amount'][col] : '';                   let pr = rowsByName['Price Range'] && rowsByName['Price Range'][col] ? rowsByName['Price Range'][col] : '';                   let rt = rowsByName['Retailer'] && rowsByName['Retailer'][col] ? rowsByName['Retailer'][col] : '';                   let ot = rowsByName['Offer Type'] && rowsByName['Offer Type'][col] ? rowsByName['Offer Type'][col] : '';                                      let filters = [];                   if(filterStart > 0) {                     for(let r = filterStart + 1; r < parsed.length; r++) {                         if(!parsed[r] || parsed[r][0] === 'Notes' || parsed[r][0] === 'Categories to consider') break;                         let f = parsed[r][col];                         if(f) filters.push(f);                     }                   }                   cols.push({ label, img, q, ds, pr, rt, ot, filters });                }              }              this.carouselData = cols;              if (this.carouselData && this.carouselData.length > 0) {                 const isMatched = this.carouselData.some(c => c.q === this.currentQuery || c.label === this.currentQuery);                 if (!isMatched) {                    const first = this.carouselData[0];                    this.currentQuery = first.q || first.label;                    if (this.priceFilter) this.priceFilter.value = 'all';                    if (this.customPriceMin) this.customPriceMin.value = '';                    if (this.customPriceMax) this.customPriceMax.value = '';                    let dPr = first.pr || 'all';                    if (typeof dPr === 'string' && dPr !== 'all') {                       let prLower = dPr.toLowerCase();                       if (prLower.includes('min') || prLower.includes('over')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else if (prLower.includes('max') || prLower.includes('under')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       }                    }                    let dAm = '0';                    if(first.ds && typeof first.ds === 'string') {                       let m = first.ds.match(/(\d+)/);                       if(m) dAm = m[1];                    }                    if (this.discountFilter) this.discountFilter.value = dAm;                    if (this.offerTypeSelect) this.offerTypeSelect.value = first.ot || '';                    if (this.retailerSelect) this.retailerSelect.value = first.rt || '';                    this.selectedBrands = [];                    if (this.brandDropdown) {                        const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                        chks.forEach(chk => chk.checked = false);                    }                    if (this.searchInput) this.searchInput.value = this.currentQuery;                 }              }              this.renderCarouselUI();          } catch(e){ console.warn(e); }        }                renderCarouselUI() {           const roundelWrapper = this.root.querySelector('.tg-df-carousel-roundels');           if(!roundelWrapper || !this.carouselData) return;                      let html = '';           this.carouselData.forEach(r => {              const q = r.q || r.label;              const isActive = (this.currentQuery === q || this.currentQuery === r.label) ? 'active' : '';              const imgHtml = r.img ? `\x3Cimg src="${r.img}" alt="${r.label}" />` : `\x3Csvg width="32" height="32" fill="#1F69FF" viewBox="0 0 24 24">\x3Cpath d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/>\x3C/svg>`;              html += `                \x3Cdiv class="tg-df-roundel tg-df-carousel-cat ${isActive}" data-label="${this.escapeHTML(r.label)}">                  \x3Cdiv class="tg-df-roundel-img-box">${imgHtml}\x3C/div>                  \x3Cspan class="tg-df-roundel-label">${this.escapeHTML(r.label)}\x3C/span>                \x3C/div>              `;           });           roundelWrapper.innerHTML = html;                      // Rebind clicks           const roundels = this.root.querySelectorAll('.tg-df-carousel-cat');           roundels.forEach(rNode => {             rNode.addEventListener('click', () => {                const r = this.carouselData.find(c => c.label === rNode.getAttribute('data-label'));                 if(!r) return;                                  if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: r.label,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = r.q || r.label;                const labelTitle = this.root.querySelector('#tg-df-carousel-title-label');                if (labelTitle) labelTitle.textContent = 'Best ' + this.currentQuery;                if (this.priceFilter) this.priceFilter.value = 'all';                if (this.customPriceMin) this.customPriceMin.value = '';                if (this.customPriceMax) this.customPriceMax.value = '';                let dPr = r.pr || 'all';                if (typeof dPr === 'string' && dPr !== 'all') {                   let prLower = dPr.toLowerCase();                   if (prLower.includes('min') || prLower.includes('over')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMin) this.customPriceMin.value = m[1];                   } else if (prLower.includes('max') || prLower.includes('under')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMax) this.customPriceMax.value = m[1];                   }                }                                let discountAmount = '0';                if(r.ds && typeof r.ds === 'string') {                   let m = r.ds.match(/(\d+)/);                   if(m) discountAmount = m[1];                }                if (this.discountFilter) this.discountFilter.value = discountAmount;                if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                                // Clear brands                    this.selectedBrands = [];                    if (this.brandDropdown) {                    const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                    chks.forEach(chk => chk.checked = false);                }                                if (this.searchInput) this.searchInput.value = this.currentQuery;                                roundels.forEach(ro => ro.classList.remove('active'));                if (rNode) rNode.classList.add('active');                                this.renderCarouselFilters(r);                this.fetchDeals(this.currentQuery);             });           });                      // Auto-highlight active           const activeR = this.carouselData.find(c => c.q === this.currentQuery || c.label === this.currentQuery);           if(activeR) this.renderCarouselFilters(activeR);        }                renderCarouselFilters(r) {           const filtersWrap = this.root.querySelector('.tg-df-carousel-filters-wrap');           if(!filtersWrap) return;                      let html = `\x3Cbutton class="tg-df-carousel-filter-btn" data-type="all">All\x3C/button>`;                      r.filters.forEach(f => {              let fL = f.toLowerCase();              let icon = '';              let logic = `data-type="custom" data-v="${this.escapeHTML(f)}"`;              if (fL === 'amazon deals' || fL === 'prime deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>`;              } else if (fL === 'lightning deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>`;              } else {                 if (fL.includes('lightning')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-zap">\x3Cpolygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2">\x3C/polygon>\x3C/svg>`;                 } else if (fL.includes('% off')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>`;                 } else if (fL.includes('under') || fL.includes('min ')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>`;                 }                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>${icon} ${this.escapeHTML(f)}\x3C/button>`;              }           });                      filtersWrap.innerHTML = html;                      const btns = filtersWrap.querySelectorAll('button');           btns.forEach(b => {             b.addEventListener('click', () => {                const type = b.getAttribute('data-type');                if (type === 'custom') {                   const v = b.getAttribute('data-v');                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-custom-${(v||'').toLowerCase().replace(/[^a-z0-9]+/g, '-')}`, name: 'Custom Filter', label: v });                }                if (type === 'all') {                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: 'filter-clear-all', name: 'Clear all', label: 'Clear all filters' });                   // reset everything                   btns.forEach(btn => btn.classList.remove('active'));                   b.classList.add('active');                                      // Reset prices                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   if (this.brandDropdown) {                     const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                     chks.forEach(chk => chk.checked = false);                   }                } else {                   const v = b.getAttribute('data-v');                   const fL = v.toLowerCase();                                      let mapRet = ['amazon', 'walmart', 'best buy', 'target', 'john lewis', 'currys', 'argos'];                   const getCategory = (s) => {                      if (s === 'lightning deals' || s === 'amazon deals' || s === 'prime deals') return 'offer';                      if (s.includes('% off')) return 'discount';                      if (s.includes('under') || s.includes('over') || s.includes('min') || s.includes('max')) return 'price';                      if (mapRet.includes(s)) return 'retailer';                      return 'brand';                   };                   const cat = getCategory(fL);                   const wasActive = b.classList.contains('active');                   if (cat !== 'brand') {                      btns.forEach(btn => {                          if (btn === b) return;                          if (btn.getAttribute('data-type') === 'all') return;                          const bV = btn.getAttribute('data-v');                          if (!bV) return;                          if (getCategory(bV.toLowerCase()) === cat) btn.classList.remove('active');                      });                   }                   if (wasActive) b.classList.remove('active');                   else b.classList.add('active');                   let anyActive = Array.from(btns).some(btn => btn !== btns[0] && btn.classList.contains('active'));                   if (!anyActive) {                       btns[0].click();                       return;                   } else {                       btns[0].classList.remove('active');                   }                                      if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   btns.forEach(btn => {                       if (!btn.classList.contains('active') || btn.getAttribute('data-type') === 'all') return;                       const vv = btn.getAttribute('data-v');                       const vl = vv.toLowerCase();                                              if (vl === 'lightning deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_lightning';                       } else if (vl === 'amazon deals' || vl === 'prime deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_prime';                       } else if (vl.includes('% off')) {                          let m = vl.match(/(\d+)%/);                          if (m && this.discountFilter) this.discountFilter.value = m[1];                       } else if (vl.includes('under') || vl.includes('max')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       } else if (vl.includes('min') || vl.includes('over')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else {                          let foundR = mapRet.find(x => x === vl);                          if (foundR) {                             let realR = ['Amazon', 'Walmart', 'Best Buy', 'Target', 'John Lewis', 'Currys', 'Argos'].find(x => x.toLowerCase() === vl);                             if (this.retailerSelect) this.retailerSelect.value = realR;                          } else {                             this.selectedBrands.push(vv);                          }                       }                   });                                      if (this.brandDropdown) {                       const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                       chks.forEach(c => c.checked = this.selectedBrands.includes(c.value));                   }                                      if (r.pr && typeof r.pr === 'string') {                       let prL = r.pr.toLowerCase();                       if (prL.includes('under $')) {                           let m = prL.match(/under \$(\d+)/i);                           if (m && this.customPriceMax && !this.customPriceMax.value) this.customPriceMax.value = m[1];                       }                   }                }                                this.fetchDeals(this.currentQuery);             });           });                      // default to highlighting first           btns[0].classList.add('active');        }async fetchDeals(query, append = false) {          if (!append) {             this.showLoading();             this.deals = [];             this.displayLimit = this.getRowsLimit();          } else {             this.displayLimit += this.getRowsLimit();          }                    try {            if (this.getViewMode() === 'savings_squad') {               await this.fetchSavingsSquad(append);            } else {               if (this.isBroadQuery(query)) {                 await this.fetchAdviserDeals(query, append);               } else {                 await this.fetchHawkDeals(query, append);                 if (this.deals.length === 0) {                   await this.fetchAdviserDeals(query, append);                 }               }            }          } catch (error) {            console.warn("[Tom's Guide Widget] Fetch error:", error);            this.showError();          }        }        async fetchSavingsSquad() {          let topArticles = this.airedaleArticles;          if (!topArticles) {            const airedaleUrl = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`;            let res;            try {               res = await fetch(airedaleUrl);            } catch(e) {               try { res = await fetch(`https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`); } catch (err) { console.warn("Fallback fetch failed", err); return; }            }            if (!res.ok) throw new Error('Airedale API Error');            const articles = await res.json();            topArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);            this.airedaleArticles = topArticles;                        let tagCounts = {};            topArticles.forEach((a) => {              let articleTags = new Set();              if (a.articlecategory && Array.isArray(a.articlecategory)) {                 a.articlecategory.forEach((t) => articleTags.add(t));              }              articleTags.forEach(t => {                 tagCounts[t] = (tagCounts[t] || 0) + 1;              });            });                        this.airedaleTags = Object.keys(tagCounts).sort((a, b) => tagCounts[b] - tagCounts[a]);            this.airedaleTagCounts = tagCounts;          }                    let targetArticles = topArticles;          if (this.activeDealTag) {             const cleanTag = this.activeDealTag.toLowerCase().replace(/&/g, '').replace(/[^a-z0-9]+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');             const encodedTag = encodeURIComponent(cleanTag);             const url = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50&articleCategoryHandle=${encodedTag}`;             try {                const res = await fetch(url);                if (res.ok) {                   const articles = await res.json();                   targetArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);                }             } catch(e) {                console.warn("Failed to fetch by activeDealTag", e);             }          }          let extractedDeals = [];          let dynamicBrandsCounts = {};                    targetArticles.forEach((article) => {             if (!article.articlepage) return;                          let pageData = [];             try {                pageData = JSON.parse(article.articlepage[0]);             } catch(e){ console.warn(e); }                          const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');                          savingsSquad.forEach((block, idx) => {                const data = block.data || {};                const isFeatured = block.type === 'featured-product';                                const link = data.link || {};                const priceObj = data.price || {};                const image = data.image || {};                                if (data.brand) {                   data.brand = data.brand.replace(/^\d+\.\s*/, '').trim();                   dynamicBrandsCounts[data.brand] = (dynamicBrandsCounts[data.brand] || 0) + 1;                }                const externalUrl = isFeatured ? data.url : (link.href || null);                let summaryTitle = isFeatured ? (data.name || data.brand) : (data.productName || link.label || article.articlename);                let description = isFeatured ? (data.strapline || '') : (data.text || '');                                if (!isFeatured && !data.productName && data.text) {                   const brSplit = data.text.split(new RegExp('\x3Cbr\\s*\\/?\\x3E', 'i'));                   if (brSplit.length > 1) {                     summaryTitle = brSplit[0].replace(/<[^>]+>/g, '').trim();                     description = brSplit.slice(1).join(' ').replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').trim();                   } else {                     const match = data.text.match(/\x3Cstrong>(.*?)<\/strong>/);                     if (match) {                       summaryTitle = match[1].replace(/<[^>]+>/g, '').trim();                       if (summaryTitle.endsWith(':')) summaryTitle = summaryTitle.slice(0, -1);                     }                   }                }                                let imageUrl = isFeatured ? image.mos : (image.src || null);                if (imageUrl && imageUrl.startsWith('//')) imageUrl = 'https:' + imageUrl;                                description = description.replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').replace(/View Deal$/i, '').trim();                                let merchantName = data.retailer || '';                if (!merchantName && externalUrl) {                   try {                     merchantName = new URL(externalUrl).hostname.replace('www.', '').split('.')[0];                     merchantName = merchantName.charAt(0).toUpperCase() + merchantName.slice(1);                   }catch(e){ console.warn(e); }                }                if (!merchantName) merchantName = 'Retailer';                const q = (this.currentQuery || '').toLowerCase();                const activeTagLogic = (this.activeDealTag || '').toLowerCase();                if (q.length > 2 && q !== activeTagLogic) {                   const searchTarget = `${summaryTitle || ''} ${description || ''}`.toLowerCase();                   if (!searchTarget.includes(q)) return;                }                let rawPrice = 0;                let rawMsrp = 0;                let currencyStr = '$';                if (isFeatured) {                   rawPrice = typeof data.salePrice === 'number' && data.salePrice > 0 ? data.salePrice : (typeof data.price === 'number' ? data.price : 0);                   rawMsrp = typeof data.salePrice === 'number' && typeof data.price === 'number' && data.price > data.salePrice ? data.price : 0;                   currencyStr = data.currency === 'GBP' ? '£' : '$';                } else {                   rawPrice = priceObj.amount ? parseFloat(priceObj.amount) : 0;                   rawMsrp = priceObj.amountWas ? parseFloat(priceObj.amountWas) : 0;                   currencyStr = priceObj.currency === 'GBP' ? '£' : '$';                }                                let savingAmt = 0;                let savingLabel = '';                if (rawPrice > 0 && rawMsrp > rawPrice) {                   savingAmt = parseFloat((rawMsrp - rawPrice).toFixed(2));                   savingLabel = `Save ${currencyStr}${savingAmt}`;                }                                // Apply Brand filter                if (this.selectedBrands && this.selectedBrands.length > 0) {                   const itemBrand = (data.brand || '').toLowerCase();                   const hasMatch = this.selectedBrands.some(sb => sb.toLowerCase() === itemBrand);                   if (!hasMatch) return;                }                // Apply Price filter                let priceFilterVal = null;                const min = this.customPriceMin ? this.customPriceMin.value : '';                const max = this.customPriceMax ? this.customPriceMax.value : '';                if (min || max) {                   priceFilterVal = `${min}_${max}`;                } else if (this.priceFilter && this.priceFilter.value !== 'all') {                   priceFilterVal = this.priceFilter.value;                }                if (priceFilterVal && rawPrice > 0) {                   if (priceFilterVal === 'under50' && rawPrice >= 50) return;                   if (priceFilterVal === 'over50' && rawPrice <= 50) return;                   if (priceFilterVal === 'over30' && rawPrice <= 30) return;                   if (priceFilterVal === 'over500' && rawPrice <= 500) return;                   if (priceFilterVal.includes('_')) {                      const parts = priceFilterVal.split('_');                      const min = parseFloat(parts[0]);                      const max = parseFloat(parts[1]);                      if (!isNaN(min) && rawPrice < min) return;                      if (!isNaN(max) && rawPrice > max) return;                   }                }                // Apply Discount filter                if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {                   const requiredDiscount = parseInt(this.discountFilter.value);                   if (!isNaN(requiredDiscount) && requiredDiscount > 0) {                      if (!rawMsrp || rawMsrp <= rawPrice) return;                      const ratio = Math.round((1 - (rawPrice / rawMsrp)) * 100);                      if (ratio < requiredDiscount) return;                   }                }                                extractedDeals.push({                   id: `airedale-${article.id || Math.random()}-${idx}`,                   url: externalUrl,                   image: imageUrl,                   fallbackImage: imageUrl,                   title: summaryTitle,                   brand: data.brand || '',                   productName: data.productName || '',                   merchant: merchantName,                   rawPrice: rawPrice,                   rawMsrp: rawMsrp,                   price: rawPrice > 0 ? rawPrice.toString() : '',                   msrp: rawMsrp > 0 ? rawMsrp.toString() : '',                   currency: currencyStr,                   isCheckPrice: !rawPrice,                   savingLabel: savingLabel,                   savingType: rawMsrp > rawPrice ? 'amount' : 'none',                   isPrime: false,                   starRating: null,                   description: description,                   text: data.text || ''                });             });          });                    const airedaleBrandsList = Object.keys(dynamicBrandsCounts).map(b => ({              formatted_value: b,              count: dynamicBrandsCounts[b]          })).sort((a,b) => b.count - a.count);                    if (this.getViewMode() === 'savings_squad') {             this.populateBrandDropdown(airedaleBrandsList.slice(0, 15));             if (this.brandFilterWrapper) {                if (airedaleBrandsList.length === 0) {                    this.brandFilterWrapper.style.display = 'none';                } else {                    this.brandFilterWrapper.style.display = 'flex';                }             }          }                    this.deals = extractedDeals;          this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        isBroadQuery(query) {          const q = query.toLowerCase();          const intentModifiers = ['deals', 'best', 'sale', 'under', 'cheap', 'offers', 'discount'];          return intentModifiers.some(term => q.includes(term));        }        async fetchHawkDeals(query, append = false) {          const url = new URL(this.apiUrl);          url.searchParams.append('model_name', query);          const areaCode = this.getAreaCode();          if (areaCode) {            url.searchParams.append('area', areaCode);          }                    if (append && this.deals.length > 0) {            url.searchParams.append('offset', this.deals.length.toString());          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.append('filter_merchant_name', this.retailerSelect.value);          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.append('filter_label[text_brand]', this.selectedBrands.join(','));          }                    let priceVal = null;          const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             priceVal = `${min}_${max}`;          } else if (this.priceFilter && this.priceFilter.value !== 'all') {             priceVal = this.priceFilter.value;          }          if (priceVal) {            if (priceVal === 'under50') {              url.searchParams.append('filter_max_price', '50');            } else if (priceVal === 'over50') {              url.searchParams.append('filter_min_price', '50');            } else if (priceVal === 'over30') {              url.searchParams.append('filter_min_price', '30');            } else if (priceVal === 'over500') {              url.searchParams.append('filter_min_price', '500');            } else if (priceVal.includes('_')) {              const parts = priceVal.split('_');              if (parts[0]) url.searchParams.append('filter_min_price', parts[0]);              if (parts[1]) url.searchParams.append('filter_max_price', parts[1]);            }          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {              const ratio = (100 - v) / 100;              url.searchParams.append('min_discount_ratio', ratio.toString());            }          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.append('offer', this.offerTypeSelect.value);          }                    url.searchParams.append('filter_product_types', 'deals');                    url.searchParams.append('rows', this.getRowsLimit().toString());          let response;          try {             response = await fetch(url.toString());          } catch(e) {             if (window.location.protocol === 'file:') {                console.warn("[Tom's Guide Widget] fetch from file:// blocked by local CORS policy, falling back to Adviser mock.");                await this.fetchAdviserDeals(query);                return;             }             console.warn("Hawk fetch failed", e);             this.deals = [];             this.render();             return;          }          if (!response.ok) {            throw new Error('Hawk API Response Error');          }          const rawData = await response.json();          // Safely locate data array from potentially wrapped response          let offers = [];          let modelInfoArray = [];                    let brandFilterData = null;          if (rawData && rawData.widget && rawData.widget.data && Array.isArray(rawData.widget.data.filters)) {             brandFilterData = rawData.widget.data.filters.find(f => f.type === 'label_text_brand');          } else if (rawData && rawData.data && Array.isArray(rawData.data.filters)) {             brandFilterData = rawData.data.filters.find(f => f.type === 'label_text_brand');          }          if (brandFilterData && Array.isArray(brandFilterData.values) && brandFilterData.values.length > 0) {             this.populateBrandDropdown(brandFilterData.values);          } else {             if (this.brandFilterWrapper && this.selectedBrands.length === 0) {                this.brandFilterWrapper.style.display = 'none';             }          }                    if (rawData && rawData.widget && rawData.widget.data) {            if (Array.isArray(rawData.widget.data.offers)) offers = rawData.widget.data.offers;            if (rawData.widget.data.model_info && typeof rawData.widget.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.widget.data.model_info) ? rawData.widget.data.model_info : Object.values(rawData.widget.data.model_info);            }          } else if (rawData && rawData.data) {            if (Array.isArray(rawData.data.offers)) offers = rawData.data.offers;            if (rawData.data.model_info && typeof rawData.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.data.model_info) ? rawData.data.model_info : Object.values(rawData.data.model_info);            }          } else {            if (Array.isArray(rawData)) offers = rawData;            else if (rawData && Array.isArray(rawData.offers)) offers = rawData.offers;            else if (rawData && rawData.offers && Array.isArray(rawData.offers.offer)) offers = rawData.offers.offer;            else if (rawData && rawData.offers) offers = [].concat(rawData.offers);                        if (rawData && rawData.model_info && typeof rawData.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.model_info) ? rawData.model_info : Object.values(rawData.model_info);            }          }          let modelDetails = {};          modelInfoArray.forEach(m => {            const mId = m.model_id || m.id;            if (mId) {              modelDetails[mId] = {                score: m.score != null ? parseFloat(m.score) : null,                brand: m.brand || null,                parent: (m.parents && Array.isArray(m.parents) && m.parents.length > 0) ? m.parents[0].name : null              };            }          });          offers.forEach(item => {            let data = { ...item };            const mId = data.model_id;            if (mId && modelDetails[mId]) {              data.review_score = modelDetails[mId].score;              data.model_brand = modelDetails[mId].brand;              data.model_parent = modelDetails[mId].parent;            } else {              data.review_score = null;            }                        let itemOffers = [];            if (Array.isArray(item.offers)) itemOffers = item.offers;            else if (Array.isArray(item.offer)) itemOffers = item.offer;            else if (item.offers && typeof item.offers === 'object') itemOffers = [item.offers];            else if (item.offer && typeof item.offer === 'object') itemOffers = [item.offer];            if (itemOffers.length > 0) {              itemOffers.forEach(subItem => {                let subData = { ...item, ...subItem };                const subId = subData.model_id;                if (subId && modelDetails[subId]) {                  subData.review_score = modelDetails[subId].score;                  subData.model_brand = modelDetails[subId].brand;                  subData.model_parent = modelDetails[subId].parent;                } else if (data.review_score != null) {                  subData.review_score = data.review_score;                }                if (subData.merchant && typeof subData.merchant === 'object') {                  subData.merchant_name = subData.merchant.name;                }                this.deals.push(this.extractDealData(subData));              });              return;            }                        if (item.merchant && typeof item.merchant === 'object') {              data.merchant_name = item.merchant.name;            }                        this.deals.push(this.extractDealData(data));          });                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        async fetchAdviserDeals(query) {          // ======================================================================          // TODO: ADVISER API REPLACEMENT          // The code below simulates the Adviser API response using mock data.          // Once the real endpoint is ready, remove getAdviserMockData() and           // perform an actual fetch() request similar to fetchHawkDeals().          // Example:          // const area = this.getAreaCode();          // let apiUrl = `https://your-adviser-api.com/search?q=${query}&area=${area}`;          // if (this.priceFilter && this.priceFilter.value !== 'all') {          //   const val = this.priceFilter.value;          //   if (val === 'under50') apiUrl += '&filter_max_price=50';          //   else if (val === '50_100') apiUrl += '&filter_max_price=100';          //   else if (val === '100_200') apiUrl += '&filter_max_price=200';          //   else if (val === '200_500') apiUrl += '&filter_max_price=500';          // }          // const res = await fetch(apiUrl);          // const rawData = await res.json();          // ======================================================================          // Simulating network latency          await new Promise(resolve => setTimeout(resolve, 400));                    const rawData = this.getAdviserMockData();          let offers = [];                    if (rawData && rawData.data && rawData.data.Get && Array.isArray(rawData.data.Get.Deal)) {            offers = rawData.data.Get.Deal;          }                    // Basic client-side filtering for the mock if we want it to react to the query          const q = query.toLowerCase();          const selectedRetailer = (this.retailerSelect && this.retailerSelect.value) ? this.retailerSelect.value.toLowerCase() : null;                    offers.forEach(item => {            const dataObj = item;                        // Apply retailer filter            const itemRetailer = (dataObj.dataRetailer || '').toLowerCase();            if (selectedRetailer && itemRetailer !== selectedRetailer && !itemRetailer.includes(selectedRetailer)) {              return;            }                        // Apply mock price filter            let price = dataObj.dataDiscountedPrice || 0;            if (typeof price === 'string') {              price = parseFloat(price.replace(/[^0-9.]/g, ''));            }            let priceVal = null;            const min = this.customPriceMin ? this.customPriceMin.value : '';            const max = this.customPriceMax ? this.customPriceMax.value : '';            if (min || max) {               priceVal = `${min}_${max}`;            } else if (this.priceFilter && this.priceFilter.value !== 'all') {               priceVal = this.priceFilter.value;            }            if (priceVal) {              if (priceVal === 'under50' && price >= 50) return;              if (priceVal === 'over50' && price <= 50) return;              if (priceVal === 'over30' && price <= 30) return;              if (priceVal === 'over500' && price <= 500) return;              if (priceVal.includes('_')) {                 const parts = priceVal.split('_');                 if (parts[0] && price < parseFloat(parts[0])) return;                 if (parts[1] && price > parseFloat(parts[1])) return;              }            }                        // Map Adviser schema to our widget's expected schema            const mappedData = {              url: dataObj.linkHREF || dataObj.dataLink || '#',              image: dataObj.imageURL || (dataObj.image && dataObj.image.src) || '',              title: dataObj.dataProduct || (dataObj.product && dataObj.product.name) || 'Product Deal',              merchant: dataObj.dataRetailer || 'Retailer',              price: dataObj.dataDiscountedPrice || 0,              currency: dataObj.dataCurrency === 'USD' ? '$' : (dataObj.dataCurrency || '$'),              msrp: dataObj.dataOriginalPrice || null            };                        const titleLow = mappedData.title.toLowerCase();            const merchLow = mappedData.merchant.toLowerCase();                        // Smarter mock filtering            let isMatch = false;            if (q === '' || this.isBroadQuery(q)) {              isMatch = true;            } else if (titleLow.includes(q) || merchLow.includes(q)) {              isMatch = true;            } else if ((q.includes('laptop') || q.includes('mac') || q.includes('pc')) && (titleLow.includes('macbook') || titleLow.includes('laptop'))) {              isMatch = true;            } else if ((q.includes('tv') || q.includes('television')) && (titleLow.includes('tv') || titleLow.includes('oled') || titleLow.includes('qled'))) {              isMatch = true;            } else if ((q.includes('phone') || q.includes('smartphone')) && (titleLow.includes('galaxy') || titleLow.includes('phone'))) {              isMatch = true;            } else if ((q.match(/watch|fitness|run|shoe/)) && (titleLow.includes('forerunner') || titleLow.includes('saucony') || titleLow.includes('watch'))) {              isMatch = true;            }                        if (isMatch) {               this.deals.push(this.extractDealData(mappedData));            }          });                    let rowLimit = this.getRowsLimit();          // Intentionally omitting the slice here to allow "Load More" to work if the API returns more                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        getAdviserMockData() {          return {            "data": {              "Get": {                "Deal": [                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 300,                    "dataOriginalPrice": 399,                    "dataProduct": "Samsung Galaxy A36",                    "dataRetailer": "Samsung",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/MqDYsukV3JBG54te6dEs7j.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 14,                    "dataOriginalPrice": 24,                    "dataProduct": "Blink Mini",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/3JurmAjHsDa5tPdaHAwEV8.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 59,                    "dataOriginalPrice": 99,                    "dataProduct": "Ring Video Doorbell",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/rAh4uR7AsAsALCCLTXnLNJ.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 10,                    "dataOriginalPrice": 599,                    "dataProduct": "MacBook Neo",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/Lg4Dvg68j9SbB5CPNrTEpH.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 749,                    "dataOriginalPrice": 849,                    "dataProduct": "65\\\" Fire TV Omni 4K QLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/SG34ZWodUkLTxJvMTbjPYR.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 71,                    "dataOriginalPrice": 160,                    "dataProduct": "Saucony Hurricane 24",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/vxf7UD5T2Am7guVzFoFcZ4.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 649,                    "dataOriginalPrice": 749,                    "dataProduct": "Garmin Forerunner 970",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/3GKnEu7CdhtxPMfnPCMCiA.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1049,                    "dataOriginalPrice": 1499,                    "dataProduct": "LG 48\\\" C4 4K OLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/imvwZV9zoMD6fn9Afuge35.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1499,                    "dataOriginalPrice": 2199,                    "dataProduct": "Samsung 49\\\" Odyssey Neo G9 4K Gaming Monitor",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/XWDEJ5dUAE2nhK8k3Jk7k7.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 299,                    "dataOriginalPrice": 699,                    "dataProduct": "EGOHOME Black Memory Foam Mattress (queen)",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/hMUemtAejNETLVYxNrktzm.jpg"                  }                ]              }            }          };        }        decodeHTML(html) {          if (!html) return '';          const txt = document.createElement("textarea");          txt.innerHTML = String(html);          return txt.value;        }        extractDealData(item) {          const priceRawStr = String(item.price || item.current_price || '0');          const msrpRawStr = String(item.was_price || item.msrp || item.original_price || '0');          const rawPrice = parseFloat(priceRawStr.replace(/[^\d.]/g, '')) || 0;          const rawMsrp = parseFloat(msrpRawStr.replace(/[^\d.]/g, '')) || 0;          const isCheckPrice = rawPrice === 0 || priceRawStr === '0.00' || priceRawStr === '0';                    let originalImageUrl = item.image || item.image_url || item.product_image || '';          let imageUrl = originalImageUrl;          if ((!imageUrl || isCheckPrice) && item.model_image_url) {             imageUrl = item.model_image_url;             originalImageUrl = imageUrl;          } else if ((!imageUrl || isCheckPrice) && item.model_image) {             imageUrl = item.model_image;             originalImageUrl = imageUrl;          }                    if (imageUrl) {            imageUrl = imageUrl.replace(/-(\d+)-(\d+)(\.[a-z.]+)$/i, '$3');          }                    let fallbackImage = '';          if (originalImageUrl && originalImageUrl !== imageUrl) {             fallbackImage = originalImageUrl;          } else if (item.model_image && item.model_image !== imageUrl) {             fallbackImage = item.model_image;          } else if (item.model_image_url && item.model_image_url !== imageUrl) {             fallbackImage = item.model_image_url;          }                    const rawCurrency = item.currency || item.currency_symbol || '$';                    let savingLabel = item.percentage_saving_label || '';          if (!savingLabel && rawMsrp > rawPrice && rawPrice > 0) {            const pct = Math.round(((rawMsrp - rawPrice) / rawMsrp) * 100);            if (pct > 0) {              savingLabel = `${pct}% OFF`;            }          }                    const isPrime = item.shipping && item.shipping.prime === true;                    let scoreRaw = (item.review_score !== undefined && item.review_score !== null && item.review_score > 0) ? parseFloat(item.review_score) : null;          let starRating = 0;          if (scoreRaw !== null) {            starRating = Math.round((scoreRaw > 10 ? scoreRaw / 20 : scoreRaw / 2) * 2) / 2;          }                    return {            id: item.offer_id || item.link || item.url || item.offer_link || Math.random().toString(),            url: item.link || item.url || item.offer_link || '#',            image: imageUrl,            fallbackImage: fallbackImage,            title: item.name || item.title || item.model_name || item.product_name || 'Unknown Product',            brand: item.brand || '',            productName: item.model_name || item.product_name || item.name || '',            merchant: item.merchant_name || item.merchant || item.retailer || 'Retailer',            price: item.price !== undefined ? String(item.price) : '0.00',            currency: this.decodeHTML(rawCurrency),            msrp: item.was_price || item.msrp || item.original_price || null,            rawPrice: rawPrice,            rawMsrp: rawMsrp,            hasWasPrice: (item.was_price !== undefined && item.was_price !== null),            isCheckPrice: isCheckPrice,            savingLabel: savingLabel,            isPrime: isPrime,            starRating: starRating > 0 ? starRating : null,            modelId: item.model_id || '',            productKey: item.product_key || '',            merchantId: (item.merchant && typeof item.merchant === 'object') ? item.merchant.id || '' : '',            matchId: item.match_id || '',            merchantNetwork: (item.merchant && typeof item.merchant === 'object') ? item.merchant.an || '' : '',            merchantUrl: (item.merchant && typeof item.merchant === 'object') ? item.merchant.url || '' : '',            modelBrand: item.model_brand || item.brand || '',            modelParent: item.model_parent || ''          };        }        sortData() {          const sortVal = this.sortSelect ? this.sortSelect.value : (this.getViewMode() === 'savings_squad' ? 'date_desc' : 'discount_desc');          if (sortVal === 'price_asc') {            this.deals.sort((a, b) => a.rawPrice - b.rawPrice);          } else if (sortVal === 'price_desc') {            this.deals.sort((a, b) => b.rawPrice - a.rawPrice);          } else if (sortVal === 'discount_desc') {            this.deals.sort((a, b) => {              const aDiscount = a.rawMsrp > a.rawPrice ? (a.rawMsrp - a.rawPrice) : 0;              const bDiscount = b.rawMsrp > b.rawPrice ? (b.rawMsrp - b.rawPrice) : 0;              return bDiscount - aDiscount;            });          } else if (sortVal === 'date_desc') {             this.deals.sort((a, b) => {                let dateA = 0;                let dateB = 0;                if (a && a.modifiedDate) {                   const valA = Array.isArray(a.modifiedDate) ? a.modifiedDate[0] : a.modifiedDate;                   dateA = new Date(valA).getTime();                   if (isNaN(dateA)) dateA = 0;                }                if (b && b.modifiedDate) {                   const valB = Array.isArray(b.modifiedDate) ? b.modifiedDate[0] : b.modifiedDate;                   dateB = new Date(valB).getTime();                   if (isNaN(dateB)) dateB = 0;                }                return dateB - dateA;             });          }        }        getFilteredDeals() {          let filteredDeals = [...this.deals];                    if (this.dealModeToggle && this.dealModeToggle.checked) {            filteredDeals = filteredDeals.filter(d => d.hasWasPrice || (d.msrp && d.rawMsrp > d.rawPrice));          }                    return filteredDeals;        }        showLoading() {          const _div = '<' + '/div>';          const skeletonCardHtml = `            \x3Cdiv class="tg-df-card">              \x3Cdiv class="tg-df-card-image-box">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-img">${_div}              ${_div}              \x3Cdiv class="tg-df-card-body">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-card-footer mt-auto">                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="height:24px;">${_div}                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text" style="height:44px; margin-top:8px;">${_div}                ${_div}              ${_div}            ${_div}`;          this.grid.innerHTML = Array(4).fill(skeletonCardHtml).join('');        }        showError() {          const _div = '<' + '/div>';          this.grid.innerHTML = `\x3Cdiv class="tg-df-message">            An error occurred while finding deals. Please check your connection and try again.          ${_div}`;        }        escapeHTML(str) {          if (!str) return '';          return String(str).replace(/[&<>'"]/g, tag => ({              '&': '&', '<': '<', '>': '>', "'": ''', '"': '"'          }[tag] || tag));        }                bindCouponButtons() {          const btns = this.root.querySelectorAll('.tg-df-tag-coupons');          btns.forEach(btn => {            btn.addEventListener('click', (e) => {              e.preventDefault();              e.stopPropagation();              const merchant = btn.getAttribute('data-merchant');              this.openVouchersModal(merchant);            });          });                    const closeBtn = this.root.querySelector('#tg-df-vouchers-close');          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (closeBtn) {            closeBtn.onclick = () => this.closeVouchersModal();          }          if (backdrop) {            backdrop.onclick = (e) => {              if (e.target === backdrop) this.closeVouchersModal();            };          }        }                closeVouchersModal() {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (backdrop) backdrop.classList.remove('active');        }                async checkMerchantsCouponsBulk(merchants) {          if (!merchants || merchants.length === 0) return {};          const controller = new AbortController();          const timeoutId = setTimeout(() => controller.abort(), 4000);          try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchants.join(','));            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '120');            url.searchParams.append('origin', 'widgets-clientside');                        let res; try { res = await fetch(url.toString(), { signal: controller.signal }); } catch (e) { return {}; }            clearTimeout(timeoutId);            if (!res.ok) return {};            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        const foundMerchants = new Set();            offers.forEach(o => {              let mName = o.merchant_name || o.merchant || o.retailer;              if (mName && typeof mName === 'object') mName = mName.name;              if (mName) foundMerchants.add(String(mName).toLowerCase());            });            const resultMap = {};            merchants.forEach(m => {              if (m) resultMap[m] = foundMerchants.has(String(m).toLowerCase());            });            return resultMap;          } catch (e) {            return {};          }        }                async openVouchersModal(merchantName) {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          const title = this.root.querySelector('#tg-df-vouchers-title');          const content = this.root.querySelector('#tg-df-vouchers-content');                    if (!backdrop || !content) return;                    // HACK: Hide closing tags          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h4 = '<' + '/h4>';          const _svg = '<' + '/svg>';          const _circle = '<' + '/circle>';          const _polyline = '<' + '/polyline>';          const _rect = '<' + '/rect>';          const _path = '<' + '/path>';                    title.innerText = `${merchantName} Coupons & Deals`;          content.innerHTML = `\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}                               \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}`;          backdrop.classList.add('active');                    try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchantName);            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '50');            url.searchParams.append('origin', 'widgets-clientside');                        const res = await fetch(url.toString());            if (!res.ok) throw new Error('API Error');            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        if (offers.length === 0) {              content.innerHTML = `\x3Cdiv class="tg-df-message">No vouchers currently available for ${this.escapeHTML(merchantName)}.${_div}`;              return;            }                        content.innerHTML = offers.map((v, idx) => {              let offerObj = v;              if (v.offers && v.offers.offer) {                offerObj = Array.isArray(v.offers.offer) ? v.offers.offer[0] : v.offers.offer;              } else if (v.offer) {                offerObj = Array.isArray(v.offer) ? v.offer[0] : v.offer;              }              let logoUrl = v.logo_url || offerObj.logo_url || '';              if (!logoUrl && v.merchant) {                if (Array.isArray(v.merchant) && v.merchant.length > 0) logoUrl = v.merchant[0].logo_url || '';                else logoUrl = v.merchant.logo_url || '';              }                            const offerName = offerObj.name || offerObj.title || v.name || v.title || 'Special Offer';              const endTime = offerObj.end_time || v.end_time || '';              const linkUrl = offerObj.link || offerObj.url || v.link || v.url || '#';                            let foundVoucherCode = '';              const findVoucherCode = (obj) => {                if (!obj || typeof obj !== 'object') return;                if (obj.type === 'voucher_code' && obj.display_value) {                  foundVoucherCode = obj.display_value;                  return;                }                if (Array.isArray(obj)) {                  for (const item of obj) {                    findVoucherCode(item);                    if (foundVoucherCode) return;                  }                } else {                  for (const k in obj) {                    if (Object.prototype.hasOwnProperty.call(obj, k)) {                      findVoucherCode(obj[k]);                      if (foundVoucherCode) return;                    }                  }                }              };              findVoucherCode(offerObj);              if (!foundVoucherCode) findVoucherCode(v);                            const voucherCode = foundVoucherCode || offerObj.voucher_code || v.voucher_code || '';              const codeHtml = voucherCode ? `\x3Cspan class="tg-df-voucher-code" data-action="copy-code" data-code="${this.escapeHTML(voucherCode)}" title="Copy to clipboard">                \x3Cspan class="tg-df-voucher-code-text">${this.escapeHTML(voucherCode)}${_span}                \x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-left:6px;flex-shrink:0;" class="tg-df-voucher-copy-icon">                  \x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">${_rect}                  \x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">${_path}                ${_svg}              ${_span}` : '';                            const logoHtml = logoUrl                 ? `\x3Cimg src="${this.escapeHTML(logoUrl)}" alt="${this.escapeHTML(offerName)}" class="tg-df-voucher-logo" />`                 : `\x3Cdiv class="tg-df-voucher-logo" style="background:#e2e8f0;">${_div}`;                            let expiryHtml = '';              if (endTime) {                let dStr = endTime;                if (!isNaN(dStr) && String(dStr).length === 10) dStr = Number(dStr) * 1000;                const d = new Date(dStr);                if (!isNaN(d.getTime())) {                  const options = { year: 'numeric', month: 'short', day: 'numeric' };                  expiryHtml = `                    \x3Cdiv class="tg-df-voucher-expiry">                      \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                        \x3Ccircle cx="12" cy="12" r="10">${_circle}                        \x3Cpolyline points="12 6 12 12 16 14">${_polyline}                      ${_svg}                      Expires ${d.toLocaleDateString(undefined, options)}                    ${_div}`;                }              }              const revenueIdVal = generateRevenueId(linkUrl, offerName, merchantName, null);              const rewrittenLinkUrl = rewriteAffiliateLink(linkUrl, area, revenueIdVal);              return `                \x3Ca href="${this.escapeHTML(rewrittenLinkUrl)}" target="_blank" rel="noopener nofollow" class="tg-df-voucher-item"                  data-action="voucher-click"                  data-product-name="${this.escapeHTML(offerName)}"                  data-merchant-name="${this.escapeHTML(merchantName)}"                  data-analytics-id="${this.escapeHTML(offerObj.offer_id || offerObj.id || v.id || '')}"                  data-price=""                  data-previous-price=""                  data-original-link="${this.escapeHTML(linkUrl)}"                  data-revenue-id="${revenueIdVal}"                  data-index="${idx}"                  data-total="${offers.length}"                  data-in-stock="true"                  data-currency="USD"                  data-model-id="${this.escapeHTML(offerObj.model_id || v.model_id || offerObj.id || v.id || '')}"                  data-merchant-id="${this.escapeHTML(offerObj.merchant_id || offerObj.merchant?.id || '')}"                >                  ${logoHtml}                  \x3Cdiv class="tg-df-voucher-content">                    \x3Ch4 class="tg-df-voucher-title">${this.escapeHTML(offerName)}${_h4}                    ${codeHtml}                    ${expiryHtml}                  ${_div}                ${_a}              `;            }).join('');                        // Attach copy functionality            const copyBtns = content.querySelectorAll('[data-action="copy-code"]');            copyBtns.forEach(btn => {              btn.addEventListener('click', async (e) => {                e.preventDefault();                e.stopPropagation();                                const code = btn.getAttribute('data-code');                if (!code) return;                                try {                  const copyToClipboard = async (text) => {                     if (window.navigator.clipboard && window.isSecureContext) {                        try { await window.navigator.clipboard.writeText(text); return; } catch (e) {}                     }                     const textArea = document.createElement("textarea");                     textArea.value = text;                     textArea.style.position = "fixed";                     document.body.appendChild(textArea);                     textArea.focus();                     textArea.select();                     document.execCommand('copy');                     textArea.remove();                  };                  await copyToClipboard(code);                                    // Visual feedback                  btn.classList.add('copied');                  const textSpan = btn.querySelector('.tg-df-voucher-code-text');                  const iconSvg = btn.querySelector('.tg-df-voucher-copy-icon');                                    const origText = textSpan.innerText;                  const origIcon = iconSvg.innerHTML;                                    textSpan.innerText = 'Copied!';                  iconSvg.innerHTML = `\x3Cpolyline points="20 6 9 17 4 12">${_polyline}`;                                    setTimeout(() => {                    if (btn) {                      btn.classList.remove('copied');                      if (textSpan) textSpan.innerText = origText;                      if (iconSvg) iconSvg.innerHTML = origIcon;                    }                  }, 2000);                                    trackElementInteraction({                    id: 'voucher-code-copy',                    name: 'Copy Voucher Code',                    label: `Copied ${code} for ${merchantName}`                  });                } catch (err) {                  console.warn('Failed to copy text: ', err);                }              });            });            // Attach voucher click tracking            const voucherBtns = content.querySelectorAll('[data-action="voucher-click"]');            voucherBtns.forEach(btn => {              btn.addEventListener('click', (e) => {                if (e.target.closest('[data-action="copy-code"]')) return;                                const productName = btn.getAttribute('data-product-name');                const merchantNameAttr = btn.getAttribute('data-merchant-name');                const productId = btn.getAttribute('data-analytics-id');                const price = parseFloat(btn.getAttribute('data-price')) || null;                const prevPriceStr = btn.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = btn.getAttribute('data-original-link');                const rewrittenLink = btn.getAttribute('href');                const revenueId = btn.getAttribute('data-revenue-id');                const index = parseInt(btn.getAttribute('data-index'), 10) || 0;                const inStock = btn.getAttribute('data-in-stock') === 'true';                const totalText = btn.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: btn.getAttribute('data-model-id') || null,                    matchId: btn.getAttribute('data-match-id') || null,                    brand: btn.getAttribute('data-model-brand') || null,                    parent: btn.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: btn.getAttribute('data-merchant-id') || null,                    network: btn.getAttribute('data-merchant-network') || null,                    url: btn.getAttribute('data-merchant-url') || null,                    name: merchantNameAttr                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: btn.getAttribute('data-currency') || 'USD'                };                if (typeof trackDealClick === 'function') {                  trackDealClick(trackingParams);                }              });            });                                  } catch (e) {            console.warn(e);            content.innerHTML = `\x3Cdiv class="tg-df-message">Failed to load vouchers.${_div}`;          }        }        render() {          try {            if (this.getViewMode() === 'savings_squad' && this.airedaleTags.length > 0) {              if (this.categoryFilterWrapper) {                 this.categoryFilterWrapper.style.display = 'flex';              }              if (this.categoryFilter) {                 const _option = '<' + '/option>';                 let optionsHtml = `\x3Coption value="all">All Categories${_option}`;                 this.airedaleTags.forEach(tag => {                    const isSelected = this.activeDealTag === tag ? 'selected' : '';                    optionsHtml += `\x3Coption value="${this.escapeHTML(tag)}" ${isSelected}>${this.escapeHTML(tag)} (${this.airedaleTagCounts[tag] || 0})${_option}`;                 });                 this.categoryFilter.innerHTML = optionsHtml;                 this.categoryFilter.value = this.activeDealTag || 'all';              }            } else {               if (this.categoryFilterWrapper) {                  this.categoryFilterWrapper.style.display = 'none';               }            }            const displayDeals = this.getFilteredDeals();          // HACK: Hide closing tags from the CMS HTML sanitizer so it doesn't strip them during in-page injection          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h3 = '<' + '/h3>';          const _p = '<' + '/p>';          const _strong = '<' + '/strong>';          const _sup = '<' + '/sup>';          const _button = '<' + '/button>';          if (displayDeals.length === 0) {            if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {              if (this.deals.length > 0) {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No deals match your selected filters.                ${_div}`;              } else if (this.getViewMode() === 'savings_squad' && this.currentQuery.length <= 2) {                 // Do not show "no exact matches" if query is empty for savings_squad                 this.grid.innerHTML = '';              } else {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No exact matches found for "\x3Cstrong>${this.escapeHTML(this.currentQuery)}${_strong}". Try adjusting your search term.                ${_div}`;              }            } else {              this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                Search product or category names to discover the best deals from across the web.              ${_div}`;            }            return;          }          let dealsHtml = displayDeals.slice(0, this.displayLimit).map((deal, index) => {            try {               const currencySym = this.escapeHTML(deal.currency);               const isoCurrencyCode = normalizeCurrency(currencySym);               const escapedPrice = this.escapeHTML(deal.price);               const escapedMsrp = this.escapeHTML(deal.msrp);               const areaCode = this.getAreaCode();                              const revenueId = generateRevenueId(deal.url, deal.title, deal.merchant, null);               const originalLink = deal.url;               const rewrittenLink = rewriteAffiliateLink(deal.url, areaCode, revenueId);                        const productCategoryName = 'deals';            const dataAttr = `              data-action="${deal.isCheckPrice ? 'view-similar-click' : 'deal-click'}"              data-analytics-id="${this.escapeHTML(deal.externalProductId || deal.id || '')}"              data-product-name="${this.escapeHTML(deal.title)}"              data-merchant-name="${this.escapeHTML(deal.merchant)}"              data-price="${deal.rawPrice || ''}"              data-previous-price="${deal.rawMsrp || ''}"              data-original-link="${this.escapeHTML(originalLink)}"              data-revenue-id="${revenueId}"              data-index="${index}"              data-total="${displayDeals.length}"              data-in-stock="${deal.inStock !== false}"              data-currency="${this.escapeHTML(isoCurrencyCode)}"              data-model-id="${this.escapeHTML(deal.modelId || '')}"              data-product-key="${this.escapeHTML(deal.productKey || '')}"              data-merchant-id="${this.escapeHTML(deal.merchantId || '')}"            `;                        let priceGroupHtml = '';            let isSavingsSquadMode = this.getViewMode() === 'savings_squad';            let ctaText = 'View Deal';            let formattedPrice = '';            let msrpHtml = '';                        if (deal.isCheckPrice) {              ctaText = isSavingsSquadMode ? 'View Deal' : 'Check Price';              if (isSavingsSquadMode) {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-merchant-wrapper">                    \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                  \x3Cdiv class="tg-df-card-price-group">                  ${_div}                `;              } else {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-merchant-wrapper">                    \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                  \x3Cdiv class="tg-df-card-price-group">                    \x3Cspan class="tg-df-card-price" style="font-size: 15px; font-weight: 500; font-style: italic;">See price at retailer${_span}                  ${_div}                `;              }            } else {              // Format Price              formattedPrice = escapedPrice.includes(currencySym)                 ? escapedPrice                 : `${currencySym}${escapedPrice}`;                              // Format MSRP              msrpHtml = deal.msrp && deal.rawMsrp > deal.rawPrice                ? `\x3Cspan class="tg-df-card-msrp">${escapedMsrp.includes(currencySym) ? escapedMsrp : currencySym + escapedMsrp}${_span}`                : '';                              priceGroupHtml = `                \x3Cdiv class="tg-df-card-merchant-wrapper">                  \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                ${_div}                \x3Cdiv class="tg-df-card-price-group">                  ${isSavingsSquadMode ? '' : `                  \x3Cspan class="tg-df-card-price">${formattedPrice}${_span}                  ${msrpHtml}                  `}                ${_div}              `;            }                        const discountBadgeHtml = deal.savingLabel && !deal.isCheckPrice              ? `\x3Cspan class="tg-df-card-discount-badge">${this.escapeHTML(deal.savingLabel)}${_span}`              : '';                          // HACK for CMS            const _button = '<' + '/button>';            const _svg = '<' + '/svg>';            const _path = '<' + '/path>';            const _rect = '<' + '/rect>';            const _circle = '<' + '/circle>';            const _polyline = '<' + '/polyline>';            const _line = '<' + '/line>';                        let badgesHtml = '';            const primeBadge = deal.isPrime ? `              \x3Cspan class="tg-df-tag tg-df-tag-prime">                \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="currentColor">                  \x3Cpath d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z">${_path}                ${_svg} Prime              ${_span}            ` : '';                        const couponsBadge = deal.merchant && deal.merchant.toLowerCase().includes('amazon') ? '' : `              \x3Cdiv class="tg-df-coupon-wrapper" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:inline-flex; align-items:center;">                \x3Cdiv class="tg-df-coupon-spinner">${_div}                \x3Cbutton type="button" class="tg-df-tag tg-df-tag-coupons" data-action="coupons-click" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:none;">                  \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                    \x3Cpath d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z">${_path}                    \x3Cline x1="7" y1="7" x2="7.01" y2="7">${_line}                  ${_svg} Coupons                ${_button}              ${_div}            `;                        // Note: We always add coupons badge if there's a chance, but to allow 3-line titles we check wrapper display state            badgesHtml = `              \x3Cdiv class="tg-df-card-badges">                ${primeBadge}                ${couponsBadge}              ${_div}            `;            const _linearGradient = '<' + '/linearGradient>';            const _polygon = '<' + '/polygon>';            const _stop = '<' + '/stop>';            const _defs = '<' + '/defs>';                        let starHtml = '';            if (deal.starRating) {              let rating = deal.starRating;                            if (rating > 0) {                const fullStars = Math.floor(rating);                const halfStar = (rating - fullStars) >= 0.5 ? 1 : 0;                const emptyStars = Math.max(0, 5 - fullStars - halfStar);                const blue = '#1f69ff'; // Tom's guide brand color from VIEW DEAL button                const gray = '#cbd5e1';                                const starSvgFull = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="${blue}" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                const gradId = 'half_grad_' + Math.floor(Math.random()*1000000);                const starSvgHalf = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cdefs>\x3ClinearGradient id="${gradId}" x1="0" x2="1" y1="0" y2="0">\x3Cstop offset="50%" stop-color="${blue}">${_stop}\x3Cstop offset="50%" stop-color="transparent">${_stop}${_linearGradient}${_defs}                  \x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26" fill="url(#${gradId})">${_polygon}${_svg}`;                                  const starSvgEmpty = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="${gray}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                let stars = [];                for (let i=0; i<fullStars; i++) stars.push(starSvgFull);                if (halfStar) stars.push(starSvgHalf);                for (let i=0; i<emptyStars; i++) stars.push(starSvgEmpty);                                starHtml = `\x3Cdiv class="tg-df-card-stars" style="display:flex;align-items:center;margin-bottom:8px;font-size:13px;font-weight:600;color:var(--tg-df-text-muted);">                  \x3Cspan style="margin-right:6px;">Tom's Guide:${_span}                  \x3Cdiv style="display:flex;gap:2px;">                    ${stars.join('')}                  ${_div}                ${_div}`;              }            }            let htmlOutput = '';            if (isSavingsSquadMode) {              htmlOutput += `              \x3Cdiv class="hawk-deal-widget-container tg-df-mobile-only" data-collapsible="true">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''} style="margin-bottom: 10px;">` : ''}                \x3Cdiv class="hawk-deal-widget-wrap">                  \x3Cdiv class="hawk-deal-widget-image-container">                    \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" rel="sponsored noopener" target="_blank" class="hawk-affiliate-link-deal-widget" ${dataAttr}>                      \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="hawk-lazy-image-deal-widget" loading="lazy" width="140" height="160" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                    ${_a}                  ${_div}                  \x3Cdiv class="hawk-deal-widget-text-cta-container">                    \x3Cdiv class="hawk-deal-widget-text-body-container">                      \x3Cdiv class="hawk-deal-widget-text-body-main">                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          ${deal.isCheckPrice ? `                            \x3Cspan class="hawk-deal-widget-title-product-title">${this.escapeHTML(deal.title)}${_span}                          ` : `                            \x3Cspan class="hawk-deal-widget-title-product-title">${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_span}                          `}                        ${_a}                        ${!deal.isCheckPrice && deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan class="hawk-deal-widget-title-was-price">was ${currencySym}${escapedMsrp}${_span}                          ${_a}                        ` : ''}                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          \x3Cspan class="hawk-deal-widget-title-retailer-price">                            ${!deal.isCheckPrice ? `                              \x3Cspan class="hawk-deal-widget-title-price">now ${formattedPrice}${_span}                              \x3Cspan class="hawk-deal-widget-title-retailer"> at ${this.escapeHTML(deal.merchant)}${_span}                            ` : `                              \x3Cspan class="hawk-deal-widget-title-price">See price at ${this.escapeHTML(deal.merchant)}${_span}                            `}                          ${_span}                        ${_a}                        ${deal.description ? `\x3Cdiv class="hawk-deal-widget-text-body-description">\x3Cp>${this.escapeHTML(deal.description)}${_p}${_div}` : ''}                      ${_div}                    ${_div}                    \x3Cdiv class="hawk-deal-widget-footer">                      \x3Cdiv class="hawk-deal-widget-button-wrapper">                        \x3Cdiv class="hawk-deal-widget-preferred-partner-wrapper">                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-deal-button" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan>${deal.isCheckPrice ? 'Check Price' : 'View Deal'}${_span}                          ${_a}                        ${_div}                      ${_div}                    ${_div}                  ${_div}                ${_div}              ${_div}              `;            }            htmlOutput += `              \x3Cdiv class="tg-df-card ${isSavingsSquadMode ? 'tg-df-desktop-only' : ''}">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''}>` : ''}                \x3Cdiv class="tg-df-card-image-box">                  ${discountBadgeHtml}                  \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" style="display: flex; align-items: center; justify-content: center; width: 100%; height: 100%;">                    \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="tg-df-card-image" loading="lazy" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                  ${_a}                ${_div}                \x3Cdiv class="tg-df-card-body">                  ${starHtml}                  ${badgesHtml}                  \x3Ch3 class="tg-df-card-title tg-df-custom-savings-squad-title" title="${this.escapeHTML(deal.title)}">                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" disable-tracking="true" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit;">                      ${isSavingsSquadMode                         ? (deal.isCheckPrice                             ? (deal.title && deal.title.includes(':')                                 ? `\x3Cstrong>${this.escapeHTML(deal.title.substring(0, deal.title.indexOf(':') + 1))}${_strong}\x3Cspan style="color: #1f69ff; font-weight: normal;">${this.escapeHTML(deal.title.substring(deal.title.indexOf(':') + 1))}${_span}`                                : this.escapeHTML(deal.title)                              )                             : `\x3Cstrong>${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_strong} ${deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `\x3Cspan style="color: #d0021b; text-decoration: line-through; font-weight: normal; margin-right: 4px;">was ${currencySym}${escapedMsrp}${_span} ` : ''}\x3Cspan style="color: #1f69ff; font-weight: normal;">now ${formattedPrice} at ${this.escapeHTML(deal.merchant)}${_span}`                          )                        : this.escapeHTML(deal.title)                      }                    ${_a}                  ${_h3}                  ${deal.description ? `\x3Cp style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 12px; line-height: 1.4;">${this.escapeHTML(deal.description)}${_p}` : ''}                  \x3Cdiv class="tg-df-card-footer">                    ${priceGroupHtml}                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" class="tg-df-card-cta ${isSavingsSquadMode ? 'tg-df-cta-savings-squad' : ''}" style="text-decoration: none;">${ctaText}${_a}                  ${_div}                ${_div}              ${_div}            `;                        return htmlOutput;            } catch (e) {               console.log("Error rendering deal in map for index", index, typeof deal === 'object' ? JSON.stringify(deal) : deal, "MSG:", e.message);               return '';            }          }).join('');                    if (displayDeals.length > this.displayLimit || ((this.getViewMode() === 'carousel' || this.getViewMode() === 'auto') && displayDeals.length > 0 && displayDeals.length % ((this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12) === 0)) {            if (this.getViewMode() === 'carousel') {               dealsHtml += `                 \x3Cbutton type="button" class="tg-df-load-more-card tg-df-load-more">                   \x3Csvg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-bottom: 8px;">\x3Cpath d="M5 12h14">\x3C/path>\x3Cpath d="m12 5 7 7-7 7">\x3C/path>\x3C/svg>                   Load More                 ${_button}               `;            } else {               dealsHtml += `                 \x3Cdiv style="width: 100%; display: flex; justify-content: center; margin-top: 16px; grid-column: 1 / -1;">                   \x3Cbutton type="button" class="tg-df-tag-outline tg-df-load-more" style="padding: 8px 24px; border-radius: 100px; font-weight: 600; font-size: 14px; cursor: pointer; display: flex; align-items: center;">Load More${_button}                 ${_div}               `;            }          }                    this.grid.innerHTML = dealsHtml;          // Inject JSON-LD          try {            let targetNode = this.hostContainer || document.head;            let jsonLdScript = targetNode.querySelector('#tg-df-json-ld-' + this.widgetId);            if (!jsonLdScript) {                jsonLdScript = document.createElement('script');                jsonLdScript.type = 'application/ld+json';                jsonLdScript.id = 'tg-df-json-ld-' + this.widgetId;                targetNode.appendChild(jsonLdScript);            }            const jsonLdData = {              "@context": "https://schema.org",              "@type": "ItemList",              "itemListElement": displayDeals.slice(0, this.displayLimit).map((deal, index) => {                 let isoCurrency = "USD";                 if (deal.currency === '£') isoCurrency = "GBP";                 else if (deal.currency === '€') isoCurrency = "EUR";                 else if (deal.currency === 'A$') isoCurrency = "AUD";                 else if (deal.currency === 'CA$') isoCurrency = "CAD";                 const areaCode = typeof this.getAreaCode === 'function' ? this.getAreaCode() : 'US';                 const revenueId = typeof generateRevenueId === 'function' ? generateRevenueId(deal.url, deal.title, deal.merchant, null) : '';                 const rewrittenLink = typeof rewriteAffiliateLink === 'function' ? rewriteAffiliateLink(deal.url, areaCode, revenueId) : deal.url;                 return {                   "@type": "ListItem",                   "position": index + 1,                   "item": {                     "@type": "Product",                     "name": deal.title,                     "image": deal.image || "",                     "description": deal.description || "",                     "brand": {                       "@type": "Brand",                       "name": deal.brand || ""                     },                     "offers": {                       "@type": "Offer",                       "priceCurrency": isoCurrency,                       "price": deal.rawPrice || 0,                       "url": rewrittenLink,                       "seller": {                         "@type": "Organization",                         "name": deal.merchant || ""                       }                     }                   }                 };              }).filter(item => item.item.name)            };            jsonLdScript.textContent = JSON.stringify(jsonLdData);          } catch(e) { console.warn("JSON-LD generation failed", e); }                    let gridWrapper = this.grid.parentElement;          if (gridWrapper && gridWrapper.classList.contains('tg-df-grid-wrapper')) {             let rightChevron = gridWrapper.querySelector('.tg-df-carousel-scroll-right');             let leftChevron = gridWrapper.querySelector('.tg-df-carousel-scroll-left');             if (this.getViewMode() === 'carousel') {                 // The observer set up in setupScrollListeners handles visibility.                 if (rightChevron) rightChevron.style.display = 'flex';                 if (leftChevron) leftChevron.style.display = 'none'; // reset correctly             } else {                 if (rightChevron) rightChevron.style.display = 'none';                 if (leftChevron) leftChevron.style.display = 'none';             }          }                    const loadMoreBtn = this.grid.querySelector('.tg-df-load-more');          if (loadMoreBtn) {            loadMoreBtn.addEventListener('click', async () => {              if (typeof trackElementInteraction === 'function') {                trackElementInteraction({ id: 'load-more', name: 'Load more', label: 'Load More Results' });              }              if (displayDeals.length <= this.displayLimit) {                 loadMoreBtn.innerHTML = `                  <svg class="tg-df-spinner" style="width: 16px; height: 16px; display: inline-block; vertical-align: middle; margin-right: 8px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M12 2v4m0 12v4M4.93 4.93l2.83 2.83m8.48 8.48l2.83 2.83M2 12h4m12 0h4M4.93 19.07l2.83-2.83m8.48-8.48l2.83-2.83"/></svg>                  Loading...                 `;                 loadMoreBtn.disabled = true;                 await this.fetchDeals(this.currentQuery, true);              } else {                 this.displayLimit += this.getRowsLimit();                 this.render();              }            });          }                      this.bindCouponButtons();            this.checkAndUpdateCoupons();                        // Allow hawklinks.js to discover and rewrite our widget links             // by appending the .article-body class and manually triggering processArticle.            let container = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (container && !container.classList.contains('article-body')) {               container.classList.add('article-body');            }            setTimeout(() => {               if (this.grid && !this.grid.classList.contains('article-body')) this.grid.classList.add('article-body');               document.dispatchEvent(new CustomEvent('processArticle', { detail: { element: this.root } }));            }, 50);          } catch(e) {            console.warn("Widget render error", e);          }        }                async checkAndUpdateCoupons() {          const wrappers = Array.from(this.root.querySelectorAll('.tg-df-coupon-wrapper'));          if (wrappers.length === 0) return;                    const merchants = [...new Set(wrappers.map(w => w.getAttribute('data-merchant')).filter(Boolean))];          if (merchants.length === 0) return;          const couponResultsMap = await this.checkMerchantsCouponsBulk(merchants);                    for (const merchant of merchants) {            const hasCoupons = !!couponResultsMap[merchant];            const merchantWrappers = wrappers.filter(w => w.getAttribute('data-merchant') === merchant);            merchantWrappers.forEach(wrapper => {              const spinner = wrapper.querySelector('.tg-df-coupon-spinner');              const btn = wrapper.querySelector('.tg-df-tag-coupons');                            if (spinner) spinner.style.display = 'none';                            if (hasCoupons && btn) {                btn.style.display = 'inline-flex';              } else if (!hasCoupons) {                wrapper.style.display = 'none';              }            });          }        }        updateFloatingCopyBar() {          if (!this.editorBar || !this.editorSelectedCount) return;          if (this.editorMode && this.selectedDeals.size > 0) {            this.editorBar.style.display = 'flex';            this.editorSelectedCount.innerText = this.selectedDeals.size;          } else {            this.editorBar.style.display = 'none';          }        }        async copySelectedDealsToCMS() {           function htmlToSlate(htmlString) {              if (!htmlString) return [{ type: 'paragraph', children: [{ text: '' }] }];              let doc;              if (typeof window !== 'undefined' && window.DOMParser) {                 doc = new DOMParser().parseFromString(htmlString, 'text/html');              } else {                 doc = document.implementation.createHTMLDocument('');                 doc.body.innerHTML = htmlString;              }                            function parseNode(node, marks = {}) {                  if (node.nodeType === 3) {                      const text = node.textContent;                      if (!text) return null;                      return { text: text, ...marks };                  }                  if (node.nodeType === 1) {                      const tagName = node.tagName.toLowerCase();                      if (tagName === 'br') {                          return { type: 'line-break', children: [{ text: '' }] };                      }                      if (tagName === 'p') {                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return { type: 'paragraph', children };                      }                      if (tagName === 'strong' || tagName === 'b') {                          const newMarks = { ...marks, bold: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'em' || tagName === 'i') {                          const newMarks = { ...marks, italic: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'a') {                          const href = node.getAttribute('href') || '';                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return {                              type: 'link',                              url: href,                              isNoFollow: (node.getAttribute('rel') || '').includes('nofollow'),                              isSponsored: (node.getAttribute('rel') || '').includes('sponsored'),                              isOpenNewTab: node.getAttribute('target') === '_blank',                              isPreventDataRewrite: false,                              children: children                          };                      }                      return Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                  }                  return null;              }                            let blocksArray = [];              let currentParagraphChildren = [];              function flushParagraph() {                  if (currentParagraphChildren.length > 0) {                      blocksArray.push({ type: 'paragraph', children: currentParagraphChildren });                      currentParagraphChildren = [];                  }              }              Array.from(doc.body.childNodes).forEach(node => {                  const parsed = parseNode(node, {});                  const parsedItems = Array.isArray(parsed) ? parsed : (parsed ? [parsed] : []);                  parsedItems.forEach(item => {                      if (item.type === 'paragraph') {                          flushParagraph();                          blocksArray.push(item);                      } else {                          currentParagraphChildren.push(item);                      }                  });              });              flushParagraph();              if (blocksArray.length === 0) {                  blocksArray = [{ type: 'paragraph', children: [{ text: '' }] }];              }              return blocksArray;           }           const blocks = [];                      this.editorCopyBtn.innerHTML = '\x3Cspan class="tg-df-coupon-spinner" style="display:inline-block; margin-right:8px; border-top-color:#fff;">' + '<' + '/span> Copying...';           for (const deal of Array.from(this.selectedDeals.values())) {              const url = deal.url;              const merchant = deal.merchant;              const title = deal.title;              const image = deal.image;              const currentPrice = deal.currency + deal.rawPrice;              const wasPrice = deal.hasWasPrice && deal.rawMsrp > deal.rawPrice ? deal.currency + deal.rawMsrp : '';                            let couponsChildren = [];              try {                  const area = this.getAreaCode();                  const apiUrl = new URL('https://search-api.fie.future.net.uk/widget.php');                  apiUrl.searchParams.append('model_name', 'Everything');                  apiUrl.searchParams.append('language', 'en-GB');                  apiUrl.searchParams.append('area', area);                  apiUrl.searchParams.append('combine_product_types', '1');                  apiUrl.searchParams.append('filter_merchant_name', merchant);                  apiUrl.searchParams.append('all_filters', 'false');                  apiUrl.searchParams.append('exclude_unlabelled', 'false');                  apiUrl.searchParams.append('include_specs', 'false');                  apiUrl.searchParams.append('sort', 'voucher');                  apiUrl.searchParams.append('distinct_merchants', 'natural');                  apiUrl.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');                  apiUrl.searchParams.append('rows', '3');                  apiUrl.searchParams.append('origin', 'widgets-clientside');                                    let res; try { res = await fetch(apiUrl.toString()); } catch (e) { return; }                  if (res.ok) {                      const data = await res.json();                      let offers = [];                      if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {                        offers = data.widget.data.offers;                      } else if (data && data.data && Array.isArray(data.data.offers)) {                        offers = data.data.offers;                      }                                            if (offers.length > 0) {                          couponsChildren.push({ text: "Also check out these coupons: ", bold: true });                          offers.slice(0, 3).forEach((offer, idx) => {                              const actualOffer = offer.offer || offer;                              const offerName = actualOffer.name || actualOffer.title || offer.model_name || offer.title || offer.name || 'Coupon';                              const linkUrl = actualOffer.link || actualOffer.url || actualOffer.offer_link || '#';                              couponsChildren.push({ type: "line-break", children: [{ text: "" }] });                              couponsChildren.push({ text: "🎟️ " });                              couponsChildren.push({                                  type: "link",                                  url: linkUrl,                                  isNoFollow: true,                                  isSponsored: false,                                  isOpenNewTab: true,                                  isPreventDataRewrite: false,                                  children: [{ text: offerName, bold: true }]                              });                          });                      }                  }              } catch (err) {                  console.warn('Failed to fetch coupons for', merchant, err);              }              let descriptionValue = [];              if (deal.text) {                 descriptionValue = htmlToSlate(deal.text);              } else {                 const dealDescriptions = [                   `Don't miss out on this fantastic deal for the ${title}. It is currently available at ${merchant} for a highly competitive price.`,                   `We've spotted an excellent price drop on the ${title}. Grab it now at ${merchant} before it's gone.`,                   `The ${title} is currently seeing a generous discount over at ${merchant}. This is a perfect time to buy if you've been holding out.`,                   `If you're in the market for the ${title}, ${merchant} has just the deal for you.`,                   `Score the ${title} for less at ${merchant} right now. This is a rare chance to save big.`,                   `Upgrade your setup with the ${title}, now available at a stellar price via ${merchant}.`                 ];                 const randomDescription = dealDescriptions[Math.floor(Math.random() * dealDescriptions.length)];                 descriptionValue = [                    { type: "paragraph", children: [{ text: randomDescription }] }                 ];              }                            if (couponsChildren.length > 0) {                 let lastBlock = descriptionValue[descriptionValue.length - 1];                 if (lastBlock && lastBlock.type === 'paragraph') {                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ text: "Also check out these coupons: ", bold: true });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children = lastBlock.children.concat(couponsChildren);                 } else {                     descriptionValue.push({                         type: "paragraph",                         children: [                             { type: "line-break", children: [{ text: "" }] },                             { type: "line-break", children: [{ text: "" }] },                             { text: "Also check out these coupons: ", bold: true },                             { type: "line-break", children: [{ text: "" }] },                             ...couponsChildren                         ]                     });                 }              }              function normalizeCurrencyToISO(symbol) {                const map = { '£': 'GBP', '$': 'USD', 'A$': 'AUD', 'CA$': 'CAD', '€': 'EUR' };                return map[symbol] || symbol;              }              const isoCurrency = normalizeCurrencyToISO(deal.currency);              blocks.push({                 id: (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'cms-' + Date.now() + Math.random(),                 blockTypeName: "deal",                 excludeFrom: [],                 collapsible: false,                 props: {                    description: {                       value: descriptionValue,                       touched: false,                       validationMessage: ""                    },                    image: {                       value: {                          credit: [{ type: "paragraph", children: [{ text: merchant }] }],                          dateCreated: Date.now(),                          dateModified: Date.now(),                          distribution: [],                          fileSize: 0,                          height: 1000,                          id: deal.id,                          imageRights: "",                          src: image,                          name: title + ".jpg",                          tags: [],                          width: 1000                       },                       touched: false,                       validationMessage: ""                    },                    showDealButton: { value: true, touched: false, validationMessage: "" },                    isPreferredPartner: { value: false, touched: false, validationMessage: "" },                    linkHref: { value: url, touched: false, validationMessage: "" },                    linkLabel: { value: "", touched: false, validationMessage: "" },                    linkIsNoFollow: { value: true, touched: false, validationMessage: "" },                    linkIsSponsored: { value: false, touched: false, validationMessage: "" },                    linkIsOpenNewWindow: { value: true, touched: false, validationMessage: "" },                    customPromoFlags: { value: [], touched: false, validationMessage: "" },                    showStarDeal: { value: false, touched: false, validationMessage: "" },                    savingType: { value: "none", touched: false, validationMessage: "" },                    starDealPromoFlag: { value: "", touched: false, validationMessage: "" },                    showEditorsChoice: { value: false, touched: false, validationMessage: "" },                    editorsChoiceTitle: { value: "", touched: false, validationMessage: "" },                    hawkPriceCurrency: { value: { value: isoCurrency, label: isoCurrency }, touched: false, validationMessage: "" },                    hawkPrice: { value: deal.hasWasPrice ? String(deal.rawMsrp) : String(deal.rawPrice), touched: false, validationMessage: "" },                    hawkSalePrice: { value: String(deal.rawPrice), touched: false, validationMessage: "" },                    lastCheckedPriceDate: { value: "", touched: false, validationMessage: "" },                    hawkModel: { touched: false, validationMessage: "" },                    productId: { value: "", touched: false, validationMessage: "" },                    voucherId: { value: "", touched: false, validationMessage: "" },                    brand: { value: deal.brand || merchant, touched: false, validationMessage: "" },                    productName: { value: title, touched: false, validationMessage: "" },                    label: { value: "", touched: false, validationMessage: "" },                    retailer: { value: merchant, touched: false, validationMessage: "" },                    priceCheckError: false                 },                 failedFetchError: ""              });           }           const payload = {              type: "articleBuilderPages",              data: blocks           };           const jsonStr = JSON.stringify(payload);                      if (navigator.clipboard && navigator.clipboard.writeText) {              navigator.clipboard.writeText(jsonStr).then(() => {                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              }).catch(err => {                 console.warn('Failed to copy text: ', err);                 alert('Failed to copy deals to clipboard. See console.');              });           } else {              // Fallback              const textArea = document.createElement("textarea");              textArea.value = jsonStr;              document.body.appendChild(textArea);              textArea.focus();              textArea.select();              try {                 document.execCommand('copy');                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              } catch (err) {                 console.warn('Fallback: Oops, unable to copy', err);                 alert('Fallback: Failed to copy deals to clipboard.');              }              document.body.removeChild(textArea);           }        }      }      // Initialize the Widget      if (document.readyState === 'loading') {        document.addEventListener('DOMContentLoaded', () => new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer }));      } else {        new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer });      }    })();  </script></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/ipads/first-oled-ipad-mini-tipped-for-october-launch-heres-why-im-excited-and-worried</link>
                                                                            <description>
                            <![CDATA[ According to Apple tipster Mark Gurman, Cupertino is set to launch its first OLED iPad mini in October, with iPad Air and iPad Pro being refreshed in 2027. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">WmraeRSangUpsseyKU6Lsn</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/Wjr8UhurfobfV7ZGKwck4i-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 16 Jul 2026 18:15:08 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[Computing Peripherals]]></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-1280-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-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Apple will reportedly launch the first OLED iPad mini. That’s according to Bloomberg reporter and Apple tipster <a href="https://www.bloomberg.com/news/articles/2026-07-16/apple-nears-launch-of-oled-ipad-mini-new-ipad-air-and-base-ipad-in-2027" target="_blank">Mark Gurman</a>, whose sources claim this updated iPad mini could arrive as early as this October. If true, this would be the biggest upgrade for the company’s smallest tablet. This has me both excited and worried.</p><p>The iPad mini was last updated in October 2024 with the <a href="https://www.tomsguide.com/tablets/ipads/ipad-mini-7-review">iPad mini 7</a>. Besides the A17 Pro chip, it retained the same design introduced in 2021. </p><p>This reported 8th-generation iPad mini model, currently code-named J510, would presumably have a faster chip along with the OLED panel. The report doesn’t specify if the tablet will receive other design upgrades, like thinner bezels.</p><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>Gurman’s report also discusses other upcoming iPad models. This includes an updated entry-level iPad, code-named J581, reportedly set for release early next year, according to Gurman’s sources. New iPad Air models, in both 11- and 13-inch variants, code-named J807 and J837, are allegedly dropping in Spring of 2027, along with new iPad Pro models around the same time.</p><p>Regarding the other iPads, Gurman doesn’t say whether or not the iPad Air line will get the same OLED upgrade as the iPad mini 8. If the iPad Air keeps the same Liquid Retina display, it would be the only iPad model without an OLED panel.</p><p>The iPad mini 7 currently starts at $599, which is $100 more than its original cost, 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>. Given the volatility of prices thanks to the ongoing <a href="https://www.tomsguide.com/computing/the-ram-crisis-is-so-much-bigger-than-pcs-heres-the-rest-of-the-products-caught-in-the-crossfire">RAM crisis</a>, it’s difficult to say how much the iPad mini 8 could cost. However, the introduction of an OLED panel would naturally make this tablet more expensive.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OLqKbX"></div>                            </div>                            <script src="https://kwizly.com/embed/OLqKbX.js" async></script><h2 id="outlook">Outlook</h2><p>Though Mark Gurman has a stellar track record for Apple scoops, it’s best to take this report with a grain of salt, as Apple has yet to officially announce the new iPad mini or new iPads in general. We’ll keep our ears to the ground on this one, so stay tuned for more as we hear 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/the-4-biggest-allegations-in-apples-lawsuit-against-openai">The 4 biggest allegations in Apple's lawsuit against OpenAI</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-ultra-4-these-are-the-upgrades-apple-needs-to-make-to-remain-the-smartwatch-king">Apple Watch Ultra 4 — these are the upgrades it needs</a></li><li><a href="https://www.tomsguide.com/phones/iphones/7-hidden-ios-27-features-apple-didnt-tell-you-about-at-wwdc">7 hidden iOS 27 features Apple didn't tell you about</a></li></ul><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=ipads&brands=Apple&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="12" selected>12 Items\x3C/option>                \x3Coption value="24">24 Items\x3C/option>                \x3Coption value="48">48 Items\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item tg-df-dl-row">              \x3Cdiv>                \x3Cspan class="tg-df-dl-row-text">Deal Mode\x3C/span>                \x3Cspan class="tg-df-dl-row-subtext">Only show products with active offers or previous prices (was_price)\x3C/span>              \x3C/div>              \x3Clabel class="tg-df-toggle">                \x3Cinput type="checkbox" id="tg-df-deal-mode">                \x3Cspan class="tg-df-slider">\x3C/span>              \x3C/label>            \x3C/div>            \x3Cdiv class="tg-df-setting-item tg-df-dl-row">              \x3Cdiv>                \x3Cspan class="tg-df-dl-row-text">Editor Mode\x3C/span>                \x3Cspan class="tg-df-dl-row-subtext">Enable multi-select to copy deals to CMS\x3C/span>              \x3C/div>              \x3Clabel class="tg-df-toggle">                \x3Cinput type="checkbox" id="tg-df-editor-mode">                \x3Cspan class="tg-df-slider">\x3C/span>              \x3C/label>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">View Mode\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-view-mode-select">                \x3Coption value="auto">Auto Collection\x3C/option>                \x3Coption value="carousel">Carousel\x3C/option>                \x3Coption value="savings_squad">Savings Squad\x3C/option>                \x3Coption value="grid">Grid (Columns)\x3C/option>                \x3Coption value="row">Row (List)\x3C/option>              \x3C/select>            \x3C/div>          \x3C/div>        \x3C/div>      \x3C/div>      \x3Cdiv class="tg-df-filters">        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-category-filter-wrapper" style="display: none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-category-filter" aria-label="Category">            \x3Coption value="all">All Categories\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-multiselect-container" id="tg-df-brand-filter-wrapper" style="display:none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M4.25 5.61C6.27 8.2 10 13 10 13v6c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-6s3.72-4.8 5.74-7.39A.998.998 0 0 0 18.95 4H5.04c-.83 0-1.3.95-.79 1.61z"/>          \x3C/svg>          \x3Cdiv class="tg-df-filter-select tg-df-multiselect-trigger" id="tg-df-brand-trigger" tabindex="0">            Any Brand          \x3C/div>          \x3Cdiv class="tg-df-multiselect-dropdown" id="tg-df-brand-dropdown">            \x3C!-- Populated via script --\x3E          \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M9 3L5 6.99h3V14h2V6.99h3L9 3zm7 14.01V10h-2v7.01h-3L15 21l4-3.99h-3z"/>          \x3C/svg>          \x3Cselect class="tg-df-sort-select" aria-label="Sort Deals">            \x3Coption value="date_desc">Newest First\x3C/option>            \x3Coption value="best_match">Sort by: Match\x3C/option>            \x3Coption value="price_asc">Price Low to High\x3C/option>            \x3Coption value="price_desc">Price High to Low\x3C/option>            \x3Coption value="discount_desc">Biggest Discount\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-price-range-wrapper" id="tg-df-custom-price-wrapper" style="display: flex; align-items:center; justify-content:center; padding: 10px 20px; gap: 8px; border: 1px solid var(--tg-df-border); border-radius: 100px; background-color: var(--tg-df-bg);">          \x3Cspan style="font-size:14px; font-weight:500; color:var(--tg-df-text-primary);">Price\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-min" placeholder="Min" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">          \x3Cspan style="color:var(--tg-df-text-muted)">-\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-max" placeholder="Max" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-legacy-price-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-price-filter" aria-label="Filter Prices">            \x3Coption value="all">All Prices\x3C/option>            \x3Coption value="under50">Under $50\x3C/option>            \x3Coption value="50_100">$50 - $100\x3C/option>            \x3Coption value="100_200">$100 - $200\x3C/option>            \x3Coption value="200_500">$200 - $500\x3C/option>            \x3Coption value="over500">Over $500\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-discount-filter-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-discount-filter" aria-label="Discount Amount">            \x3Coption value="all">Any discount\x3C/option>            \x3Coption value="5">Min 5%\x3C/option>            \x3Coption value="10">Min 10%\x3C/option>            \x3Coption value="15">Min 15%\x3C/option>            \x3Coption value="20">Min 20%\x3C/option>            \x3Coption value="25">Min 25%\x3C/option>            \x3Coption value="30">Min 30%\x3C/option>            \x3Coption value="40">Min 40%\x3C/option>            \x3Coption value="50">Min 50%\x3C/option>            \x3Coption value="60">Min 60%\x3C/option>            \x3Coption value="70">Min 70%\x3C/option>          \x3C/select>        \x3C/div>      \x3C/div>    \x3C/div>    \x3C!-- Deals Grid Wrapper --\x3E    \x3Cdiv class="tg-df-grid-wrapper tg-df-carousel-cards-wrapper" id="tg-df-grid-wrapper">      \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3Cdiv class="tg-df-grid" id="tg-df-grid">        \x3C!-- Content populated by JavaScript --\x3E      \x3C/div>      \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>    \x3C/div>        \x3C!-- Vouchers Modal --\x3E    \x3Cdiv class="tg-df-modal-backdrop" id="tg-df-vouchers-modal">      \x3Cdiv class="tg-df-modal">        \x3Cdiv class="tg-df-modal-header">          \x3Ch3 class="tg-df-modal-title" id="tg-df-vouchers-title">Available Coupons & Deals\x3C/h3>          \x3Cbutton class="tg-df-modal-close" id="tg-df-vouchers-close">            \x3Csvg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">              \x3Cline x1="18" y1="6" x2="6" y2="18">\x3C/line>              \x3Cline x1="6" y1="6" x2="18" y2="18">\x3C/line>            \x3C/svg>          \x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-modal-body" id="tg-df-vouchers-content">          \x3C!-- Vouchers injected here --\x3E        \x3C/div>      \x3C/div>    \x3C/div>  \x3C/div>`;      if (!template) {        template = document.createElement('template');        template.innerHTML = rawTemplate;      }      let shadowRoot = null;      if (hostContainer && template) {        hostContainer.setAttribute('data-initialized', 'true');        shadowRoot = hostContainer.attachShadow({ mode: 'open' });        shadowRoot.appendChild(template.content.cloneNode(true));      }      class DealsFinderWidget {        constructor(config) {          this.rootNode = config.rootNode || document;          this.hostContainer = config.hostContainer || null;          this.rootId = config.rootId || 'signal-deals-finder-root';          this.root = this.rootNode.querySelector('#' + this.rootId);          if (!this.root) return;          this.widgetId = (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'widget-' + Date.now() + '-' + Math.random().toString(36).slice(2);          this.grid = this.root.querySelector('#tg-df-grid');          this.tagsContainer = this.root.querySelector('#tg-df-tags-container');          this.categoryFilter = this.root.querySelector('#tg-df-category-filter');          this.categoryFilterWrapper = this.root.querySelector('#tg-df-category-filter-wrapper');          this.searchInput = this.root.querySelector('.tg-df-search-input');          this.autocompleteDropdown = this.root.querySelector('#tg-df-autocomplete');          this.sortSelect = this.root.querySelector('.tg-df-sort-select');          this.searchBtn = this.root.querySelector('.tg-df-search-btn');                    this.settingsToggle = this.root.querySelector('#tg-df-settings-toggle');          this.settingsPanel = this.root.querySelector('#tg-df-settings-panel');          this.settingsBackdrop = this.root.querySelector('#tg-df-settings-backdrop');          this.regionSelect = this.root.querySelector('#tg-df-region-select');          this.retailerSelect = this.root.querySelector('#tg-df-retailer-select');          this.offerTypeSelect = this.root.querySelector('#tg-df-offer-type-select');          this.viewModeSelect = this.root.querySelector('#tg-df-view-mode-select');          this.rowsSelect = this.root.querySelector('#tg-df-rows-select');          this.dealModeToggle = this.root.querySelector('#tg-df-deal-mode');          this.editorModeToggle = this.root.querySelector('#tg-df-editor-mode');          this.priceFilter = this.root.querySelector('#tg-df-price-filter');          this.discountFilter = this.root.querySelector('#tg-df-discount-filter');                    this.editorBar = this.root.querySelector('#tg-df-editor-bar');          this.editorSelectedCount = this.root.querySelector('#tg-df-selected-count');          this.editorCopyBtn = this.root.querySelector('#tg-df-editor-copy');          this.editorClearBtn = this.root.querySelector('#tg-df-editor-clear');                    this.apiUrl = 'https://search-api.fie.future.net.uk/widget.php';          this.deals = [];          this.displayLimit = 12;          this.airedaleArticles = null;          this.airedaleTags = [];          this.airedaleTagCounts = {};          this.activeDealTag = null;          this.selectedBrands = [];          this.currentQuery = '';          this.editorMode = this.hostContainer ? this.hostContainer.hasAttribute('data-editor-mode') : false;          this.viewModeOverride = this.hostContainer ? this.hostContainer.getAttribute('data-view-mode') : null;          this.selectedDeals = new Map();                    this.brandFilterWrapper = this.root.querySelector('#tg-df-brand-filter-wrapper');          this.brandTrigger = this.root.querySelector('#tg-df-brand-trigger');          this.brandDropdown = this.root.querySelector('#tg-df-brand-dropdown');                    this.customPriceWrapper = this.root.querySelector('#tg-df-custom-price-wrapper');          this.customPriceMin = this.root.querySelector('#tg-df-custom-price-min');          this.customPriceMax = this.root.querySelector('#tg-df-custom-price-max');          this.legacyPriceWrapper = this.root.querySelector('#tg-df-legacy-price-wrapper');          this.discountFilterWrapper = this.root.querySelector('#tg-df-discount-filter-wrapper');          this.initResizeObserver();          this.init();            if (['carousel', 'carousel-compact', 'auto', 'grid', 'row'].includes(this.getViewMode())) { this.loadCarouselSpreadsheet(); }        }        getViewMode() {          if (this.viewModeOverride && (!this.editorMode || !this.viewModeSelect)) {            return this.viewModeOverride;          }          return (this.viewModeSelect && this.viewModeSelect.value) ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');        }        applyLayoutMode() {          if (!this.grid) return;          const mode = this.getViewMode();          this.grid.classList.remove('layout-row', 'layout-grid', 'tg-df-grid-auto', 'carousel-compact', 'layout-replica-1', 'layout-replica-2');                    const carouselHost = this.root.querySelector('#tg-df-carousel-host');          const controlsDiv = this.root.querySelector('#tg-df-controls');          if (mode === 'carousel' || mode === 'auto' || mode === 'grid' || mode === 'row') {             if (mode === 'carousel') this.grid.classList.add('carousel-compact');             if (carouselHost) carouselHost.style.display = 'block';             if (controlsDiv) controlsDiv.style.display = 'none';             if (this.root.classList.contains('tg-df-container') && mode === 'carousel') {               this.root.classList.add('is-carousel');             } else if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          } else {             if (carouselHost) carouselHost.style.display = 'none';             if (controlsDiv) controlsDiv.style.display = 'flex';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          }          if (mode === 'grid') {            this.grid.classList.add('layout-grid');          } else if (mode === 'row') {            this.grid.classList.add('layout-row');          } else if (mode === 'savings_squad') {            this.grid.classList.add('tg-df-grid-auto', 'savings-squad-cards');          } else if (mode !== 'carousel') {            this.grid.classList.add('tg-df-grid-auto');          }                    const settingsWrapper = this.root.querySelector('.tg-df-settings-wrapper');          if (settingsWrapper) {            settingsWrapper.style.display = mode === 'auto' ? 'none' : 'block';          }          if (this.customPriceWrapper) {             this.customPriceWrapper.style.display = mode === 'auto' ? 'flex' : 'none';          }          if (this.legacyPriceWrapper) {             this.legacyPriceWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }          if (this.discountFilterWrapper) {             this.discountFilterWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }        }        initResizeObserver() {          try {            if (window.parent === window) return;          } catch (e) {            // cross origin frame check threw          }          const emitHeight = () => {            try {              const height = document.documentElement.scrollHeight || document.body.scrollHeight;              const msg = { type: 'embed-size', height: height };              if (window.parent && window.parent !== window) {                window.parent.postMessage(msg, '*');                window.parent.postMessage(JSON.stringify({ ...msg, sentinel: 'amp' }), '*');              }            } catch (e) {}          };                    if (window.ResizeObserver) {            try {              const ro = new ResizeObserver(() => emitHeight());              ro.observe(document.body);              if (this.root) ro.observe(this.root);            } catch(e){ console.warn(e); }          }          window.addEventListener('resize', emitHeight);          setTimeout(emitHeight, 300);        }        initCountdown() {          this.cdWrapper = this.root.querySelector('#tg-df-countdown-wrapper');                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          this.showCountdown = params.get('show_countdown') === 'true';          const showHeaderDetails = params.get('show_header_details') !== 'false';          const eyebrow = this.root.querySelector('.tg-df-carousel-box-eyebrow');          const title = this.root.querySelector('.tg-df-carousel-box-title');          const subtitle = this.root.querySelector('.tg-df-carousel-box-subtitle');          if (!showHeaderDetails) {            let containerElement = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (containerElement) containerElement.classList.add('hide-header-details');            if (eyebrow) eyebrow.style.display = 'none';            if (title) title.style.display = 'none';            if (subtitle) subtitle.style.display = 'none';          }          if (!this.cdWrapper) return;          this.cdTitle = this.root.querySelector('#tg-df-countdown-title');          this.cdDays = this.root.querySelector('#tg-df-cd-days');          this.cdHrs = this.root.querySelector('#tg-df-cd-hrs');          this.cdMin = this.root.querySelector('#tg-df-cd-min');          this.cdSec = this.root.querySelector('#tg-df-cd-sec');          this.updateCountdown();          this.cdInterval = setInterval(() => this.updateCountdown(), 1000);        }        updateCountdown() {          if (!this.cdWrapper) return;          if (!this.showCountdown) {            this.cdWrapper.style.display = 'none';            return;          }          const area = this.getAreaCode();          let offset = '-04:00';          if (['DE', 'FR', 'IT', 'ES', 'NL'].includes(area)) {             offset = '+02:00';          } else if (['GB', 'IE', 'UK'].includes(area)) {             offset = '+01:00';          }          const startTime = new Date('2026-06-23T00:00:00' + offset).getTime();          const endTime = new Date('2026-06-26T00:00:00' + offset).getTime();          const now = Date.now();          let targetTime = 0;          if (now < startTime) {             targetTime = startTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day starts in';             this.cdWrapper.style.display = 'flex';          } else if (now < endTime) {             targetTime = endTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day ends in';             this.cdWrapper.style.display = 'flex';          } else {             this.cdWrapper.style.display = 'none';             if (this.cdInterval) clearInterval(this.cdInterval);             return;          }          const diff = Math.max(0, targetTime - now);          const d = Math.floor(diff / (1000 * 60 * 60 * 24));          const h = Math.floor((diff / (1000 * 60 * 60)) % 24);          const m = Math.floor((diff / 1000 / 60) % 60);          const s = Math.floor((diff / 1000) % 60);          if (this.cdDays) this.cdDays.textContent = d;          if (this.cdHrs) this.cdHrs.textContent = h;          if (this.cdMin) this.cdMin.textContent = m;          if (this.cdSec) this.cdSec.textContent = s;        }        init() {          this.initCountdown();          try {            initAnalytics();          } catch (e) {            console.warn('Deals Widget Analytics Error:', e);          }                    this.bindEvents();                    let initialQuery = '';                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          let initialViewMode = params.get('view_mode');          if (!params.has('search') && !params.has('q') && !params.has('query') && initialViewMode !== 'savings_squad') {             initialQuery = 'Everything';             if (this.discountFilter && !params.has('min_discount_ratio')) {               this.discountFilter.value = '5';             }          }          const website = params.get('website') || 'tomsguide';          this.website = website;          if (website === 'techradar') {            const squadHeader = this.root.querySelector('.tg-df-savings-squad-header');            if (squadHeader) {               const pic = squadHeader.querySelector('picture');               if (pic) pic.style.display = 'none';            }            const style = document.createElement('style');            style.innerHTML = `              .tg-df-container .hawk-affiliate-link-deal-button, .tg-df-container .tg-df-card-cta { background-color: #5DAF08 !important; }              .tg-df-container .hawk-affiliate-link-deal-button:hover, .tg-df-container .tg-df-card-cta:hover { background-color: #4a8c06 !important; }            `;            this.root.appendChild(style);          }                    if (this.regionSelect) {            this.regionSelect.value = params.get('region') || 'auto';            this.updatePriceDropdownCurrency();          }                    if (this.retailerSelect && params.has('retailer')) {            this.retailerSelect.value = params.get('retailer');          }                    if (params.has('brands')) {            const b = params.get('brands');            if (b) {              this.selectedBrands = b.split(',');            }          }                    if (this.offerTypeSelect && params.has('offer_type')) {            this.offerTypeSelect.value = params.get('offer_type');          }          if (params.has('bg_color')) {            const bg = params.get('bg_color');            if (bg === 'white') {              this.root.style.setProperty('background-color', '#ffffff', 'important');            } else if (bg === 'transparent') {              this.root.style.setProperty('background-color', 'transparent', 'important');            } else if (bg === 'light_blue') {              this.root.style.setProperty('background-color', '#E7F0FF', 'important');            }          } else {             this.root.style.removeProperty('background-color');          }                    if (params.has('view_mode')) {            if (this.viewModeSelect) {              this.viewModeSelect.value = params.get('view_mode');            } else {              this.viewModeOverride = params.get('view_mode');            }          }          if (this.rowsSelect && params.has('rows')) {            this.rowsSelect.value = params.get('rows');          }          if (params.has('price')) {            const priceVal = params.get('price');            if (this.priceFilter) {               // Try assigning it directly to select. If it's not present implicitly ignores               this.priceFilter.value = priceVal;            }            if (priceVal.includes('_')) {               const parts = priceVal.split('_');               if (this.customPriceMin && parts[0]) this.customPriceMin.value = parts[0];               if (this.customPriceMax && parts[1]) this.customPriceMax.value = parts[1];            }          }          if (this.discountFilter && params.has('min_discount_ratio')) {            // Need to convert back from ratio (e.g. 0.8) to select value (e.g. "20")            const ratioStr = params.get('min_discount_ratio');            const ratioFloat = parseFloat(ratioStr);            if (!isNaN(ratioFloat)) {               const percentage = Math.round((1 - ratioFloat) * 100);               this.discountFilter.value = percentage.toString();            }          }          if (this.sortSelect) {            this.sortSelect.value = params.get('sort') || 'discount_desc';          }          if (this.dealModeToggle && params.has('deal_mode')) {            this.dealModeToggle.checked = params.get('deal_mode') === 'true' || params.get('deal_mode') === '1';          }                    // Re-apply layout after params have updated control values          this.applyLayoutMode();                    if (params.get('search')) {            initialQuery = params.get('search');          } else if (params.get('q')) {            initialQuery = params.get('q');          } else if (params.get('query')) {            initialQuery = params.get('query');          }                    this.currentQuery = initialQuery;          if (this.searchInput) {            this.searchInput.value = this.currentQuery;          }                    if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {            this.fetchDeals(this.currentQuery);          } else {            this.render();          }        }        updatePriceDropdownCurrency() {          if (!this.priceFilter || !this.regionSelect) return;          const currencySymbols = {            'US': '$',            'GB': '£',            'CA': '$CA',            'AU': '$AU',            'DE': '€',            'FR': '€',            'IT': '€',          };          const area = this.getAreaCode();          const cur = currencySymbols[area || 'US'] || '$';                    const options = this.priceFilter.options;          for (let i = 0; i < options.length; i++) {            const opt = options[i];            if (opt.value === 'all') {              opt.innerText = 'All Prices';            } else if (opt.value === 'under50') {              opt.innerText = `Under ${cur}50`;            } else if (opt.value === '50_100') {              opt.innerText = `${cur}50 - ${cur}100`;            } else if (opt.value === '100_200') {              opt.innerText = `${cur}100 - ${cur}200`;            } else if (opt.value === '200_500') {              opt.innerText = `${cur}200 - ${cur}500`;            } else if (opt.value === 'over500') {              opt.innerText = `Over ${cur}500`;            }          }        }        populateBrandDropdown(values) {          if (!this.brandDropdown || !this.brandFilterWrapper) return;          this.brandFilterWrapper.style.display = 'flex'; // show the wrapper                    let html = '';          const allChecked = this.selectedBrands.length === 0 ? 'checked' : '';          const _div = '<' + '/div>';          const _span = '<' + '/span>';          html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="" ${allChecked} class="tg-df-brand-chk"> Any Brand${_div}`;                    values.forEach(v => {             if (!v.formatted_value || v.formatted_value === 'Any Brand') return;             const isChecked = this.selectedBrands.includes(v.formatted_value) ? 'checked' : '';             html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="${this.escapeHTML(v.formatted_value)}" ${isChecked} class="tg-df-brand-chk"> ${this.escapeHTML(v.formatted_value)} \x3Cspan style="color:var(--tg-df-text-muted);font-size:12px">(${v.count || 0})${_span}${_div}`;          });                    this.brandDropdown.innerHTML = html;                    // Re-bind listeners          const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');          chks.forEach(chk => {            chk.addEventListener('change', (e) => {              const val = e.target.value;              if (val === '') {                this.selectedBrands = [];              } else {                if (e.target.checked) {                   if (!this.selectedBrands.includes(val)) this.selectedBrands.push(val);                } else {                   this.selectedBrands = this.selectedBrands.filter(b => b !== val);                }              }                            if (this.selectedBrands.length === 0) {                 this.brandTrigger.innerText = 'Any Brand';              } else if (this.selectedBrands.length === 1) {                 this.brandTrigger.innerText = this.selectedBrands[0];              } else {                 this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;              }                            // Only call API if changed from UI interactions              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.updateURLParams();                 this.fetchDeals(this.currentQuery);              }            });          });                    // Update button text on load          if (this.selectedBrands.length === 0) {             this.brandTrigger.innerText = 'Any Brand';          } else if (this.selectedBrands.length === 1) {             this.brandTrigger.innerText = this.selectedBrands[0];          } else {             this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;          }        }        updateURLParams() {          const url = new URL(window.location);          if (this.currentQuery && this.currentQuery !== 'Gaming laptops') {            url.searchParams.set('q', this.currentQuery);          } else {            url.searchParams.delete('q');            url.searchParams.delete('search');            url.searchParams.delete('query');          }                    if (this.regionSelect && this.regionSelect.value !== 'auto') {            url.searchParams.set('region', this.regionSelect.value);          } else {            url.searchParams.delete('region');          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.set('retailer', this.retailerSelect.value);          } else {            url.searchParams.delete('retailer');          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.set('brands', this.selectedBrands.join(','));          } else {            url.searchParams.delete('brands');          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.set('offer_type', this.offerTypeSelect.value);          } else {            url.searchParams.delete('offer_type');          }                    if (this.viewModeSelect && this.viewModeSelect.value !== 'auto') {            url.searchParams.set('view_mode', this.viewModeSelect.value);          } else {            url.searchParams.delete('view_mode');          }                    if (this.rowsSelect && this.rowsSelect.value !== '12') {            url.searchParams.set('rows', this.rowsSelect.value);          } else {            url.searchParams.delete('rows');          }                    const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             url.searchParams.set('price', `${min}_${max}`);          } else if (this.priceFilter && this.priceFilter.value !== 'all') {            url.searchParams.set('price', this.priceFilter.value);          } else {            url.searchParams.delete('price');          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {               const ratio = (100 - v) / 100;               url.searchParams.set('min_discount_ratio', ratio.toString());            }          } else {            url.searchParams.delete('min_discount_ratio');          }                    if (this.sortSelect && this.sortSelect.value !== 'discount_desc') {            url.searchParams.set('sort', this.sortSelect.value);          } else {            url.searchParams.delete('sort');          }                    if (this.dealModeToggle && this.dealModeToggle.checked) {            url.searchParams.set('deal_mode', 'true');          } else {            url.searchParams.delete('deal_mode');          }                    window.history.replaceState({}, '', url);        }        bindEvents() {          const roundels = this.root.querySelectorAll('.tg-df-carousel-cat.original-hardcoded');          roundels.forEach(r => {             r.addEventListener('click', () => {                const q = r.getAttribute('data-query');                const pr = r.getAttribute('data-pr');                if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: q,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = q;                const label = this.root.querySelector('#tg-df-carousel-title-label');                if (label) label.textContent = 'Best ' + q;                if (this.priceFilter) this.priceFilter.value = pr || 'all';                if (this.discountFilter) this.discountFilter.value = '5';                if (this.searchInput) this.searchInput.value = q;                                roundels.forEach(ro => ro.classList.remove('active'));                r.classList.add('active');                this.fetchDeals(this.currentQuery);             });          });          const discBtns = this.root.querySelectorAll('.tg-df-carousel-filter-btn');          discBtns.forEach(b => {             b.addEventListener('click', () => {                const d = b.getAttribute('data-d');                const pr = b.getAttribute('data-pr');                const ot = b.getAttribute('data-ot');                let label = b.innerText ? b.innerText.trim() : '';                let filterType = 'unknown';                let filterVal = 'unknown';                if (d !== null) { filterType = 'discount'; filterVal = d; }                else if (pr !== null) { filterType = 'price'; filterVal = pr; }                else if (ot !== null) { filterType = 'offertype'; filterVal = ot; }                if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-${filterType}-${filterVal}`, name: 'Filter Button', label: label });                                if (d !== null) {                   if (this.discountFilter) this.discountFilter.value = this.discountFilter.value === d ? '0' : d;                } else if (pr !== null) {                   if (this.priceFilter) this.priceFilter.value = this.priceFilter.value === pr ? 'all' : pr;                } else if (ot !== null) {                   if (this.offerTypeSelect) this.offerTypeSelect.value = this.offerTypeSelect.value === ot ? 'all' : ot;                } else {                   if (this.discountFilter) this.discountFilter.value = '0';                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.offerTypeSelect) this.offerTypeSelect.value = 'all';                }                if (d === null && pr === null && ot === null && b.getAttribute("data-type") !== "custom") {                   discBtns.forEach(ro => ro.classList.remove('active'));                   b.classList.add('active');                } else if (b.getAttribute("data-type") !== "custom") {                   // Only operate on hardcoded buttons (those without data-type)                   discBtns.forEach(ro => {                      if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active');                   });                                      let makeActive = true;                   if (d !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-d') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (pr !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-pr') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (ot !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-ot') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   }                                      if (makeActive) b.classList.add('active');                                      // Check if anything is active, if not activate "All"                   let anyActive = false;                   discBtns.forEach(ro => { if (ro.classList.contains('active') && ro.getAttribute('data-type') !== 'custom') anyActive = true; });                   if (!anyActive) {                       discBtns.forEach(ro => { if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.add('active'); });                   }                }                                this.fetchDeals(this.currentQuery);             });          });          if (this.brandTrigger && this.brandDropdown) {            this.brandTrigger.addEventListener('click', () => {              this.brandDropdown.classList.toggle('active');            });            document.addEventListener('click', (e) => {              if (this.brandFilterWrapper && !e.composedPath().includes(this.brandFilterWrapper)) {                this.brandDropdown.classList.remove('active');              }            });          }          let debounceTimer;          if(this.searchInput) {            this.searchInput.addEventListener('input', (e) => {              clearTimeout(debounceTimer);              const query = e.target.value.trim();              this.currentQuery = query;              if (this.getViewMode() === 'savings_squad' && this.autocompleteDropdown && this.airedaleTags && query.length > 0) {                 const matches = this.airedaleTags.filter(t => t.toLowerCase().includes(query.toLowerCase()) && t.toLowerCase() !== query.toLowerCase()).slice(0, 5);                 if (matches.length > 0) {                    this.autocompleteDropdown.innerHTML = matches.map(m => `\x3Cdiv class="tg-df-autocomplete-item" data-tag="${this.escapeHTML(m)}">${this.escapeHTML(m)}<` + `/div>`).join('');                    this.autocompleteDropdown.classList.add('active');                 } else {                    this.autocompleteDropdown.classList.remove('active');                 }              } else if (this.autocompleteDropdown) {                 this.autocompleteDropdown.classList.remove('active');              }              debounceTimer = setTimeout(() => {                this.updateURLParams();                if (query.length > 2) {                  this.fetchDeals(query);                } else if (query.length === 0) {                  this.deals = [];                  this.render();                }              }, 400);            });            this.searchInput.addEventListener('keypress', (e) => {              if (e.key === 'Enter') {                if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');                clearTimeout(debounceTimer);                const query = e.target.value.trim();                this.currentQuery = query;                this.activeDealTag = null;                trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                this.updateURLParams();                if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                   this.fetchDeals(query);                }              }            });          }          if (this.autocompleteDropdown) {             this.autocompleteDropdown.addEventListener('click', (e) => {                const item = e.target.closest('.tg-df-autocomplete-item');                if (item) {                   const tag = item.getAttribute('data-tag');                   this.currentQuery = tag;                   if (this.searchInput) this.searchInput.value = tag;                   this.activeDealTag = tag;                   this.autocompleteDropdown.classList.remove('active');                   this.updateURLParams();                   this.fetchDeals(tag);                }             });             document.addEventListener('click', (e) => {               if (this.autocompleteDropdown && this.searchInput && !e.composedPath().includes(this.searchInput) && !e.composedPath().includes(this.autocompleteDropdown)) {                 this.autocompleteDropdown.classList.remove('active');               }             });          }          if (this.searchBtn) {            this.searchBtn.addEventListener('click', () => {              if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');              clearTimeout(debounceTimer);              const query = this.searchInput.value.trim();              trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });              this.activeDealTag = null;              this.currentQuery = query;              this.updateURLParams();              if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.fetchDeals(query);              }            });          }          if(this.sortSelect) this.sortSelect.addEventListener('change', () => {            trackElementInteraction({ id: `sort-option-${this.sortSelect.value}`, name: 'Sort', label: `Sort: ${this.sortSelect.options[this.sortSelect.selectedIndex].text}` });            this.updateURLParams();            if (this.deals.length > 0) {              this.sortData();              this.render();            }          });                    const priceFilter = this.root.querySelector('#tg-df-price-filter');          if (priceFilter) {            this.priceFilter = priceFilter;            this.priceFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-price-${this.priceFilter.value}`, name: 'Price', label: this.priceFilter.options[this.priceFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          const updateCustomPrice = () => {             this.updateURLParams();             if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);             } else {                this.render();             }          };          if (this.customPriceMin) {             this.customPriceMin.addEventListener('change', updateCustomPrice);             this.customPriceMin.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          if (this.customPriceMax) {             this.customPriceMax.addEventListener('change', updateCustomPrice);             this.customPriceMax.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          const discountFilter = this.root.querySelector('#tg-df-discount-filter');          if (discountFilter) {            this.discountFilter = discountFilter;            this.discountFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-discount-${this.discountFilter.value}`, name: 'Discount', label: this.discountFilter.options[this.discountFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          if (this.categoryFilter) {            this.categoryFilter.addEventListener('change', (e) => {               const val = e.target.value === 'all' ? null : e.target.value;               this.activeDealTag = val;               this.fetchSavingsSquad();            });          }                    if (this.settingsToggle) {            this.settingsToggle.addEventListener('click', () => {              const o = this.settingsPanel.classList.toggle('active');              this.settingsBackdrop.classList.toggle('active');              if (o) trackElementInteraction({ id: 'filter-open', name: 'Filters', label: 'Open filters' });            });          }                    if (this.settingsBackdrop) {            this.settingsBackdrop.addEventListener('click', () => {              this.settingsPanel.classList.remove('active');              this.settingsBackdrop.classList.remove('active');            });          }                    if (this.regionSelect) {            this.regionSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-region-${this.regionSelect.value}`, name: 'Region', label: this.regionSelect.options[this.regionSelect.selectedIndex].text });              this.updateURLParams();              this.updatePriceDropdownCurrency();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.retailerSelect) {            this.retailerSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-merchant-${this.retailerSelect.value}`, name: 'Retailer', label: this.retailerSelect.options[this.retailerSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.offerTypeSelect) {            this.offerTypeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-offertype-${this.offerTypeSelect.value}`, name: 'Offer Type', label: this.offerTypeSelect.options[this.offerTypeSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.viewModeSelect) {            this._prevViewMode = this.viewModeSelect.value;            this.viewModeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-viewmode-${this.viewModeSelect.value}`, name: 'View Mode', label: this.viewModeSelect.options[this.viewModeSelect.selectedIndex].text });                            // Reset all active toggles and filters to prevent config carry-over              this.selectedBrands = [];              if (this.brandTrigger) this.brandTrigger.innerText = 'Select Brands';              if (this.brandDropdown) {                const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                chks.forEach(chk => { chk.checked = false; });              }              if (this.priceFilter) this.priceFilter.value = 'all';              if (this.customPriceMin) this.customPriceMin.value = '';              if (this.customPriceMax) this.customPriceMax.value = '';              if (this.sortSelect) this.sortSelect.value = this.viewModeSelect.value === 'savings_squad' ? 'date_desc' : 'discount_desc';              if (this.discountFilter) this.discountFilter.value = '0';              if (this.retailerSelect) this.retailerSelect.value = '';              if (this.offerTypeSelect) this.offerTypeSelect.value = '';              if (this.rowsSelect) this.rowsSelect.value = '12';              if (this.categoryFilter) this.categoryFilter.value = 'all';              this.activeDealTag = null;              this.updateURLParams();              this.applyLayoutMode();                            if (this.getViewMode() === 'savings_squad' || this._prevViewMode === 'savings_squad') {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }              this._prevViewMode = this.viewModeSelect.value;            });          }                    if (this.rowsSelect) {            this.rowsSelect.addEventListener('change', () => {              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.dealModeToggle) {            this.dealModeToggle.addEventListener('change', () => {              this.updateURLParams();              this.render();            });          }          if (this.editorModeToggle) {             this.editorModeToggle.addEventListener('change', (e) => {                this.editorMode = e.target.checked;                this.render();                this.updateFloatingCopyBar();             });          }          if (this.editorCopyBtn) {             this.editorCopyBtn.addEventListener('click', () => {                this.copySelectedDealsToCMS();             });          }          if (this.editorClearBtn) {             this.editorClearBtn.addEventListener('click', () => {                this.selectedDeals.clear();                this.render();                this.updateFloatingCopyBar();             });          }          if (this.grid) {            this.grid.addEventListener('change', (e) => {               if (e.target.classList.contains('tg-df-deal-checkbox')) {                  const dealId = e.target.getAttribute('data-id');                  if (e.target.checked) {                     const dealObj = this.deals.find(d => d.id === dealId);                     if (dealObj) this.selectedDeals.set(dealId, dealObj);                  } else {                     this.selectedDeals.delete(dealId);                  }                  this.updateFloatingCopyBar();               }            });            this.grid.addEventListener('click', (e) => {              const dealCard = e.target.closest('[data-action="deal-click"]');              const similarCard = e.target.closest('[data-action="view-similar-click"]');              const cardLink = dealCard || similarCard;              if (cardLink) {                const productName = cardLink.getAttribute('data-product-name');                const merchantName = cardLink.getAttribute('data-merchant-name');                const productId = cardLink.getAttribute('data-analytics-id');                const price = parseFloat(cardLink.getAttribute('data-price')) || null;                const prevPriceStr = cardLink.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = cardLink.getAttribute('data-original-link');                const rewrittenLink = cardLink.getAttribute('href');                const revenueId = cardLink.getAttribute('data-revenue-id');                const index = parseInt(cardLink.getAttribute('data-index'), 10) || 0;                const inStock = cardLink.getAttribute('data-in-stock') === 'true';                const totalText = cardLink.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: cardLink.getAttribute('data-model-id') || null,                    matchId: cardLink.getAttribute('data-match-id') || null,                    brand: cardLink.getAttribute('data-model-brand') || null,                    parent: cardLink.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: cardLink.getAttribute('data-merchant-id') || null,                    network: cardLink.getAttribute('data-merchant-network') || null,                    url: cardLink.getAttribute('data-merchant-url') || null,                    name: merchantName                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: normalizeCurrency(this.escapeHTML(cardLink.getAttribute('data-currency') || '$'))                };                if (dealCard) {                  trackDealClick(trackingParams);                } else {                  trackViewSimilarClick(trackingParams);                }              }              const couponsBtn = e.target.closest('[data-action="coupons-click"]');              if (couponsBtn) {                trackElementInteraction({                  id: 'product-card-show-coupons',                  name: 'Coupons',                  label: `Product card coupons: ${couponsBtn.getAttribute('data-merchant')}`                });              }            });          }          this.setupScrollListeners();        }        setupScrollListeners() {          const containers = [             this.root.querySelector('.tg-df-carousel-roundels'),             this.root.querySelector('.tg-df-carousel-filters-wrap'),             this.root.querySelector('#tg-df-grid')          ];                    containers.forEach(container => {             if (!container) return;                          const checkScroll = () => {                if (!container.parentElement) return;                const leftBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-left');                const rightBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-right');                                if (leftBtn) {                   if (container.scrollLeft <= 5) leftBtn.style.display = 'none';                   else leftBtn.style.display = 'flex';                }                                if (rightBtn) {                   if (container.scrollWidth <= container.clientWidth) {                       rightBtn.style.display = 'none';                   } else if (container.scrollLeft >= container.scrollWidth - container.clientWidth - 5) {                       rightBtn.style.display = 'none';                   } else {                       rightBtn.style.display = 'flex';                   }                }             };                          container.addEventListener('scroll', checkScroll);             checkScroll();                          window.addEventListener('resize', checkScroll);                          const observer = new MutationObserver(checkScroll);             observer.observe(container, { childList: true, subtree: true, characterData: false });          });        }        get widgetTypeName() {          const mode = this.viewModeSelect ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');          switch(mode) {              case 'carousel': return 'Carousel';              case 'savings_squad': return 'Savings Squad';              case 'grid': return 'Grid';              case 'row': return 'Row';              default: return 'Auto Collection';          }        }        getRowsLimit() {          if (this.rowsSelect && this.rowsSelect.value) return parseInt(this.rowsSelect.value, 10);          let configSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {             configSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {             configSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(configSource);          if (params.has('rows')) return parseInt(params.get('rows'), 10) || 12;          return 12;        }        getAreaCode() {          if (this.regionSelect && this.regionSelect.value) {            if (this.regionSelect.value === 'auto') return null;            return this.regionSelect.value;          }          let area = null;          try {            const locale = window.navigator.language || window.navigator.userLanguage;            if (locale && locale.includes('-')) {              area = locale.split('-')[1].toUpperCase();            } else if (locale && locale.length === 2) {              if (locale.toUpperCase() === 'EN') { area = 'US'; }              else { area = locale.toUpperCase(); }            }          } catch (e) { /* Ignore */ }                    // Map to known valid options or fallback to US          const valid = ['US', 'GB', 'CA', 'AU', 'DE', 'FR', 'IT'];          if (area === 'UK') area = 'GB';          if (valid.includes(area)) {             return area;          }          return 'US';        }                async loadCarouselSpreadsheet() {          try {              const parseCSVRow = (str) => {                  let result = [], cur = '', inQuotes = false;                  for (let i = 0; i < str.length; i++) {                      let char = str[i];                      if (inQuotes) {                          if (char === '"') {                              if (str[i + 1] === '"') { cur += '"'; i++; }                              else { inQuotes = false; }                          } else { cur += char; }                      } else {                          if (char === '"') { inQuotes = true; }                          else if (char === ',') { result.push(cur); cur = ''; }                          else { cur += char; }                      }                  }                  result.push(cur); return result;              };              const parseCSV = (str) => {                  const rows = []; let curRow = '', inQuotes = false;                  for (let i = 0; i < str.length; i++) {                      let char = str[i];                      if (char === '"') inQuotes = !inQuotes;                      if ((char === '\n' || char === '\r') && !inQuotes) {                          if (char === '\r' && str[i+1] === '\n') i++;                          if (curRow) rows.push(parseCSVRow(curRow));                          curRow = '';                      } else { curRow += char; }                  }                  if (curRow) rows.push(parseCSVRow(curRow));                  return rows;              };              const preloadedCSV = decodeURIComponent(escape(atob("LCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNQ0KUm91bmRlbCB0ZXh0LEFsbCxUVnMsRm9vdHdlYXIsQXBwYXJlbCxNYXR0cmVzZXMsQXBwbGlhbmNlcyxXZWFyYWJsZSB0ZWNoLEhlYWRwaG9uZXMsU21hcnQgSG9tZSxTcGVha2VycyxMYXB0b3BzLFRhYmxldHMsQ29tcHV0aW5nLFBob25lcyxHYW1pbmcsTGVnbw0KUm91bmRlbCBpbWFnZSxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL2FpLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3R2cy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvN2IzYTIyNGIwNzk2M2M2MjdiNmI5MDliZDc4MzM4MzZlMDJmZjgxOS5qcGcud2VicCxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy84NGRhYzVkNDhlZDJkNDQ4NTU5ZWJhNjdhY2U4MzE0Y2M2N2NjZDk0LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vcHJvZHVjdHMvY2Fyb3VzZWwvbWF0dHJlc3Nlcy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvNzY4ZTk3Y2ViMDcxODAxZmFlMjA5MTBkMDgyMGIxNmY3NDdhZjkzOS5qcGcud2VicCxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3dlbGxuZXNzLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL2hlYWRwaG9uZXMuanBnLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzg5NTM1YmVlYmUyMGRiYmQ0YTM0NmQ2ZDZiZGZlOTFkOGE4ODRhMjEuanBnLndlYnAsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9hdWRpby5qcGcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9sYXB0b3BzLmpwZyxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy8yMzk3NTY0ZWQ3YTVmZjk0N2U5YjZiMzBlNTRmNDc0OTRiODQxZjg5LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vcHJvZHVjdHMvY2Fyb3VzZWwvY29tcHV0aW5nLmpwZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3Bob25lcy5wbmcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9nYW1pbmcucG5nLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzRmNmM2MjFjYWMwYmMxYTg1ZDU5M2UzNTk0YmE1YjM0OWVmZmQyOTIuanBnLndlYnANClNlYXJjaCBRdWVyeSxFdmVyeXRoaW5nLFRlbGV2aXNpb25zLCJTbmVha2VycywgcnVubmluZyBzaG9lcywgc2FuZGFscyIsQ2xvdGhpbmcsTWF0dHJlc3NlcyxIb21lIEFwcGxpYW5jZXMsV2VhcmFibGVzICYgRml0bmVzcyBUZWNoLEhlYWRwaG9uZXMsSG9tZSBUZWNoLFNwZWFrZXJzLExhcHRvcHMsVGFibGV0cyxDb21wdXRpbmcsUGhvbmVzLEdhbWluZyxDb25zdHJ1Y3Rpb24gVG95cw0KRGlzY291bnQgQW1vdW50LG1pbiA1JSxtaW4gMTAlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUNClByaWNlIFJhbmdlLCwsLCxtaW4gJDQwMCwsLCxtaW4gJDI1LCxtaW4gJDMwMCwsLG1pbiAkMTAwLCwNCkJyYW5kIFNlbGVjdGlvbiwsLCwsLCwsLCwsLCwsLCwNCkZpbHRlciBidXR0b25zLCwsLCwsLCwsLCwsLCwsLA0KMSxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMNCjIsQW1hem9uIGRlYWxzLFVuZGVyICQxMDAwLDUwJSBvZmYsQWRpZGFzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsNTAlIG9mZixBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscw0KMyxPdmVyICQ0MDAsVW5kZXIgJDUwMCxIb2thLE5pa2UsU2FhdHZhLE5pbmphLDQwJSBvZmYsSkxhYiwsSkJMLERlbGwsLEFzdXMsQXBwbGUsQ29uc29sZXMsU3RhciBXYXJzDQo0LFVuZGVyICQxMDAwLDUwJSBvZmYsU2tlY2hlcnMsVW5kZXIgQXJtb3VyLEhlbGl4LFNoYXJrLEdhcm1pbixBbmtlciBTb3VuZGNvcmUsUmluZyxTb25vcyxBcHBsZSxBcHBsZSxUUC1saW5rLFNhbXN1bmcsQWNjZXNzb3JpZXMsVW5kZXIgJDI1DQo1LFVuZGVyICQ1MDAsTEcsQXNpY3MsQ29sdW1iaWEsRHJlYW1DbG91ZCxLZXVyaWcsQXBwbGUsU29ueSxHb3ZlZSxUcmliaXQsTGVub3ZvLFNhbXN1bmcsRWVybyxHb29nbGUsR2FtZXMsVW5kZXIgJDUwDQo2LDUwJSBvZmYsU2Ftc3VuZyxOaWtlLFBhdGFnb25pYSxOZWN0YXIsRGUnTG9uZ2hpLEFtYXpmaXQsQXBwbGUsS2FzYSBzbWFydCxTb255LEFsaWVud2FyZSxUQ0wsTmV0Z2VhcixNb3Rvcm9sYSxOaW50ZW5kbyxCb3RhbmljYWxzDQo3LEFtYXpvbixIaXNlbnNlLE5ldyBCYWxhbmNlLEFyYyd0ZXJ5eCxUZW1wdXItcGVkaWMsRHlzb24sRml0Yml0LEJlYXRzLFBoaWxpcHMgSHVlLEFua2VyLEFjZXIsT25lUGx1cyxEZWxsLE9uZVBsdXMsU29ueSxEaXNuZXkNCjgsQXBwbGUsVENMLEFkaWRhcyxDYXJoYXJ0dCxCZWFyLEJpc3NlbGwsU2Ftc3VuZyxFYXJmdW4sQmxpbmssQmVhdHMsTVNJLE1pY3Jvc29mdCxBY2VyLE5vdGhpbmcsWGJveCxNYXJ2ZWwNCjksLFNvbnksU2F1Y29ueSxUaGUgTm9ydGggRmFjZSxTaWVuYSxOdXRyaWJ1bGxldCxPdXJhLFNhbXN1bmcsR29vZ2xlIE5lc3QgLE1hcnNoYWxsLFNhbXN1bmcsTGVub3ZvLExlbm92bywsLFBva2Vtb24NCjEwLCxSb2t1LEJpcmtlbnN0b2NrLENSWiBZb2dhLFdpbmtCZWRzLEJsYWNrIGFuZCBEZWNrZXIsUmluZ2Nvbm4sQ01GLEV1ZnksU2Ftc3VuZyxNaWNyb3NvZnQsUmVNYXJrYWJsZSxBbGllbndhcmUsLCwNCjExLCwsQnJvb2tzLFRoZSBHeW0gUGVvcGxlLEJyb29rbHluIGJlZGRpbmcsTmVzcHJlc3NvLCwxTW9yZSxBcmxvLCxSYXplciwsQ29yc2FpciwsLA0KMTIsLCxDcm9jcywsRWlnaHQgU2xlZXAsQ3Vpc2luYXJ0LCxKQkwsLCwsLEhQLCwsDQpOb3RlcywsLCwsLCwsLCwsLCwsLCwNCiwsIlByaW9yaXRpc2UgYmlnZ2VzdCAlLyQgZGlzY291bnQsIFR2cyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiB0aGUgbW9zdCBwb3B1bGFyIGV2ZW4gaWYgdGhleSBhcmUgc3RpbGwgZXhwZW5zaXZlIiwiTm8gcGF0dGVybiB0byBwcmljaW5nL2Rpc2NvdW50LCByZWFkZXJzIG1haW5seSBzaG9wIGJ5IGJyYW5kL3JlY29nbmlzYWJsZSBzaG9lcyIsIk5vIHBhdHRlcm4gdG8gcHJpY2luZy9kaXNjb3VudCwgcmVhZGVycyBtYWlubHkgc2hvcCBieSBicmFuZCIsIkEgbGFiZWwgd2lsbCBkZWZpbml0ZWx5IGhlbHAgaGVyZSBlLmcuIGJlc3QgZm9yIHNpZGUgc2xlZXBlciwgYmVzdCBtZW1vcnkgZm9hbSIsIkFwcGxpYW5jZXMgaXMgYSBiaWcgY2F0ZWdvcnksIGlzIGl0IHBvc3NpYmxlIHRvIHNwbGl0IGludG8ga2l0Y2hlbiBhcHBsaWFuY2VzLCBmbG9vcmNhcmUsIGFpciBoZWFsdGgvY29vbGluZz8gT3Igc2ltaWxhciIsIkZvY3VzIG9uIHZhbHVlIGZvciBtb25leSwgR2FybWlucyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiBwb3B1bGFyIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIHN0aWxsICQ1MDAiLCwsLCxJbmNsdWRlIEtpbmRsZXMsSSB3b3VsZCBpbmNsdWRlIHdpZmkgcm91dGVycyBoZXJlIGluc3RlYWQgb2Ygc21hcnQgaG9tZSxDYW4gd2Ugc3VyZmFjZSBwaG9uZSBwcm92aWRlciBkZWFscz8gVC1tb2JpbGUgYW5kIHZlcml6b24gd291bGQgbWFrZSBhIGxvdCBtb3JlIG1vbmV5IHRoYW4gQW1hem9uLCwNCiwsaGF2aW5nIGEgJ2Jlc3QgZm9yJyBsYWJlbCB3b3VsZCBiZSBoZWxwZnVsIGUuZy4gYmVzdCBmb3IgYnJpZ2h0IHJvb20sQ2FuIHdlIHN0b3Aga2lkcyBzaG9lcyBmcm9tIHB1bGxpbmcgdGhyb3VnaD8sIldpbGwgdGhpcyBpbmNsdWRlIGFjY2Vzc29yaWVzIGUuZy4gY2FwcywgYmFncywgaWYgc28gbWFrZSBzdXJlIHRoZXNlIGFyZSBtaXhlZCB0aHJvdWdob3V0IGNsb3RoaW5nIGRlYWxzIixXaWxsIHRoaXMgaW5jbHVkZSB0b3BwZXJzIGFuZCBwaWxsb3dzPyBTZWVpbmcgbW9yZSBtb21lbnR1bSB3aXRoIHRoaXMgY2F0ZWdvcnkgcmVjZW50bHkgc28gYSBiZWRkaW5nIHRhYiBtaWdodCB3b3JrLCwiTmVlZCB0byBtYWtlIHN1cmUgYmFuZHMsIHNjcmVlbiBwcm90ZWN0b3JzIGV0Yy4gZG9uJ3QgcHVsbCBpbnRvIGhlcmUiLCwsLCwsLCwsDQosLCJQcmlvcml0aXNlIDY1JycgYW5kIDU1JyBpbmNoIFRWcywgdGhlbiBiaWdnZXIgc2NyZWVucyBiZWZvcmUgdGhlIHNtYWxsZXIgc2l6ZXMiLCwsUXVlZW4gaXMgdGhlIG1vc3QgcG9wdWxhciBzaXplIGluIHRoZSBVUyAtIHByaW9yaXRpc2UgZGVhbHMgZm9yIHRoaXMgc2l6ZSwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpDYXRlZ29yaWVzIHRvIGNvbnNpZGVyLCxQcm9kdWN0cyBpbmNsdWRlZCwsLCwsLCwsLCwsLCwsDQpVbmRlciAkNTA/LCxBaXIgdGFncywsLCwsLCwsLCwsLCwsDQosLFBvcnRhYmxlIGNoYXJnZXJzL3dpcmVsZXNzIGNoYXJnZXJzLCwsLCwsLCwsLCwsLCwNCiwsIldhdGVyIGJvdHRsZXMgKHN0YW5sZXlzLCBPd2FsYSwgSHlkcm8gZmxhc2ssIFlldGkpIiwsLCwsLCwsLCwsLCwsDQosLEhhbmQgaGVsZCBmYW5zLCwsLCwsLCwsLCwsLCwNCiwsLCwsLCwsLCwsLCwsLCwNCmhvbWUgb2ZmaWNlLCxvZmZpY2UgY2hhaXJzLCwsLCwsLCwsLCwsLCwNCiwsc3RhbmRpbmcgZGVza3MsLCwsLCwsLCwsLCwsLA0KLCxtb25pdG9ycywsLCwsLCwsLCwsLCwsDQosLEtleWJvYXJkcywsLCwsLCwsLCwsLCwsDQosLGRvY2tpbmcgc3RhdGlvbiwsLCwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpHYW1pbmcsLENvbnNvbGVzLCwsLCwsLCwsLCwsLCwNCiwsQWNjZXNzb3JpZXMsLCwsLCwsLCwsLCwsLA0KLCxHYW1lcywsLCwsLCwsLCwsLCwsDQosLENvdWxkIGluY2x1ZGUgTGVnbz8sLCwsLCwsLCwsLCwsLA==")));              const text = preloadedCSV;              const parsed = parseCSV(text);                            const rowsByName = {};              let filterStart = -1;              parsed.forEach((rc, i) => {                 if (rc && rc.length > 0 && rc[0]) rowsByName[rc[0]] = rc;                 if (rc && rc.length > 0 && rc[0] === 'Filter buttons') filterStart = i;              });                            const cols = [];              if(rowsByName['Roundel text']) {                const headerRow = rowsByName['Roundel text'];                for(let col = 1; col < headerRow.length; col++) {                   let label = headerRow[col];                   if (!label) continue;                                      let q = rowsByName['Search Query'] && rowsByName['Search Query'][col] ? rowsByName['Search Query'][col] : '';                   let img = rowsByName['Roundel image'] && rowsByName['Roundel image'][col] ? rowsByName['Roundel image'][col] : '';                   let ds = rowsByName['Discount Amount'] && rowsByName['Discount Amount'][col] ? rowsByName['Discount Amount'][col] : '';                   let pr = rowsByName['Price Range'] && rowsByName['Price Range'][col] ? rowsByName['Price Range'][col] : '';                   let rt = rowsByName['Retailer'] && rowsByName['Retailer'][col] ? rowsByName['Retailer'][col] : '';                   let ot = rowsByName['Offer Type'] && rowsByName['Offer Type'][col] ? rowsByName['Offer Type'][col] : '';                                      let filters = [];                   if(filterStart > 0) {                     for(let r = filterStart + 1; r < parsed.length; r++) {                         if(!parsed[r] || parsed[r][0] === 'Notes' || parsed[r][0] === 'Categories to consider') break;                         let f = parsed[r][col];                         if(f) filters.push(f);                     }                   }                   cols.push({ label, img, q, ds, pr, rt, ot, filters });                }              }              this.carouselData = cols;              if (this.carouselData && this.carouselData.length > 0) {                 const isMatched = this.carouselData.some(c => c.q === this.currentQuery || c.label === this.currentQuery);                 if (!isMatched) {                    const first = this.carouselData[0];                    this.currentQuery = first.q || first.label;                    if (this.priceFilter) this.priceFilter.value = 'all';                    if (this.customPriceMin) this.customPriceMin.value = '';                    if (this.customPriceMax) this.customPriceMax.value = '';                    let dPr = first.pr || 'all';                    if (typeof dPr === 'string' && dPr !== 'all') {                       let prLower = dPr.toLowerCase();                       if (prLower.includes('min') || prLower.includes('over')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else if (prLower.includes('max') || prLower.includes('under')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       }                    }                    let dAm = '0';                    if(first.ds && typeof first.ds === 'string') {                       let m = first.ds.match(/(\d+)/);                       if(m) dAm = m[1];                    }                    if (this.discountFilter) this.discountFilter.value = dAm;                    if (this.offerTypeSelect) this.offerTypeSelect.value = first.ot || '';                    if (this.retailerSelect) this.retailerSelect.value = first.rt || '';                    this.selectedBrands = [];                    if (this.brandDropdown) {                        const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                        chks.forEach(chk => chk.checked = false);                    }                    if (this.searchInput) this.searchInput.value = this.currentQuery;                 }              }              this.renderCarouselUI();          } catch(e){ console.warn(e); }        }                renderCarouselUI() {           const roundelWrapper = this.root.querySelector('.tg-df-carousel-roundels');           if(!roundelWrapper || !this.carouselData) return;                      let html = '';           this.carouselData.forEach(r => {              const q = r.q || r.label;              const isActive = (this.currentQuery === q || this.currentQuery === r.label) ? 'active' : '';              const imgHtml = r.img ? `\x3Cimg src="${r.img}" alt="${r.label}" />` : `\x3Csvg width="32" height="32" fill="#1F69FF" viewBox="0 0 24 24">\x3Cpath d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/>\x3C/svg>`;              html += `                \x3Cdiv class="tg-df-roundel tg-df-carousel-cat ${isActive}" data-label="${this.escapeHTML(r.label)}">                  \x3Cdiv class="tg-df-roundel-img-box">${imgHtml}\x3C/div>                  \x3Cspan class="tg-df-roundel-label">${this.escapeHTML(r.label)}\x3C/span>                \x3C/div>              `;           });           roundelWrapper.innerHTML = html;                      // Rebind clicks           const roundels = this.root.querySelectorAll('.tg-df-carousel-cat');           roundels.forEach(rNode => {             rNode.addEventListener('click', () => {                const r = this.carouselData.find(c => c.label === rNode.getAttribute('data-label'));                 if(!r) return;                                  if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: r.label,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = r.q || r.label;                const labelTitle = this.root.querySelector('#tg-df-carousel-title-label');                if (labelTitle) labelTitle.textContent = 'Best ' + this.currentQuery;                if (this.priceFilter) this.priceFilter.value = 'all';                if (this.customPriceMin) this.customPriceMin.value = '';                if (this.customPriceMax) this.customPriceMax.value = '';                let dPr = r.pr || 'all';                if (typeof dPr === 'string' && dPr !== 'all') {                   let prLower = dPr.toLowerCase();                   if (prLower.includes('min') || prLower.includes('over')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMin) this.customPriceMin.value = m[1];                   } else if (prLower.includes('max') || prLower.includes('under')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMax) this.customPriceMax.value = m[1];                   }                }                                let discountAmount = '0';                if(r.ds && typeof r.ds === 'string') {                   let m = r.ds.match(/(\d+)/);                   if(m) discountAmount = m[1];                }                if (this.discountFilter) this.discountFilter.value = discountAmount;                if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                                // Clear brands                    this.selectedBrands = [];                    if (this.brandDropdown) {                    const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                    chks.forEach(chk => chk.checked = false);                }                                if (this.searchInput) this.searchInput.value = this.currentQuery;                                roundels.forEach(ro => ro.classList.remove('active'));                if (rNode) rNode.classList.add('active');                                this.renderCarouselFilters(r);                this.fetchDeals(this.currentQuery);             });           });                      // Auto-highlight active           const activeR = this.carouselData.find(c => c.q === this.currentQuery || c.label === this.currentQuery);           if(activeR) this.renderCarouselFilters(activeR);        }                renderCarouselFilters(r) {           const filtersWrap = this.root.querySelector('.tg-df-carousel-filters-wrap');           if(!filtersWrap) return;                      let html = `\x3Cbutton class="tg-df-carousel-filter-btn" data-type="all">All\x3C/button>`;                      r.filters.forEach(f => {              let fL = f.toLowerCase();              let icon = '';              let logic = `data-type="custom" data-v="${this.escapeHTML(f)}"`;              if (fL === 'amazon deals' || fL === 'prime deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>`;              } else if (fL === 'lightning deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>`;              } else {                 if (fL.includes('lightning')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-zap">\x3Cpolygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2">\x3C/polygon>\x3C/svg>`;                 } else if (fL.includes('% off')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>`;                 } else if (fL.includes('under') || fL.includes('min ')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>`;                 }                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>${icon} ${this.escapeHTML(f)}\x3C/button>`;              }           });                      filtersWrap.innerHTML = html;                      const btns = filtersWrap.querySelectorAll('button');           btns.forEach(b => {             b.addEventListener('click', () => {                const type = b.getAttribute('data-type');                if (type === 'custom') {                   const v = b.getAttribute('data-v');                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-custom-${(v||'').toLowerCase().replace(/[^a-z0-9]+/g, '-')}`, name: 'Custom Filter', label: v });                }                if (type === 'all') {                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: 'filter-clear-all', name: 'Clear all', label: 'Clear all filters' });                   // reset everything                   btns.forEach(btn => btn.classList.remove('active'));                   b.classList.add('active');                                      // Reset prices                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   if (this.brandDropdown) {                     const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                     chks.forEach(chk => chk.checked = false);                   }                } else {                   const v = b.getAttribute('data-v');                   const fL = v.toLowerCase();                                      let mapRet = ['amazon', 'walmart', 'best buy', 'target', 'john lewis', 'currys', 'argos'];                   const getCategory = (s) => {                      if (s === 'lightning deals' || s === 'amazon deals' || s === 'prime deals') return 'offer';                      if (s.includes('% off')) return 'discount';                      if (s.includes('under') || s.includes('over') || s.includes('min') || s.includes('max')) return 'price';                      if (mapRet.includes(s)) return 'retailer';                      return 'brand';                   };                   const cat = getCategory(fL);                   const wasActive = b.classList.contains('active');                   if (cat !== 'brand') {                      btns.forEach(btn => {                          if (btn === b) return;                          if (btn.getAttribute('data-type') === 'all') return;                          const bV = btn.getAttribute('data-v');                          if (!bV) return;                          if (getCategory(bV.toLowerCase()) === cat) btn.classList.remove('active');                      });                   }                   if (wasActive) b.classList.remove('active');                   else b.classList.add('active');                   let anyActive = Array.from(btns).some(btn => btn !== btns[0] && btn.classList.contains('active'));                   if (!anyActive) {                       btns[0].click();                       return;                   } else {                       btns[0].classList.remove('active');                   }                                      if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   btns.forEach(btn => {                       if (!btn.classList.contains('active') || btn.getAttribute('data-type') === 'all') return;                       const vv = btn.getAttribute('data-v');                       const vl = vv.toLowerCase();                                              if (vl === 'lightning deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_lightning';                       } else if (vl === 'amazon deals' || vl === 'prime deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_prime';                       } else if (vl.includes('% off')) {                          let m = vl.match(/(\d+)%/);                          if (m && this.discountFilter) this.discountFilter.value = m[1];                       } else if (vl.includes('under') || vl.includes('max')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       } else if (vl.includes('min') || vl.includes('over')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else {                          let foundR = mapRet.find(x => x === vl);                          if (foundR) {                             let realR = ['Amazon', 'Walmart', 'Best Buy', 'Target', 'John Lewis', 'Currys', 'Argos'].find(x => x.toLowerCase() === vl);                             if (this.retailerSelect) this.retailerSelect.value = realR;                          } else {                             this.selectedBrands.push(vv);                          }                       }                   });                                      if (this.brandDropdown) {                       const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                       chks.forEach(c => c.checked = this.selectedBrands.includes(c.value));                   }                                      if (r.pr && typeof r.pr === 'string') {                       let prL = r.pr.toLowerCase();                       if (prL.includes('under $')) {                           let m = prL.match(/under \$(\d+)/i);                           if (m && this.customPriceMax && !this.customPriceMax.value) this.customPriceMax.value = m[1];                       }                   }                }                                this.fetchDeals(this.currentQuery);             });           });                      // default to highlighting first           btns[0].classList.add('active');        }async fetchDeals(query, append = false) {          if (!append) {             this.showLoading();             this.deals = [];             this.displayLimit = this.getRowsLimit();          } else {             this.displayLimit += this.getRowsLimit();          }                    try {            if (this.getViewMode() === 'savings_squad') {               await this.fetchSavingsSquad(append);            } else {               if (this.isBroadQuery(query)) {                 await this.fetchAdviserDeals(query, append);               } else {                 await this.fetchHawkDeals(query, append);                 if (this.deals.length === 0) {                   await this.fetchAdviserDeals(query, append);                 }               }            }          } catch (error) {            console.warn("[Tom's Guide Widget] Fetch error:", error);            this.showError();          }        }        async fetchSavingsSquad() {          let topArticles = this.airedaleArticles;          if (!topArticles) {            const airedaleUrl = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`;            let res;            try {               res = await fetch(airedaleUrl);            } catch(e) {               try { res = await fetch(`https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`); } catch (err) { console.warn("Fallback fetch failed", err); return; }            }            if (!res.ok) throw new Error('Airedale API Error');            const articles = await res.json();            topArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);            this.airedaleArticles = topArticles;                        let tagCounts = {};            topArticles.forEach((a) => {              let articleTags = new Set();              if (a.articlecategory && Array.isArray(a.articlecategory)) {                 a.articlecategory.forEach((t) => articleTags.add(t));              }              articleTags.forEach(t => {                 tagCounts[t] = (tagCounts[t] || 0) + 1;              });            });                        this.airedaleTags = Object.keys(tagCounts).sort((a, b) => tagCounts[b] - tagCounts[a]);            this.airedaleTagCounts = tagCounts;          }                    let targetArticles = topArticles;          if (this.activeDealTag) {             const cleanTag = this.activeDealTag.toLowerCase().replace(/&/g, '').replace(/[^a-z0-9]+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');             const encodedTag = encodeURIComponent(cleanTag);             const url = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50&articleCategoryHandle=${encodedTag}`;             try {                const res = await fetch(url);                if (res.ok) {                   const articles = await res.json();                   targetArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);                }             } catch(e) {                console.warn("Failed to fetch by activeDealTag", e);             }          }          let extractedDeals = [];          let dynamicBrandsCounts = {};                    targetArticles.forEach((article) => {             if (!article.articlepage) return;                          let pageData = [];             try {                pageData = JSON.parse(article.articlepage[0]);             } catch(e){ console.warn(e); }                          const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');                          savingsSquad.forEach((block, idx) => {                const data = block.data || {};                const isFeatured = block.type === 'featured-product';                                const link = data.link || {};                const priceObj = data.price || {};                const image = data.image || {};                                if (data.brand) {                   data.brand = data.brand.replace(/^\d+\.\s*/, '').trim();                   dynamicBrandsCounts[data.brand] = (dynamicBrandsCounts[data.brand] || 0) + 1;                }                const externalUrl = isFeatured ? data.url : (link.href || null);                let summaryTitle = isFeatured ? (data.name || data.brand) : (data.productName || link.label || article.articlename);                let description = isFeatured ? (data.strapline || '') : (data.text || '');                                if (!isFeatured && !data.productName && data.text) {                   const brSplit = data.text.split(new RegExp('\x3Cbr\\s*\\/?\\x3E', 'i'));                   if (brSplit.length > 1) {                     summaryTitle = brSplit[0].replace(/<[^>]+>/g, '').trim();                     description = brSplit.slice(1).join(' ').replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').trim();                   } else {                     const match = data.text.match(/\x3Cstrong>(.*?)<\/strong>/);                     if (match) {                       summaryTitle = match[1].replace(/<[^>]+>/g, '').trim();                       if (summaryTitle.endsWith(':')) summaryTitle = summaryTitle.slice(0, -1);                     }                   }                }                                let imageUrl = isFeatured ? image.mos : (image.src || null);                if (imageUrl && imageUrl.startsWith('//')) imageUrl = 'https:' + imageUrl;                                description = description.replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').replace(/View Deal$/i, '').trim();                                let merchantName = data.retailer || '';                if (!merchantName && externalUrl) {                   try {                     merchantName = new URL(externalUrl).hostname.replace('www.', '').split('.')[0];                     merchantName = merchantName.charAt(0).toUpperCase() + merchantName.slice(1);                   }catch(e){ console.warn(e); }                }                if (!merchantName) merchantName = 'Retailer';                const q = (this.currentQuery || '').toLowerCase();                const activeTagLogic = (this.activeDealTag || '').toLowerCase();                if (q.length > 2 && q !== activeTagLogic) {                   const searchTarget = `${summaryTitle || ''} ${description || ''}`.toLowerCase();                   if (!searchTarget.includes(q)) return;                }                let rawPrice = 0;                let rawMsrp = 0;                let currencyStr = '$';                if (isFeatured) {                   rawPrice = typeof data.salePrice === 'number' && data.salePrice > 0 ? data.salePrice : (typeof data.price === 'number' ? data.price : 0);                   rawMsrp = typeof data.salePrice === 'number' && typeof data.price === 'number' && data.price > data.salePrice ? data.price : 0;                   currencyStr = data.currency === 'GBP' ? '£' : '$';                } else {                   rawPrice = priceObj.amount ? parseFloat(priceObj.amount) : 0;                   rawMsrp = priceObj.amountWas ? parseFloat(priceObj.amountWas) : 0;                   currencyStr = priceObj.currency === 'GBP' ? '£' : '$';                }                                let savingAmt = 0;                let savingLabel = '';                if (rawPrice > 0 && rawMsrp > rawPrice) {                   savingAmt = parseFloat((rawMsrp - rawPrice).toFixed(2));                   savingLabel = `Save ${currencyStr}${savingAmt}`;                }                                // Apply Brand filter                if (this.selectedBrands && this.selectedBrands.length > 0) {                   const itemBrand = (data.brand || '').toLowerCase();                   const hasMatch = this.selectedBrands.some(sb => sb.toLowerCase() === itemBrand);                   if (!hasMatch) return;                }                // Apply Price filter                let priceFilterVal = null;                const min = this.customPriceMin ? this.customPriceMin.value : '';                const max = this.customPriceMax ? this.customPriceMax.value : '';                if (min || max) {                   priceFilterVal = `${min}_${max}`;                } else if (this.priceFilter && this.priceFilter.value !== 'all') {                   priceFilterVal = this.priceFilter.value;                }                if (priceFilterVal && rawPrice > 0) {                   if (priceFilterVal === 'under50' && rawPrice >= 50) return;                   if (priceFilterVal === 'over50' && rawPrice <= 50) return;                   if (priceFilterVal === 'over30' && rawPrice <= 30) return;                   if (priceFilterVal === 'over500' && rawPrice <= 500) return;                   if (priceFilterVal.includes('_')) {                      const parts = priceFilterVal.split('_');                      const min = parseFloat(parts[0]);                      const max = parseFloat(parts[1]);                      if (!isNaN(min) && rawPrice < min) return;                      if (!isNaN(max) && rawPrice > max) return;                   }                }                // Apply Discount filter                if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {                   const requiredDiscount = parseInt(this.discountFilter.value);                   if (!isNaN(requiredDiscount) && requiredDiscount > 0) {                      if (!rawMsrp || rawMsrp <= rawPrice) return;                      const ratio = Math.round((1 - (rawPrice / rawMsrp)) * 100);                      if (ratio < requiredDiscount) return;                   }                }                                extractedDeals.push({                   id: `airedale-${article.id || Math.random()}-${idx}`,                   url: externalUrl,                   image: imageUrl,                   fallbackImage: imageUrl,                   title: summaryTitle,                   brand: data.brand || '',                   productName: data.productName || '',                   merchant: merchantName,                   rawPrice: rawPrice,                   rawMsrp: rawMsrp,                   price: rawPrice > 0 ? rawPrice.toString() : '',                   msrp: rawMsrp > 0 ? rawMsrp.toString() : '',                   currency: currencyStr,                   isCheckPrice: !rawPrice,                   savingLabel: savingLabel,                   savingType: rawMsrp > rawPrice ? 'amount' : 'none',                   isPrime: false,                   starRating: null,                   description: description,                   text: data.text || ''                });             });          });                    const airedaleBrandsList = Object.keys(dynamicBrandsCounts).map(b => ({              formatted_value: b,              count: dynamicBrandsCounts[b]          })).sort((a,b) => b.count - a.count);                    if (this.getViewMode() === 'savings_squad') {             this.populateBrandDropdown(airedaleBrandsList.slice(0, 15));             if (this.brandFilterWrapper) {                if (airedaleBrandsList.length === 0) {                    this.brandFilterWrapper.style.display = 'none';                } else {                    this.brandFilterWrapper.style.display = 'flex';                }             }          }                    this.deals = extractedDeals;          this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        isBroadQuery(query) {          const q = query.toLowerCase();          const intentModifiers = ['deals', 'best', 'sale', 'under', 'cheap', 'offers', 'discount'];          return intentModifiers.some(term => q.includes(term));        }        async fetchHawkDeals(query, append = false) {          const url = new URL(this.apiUrl);          url.searchParams.append('model_name', query);          const areaCode = this.getAreaCode();          if (areaCode) {            url.searchParams.append('area', areaCode);          }                    if (append && this.deals.length > 0) {            url.searchParams.append('offset', this.deals.length.toString());          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.append('filter_merchant_name', this.retailerSelect.value);          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.append('filter_label[text_brand]', this.selectedBrands.join(','));          }                    let priceVal = null;          const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             priceVal = `${min}_${max}`;          } else if (this.priceFilter && this.priceFilter.value !== 'all') {             priceVal = this.priceFilter.value;          }          if (priceVal) {            if (priceVal === 'under50') {              url.searchParams.append('filter_max_price', '50');            } else if (priceVal === 'over50') {              url.searchParams.append('filter_min_price', '50');            } else if (priceVal === 'over30') {              url.searchParams.append('filter_min_price', '30');            } else if (priceVal === 'over500') {              url.searchParams.append('filter_min_price', '500');            } else if (priceVal.includes('_')) {              const parts = priceVal.split('_');              if (parts[0]) url.searchParams.append('filter_min_price', parts[0]);              if (parts[1]) url.searchParams.append('filter_max_price', parts[1]);            }          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {              const ratio = (100 - v) / 100;              url.searchParams.append('min_discount_ratio', ratio.toString());            }          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.append('offer', this.offerTypeSelect.value);          }                    url.searchParams.append('filter_product_types', 'deals');                    url.searchParams.append('rows', this.getRowsLimit().toString());          let response;          try {             response = await fetch(url.toString());          } catch(e) {             if (window.location.protocol === 'file:') {                console.warn("[Tom's Guide Widget] fetch from file:// blocked by local CORS policy, falling back to Adviser mock.");                await this.fetchAdviserDeals(query);                return;             }             console.warn("Hawk fetch failed", e);             this.deals = [];             this.render();             return;          }          if (!response.ok) {            throw new Error('Hawk API Response Error');          }          const rawData = await response.json();          // Safely locate data array from potentially wrapped response          let offers = [];          let modelInfoArray = [];                    let brandFilterData = null;          if (rawData && rawData.widget && rawData.widget.data && Array.isArray(rawData.widget.data.filters)) {             brandFilterData = rawData.widget.data.filters.find(f => f.type === 'label_text_brand');          } else if (rawData && rawData.data && Array.isArray(rawData.data.filters)) {             brandFilterData = rawData.data.filters.find(f => f.type === 'label_text_brand');          }          if (brandFilterData && Array.isArray(brandFilterData.values) && brandFilterData.values.length > 0) {             this.populateBrandDropdown(brandFilterData.values);          } else {             if (this.brandFilterWrapper && this.selectedBrands.length === 0) {                this.brandFilterWrapper.style.display = 'none';             }          }                    if (rawData && rawData.widget && rawData.widget.data) {            if (Array.isArray(rawData.widget.data.offers)) offers = rawData.widget.data.offers;            if (rawData.widget.data.model_info && typeof rawData.widget.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.widget.data.model_info) ? rawData.widget.data.model_info : Object.values(rawData.widget.data.model_info);            }          } else if (rawData && rawData.data) {            if (Array.isArray(rawData.data.offers)) offers = rawData.data.offers;            if (rawData.data.model_info && typeof rawData.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.data.model_info) ? rawData.data.model_info : Object.values(rawData.data.model_info);            }          } else {            if (Array.isArray(rawData)) offers = rawData;            else if (rawData && Array.isArray(rawData.offers)) offers = rawData.offers;            else if (rawData && rawData.offers && Array.isArray(rawData.offers.offer)) offers = rawData.offers.offer;            else if (rawData && rawData.offers) offers = [].concat(rawData.offers);                        if (rawData && rawData.model_info && typeof rawData.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.model_info) ? rawData.model_info : Object.values(rawData.model_info);            }          }          let modelDetails = {};          modelInfoArray.forEach(m => {            const mId = m.model_id || m.id;            if (mId) {              modelDetails[mId] = {                score: m.score != null ? parseFloat(m.score) : null,                brand: m.brand || null,                parent: (m.parents && Array.isArray(m.parents) && m.parents.length > 0) ? m.parents[0].name : null              };            }          });          offers.forEach(item => {            let data = { ...item };            const mId = data.model_id;            if (mId && modelDetails[mId]) {              data.review_score = modelDetails[mId].score;              data.model_brand = modelDetails[mId].brand;              data.model_parent = modelDetails[mId].parent;            } else {              data.review_score = null;            }                        let itemOffers = [];            if (Array.isArray(item.offers)) itemOffers = item.offers;            else if (Array.isArray(item.offer)) itemOffers = item.offer;            else if (item.offers && typeof item.offers === 'object') itemOffers = [item.offers];            else if (item.offer && typeof item.offer === 'object') itemOffers = [item.offer];            if (itemOffers.length > 0) {              itemOffers.forEach(subItem => {                let subData = { ...item, ...subItem };                const subId = subData.model_id;                if (subId && modelDetails[subId]) {                  subData.review_score = modelDetails[subId].score;                  subData.model_brand = modelDetails[subId].brand;                  subData.model_parent = modelDetails[subId].parent;                } else if (data.review_score != null) {                  subData.review_score = data.review_score;                }                if (subData.merchant && typeof subData.merchant === 'object') {                  subData.merchant_name = subData.merchant.name;                }                this.deals.push(this.extractDealData(subData));              });              return;            }                        if (item.merchant && typeof item.merchant === 'object') {              data.merchant_name = item.merchant.name;            }                        this.deals.push(this.extractDealData(data));          });                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        async fetchAdviserDeals(query) {          // ======================================================================          // TODO: ADVISER API REPLACEMENT          // The code below simulates the Adviser API response using mock data.          // Once the real endpoint is ready, remove getAdviserMockData() and           // perform an actual fetch() request similar to fetchHawkDeals().          // Example:          // const area = this.getAreaCode();          // let apiUrl = `https://your-adviser-api.com/search?q=${query}&area=${area}`;          // if (this.priceFilter && this.priceFilter.value !== 'all') {          //   const val = this.priceFilter.value;          //   if (val === 'under50') apiUrl += '&filter_max_price=50';          //   else if (val === '50_100') apiUrl += '&filter_max_price=100';          //   else if (val === '100_200') apiUrl += '&filter_max_price=200';          //   else if (val === '200_500') apiUrl += '&filter_max_price=500';          // }          // const res = await fetch(apiUrl);          // const rawData = await res.json();          // ======================================================================          // Simulating network latency          await new Promise(resolve => setTimeout(resolve, 400));                    const rawData = this.getAdviserMockData();          let offers = [];                    if (rawData && rawData.data && rawData.data.Get && Array.isArray(rawData.data.Get.Deal)) {            offers = rawData.data.Get.Deal;          }                    // Basic client-side filtering for the mock if we want it to react to the query          const q = query.toLowerCase();          const selectedRetailer = (this.retailerSelect && this.retailerSelect.value) ? this.retailerSelect.value.toLowerCase() : null;                    offers.forEach(item => {            const dataObj = item;                        // Apply retailer filter            const itemRetailer = (dataObj.dataRetailer || '').toLowerCase();            if (selectedRetailer && itemRetailer !== selectedRetailer && !itemRetailer.includes(selectedRetailer)) {              return;            }                        // Apply mock price filter            let price = dataObj.dataDiscountedPrice || 0;            if (typeof price === 'string') {              price = parseFloat(price.replace(/[^0-9.]/g, ''));            }            let priceVal = null;            const min = this.customPriceMin ? this.customPriceMin.value : '';            const max = this.customPriceMax ? this.customPriceMax.value : '';            if (min || max) {               priceVal = `${min}_${max}`;            } else if (this.priceFilter && this.priceFilter.value !== 'all') {               priceVal = this.priceFilter.value;            }            if (priceVal) {              if (priceVal === 'under50' && price >= 50) return;              if (priceVal === 'over50' && price <= 50) return;              if (priceVal === 'over30' && price <= 30) return;              if (priceVal === 'over500' && price <= 500) return;              if (priceVal.includes('_')) {                 const parts = priceVal.split('_');                 if (parts[0] && price < parseFloat(parts[0])) return;                 if (parts[1] && price > parseFloat(parts[1])) return;              }            }                        // Map Adviser schema to our widget's expected schema            const mappedData = {              url: dataObj.linkHREF || dataObj.dataLink || '#',              image: dataObj.imageURL || (dataObj.image && dataObj.image.src) || '',              title: dataObj.dataProduct || (dataObj.product && dataObj.product.name) || 'Product Deal',              merchant: dataObj.dataRetailer || 'Retailer',              price: dataObj.dataDiscountedPrice || 0,              currency: dataObj.dataCurrency === 'USD' ? '$' : (dataObj.dataCurrency || '$'),              msrp: dataObj.dataOriginalPrice || null            };                        const titleLow = mappedData.title.toLowerCase();            const merchLow = mappedData.merchant.toLowerCase();                        // Smarter mock filtering            let isMatch = false;            if (q === '' || this.isBroadQuery(q)) {              isMatch = true;            } else if (titleLow.includes(q) || merchLow.includes(q)) {              isMatch = true;            } else if ((q.includes('laptop') || q.includes('mac') || q.includes('pc')) && (titleLow.includes('macbook') || titleLow.includes('laptop'))) {              isMatch = true;            } else if ((q.includes('tv') || q.includes('television')) && (titleLow.includes('tv') || titleLow.includes('oled') || titleLow.includes('qled'))) {              isMatch = true;            } else if ((q.includes('phone') || q.includes('smartphone')) && (titleLow.includes('galaxy') || titleLow.includes('phone'))) {              isMatch = true;            } else if ((q.match(/watch|fitness|run|shoe/)) && (titleLow.includes('forerunner') || titleLow.includes('saucony') || titleLow.includes('watch'))) {              isMatch = true;            }                        if (isMatch) {               this.deals.push(this.extractDealData(mappedData));            }          });                    let rowLimit = this.getRowsLimit();          // Intentionally omitting the slice here to allow "Load More" to work if the API returns more                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        getAdviserMockData() {          return {            "data": {              "Get": {                "Deal": [                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 300,                    "dataOriginalPrice": 399,                    "dataProduct": "Samsung Galaxy A36",                    "dataRetailer": "Samsung",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/MqDYsukV3JBG54te6dEs7j.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 14,                    "dataOriginalPrice": 24,                    "dataProduct": "Blink Mini",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/3JurmAjHsDa5tPdaHAwEV8.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 59,                    "dataOriginalPrice": 99,                    "dataProduct": "Ring Video Doorbell",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/rAh4uR7AsAsALCCLTXnLNJ.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 10,                    "dataOriginalPrice": 599,                    "dataProduct": "MacBook Neo",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/Lg4Dvg68j9SbB5CPNrTEpH.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 749,                    "dataOriginalPrice": 849,                    "dataProduct": "65\\\" Fire TV Omni 4K QLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/SG34ZWodUkLTxJvMTbjPYR.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 71,                    "dataOriginalPrice": 160,                    "dataProduct": "Saucony Hurricane 24",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/vxf7UD5T2Am7guVzFoFcZ4.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 649,                    "dataOriginalPrice": 749,                    "dataProduct": "Garmin Forerunner 970",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/3GKnEu7CdhtxPMfnPCMCiA.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1049,                    "dataOriginalPrice": 1499,                    "dataProduct": "LG 48\\\" C4 4K OLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/imvwZV9zoMD6fn9Afuge35.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1499,                    "dataOriginalPrice": 2199,                    "dataProduct": "Samsung 49\\\" Odyssey Neo G9 4K Gaming Monitor",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/XWDEJ5dUAE2nhK8k3Jk7k7.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 299,                    "dataOriginalPrice": 699,                    "dataProduct": "EGOHOME Black Memory Foam Mattress (queen)",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/hMUemtAejNETLVYxNrktzm.jpg"                  }                ]              }            }          };        }        decodeHTML(html) {          if (!html) return '';          const txt = document.createElement("textarea");          txt.innerHTML = String(html);          return txt.value;        }        extractDealData(item) {          const priceRawStr = String(item.price || item.current_price || '0');          const msrpRawStr = String(item.was_price || item.msrp || item.original_price || '0');          const rawPrice = parseFloat(priceRawStr.replace(/[^\d.]/g, '')) || 0;          const rawMsrp = parseFloat(msrpRawStr.replace(/[^\d.]/g, '')) || 0;          const isCheckPrice = rawPrice === 0 || priceRawStr === '0.00' || priceRawStr === '0';                    let originalImageUrl = item.image || item.image_url || item.product_image || '';          let imageUrl = originalImageUrl;          if ((!imageUrl || isCheckPrice) && item.model_image_url) {             imageUrl = item.model_image_url;             originalImageUrl = imageUrl;          } else if ((!imageUrl || isCheckPrice) && item.model_image) {             imageUrl = item.model_image;             originalImageUrl = imageUrl;          }                    if (imageUrl) {            imageUrl = imageUrl.replace(/-(\d+)-(\d+)(\.[a-z.]+)$/i, '$3');          }                    let fallbackImage = '';          if (originalImageUrl && originalImageUrl !== imageUrl) {             fallbackImage = originalImageUrl;          } else if (item.model_image && item.model_image !== imageUrl) {             fallbackImage = item.model_image;          } else if (item.model_image_url && item.model_image_url !== imageUrl) {             fallbackImage = item.model_image_url;          }                    const rawCurrency = item.currency || item.currency_symbol || '$';                    let savingLabel = item.percentage_saving_label || '';          if (!savingLabel && rawMsrp > rawPrice && rawPrice > 0) {            const pct = Math.round(((rawMsrp - rawPrice) / rawMsrp) * 100);            if (pct > 0) {              savingLabel = `${pct}% OFF`;            }          }                    const isPrime = item.shipping && item.shipping.prime === true;                    let scoreRaw = (item.review_score !== undefined && item.review_score !== null && item.review_score > 0) ? parseFloat(item.review_score) : null;          let starRating = 0;          if (scoreRaw !== null) {            starRating = Math.round((scoreRaw > 10 ? scoreRaw / 20 : scoreRaw / 2) * 2) / 2;          }                    return {            id: item.offer_id || item.link || item.url || item.offer_link || Math.random().toString(),            url: item.link || item.url || item.offer_link || '#',            image: imageUrl,            fallbackImage: fallbackImage,            title: item.name || item.title || item.model_name || item.product_name || 'Unknown Product',            brand: item.brand || '',            productName: item.model_name || item.product_name || item.name || '',            merchant: item.merchant_name || item.merchant || item.retailer || 'Retailer',            price: item.price !== undefined ? String(item.price) : '0.00',            currency: this.decodeHTML(rawCurrency),            msrp: item.was_price || item.msrp || item.original_price || null,            rawPrice: rawPrice,            rawMsrp: rawMsrp,            hasWasPrice: (item.was_price !== undefined && item.was_price !== null),            isCheckPrice: isCheckPrice,            savingLabel: savingLabel,            isPrime: isPrime,            starRating: starRating > 0 ? starRating : null,            modelId: item.model_id || '',            productKey: item.product_key || '',            merchantId: (item.merchant && typeof item.merchant === 'object') ? item.merchant.id || '' : '',            matchId: item.match_id || '',            merchantNetwork: (item.merchant && typeof item.merchant === 'object') ? item.merchant.an || '' : '',            merchantUrl: (item.merchant && typeof item.merchant === 'object') ? item.merchant.url || '' : '',            modelBrand: item.model_brand || item.brand || '',            modelParent: item.model_parent || ''          };        }        sortData() {          const sortVal = this.sortSelect ? this.sortSelect.value : (this.getViewMode() === 'savings_squad' ? 'date_desc' : 'discount_desc');          if (sortVal === 'price_asc') {            this.deals.sort((a, b) => a.rawPrice - b.rawPrice);          } else if (sortVal === 'price_desc') {            this.deals.sort((a, b) => b.rawPrice - a.rawPrice);          } else if (sortVal === 'discount_desc') {            this.deals.sort((a, b) => {              const aDiscount = a.rawMsrp > a.rawPrice ? (a.rawMsrp - a.rawPrice) : 0;              const bDiscount = b.rawMsrp > b.rawPrice ? (b.rawMsrp - b.rawPrice) : 0;              return bDiscount - aDiscount;            });          } else if (sortVal === 'date_desc') {             this.deals.sort((a, b) => {                let dateA = 0;                let dateB = 0;                if (a && a.modifiedDate) {                   const valA = Array.isArray(a.modifiedDate) ? a.modifiedDate[0] : a.modifiedDate;                   dateA = new Date(valA).getTime();                   if (isNaN(dateA)) dateA = 0;                }                if (b && b.modifiedDate) {                   const valB = Array.isArray(b.modifiedDate) ? b.modifiedDate[0] : b.modifiedDate;                   dateB = new Date(valB).getTime();                   if (isNaN(dateB)) dateB = 0;                }                return dateB - dateA;             });          }        }        getFilteredDeals() {          let filteredDeals = [...this.deals];                    if (this.dealModeToggle && this.dealModeToggle.checked) {            filteredDeals = filteredDeals.filter(d => d.hasWasPrice || (d.msrp && d.rawMsrp > d.rawPrice));          }                    return filteredDeals;        }        showLoading() {          const _div = '<' + '/div>';          const skeletonCardHtml = `            \x3Cdiv class="tg-df-card">              \x3Cdiv class="tg-df-card-image-box">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-img">${_div}              ${_div}              \x3Cdiv class="tg-df-card-body">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-card-footer mt-auto">                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="height:24px;">${_div}                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text" style="height:44px; margin-top:8px;">${_div}                ${_div}              ${_div}            ${_div}`;          this.grid.innerHTML = Array(4).fill(skeletonCardHtml).join('');        }        showError() {          const _div = '<' + '/div>';          this.grid.innerHTML = `\x3Cdiv class="tg-df-message">            An error occurred while finding deals. Please check your connection and try again.          ${_div}`;        }        escapeHTML(str) {          if (!str) return '';          return String(str).replace(/[&<>'"]/g, tag => ({              '&': '&', '<': '<', '>': '>', "'": ''', '"': '"'          }[tag] || tag));        }                bindCouponButtons() {          const btns = this.root.querySelectorAll('.tg-df-tag-coupons');          btns.forEach(btn => {            btn.addEventListener('click', (e) => {              e.preventDefault();              e.stopPropagation();              const merchant = btn.getAttribute('data-merchant');              this.openVouchersModal(merchant);            });          });                    const closeBtn = this.root.querySelector('#tg-df-vouchers-close');          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (closeBtn) {            closeBtn.onclick = () => this.closeVouchersModal();          }          if (backdrop) {            backdrop.onclick = (e) => {              if (e.target === backdrop) this.closeVouchersModal();            };          }        }                closeVouchersModal() {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (backdrop) backdrop.classList.remove('active');        }                async checkMerchantsCouponsBulk(merchants) {          if (!merchants || merchants.length === 0) return {};          const controller = new AbortController();          const timeoutId = setTimeout(() => controller.abort(), 4000);          try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchants.join(','));            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '120');            url.searchParams.append('origin', 'widgets-clientside');                        let res; try { res = await fetch(url.toString(), { signal: controller.signal }); } catch (e) { return {}; }            clearTimeout(timeoutId);            if (!res.ok) return {};            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        const foundMerchants = new Set();            offers.forEach(o => {              let mName = o.merchant_name || o.merchant || o.retailer;              if (mName && typeof mName === 'object') mName = mName.name;              if (mName) foundMerchants.add(String(mName).toLowerCase());            });            const resultMap = {};            merchants.forEach(m => {              if (m) resultMap[m] = foundMerchants.has(String(m).toLowerCase());            });            return resultMap;          } catch (e) {            return {};          }        }                async openVouchersModal(merchantName) {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          const title = this.root.querySelector('#tg-df-vouchers-title');          const content = this.root.querySelector('#tg-df-vouchers-content');                    if (!backdrop || !content) return;                    // HACK: Hide closing tags          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h4 = '<' + '/h4>';          const _svg = '<' + '/svg>';          const _circle = '<' + '/circle>';          const _polyline = '<' + '/polyline>';          const _rect = '<' + '/rect>';          const _path = '<' + '/path>';                    title.innerText = `${merchantName} Coupons & Deals`;          content.innerHTML = `\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}                               \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}`;          backdrop.classList.add('active');                    try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchantName);            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '50');            url.searchParams.append('origin', 'widgets-clientside');                        const res = await fetch(url.toString());            if (!res.ok) throw new Error('API Error');            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        if (offers.length === 0) {              content.innerHTML = `\x3Cdiv class="tg-df-message">No vouchers currently available for ${this.escapeHTML(merchantName)}.${_div}`;              return;            }                        content.innerHTML = offers.map((v, idx) => {              let offerObj = v;              if (v.offers && v.offers.offer) {                offerObj = Array.isArray(v.offers.offer) ? v.offers.offer[0] : v.offers.offer;              } else if (v.offer) {                offerObj = Array.isArray(v.offer) ? v.offer[0] : v.offer;              }              let logoUrl = v.logo_url || offerObj.logo_url || '';              if (!logoUrl && v.merchant) {                if (Array.isArray(v.merchant) && v.merchant.length > 0) logoUrl = v.merchant[0].logo_url || '';                else logoUrl = v.merchant.logo_url || '';              }                            const offerName = offerObj.name || offerObj.title || v.name || v.title || 'Special Offer';              const endTime = offerObj.end_time || v.end_time || '';              const linkUrl = offerObj.link || offerObj.url || v.link || v.url || '#';                            let foundVoucherCode = '';              const findVoucherCode = (obj) => {                if (!obj || typeof obj !== 'object') return;                if (obj.type === 'voucher_code' && obj.display_value) {                  foundVoucherCode = obj.display_value;                  return;                }                if (Array.isArray(obj)) {                  for (const item of obj) {                    findVoucherCode(item);                    if (foundVoucherCode) return;                  }                } else {                  for (const k in obj) {                    if (Object.prototype.hasOwnProperty.call(obj, k)) {                      findVoucherCode(obj[k]);                      if (foundVoucherCode) return;                    }                  }                }              };              findVoucherCode(offerObj);              if (!foundVoucherCode) findVoucherCode(v);                            const voucherCode = foundVoucherCode || offerObj.voucher_code || v.voucher_code || '';              const codeHtml = voucherCode ? `\x3Cspan class="tg-df-voucher-code" data-action="copy-code" data-code="${this.escapeHTML(voucherCode)}" title="Copy to clipboard">                \x3Cspan class="tg-df-voucher-code-text">${this.escapeHTML(voucherCode)}${_span}                \x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-left:6px;flex-shrink:0;" class="tg-df-voucher-copy-icon">                  \x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">${_rect}                  \x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">${_path}                ${_svg}              ${_span}` : '';                            const logoHtml = logoUrl                 ? `\x3Cimg src="${this.escapeHTML(logoUrl)}" alt="${this.escapeHTML(offerName)}" class="tg-df-voucher-logo" />`                 : `\x3Cdiv class="tg-df-voucher-logo" style="background:#e2e8f0;">${_div}`;                            let expiryHtml = '';              if (endTime) {                let dStr = endTime;                if (!isNaN(dStr) && String(dStr).length === 10) dStr = Number(dStr) * 1000;                const d = new Date(dStr);                if (!isNaN(d.getTime())) {                  const options = { year: 'numeric', month: 'short', day: 'numeric' };                  expiryHtml = `                    \x3Cdiv class="tg-df-voucher-expiry">                      \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                        \x3Ccircle cx="12" cy="12" r="10">${_circle}                        \x3Cpolyline points="12 6 12 12 16 14">${_polyline}                      ${_svg}                      Expires ${d.toLocaleDateString(undefined, options)}                    ${_div}`;                }              }              const revenueIdVal = generateRevenueId(linkUrl, offerName, merchantName, null);              const rewrittenLinkUrl = rewriteAffiliateLink(linkUrl, area, revenueIdVal);              return `                \x3Ca href="${this.escapeHTML(rewrittenLinkUrl)}" target="_blank" rel="noopener nofollow" class="tg-df-voucher-item"                  data-action="voucher-click"                  data-product-name="${this.escapeHTML(offerName)}"                  data-merchant-name="${this.escapeHTML(merchantName)}"                  data-analytics-id="${this.escapeHTML(offerObj.offer_id || offerObj.id || v.id || '')}"                  data-price=""                  data-previous-price=""                  data-original-link="${this.escapeHTML(linkUrl)}"                  data-revenue-id="${revenueIdVal}"                  data-index="${idx}"                  data-total="${offers.length}"                  data-in-stock="true"                  data-currency="USD"                  data-model-id="${this.escapeHTML(offerObj.model_id || v.model_id || offerObj.id || v.id || '')}"                  data-merchant-id="${this.escapeHTML(offerObj.merchant_id || offerObj.merchant?.id || '')}"                >                  ${logoHtml}                  \x3Cdiv class="tg-df-voucher-content">                    \x3Ch4 class="tg-df-voucher-title">${this.escapeHTML(offerName)}${_h4}                    ${codeHtml}                    ${expiryHtml}                  ${_div}                ${_a}              `;            }).join('');                        // Attach copy functionality            const copyBtns = content.querySelectorAll('[data-action="copy-code"]');            copyBtns.forEach(btn => {              btn.addEventListener('click', async (e) => {                e.preventDefault();                e.stopPropagation();                                const code = btn.getAttribute('data-code');                if (!code) return;                                try {                  const copyToClipboard = async (text) => {                     if (window.navigator.clipboard && window.isSecureContext) {                        try { await window.navigator.clipboard.writeText(text); return; } catch (e) {}                     }                     const textArea = document.createElement("textarea");                     textArea.value = text;                     textArea.style.position = "fixed";                     document.body.appendChild(textArea);                     textArea.focus();                     textArea.select();                     document.execCommand('copy');                     textArea.remove();                  };                  await copyToClipboard(code);                                    // Visual feedback                  btn.classList.add('copied');                  const textSpan = btn.querySelector('.tg-df-voucher-code-text');                  const iconSvg = btn.querySelector('.tg-df-voucher-copy-icon');                                    const origText = textSpan.innerText;                  const origIcon = iconSvg.innerHTML;                                    textSpan.innerText = 'Copied!';                  iconSvg.innerHTML = `\x3Cpolyline points="20 6 9 17 4 12">${_polyline}`;                                    setTimeout(() => {                    if (btn) {                      btn.classList.remove('copied');                      if (textSpan) textSpan.innerText = origText;                      if (iconSvg) iconSvg.innerHTML = origIcon;                    }                  }, 2000);                                    trackElementInteraction({                    id: 'voucher-code-copy',                    name: 'Copy Voucher Code',                    label: `Copied ${code} for ${merchantName}`                  });                } catch (err) {                  console.warn('Failed to copy text: ', err);                }              });            });            // Attach voucher click tracking            const voucherBtns = content.querySelectorAll('[data-action="voucher-click"]');            voucherBtns.forEach(btn => {              btn.addEventListener('click', (e) => {                if (e.target.closest('[data-action="copy-code"]')) return;                                const productName = btn.getAttribute('data-product-name');                const merchantNameAttr = btn.getAttribute('data-merchant-name');                const productId = btn.getAttribute('data-analytics-id');                const price = parseFloat(btn.getAttribute('data-price')) || null;                const prevPriceStr = btn.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = btn.getAttribute('data-original-link');                const rewrittenLink = btn.getAttribute('href');                const revenueId = btn.getAttribute('data-revenue-id');                const index = parseInt(btn.getAttribute('data-index'), 10) || 0;                const inStock = btn.getAttribute('data-in-stock') === 'true';                const totalText = btn.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: btn.getAttribute('data-model-id') || null,                    matchId: btn.getAttribute('data-match-id') || null,                    brand: btn.getAttribute('data-model-brand') || null,                    parent: btn.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: btn.getAttribute('data-merchant-id') || null,                    network: btn.getAttribute('data-merchant-network') || null,                    url: btn.getAttribute('data-merchant-url') || null,                    name: merchantNameAttr                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: btn.getAttribute('data-currency') || 'USD'                };                if (typeof trackDealClick === 'function') {                  trackDealClick(trackingParams);                }              });            });                                  } catch (e) {            console.warn(e);            content.innerHTML = `\x3Cdiv class="tg-df-message">Failed to load vouchers.${_div}`;          }        }        render() {          try {            if (this.getViewMode() === 'savings_squad' && this.airedaleTags.length > 0) {              if (this.categoryFilterWrapper) {                 this.categoryFilterWrapper.style.display = 'flex';              }              if (this.categoryFilter) {                 const _option = '<' + '/option>';                 let optionsHtml = `\x3Coption value="all">All Categories${_option}`;                 this.airedaleTags.forEach(tag => {                    const isSelected = this.activeDealTag === tag ? 'selected' : '';                    optionsHtml += `\x3Coption value="${this.escapeHTML(tag)}" ${isSelected}>${this.escapeHTML(tag)} (${this.airedaleTagCounts[tag] || 0})${_option}`;                 });                 this.categoryFilter.innerHTML = optionsHtml;                 this.categoryFilter.value = this.activeDealTag || 'all';              }            } else {               if (this.categoryFilterWrapper) {                  this.categoryFilterWrapper.style.display = 'none';               }            }            const displayDeals = this.getFilteredDeals();          // HACK: Hide closing tags from the CMS HTML sanitizer so it doesn't strip them during in-page injection          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h3 = '<' + '/h3>';          const _p = '<' + '/p>';          const _strong = '<' + '/strong>';          const _sup = '<' + '/sup>';          const _button = '<' + '/button>';          if (displayDeals.length === 0) {            if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {              if (this.deals.length > 0) {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No deals match your selected filters.                ${_div}`;              } else if (this.getViewMode() === 'savings_squad' && this.currentQuery.length <= 2) {                 // Do not show "no exact matches" if query is empty for savings_squad                 this.grid.innerHTML = '';              } else {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No exact matches found for "\x3Cstrong>${this.escapeHTML(this.currentQuery)}${_strong}". Try adjusting your search term.                ${_div}`;              }            } else {              this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                Search product or category names to discover the best deals from across the web.              ${_div}`;            }            return;          }          let dealsHtml = displayDeals.slice(0, this.displayLimit).map((deal, index) => {            try {               const currencySym = this.escapeHTML(deal.currency);               const isoCurrencyCode = normalizeCurrency(currencySym);               const escapedPrice = this.escapeHTML(deal.price);               const escapedMsrp = this.escapeHTML(deal.msrp);               const areaCode = this.getAreaCode();                              const revenueId = generateRevenueId(deal.url, deal.title, deal.merchant, null);               const originalLink = deal.url;               const rewrittenLink = rewriteAffiliateLink(deal.url, areaCode, revenueId);                        const productCategoryName = 'deals';            const dataAttr = `              data-action="${deal.isCheckPrice ? 'view-similar-click' : 'deal-click'}"              data-analytics-id="${this.escapeHTML(deal.externalProductId || deal.id || '')}"              data-product-name="${this.escapeHTML(deal.title)}"              data-merchant-name="${this.escapeHTML(deal.merchant)}"              data-price="${deal.rawPrice || ''}"              data-previous-price="${deal.rawMsrp || ''}"              data-original-link="${this.escapeHTML(originalLink)}"              data-revenue-id="${revenueId}"              data-index="${index}"              data-total="${displayDeals.length}"              data-in-stock="${deal.inStock !== false}"              data-currency="${this.escapeHTML(isoCurrencyCode)}"              data-model-id="${this.escapeHTML(deal.modelId || '')}"              data-product-key="${this.escapeHTML(deal.productKey || '')}"              data-merchant-id="${this.escapeHTML(deal.merchantId || '')}"            `;                        let priceGroupHtml = '';            let isSavingsSquadMode = this.getViewMode() === 'savings_squad';            let ctaText = 'View Deal';            let formattedPrice = '';            let msrpHtml = '';                        if (deal.isCheckPrice) {              ctaText = isSavingsSquadMode ? 'View Deal' : 'Check Price';              if (isSavingsSquadMode) {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-merchant-wrapper">                    \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                  \x3Cdiv class="tg-df-card-price-group">                  ${_div}                `;              } else {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-merchant-wrapper">                    \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                  \x3Cdiv class="tg-df-card-price-group">                    \x3Cspan class="tg-df-card-price" style="font-size: 15px; font-weight: 500; font-style: italic;">See price at retailer${_span}                  ${_div}                `;              }            } else {              // Format Price              formattedPrice = escapedPrice.includes(currencySym)                 ? escapedPrice                 : `${currencySym}${escapedPrice}`;                              // Format MSRP              msrpHtml = deal.msrp && deal.rawMsrp > deal.rawPrice                ? `\x3Cspan class="tg-df-card-msrp">${escapedMsrp.includes(currencySym) ? escapedMsrp : currencySym + escapedMsrp}${_span}`                : '';                              priceGroupHtml = `                \x3Cdiv class="tg-df-card-merchant-wrapper">                  \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                ${_div}                \x3Cdiv class="tg-df-card-price-group">                  ${isSavingsSquadMode ? '' : `                  \x3Cspan class="tg-df-card-price">${formattedPrice}${_span}                  ${msrpHtml}                  `}                ${_div}              `;            }                        const discountBadgeHtml = deal.savingLabel && !deal.isCheckPrice              ? `\x3Cspan class="tg-df-card-discount-badge">${this.escapeHTML(deal.savingLabel)}${_span}`              : '';                          // HACK for CMS            const _button = '<' + '/button>';            const _svg = '<' + '/svg>';            const _path = '<' + '/path>';            const _rect = '<' + '/rect>';            const _circle = '<' + '/circle>';            const _polyline = '<' + '/polyline>';            const _line = '<' + '/line>';                        let badgesHtml = '';            const primeBadge = deal.isPrime ? `              \x3Cspan class="tg-df-tag tg-df-tag-prime">                \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="currentColor">                  \x3Cpath d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z">${_path}                ${_svg} Prime              ${_span}            ` : '';                        const couponsBadge = deal.merchant && deal.merchant.toLowerCase().includes('amazon') ? '' : `              \x3Cdiv class="tg-df-coupon-wrapper" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:inline-flex; align-items:center;">                \x3Cdiv class="tg-df-coupon-spinner">${_div}                \x3Cbutton type="button" class="tg-df-tag tg-df-tag-coupons" data-action="coupons-click" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:none;">                  \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                    \x3Cpath d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z">${_path}                    \x3Cline x1="7" y1="7" x2="7.01" y2="7">${_line}                  ${_svg} Coupons                ${_button}              ${_div}            `;                        // Note: We always add coupons badge if there's a chance, but to allow 3-line titles we check wrapper display state            badgesHtml = `              \x3Cdiv class="tg-df-card-badges">                ${primeBadge}                ${couponsBadge}              ${_div}            `;            const _linearGradient = '<' + '/linearGradient>';            const _polygon = '<' + '/polygon>';            const _stop = '<' + '/stop>';            const _defs = '<' + '/defs>';                        let starHtml = '';            if (deal.starRating) {              let rating = deal.starRating;                            if (rating > 0) {                const fullStars = Math.floor(rating);                const halfStar = (rating - fullStars) >= 0.5 ? 1 : 0;                const emptyStars = Math.max(0, 5 - fullStars - halfStar);                const blue = '#1f69ff'; // Tom's guide brand color from VIEW DEAL button                const gray = '#cbd5e1';                                const starSvgFull = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="${blue}" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                const gradId = 'half_grad_' + Math.floor(Math.random()*1000000);                const starSvgHalf = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cdefs>\x3ClinearGradient id="${gradId}" x1="0" x2="1" y1="0" y2="0">\x3Cstop offset="50%" stop-color="${blue}">${_stop}\x3Cstop offset="50%" stop-color="transparent">${_stop}${_linearGradient}${_defs}                  \x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26" fill="url(#${gradId})">${_polygon}${_svg}`;                                  const starSvgEmpty = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="${gray}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                let stars = [];                for (let i=0; i<fullStars; i++) stars.push(starSvgFull);                if (halfStar) stars.push(starSvgHalf);                for (let i=0; i<emptyStars; i++) stars.push(starSvgEmpty);                                starHtml = `\x3Cdiv class="tg-df-card-stars" style="display:flex;align-items:center;margin-bottom:8px;font-size:13px;font-weight:600;color:var(--tg-df-text-muted);">                  \x3Cspan style="margin-right:6px;">Tom's Guide:${_span}                  \x3Cdiv style="display:flex;gap:2px;">                    ${stars.join('')}                  ${_div}                ${_div}`;              }            }            let htmlOutput = '';            if (isSavingsSquadMode) {              htmlOutput += `              \x3Cdiv class="hawk-deal-widget-container tg-df-mobile-only" data-collapsible="true">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''} style="margin-bottom: 10px;">` : ''}                \x3Cdiv class="hawk-deal-widget-wrap">                  \x3Cdiv class="hawk-deal-widget-image-container">                    \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" rel="sponsored noopener" target="_blank" class="hawk-affiliate-link-deal-widget" ${dataAttr}>                      \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="hawk-lazy-image-deal-widget" loading="lazy" width="140" height="160" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                    ${_a}                  ${_div}                  \x3Cdiv class="hawk-deal-widget-text-cta-container">                    \x3Cdiv class="hawk-deal-widget-text-body-container">                      \x3Cdiv class="hawk-deal-widget-text-body-main">                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          ${deal.isCheckPrice ? `                            \x3Cspan class="hawk-deal-widget-title-product-title">${this.escapeHTML(deal.title)}${_span}                          ` : `                            \x3Cspan class="hawk-deal-widget-title-product-title">${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_span}                          `}                        ${_a}                        ${!deal.isCheckPrice && deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan class="hawk-deal-widget-title-was-price">was ${currencySym}${escapedMsrp}${_span}                          ${_a}                        ` : ''}                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          \x3Cspan class="hawk-deal-widget-title-retailer-price">                            ${!deal.isCheckPrice ? `                              \x3Cspan class="hawk-deal-widget-title-price">now ${formattedPrice}${_span}                              \x3Cspan class="hawk-deal-widget-title-retailer"> at ${this.escapeHTML(deal.merchant)}${_span}                            ` : `                              \x3Cspan class="hawk-deal-widget-title-price">See price at ${this.escapeHTML(deal.merchant)}${_span}                            `}                          ${_span}                        ${_a}                        ${deal.description ? `\x3Cdiv class="hawk-deal-widget-text-body-description">\x3Cp>${this.escapeHTML(deal.description)}${_p}${_div}` : ''}                      ${_div}                    ${_div}                    \x3Cdiv class="hawk-deal-widget-footer">                      \x3Cdiv class="hawk-deal-widget-button-wrapper">                        \x3Cdiv class="hawk-deal-widget-preferred-partner-wrapper">                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-deal-button" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan>${deal.isCheckPrice ? 'Check Price' : 'View Deal'}${_span}                          ${_a}                        ${_div}                      ${_div}                    ${_div}                  ${_div}                ${_div}              ${_div}              `;            }            htmlOutput += `              \x3Cdiv class="tg-df-card ${isSavingsSquadMode ? 'tg-df-desktop-only' : ''}">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''}>` : ''}                \x3Cdiv class="tg-df-card-image-box">                  ${discountBadgeHtml}                  \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" style="display: flex; align-items: center; justify-content: center; width: 100%; height: 100%;">                    \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="tg-df-card-image" loading="lazy" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                  ${_a}                ${_div}                \x3Cdiv class="tg-df-card-body">                  ${starHtml}                  ${badgesHtml}                  \x3Ch3 class="tg-df-card-title tg-df-custom-savings-squad-title" title="${this.escapeHTML(deal.title)}">                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" disable-tracking="true" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit;">                      ${isSavingsSquadMode                         ? (deal.isCheckPrice                             ? (deal.title && deal.title.includes(':')                                 ? `\x3Cstrong>${this.escapeHTML(deal.title.substring(0, deal.title.indexOf(':') + 1))}${_strong}\x3Cspan style="color: #1f69ff; font-weight: normal;">${this.escapeHTML(deal.title.substring(deal.title.indexOf(':') + 1))}${_span}`                                : this.escapeHTML(deal.title)                              )                             : `\x3Cstrong>${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_strong} ${deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `\x3Cspan style="color: #d0021b; text-decoration: line-through; font-weight: normal; margin-right: 4px;">was ${currencySym}${escapedMsrp}${_span} ` : ''}\x3Cspan style="color: #1f69ff; font-weight: normal;">now ${formattedPrice} at ${this.escapeHTML(deal.merchant)}${_span}`                          )                        : this.escapeHTML(deal.title)                      }                    ${_a}                  ${_h3}                  ${deal.description ? `\x3Cp style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 12px; line-height: 1.4;">${this.escapeHTML(deal.description)}${_p}` : ''}                  \x3Cdiv class="tg-df-card-footer">                    ${priceGroupHtml}                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" class="tg-df-card-cta ${isSavingsSquadMode ? 'tg-df-cta-savings-squad' : ''}" style="text-decoration: none;">${ctaText}${_a}                  ${_div}                ${_div}              ${_div}            `;                        return htmlOutput;            } catch (e) {               console.log("Error rendering deal in map for index", index, typeof deal === 'object' ? JSON.stringify(deal) : deal, "MSG:", e.message);               return '';            }          }).join('');                    if (displayDeals.length > this.displayLimit || ((this.getViewMode() === 'carousel' || this.getViewMode() === 'auto') && displayDeals.length > 0 && displayDeals.length % ((this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12) === 0)) {            if (this.getViewMode() === 'carousel') {               dealsHtml += `                 \x3Cbutton type="button" class="tg-df-load-more-card tg-df-load-more">                   \x3Csvg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-bottom: 8px;">\x3Cpath d="M5 12h14">\x3C/path>\x3Cpath d="m12 5 7 7-7 7">\x3C/path>\x3C/svg>                   Load More                 ${_button}               `;            } else {               dealsHtml += `                 \x3Cdiv style="width: 100%; display: flex; justify-content: center; margin-top: 16px; grid-column: 1 / -1;">                   \x3Cbutton type="button" class="tg-df-tag-outline tg-df-load-more" style="padding: 8px 24px; border-radius: 100px; font-weight: 600; font-size: 14px; cursor: pointer; display: flex; align-items: center;">Load More${_button}                 ${_div}               `;            }          }                    this.grid.innerHTML = dealsHtml;          // Inject JSON-LD          try {            let targetNode = this.hostContainer || document.head;            let jsonLdScript = targetNode.querySelector('#tg-df-json-ld-' + this.widgetId);            if (!jsonLdScript) {                jsonLdScript = document.createElement('script');                jsonLdScript.type = 'application/ld+json';                jsonLdScript.id = 'tg-df-json-ld-' + this.widgetId;                targetNode.appendChild(jsonLdScript);            }            const jsonLdData = {              "@context": "https://schema.org",              "@type": "ItemList",              "itemListElement": displayDeals.slice(0, this.displayLimit).map((deal, index) => {                 let isoCurrency = "USD";                 if (deal.currency === '£') isoCurrency = "GBP";                 else if (deal.currency === '€') isoCurrency = "EUR";                 else if (deal.currency === 'A$') isoCurrency = "AUD";                 else if (deal.currency === 'CA$') isoCurrency = "CAD";                 const areaCode = typeof this.getAreaCode === 'function' ? this.getAreaCode() : 'US';                 const revenueId = typeof generateRevenueId === 'function' ? generateRevenueId(deal.url, deal.title, deal.merchant, null) : '';                 const rewrittenLink = typeof rewriteAffiliateLink === 'function' ? rewriteAffiliateLink(deal.url, areaCode, revenueId) : deal.url;                 return {                   "@type": "ListItem",                   "position": index + 1,                   "item": {                     "@type": "Product",                     "name": deal.title,                     "image": deal.image || "",                     "description": deal.description || "",                     "brand": {                       "@type": "Brand",                       "name": deal.brand || ""                     },                     "offers": {                       "@type": "Offer",                       "priceCurrency": isoCurrency,                       "price": deal.rawPrice || 0,                       "url": rewrittenLink,                       "seller": {                         "@type": "Organization",                         "name": deal.merchant || ""                       }                     }                   }                 };              }).filter(item => item.item.name)            };            jsonLdScript.textContent = JSON.stringify(jsonLdData);          } catch(e) { console.warn("JSON-LD generation failed", e); }                    let gridWrapper = this.grid.parentElement;          if (gridWrapper && gridWrapper.classList.contains('tg-df-grid-wrapper')) {             let rightChevron = gridWrapper.querySelector('.tg-df-carousel-scroll-right');             let leftChevron = gridWrapper.querySelector('.tg-df-carousel-scroll-left');             if (this.getViewMode() === 'carousel') {                 // The observer set up in setupScrollListeners handles visibility.                 if (rightChevron) rightChevron.style.display = 'flex';                 if (leftChevron) leftChevron.style.display = 'none'; // reset correctly             } else {                 if (rightChevron) rightChevron.style.display = 'none';                 if (leftChevron) leftChevron.style.display = 'none';             }          }                    const loadMoreBtn = this.grid.querySelector('.tg-df-load-more');          if (loadMoreBtn) {            loadMoreBtn.addEventListener('click', async () => {              if (typeof trackElementInteraction === 'function') {                trackElementInteraction({ id: 'load-more', name: 'Load more', label: 'Load More Results' });              }              if (displayDeals.length <= this.displayLimit) {                 loadMoreBtn.innerHTML = `                  <svg class="tg-df-spinner" style="width: 16px; height: 16px; display: inline-block; vertical-align: middle; margin-right: 8px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M12 2v4m0 12v4M4.93 4.93l2.83 2.83m8.48 8.48l2.83 2.83M2 12h4m12 0h4M4.93 19.07l2.83-2.83m8.48-8.48l2.83-2.83"/></svg>                  Loading...                 `;                 loadMoreBtn.disabled = true;                 await this.fetchDeals(this.currentQuery, true);              } else {                 this.displayLimit += this.getRowsLimit();                 this.render();              }            });          }                      this.bindCouponButtons();            this.checkAndUpdateCoupons();                        // Allow hawklinks.js to discover and rewrite our widget links             // by appending the .article-body class and manually triggering processArticle.            let container = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (container && !container.classList.contains('article-body')) {               container.classList.add('article-body');            }            setTimeout(() => {               if (this.grid && !this.grid.classList.contains('article-body')) this.grid.classList.add('article-body');               document.dispatchEvent(new CustomEvent('processArticle', { detail: { element: this.root } }));            }, 50);          } catch(e) {            console.warn("Widget render error", e);          }        }                async checkAndUpdateCoupons() {          const wrappers = Array.from(this.root.querySelectorAll('.tg-df-coupon-wrapper'));          if (wrappers.length === 0) return;                    const merchants = [...new Set(wrappers.map(w => w.getAttribute('data-merchant')).filter(Boolean))];          if (merchants.length === 0) return;          const couponResultsMap = await this.checkMerchantsCouponsBulk(merchants);                    for (const merchant of merchants) {            const hasCoupons = !!couponResultsMap[merchant];            const merchantWrappers = wrappers.filter(w => w.getAttribute('data-merchant') === merchant);            merchantWrappers.forEach(wrapper => {              const spinner = wrapper.querySelector('.tg-df-coupon-spinner');              const btn = wrapper.querySelector('.tg-df-tag-coupons');                            if (spinner) spinner.style.display = 'none';                            if (hasCoupons && btn) {                btn.style.display = 'inline-flex';              } else if (!hasCoupons) {                wrapper.style.display = 'none';              }            });          }        }        updateFloatingCopyBar() {          if (!this.editorBar || !this.editorSelectedCount) return;          if (this.editorMode && this.selectedDeals.size > 0) {            this.editorBar.style.display = 'flex';            this.editorSelectedCount.innerText = this.selectedDeals.size;          } else {            this.editorBar.style.display = 'none';          }        }        async copySelectedDealsToCMS() {           function htmlToSlate(htmlString) {              if (!htmlString) return [{ type: 'paragraph', children: [{ text: '' }] }];              let doc;              if (typeof window !== 'undefined' && window.DOMParser) {                 doc = new DOMParser().parseFromString(htmlString, 'text/html');              } else {                 doc = document.implementation.createHTMLDocument('');                 doc.body.innerHTML = htmlString;              }                            function parseNode(node, marks = {}) {                  if (node.nodeType === 3) {                      const text = node.textContent;                      if (!text) return null;                      return { text: text, ...marks };                  }                  if (node.nodeType === 1) {                      const tagName = node.tagName.toLowerCase();                      if (tagName === 'br') {                          return { type: 'line-break', children: [{ text: '' }] };                      }                      if (tagName === 'p') {                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return { type: 'paragraph', children };                      }                      if (tagName === 'strong' || tagName === 'b') {                          const newMarks = { ...marks, bold: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'em' || tagName === 'i') {                          const newMarks = { ...marks, italic: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'a') {                          const href = node.getAttribute('href') || '';                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return {                              type: 'link',                              url: href,                              isNoFollow: (node.getAttribute('rel') || '').includes('nofollow'),                              isSponsored: (node.getAttribute('rel') || '').includes('sponsored'),                              isOpenNewTab: node.getAttribute('target') === '_blank',                              isPreventDataRewrite: false,                              children: children                          };                      }                      return Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                  }                  return null;              }                            let blocksArray = [];              let currentParagraphChildren = [];              function flushParagraph() {                  if (currentParagraphChildren.length > 0) {                      blocksArray.push({ type: 'paragraph', children: currentParagraphChildren });                      currentParagraphChildren = [];                  }              }              Array.from(doc.body.childNodes).forEach(node => {                  const parsed = parseNode(node, {});                  const parsedItems = Array.isArray(parsed) ? parsed : (parsed ? [parsed] : []);                  parsedItems.forEach(item => {                      if (item.type === 'paragraph') {                          flushParagraph();                          blocksArray.push(item);                      } else {                          currentParagraphChildren.push(item);                      }                  });              });              flushParagraph();              if (blocksArray.length === 0) {                  blocksArray = [{ type: 'paragraph', children: [{ text: '' }] }];              }              return blocksArray;           }           const blocks = [];                      this.editorCopyBtn.innerHTML = '\x3Cspan class="tg-df-coupon-spinner" style="display:inline-block; margin-right:8px; border-top-color:#fff;">' + '<' + '/span> Copying...';           for (const deal of Array.from(this.selectedDeals.values())) {              const url = deal.url;              const merchant = deal.merchant;              const title = deal.title;              const image = deal.image;              const currentPrice = deal.currency + deal.rawPrice;              const wasPrice = deal.hasWasPrice && deal.rawMsrp > deal.rawPrice ? deal.currency + deal.rawMsrp : '';                            let couponsChildren = [];              try {                  const area = this.getAreaCode();                  const apiUrl = new URL('https://search-api.fie.future.net.uk/widget.php');                  apiUrl.searchParams.append('model_name', 'Everything');                  apiUrl.searchParams.append('language', 'en-GB');                  apiUrl.searchParams.append('area', area);                  apiUrl.searchParams.append('combine_product_types', '1');                  apiUrl.searchParams.append('filter_merchant_name', merchant);                  apiUrl.searchParams.append('all_filters', 'false');                  apiUrl.searchParams.append('exclude_unlabelled', 'false');                  apiUrl.searchParams.append('include_specs', 'false');                  apiUrl.searchParams.append('sort', 'voucher');                  apiUrl.searchParams.append('distinct_merchants', 'natural');                  apiUrl.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');                  apiUrl.searchParams.append('rows', '3');                  apiUrl.searchParams.append('origin', 'widgets-clientside');                                    let res; try { res = await fetch(apiUrl.toString()); } catch (e) { return; }                  if (res.ok) {                      const data = await res.json();                      let offers = [];                      if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {                        offers = data.widget.data.offers;                      } else if (data && data.data && Array.isArray(data.data.offers)) {                        offers = data.data.offers;                      }                                            if (offers.length > 0) {                          couponsChildren.push({ text: "Also check out these coupons: ", bold: true });                          offers.slice(0, 3).forEach((offer, idx) => {                              const actualOffer = offer.offer || offer;                              const offerName = actualOffer.name || actualOffer.title || offer.model_name || offer.title || offer.name || 'Coupon';                              const linkUrl = actualOffer.link || actualOffer.url || actualOffer.offer_link || '#';                              couponsChildren.push({ type: "line-break", children: [{ text: "" }] });                              couponsChildren.push({ text: "🎟️ " });                              couponsChildren.push({                                  type: "link",                                  url: linkUrl,                                  isNoFollow: true,                                  isSponsored: false,                                  isOpenNewTab: true,                                  isPreventDataRewrite: false,                                  children: [{ text: offerName, bold: true }]                              });                          });                      }                  }              } catch (err) {                  console.warn('Failed to fetch coupons for', merchant, err);              }              let descriptionValue = [];              if (deal.text) {                 descriptionValue = htmlToSlate(deal.text);              } else {                 const dealDescriptions = [                   `Don't miss out on this fantastic deal for the ${title}. It is currently available at ${merchant} for a highly competitive price.`,                   `We've spotted an excellent price drop on the ${title}. Grab it now at ${merchant} before it's gone.`,                   `The ${title} is currently seeing a generous discount over at ${merchant}. This is a perfect time to buy if you've been holding out.`,                   `If you're in the market for the ${title}, ${merchant} has just the deal for you.`,                   `Score the ${title} for less at ${merchant} right now. This is a rare chance to save big.`,                   `Upgrade your setup with the ${title}, now available at a stellar price via ${merchant}.`                 ];                 const randomDescription = dealDescriptions[Math.floor(Math.random() * dealDescriptions.length)];                 descriptionValue = [                    { type: "paragraph", children: [{ text: randomDescription }] }                 ];              }                            if (couponsChildren.length > 0) {                 let lastBlock = descriptionValue[descriptionValue.length - 1];                 if (lastBlock && lastBlock.type === 'paragraph') {                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ text: "Also check out these coupons: ", bold: true });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children = lastBlock.children.concat(couponsChildren);                 } else {                     descriptionValue.push({                         type: "paragraph",                         children: [                             { type: "line-break", children: [{ text: "" }] },                             { type: "line-break", children: [{ text: "" }] },                             { text: "Also check out these coupons: ", bold: true },                             { type: "line-break", children: [{ text: "" }] },                             ...couponsChildren                         ]                     });                 }              }              function normalizeCurrencyToISO(symbol) {                const map = { '£': 'GBP', '$': 'USD', 'A$': 'AUD', 'CA$': 'CAD', '€': 'EUR' };                return map[symbol] || symbol;              }              const isoCurrency = normalizeCurrencyToISO(deal.currency);              blocks.push({                 id: (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'cms-' + Date.now() + Math.random(),                 blockTypeName: "deal",                 excludeFrom: [],                 collapsible: false,                 props: {                    description: {                       value: descriptionValue,                       touched: false,                       validationMessage: ""                    },                    image: {                       value: {                          credit: [{ type: "paragraph", children: [{ text: merchant }] }],                          dateCreated: Date.now(),                          dateModified: Date.now(),                          distribution: [],                          fileSize: 0,                          height: 1000,                          id: deal.id,                          imageRights: "",                          src: image,                          name: title + ".jpg",                          tags: [],                          width: 1000                       },                       touched: false,                       validationMessage: ""                    },                    showDealButton: { value: true, touched: false, validationMessage: "" },                    isPreferredPartner: { value: false, touched: false, validationMessage: "" },                    linkHref: { value: url, touched: false, validationMessage: "" },                    linkLabel: { value: "", touched: false, validationMessage: "" },                    linkIsNoFollow: { value: true, touched: false, validationMessage: "" },                    linkIsSponsored: { value: false, touched: false, validationMessage: "" },                    linkIsOpenNewWindow: { value: true, touched: false, validationMessage: "" },                    customPromoFlags: { value: [], touched: false, validationMessage: "" },                    showStarDeal: { value: false, touched: false, validationMessage: "" },                    savingType: { value: "none", touched: false, validationMessage: "" },                    starDealPromoFlag: { value: "", touched: false, validationMessage: "" },                    showEditorsChoice: { value: false, touched: false, validationMessage: "" },                    editorsChoiceTitle: { value: "", touched: false, validationMessage: "" },                    hawkPriceCurrency: { value: { value: isoCurrency, label: isoCurrency }, touched: false, validationMessage: "" },                    hawkPrice: { value: deal.hasWasPrice ? String(deal.rawMsrp) : String(deal.rawPrice), touched: false, validationMessage: "" },                    hawkSalePrice: { value: String(deal.rawPrice), touched: false, validationMessage: "" },                    lastCheckedPriceDate: { value: "", touched: false, validationMessage: "" },                    hawkModel: { touched: false, validationMessage: "" },                    productId: { value: "", touched: false, validationMessage: "" },                    voucherId: { value: "", touched: false, validationMessage: "" },                    brand: { value: deal.brand || merchant, touched: false, validationMessage: "" },                    productName: { value: title, touched: false, validationMessage: "" },                    label: { value: "", touched: false, validationMessage: "" },                    retailer: { value: merchant, touched: false, validationMessage: "" },                    priceCheckError: false                 },                 failedFetchError: ""              });           }           const payload = {              type: "articleBuilderPages",              data: blocks           };           const jsonStr = JSON.stringify(payload);                      if (navigator.clipboard && navigator.clipboard.writeText) {              navigator.clipboard.writeText(jsonStr).then(() => {                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              }).catch(err => {                 console.warn('Failed to copy text: ', err);                 alert('Failed to copy deals to clipboard. See console.');              });           } else {              // Fallback              const textArea = document.createElement("textarea");              textArea.value = jsonStr;              document.body.appendChild(textArea);              textArea.focus();              textArea.select();              try {                 document.execCommand('copy');                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              } catch (err) {                 console.warn('Fallback: Oops, unable to copy', err);                 alert('Fallback: Failed to copy deals to clipboard.');              }              document.body.removeChild(textArea);           }        }      }      // Initialize the Widget      if (document.readyState === 'loading') {        document.addEventListener('DOMContentLoaded', () => new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer }));      } else {        new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer });      }    })();  </script></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ AppleCare+ is now more expensive for Macs and iPads — here's how much more you'll need to pay ]]></title>
                                                                                                <dc:content><![CDATA[ <p>If you thought Apple raising prices on Macs and iPads would be the end of it, you were sorely mistaken. The company has now <a href="https://www.bloomberg.com/news/articles/2026-07-15/apple-boosts-applecare-monthly-prices-by-50-cents-in-latest-increase" target="_blank"><u>raised</u></a> AppleCare+ prices for various Macs and iPads, with prices rising by $0.50 cents a month, or $5 for those people on annual plans.</p><p>However, there is a caveat to this change. For starters, this will only affect new purchases, so those of you who are already paying for AppleCare+ won't suddenly be asked to pay more money. <a href="https://www.tomsguide.com/phones/iphones/apple-announces-applecare-one-for-covering-multiple-devices-under-one-plan-starts-at-usd19-a-month">AppleCare One</a>, which offers care for up to three devices, is similarly unaffected.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Old monthly price</strong></p></td><td  ><p><strong>New monthly price</strong></p></td><td  ><p><strong>Old yearly price</strong></p></td><td  ><p><strong>New yearly price</strong></p></td></tr><tr><td class="firstcol " ><p><strong>iPad Pro 11-inch</strong></p></td><td  ><p>$9.99</p></td><td  ><p>$10.49</p></td><td  ><p>$99.99</p></td><td  ><p>$104.99</p></td></tr><tr><td class="firstcol " ><p><strong>iPad Pro 13-inch</strong></p></td><td  ><p>$10.99</p></td><td  ><p>$11.49</p></td><td  ><p>$109.99</p></td><td  ><p>$114.99</p></td></tr><tr><td class="firstcol " ><p><strong>iPad Air 11-inch</strong></p></td><td  ><p>$5.99</p></td><td  ><p>$6.49</p></td><td  ><p>$59.99</p></td><td  ><p>$64.99</p></td></tr><tr><td class="firstcol " ><p><strong>iPad Air 13-inch</strong></p></td><td  ><p>$6.99</p></td><td  ><p>$7.49</p></td><td  ><p>$69.99</p></td><td  ><p>$74.99</p></td></tr><tr><td class="firstcol " ><p><strong>iPad mini</strong></p></td><td  ><p>$4.99</p></td><td  ><p>$5.48</p></td><td  ><p>$49.98</p></td><td  ><p>$54.98</p></td></tr><tr><td class="firstcol " ><p><strong>iPad 12th gen</strong></p></td><td  ><p>$4.99</p></td><td  ><p>$5.49</p></td><td  ><p>$49.99</p></td><td  ><p>$54.99</p></td></tr><tr><td class="firstcol " ><p><strong>MacBook Neo</strong></p></td><td  ><p>$4.99</p></td><td  ><p>$5.49</p></td><td  ><p>$49.99</p></td><td  ><p>$54.99</p></td></tr><tr><td class="firstcol " ><p><strong>MacBook Air 13-inch</strong></p></td><td  ><p>$6.99</p></td><td  ><p>$7.49</p></td><td  ><p>$69.99</p></td><td  ><p>$74.99</p></td></tr><tr><td class="firstcol " ><p><strong>MacBook Air 15-inch</strong></p></td><td  ><p>$7.99</p></td><td  ><p>$8.49</p></td><td  ><p>$79.99</p></td><td  ><p>$84.99</p></td></tr><tr><td class="firstcol " ><p><strong>MacBook Pro 13-inch</strong></p></td><td  ><p>$9.99</p></td><td  ><p>$10.49</p></td><td  ><p>$99.99</p></td><td  ><p>$104.99</p></td></tr><tr><td class="firstcol " ><p><strong>MacBook Pro 16-inch</strong></p></td><td  ><p>$14.99</p></td><td  ><p>$15.49</p></td><td  ><p>$149.99</p></td><td  ><p>$154.99</p></td></tr><tr><td class="firstcol " ><p><strong>iMac</strong></p></td><td  ><p>$5.99</p></td><td  ><p>$6.49</p></td><td  ><p>$59.99</p></td><td  ><p>$64.99</p></td></tr><tr><td class="firstcol " ><p><strong>Mac mini</strong></p></td><td  ><p>$4.49</p></td><td  ><p>$4.99</p></td><td  ><p>$44.99</p></td><td  ><p>$49.99</p></td></tr><tr><td class="firstcol " ><p><strong>Mac Studio</strong></p></td><td  ><p>$4.49</p></td><td  ><p>$4.99</p></td><td  ><p>$44.99</p></td><td  ><p>$49.99</p></td></tr></tbody></table></div><p>Bloomberg notes that the cost of covering a <a href="https://www.tomsguide.com/computing/macbooks/macbook-air-m5-review">13-inch MacBook Air</a> has risen from $7.49 a month to $7.99 a month, while an annual plan is now $80 a year instead of the $75 you'd have paid last week. The price hikes are affecting all Mac, MacBook and iPad devices the same, but so far, all other Apple products seem to have escaped this particular form of inflation.</p><p>I wouldn't expect that to last long, though. As the cost of components goes up, so too will the cost of repairs. While there is no confirmation that AppleCare+ prices will go up for the likes of the iPhone or Apple Watch, odds are that it will happen in the near future. Especially if the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-rumors-everything-we-know-so-far">iPhone 18 Pro</a> prices increase this year, <a href="https://www.tomsguide.com/phones/iphones/usd1-299-iphone-18-pro-max-analyst-now-predicts-usd200-price-hike-for-apples-next-flagship-phone">as they are widely expected to do. </a></p><p>In other words, if you have been putting off signing up for AppleCare+ and want to make sure your Apple devices are protected against damage, you might want to sign up as soon as possible. Although the damage is already done for Macs and iPads, so you folks have all the time in the world to mull over that decision.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XjaxYO"></div>                            </div>                            <script src="https://kwizly.com/embed/XjaxYO.js" async></script><h2 id="spreading-out-your-ipad-payments">Spreading out your iPad payments</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4909px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="TshkX2iMHSa9kTFe9zmeuZ" name="iPad Pro (iPadOS 26)" alt="iPad Pro M4" src="https://cdn.mos.cms.futurecdn.net/TshkX2iMHSa9kTFe9zmeuZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="4909" height="2761" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>AppleCare+ price hikes aren't the only financial changes happening at the App Store, either. Apple has just launched new 36-month carrier financing for cellular-capable iPads, which joins the existing 12-month interest-free financing option. </p><p>Like the 12-month finance option, this new 3-year payment plan is interest-free. However, it's provided by the carrier rather than Apple itself. However, you will need to sign up for a data plan, and so far, Apple is only offering this particular payment plan if you're connecting to AT&T or Verizon. </p><p>The carrier financing option is also available to existing customers "when connecting to a new line of service." You'll be taken through that process of setting up a new line before you check out, and obviously, this means you will be on the hook for monthly data payments. Though it doesn't make sense to buy a cellular iPad if you're not planning on getting a data plan too.</p><p>Considering <a href="https://www.tomsguide.com/computing/macbooks/apple-price-hikes-are-official-heres-how-much-more-youll-pay-for-macbooks-and-ipads-now">how much the cost of some iPads has risen</a> due to recent Apple price hikes, it makes sense for a longer interest-free payment plan to be available. For example, an<a href="https://www.tomsguide.com/tablets/ipads/ipad-pro-2024"> 11-inch iPad Pro </a>with cellular is now $1,399, which is $289 more than the original $1,110 price tag. It's a lot of money to spend on a tablet, but if you split the cost over three years, you end up paying just shy of $39 a month.</p><p>Of course, this means you are on the hook for paying that every single month for three years — regardless of how your life and circumstances might change. So there's a trade-off to those low monthly payments. But if you want an iPad Pro and plan on keeping it for the long term, it is a good way to avoid dropping several hundred dollars in one go.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-just-leaked-via-amazon-heres-the-specs-colors-and-obligatory-price-hike">Google Pixel 11 just leaked via Amazon — here's the specs, colors and obligatory price hike</a></li><li><a href="https://www.tomsguide.com/phones/iphones/ios-27-public-beta-hands-on-preview-the-new-siri-and-apple-intelligence-features-completely-changed-how-i-use-my-iphone">iOS 27 hands-on preview: These new features completely change how I use my iPhone</a></li><li><a href="https://www.tomsguide.com/phones/oneplus-phones/the-end-of-oneplus-just-got-confirmed-the-original-flagship-killer-brand-finally-decides-to-settle">The end of OnePlus just got confirmed — the original 'flagship killer' brand finally decides to settle</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/ipads/applecare-is-now-more-expensive-for-macs-and-ipads-heres-how-much-more-youll-need-to-pay</link>
                                                                            <description>
                            <![CDATA[ Apple has just increased the prices of iPads and Macs, and now AppleCare+ is going up. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">zHbPDa5Y3tr8uxRnpr86Ji</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/UfsgdagGx97Tu2BSXw2yy7-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 16 Jul 2026 11:57:47 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[MacBooks]]></category>
                                                    <category><![CDATA[Computing Peripherals]]></category>
                                                    <category><![CDATA[Tablets]]></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/UfsgdagGx97Tu2BSXw2yy7-1280-80.jpg">
                                                            <media:credit><![CDATA[Agoes Rudianto/NurPhoto via Getty Images]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[apple store]]></media:description>                                                            <media:text><![CDATA[apple store]]></media:text>
                                <media:title type="plain"><![CDATA[apple store]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/UfsgdagGx97Tu2BSXw2yy7-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>If you thought Apple raising prices on Macs and iPads would be the end of it, you were sorely mistaken. The company has now <a href="https://www.bloomberg.com/news/articles/2026-07-15/apple-boosts-applecare-monthly-prices-by-50-cents-in-latest-increase" target="_blank"><u>raised</u></a> AppleCare+ prices for various Macs and iPads, with prices rising by $0.50 cents a month, or $5 for those people on annual plans.</p><p>However, there is a caveat to this change. For starters, this will only affect new purchases, so those of you who are already paying for AppleCare+ won't suddenly be asked to pay more money. <a href="https://www.tomsguide.com/phones/iphones/apple-announces-applecare-one-for-covering-multiple-devices-under-one-plan-starts-at-usd19-a-month">AppleCare One</a>, which offers care for up to three devices, is similarly unaffected.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Old monthly price</strong></p></td><td  ><p><strong>New monthly price</strong></p></td><td  ><p><strong>Old yearly price</strong></p></td><td  ><p><strong>New yearly price</strong></p></td></tr><tr><td class="firstcol " ><p><strong>iPad Pro 11-inch</strong></p></td><td  ><p>$9.99</p></td><td  ><p>$10.49</p></td><td  ><p>$99.99</p></td><td  ><p>$104.99</p></td></tr><tr><td class="firstcol " ><p><strong>iPad Pro 13-inch</strong></p></td><td  ><p>$10.99</p></td><td  ><p>$11.49</p></td><td  ><p>$109.99</p></td><td  ><p>$114.99</p></td></tr><tr><td class="firstcol " ><p><strong>iPad Air 11-inch</strong></p></td><td  ><p>$5.99</p></td><td  ><p>$6.49</p></td><td  ><p>$59.99</p></td><td  ><p>$64.99</p></td></tr><tr><td class="firstcol " ><p><strong>iPad Air 13-inch</strong></p></td><td  ><p>$6.99</p></td><td  ><p>$7.49</p></td><td  ><p>$69.99</p></td><td  ><p>$74.99</p></td></tr><tr><td class="firstcol " ><p><strong>iPad mini</strong></p></td><td  ><p>$4.99</p></td><td  ><p>$5.48</p></td><td  ><p>$49.98</p></td><td  ><p>$54.98</p></td></tr><tr><td class="firstcol " ><p><strong>iPad 12th gen</strong></p></td><td  ><p>$4.99</p></td><td  ><p>$5.49</p></td><td  ><p>$49.99</p></td><td  ><p>$54.99</p></td></tr><tr><td class="firstcol " ><p><strong>MacBook Neo</strong></p></td><td  ><p>$4.99</p></td><td  ><p>$5.49</p></td><td  ><p>$49.99</p></td><td  ><p>$54.99</p></td></tr><tr><td class="firstcol " ><p><strong>MacBook Air 13-inch</strong></p></td><td  ><p>$6.99</p></td><td  ><p>$7.49</p></td><td  ><p>$69.99</p></td><td  ><p>$74.99</p></td></tr><tr><td class="firstcol " ><p><strong>MacBook Air 15-inch</strong></p></td><td  ><p>$7.99</p></td><td  ><p>$8.49</p></td><td  ><p>$79.99</p></td><td  ><p>$84.99</p></td></tr><tr><td class="firstcol " ><p><strong>MacBook Pro 13-inch</strong></p></td><td  ><p>$9.99</p></td><td  ><p>$10.49</p></td><td  ><p>$99.99</p></td><td  ><p>$104.99</p></td></tr><tr><td class="firstcol " ><p><strong>MacBook Pro 16-inch</strong></p></td><td  ><p>$14.99</p></td><td  ><p>$15.49</p></td><td  ><p>$149.99</p></td><td  ><p>$154.99</p></td></tr><tr><td class="firstcol " ><p><strong>iMac</strong></p></td><td  ><p>$5.99</p></td><td  ><p>$6.49</p></td><td  ><p>$59.99</p></td><td  ><p>$64.99</p></td></tr><tr><td class="firstcol " ><p><strong>Mac mini</strong></p></td><td  ><p>$4.49</p></td><td  ><p>$4.99</p></td><td  ><p>$44.99</p></td><td  ><p>$49.99</p></td></tr><tr><td class="firstcol " ><p><strong>Mac Studio</strong></p></td><td  ><p>$4.49</p></td><td  ><p>$4.99</p></td><td  ><p>$44.99</p></td><td  ><p>$49.99</p></td></tr></tbody></table></div><p>Bloomberg notes that the cost of covering a <a href="https://www.tomsguide.com/computing/macbooks/macbook-air-m5-review">13-inch MacBook Air</a> has risen from $7.49 a month to $7.99 a month, while an annual plan is now $80 a year instead of the $75 you'd have paid last week. The price hikes are affecting all Mac, MacBook and iPad devices the same, but so far, all other Apple products seem to have escaped this particular form of inflation.</p><p>I wouldn't expect that to last long, though. As the cost of components goes up, so too will the cost of repairs. While there is no confirmation that AppleCare+ prices will go up for the likes of the iPhone or Apple Watch, odds are that it will happen in the near future. Especially if the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-rumors-everything-we-know-so-far">iPhone 18 Pro</a> prices increase this year, <a href="https://www.tomsguide.com/phones/iphones/usd1-299-iphone-18-pro-max-analyst-now-predicts-usd200-price-hike-for-apples-next-flagship-phone">as they are widely expected to do. </a></p><p>In other words, if you have been putting off signing up for AppleCare+ and want to make sure your Apple devices are protected against damage, you might want to sign up as soon as possible. Although the damage is already done for Macs and iPads, so you folks have all the time in the world to mull over that decision.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XjaxYO"></div>                            </div>                            <script src="https://kwizly.com/embed/XjaxYO.js" async></script><h2 id="spreading-out-your-ipad-payments">Spreading out your iPad payments</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4909px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="TshkX2iMHSa9kTFe9zmeuZ" name="iPad Pro (iPadOS 26)" alt="iPad Pro M4" src="https://cdn.mos.cms.futurecdn.net/TshkX2iMHSa9kTFe9zmeuZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="4909" height="2761" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>AppleCare+ price hikes aren't the only financial changes happening at the App Store, either. Apple has just launched new 36-month carrier financing for cellular-capable iPads, which joins the existing 12-month interest-free financing option. </p><p>Like the 12-month finance option, this new 3-year payment plan is interest-free. However, it's provided by the carrier rather than Apple itself. However, you will need to sign up for a data plan, and so far, Apple is only offering this particular payment plan if you're connecting to AT&T or Verizon. </p><p>The carrier financing option is also available to existing customers "when connecting to a new line of service." You'll be taken through that process of setting up a new line before you check out, and obviously, this means you will be on the hook for monthly data payments. Though it doesn't make sense to buy a cellular iPad if you're not planning on getting a data plan too.</p><p>Considering <a href="https://www.tomsguide.com/computing/macbooks/apple-price-hikes-are-official-heres-how-much-more-youll-pay-for-macbooks-and-ipads-now">how much the cost of some iPads has risen</a> due to recent Apple price hikes, it makes sense for a longer interest-free payment plan to be available. For example, an<a href="https://www.tomsguide.com/tablets/ipads/ipad-pro-2024"> 11-inch iPad Pro </a>with cellular is now $1,399, which is $289 more than the original $1,110 price tag. It's a lot of money to spend on a tablet, but if you split the cost over three years, you end up paying just shy of $39 a month.</p><p>Of course, this means you are on the hook for paying that every single month for three years — regardless of how your life and circumstances might change. So there's a trade-off to those low monthly payments. But if you want an iPad Pro and plan on keeping it for the long term, it is a good way to avoid dropping several hundred dollars in one go.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-11-just-leaked-via-amazon-heres-the-specs-colors-and-obligatory-price-hike">Google Pixel 11 just leaked via Amazon — here's the specs, colors and obligatory price hike</a></li><li><a href="https://www.tomsguide.com/phones/iphones/ios-27-public-beta-hands-on-preview-the-new-siri-and-apple-intelligence-features-completely-changed-how-i-use-my-iphone">iOS 27 hands-on preview: These new features completely change how I use my iPhone</a></li><li><a href="https://www.tomsguide.com/phones/oneplus-phones/the-end-of-oneplus-just-got-confirmed-the-original-flagship-killer-brand-finally-decides-to-settle">The end of OnePlus just got confirmed — the original 'flagship killer' brand finally decides to settle</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ iPadOS 27 hands-on preview: Siri AI and all the big features ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Apple is expected to launch <a href="https://www.tomsguide.com/computing/vr-ar/ipados-27-everything-coming-to-the-apples-beloved-tablets">iPadOS 27</a> this Fall, but you can try the upcoming operating system right now via the public beta. While the OS is still a work in progress, it has most of the essential new features coming to the <a href="https://www.tomsguide.com/best-picks/best-ipad">best iPads</a>.</p><p>Like <a href="https://www.tomsguide.com/phones/iphones/ios-27-is-official-all-the-new-upgrades-and-features-announced-at-wwdc-2026">iOS 27</a> and <a href="https://www.tomsguide.com/computing/macos/macos-27">macOS 27</a>, iPadOS 27 is focused on overall system refinements and deeper AI integration. That last bit is especially noteworthy, as there is now a dedicated <a href="https://www.tomsguide.com/ai/apple-finally-fixed-siri-heres-all-the-features-for-the-new-siri-ai-announced-at-wwdc">Siri AI app</a> that functions like a standard chatbot. Beyond answering questions, Siri AI can also take actions on your behalf since it’s integrated into the operating system and works with Apple’s applications.</p><p>Though iPadOS 27 isn’t a monumental update, features like the overhauled Siri AI, the Liquid Glass slider, and other quality-of-life improvements make it worthwhile. Here are my impressions of the upcoming iPad operating system and its new features.</p><h3 class="article-body__section" id="section-ipados-27-hands-on-preview-compatible-ipads"><span>iPadOS 27 hands-on preview: Compatible iPads</span></h3><p>Here are all the iPads that support iPadOS 27.</p><ul><li><strong>iPad Pro (M4 and later)</strong></li><li><strong>iPad Pro 12.9‑inch (4th generation and later)</strong></li><li><strong>iPad Pro 11‑inch (2nd generation and later)</strong></li><li><strong>iPad Air 13-inch (M2 and later)</strong></li><li><strong>iPad Air 11-inch (M2, M3, and M4)</strong></li><li><strong>iPad Air 11-inch (4th generation and later)</strong></li><li><strong>iPad (A16)</strong></li><li><strong>iPad (9th generation and later)</strong></li><li><strong>iPad mini (A17 Pro)</strong></li><li><strong>iPad mini (6th generation)</strong></li></ul><h3 class="article-body__section" id="section-ipados-27-hands-on-preview-new-features"><span>iPadOS 27 hands-on preview: New features</span></h3><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:3000px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="bUdvQNBSqmfRLjfKDiytsJ" name="iPadOS 27-3" alt="iPadOS 27" src="https://cdn.mos.cms.futurecdn.net/bUdvQNBSqmfRLjfKDiytsJ-1920-80.jpg" mos="" align="middle" fullscreen="" width="3000" height="1687" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p><a href="https://www.tomsguide.com/ai/apple-intelligence-unveiled-all-the-new-ai-features-coming-to-ios-18-ipados-18-and-macos-sequoia">Apple Intelligence</a> is finally ready for prime time on the company’s devices. Thanks to the new Siri AI app, you can now interact with Apple’s virtual assistant the same way you would with a chatbot like ChatGPT or <a href="https://www.tomsguide.com/ai/google-gemini/google-gemini-everything-you-need-to-know">Google Gemini</a>. Apple Intelligence runs on both servers and your device to offer better image understanding and more.</p><p>There is now a dedicated Siri AI app, which looks and functions like a regular chatbot app. In this window, you can ask Siri questions or have it perform tasks for you. For example, I used Siri to send a message to one of my iMessage group chats, and it did so after my approval. Sure, I could have just done this directly in the group chat, but it’s a good demonstration of what the new Siri can do.</p><p>Siri AI also understands what it sees on your screen. When I had the Tom’s Guide homepage open on Google Chrome, it correctly detailed what was on the screen, including all the articles. It couldn’t open the articles or read them out loud (despite saying it could), but given that I’m testing a beta version, I’ll give it an A for effort, even if it failed to complete the task.</p><p>Siri is most useful when you’re using Apple’s own apps and programs. It can create events on your calendar, set reminders, play music, and more. For example, when you’re looking at a schedule, you’ll see an “add to calendar” button pop up. When you right-click certain folders, files, or apps, you’ll see an “Ask Siri” option at the bottom. Selecting this will open a window where you can start texting or talking with Siri.</p><p>Though Siri can’t yet interact with most third-party applications (such as those from Google), it’s a huge improvement over the old Siri.</p><h2 id="liquid-glass-improvements-2">Liquid Glass improvements</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3000px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="o8qwJZchHVow7pwSPrizSQ" name="iPadOS 27-2" alt="iPadOS 27" src="https://cdn.mos.cms.futurecdn.net/o8qwJZchHVow7pwSPrizSQ-1920-80.jpg" mos="" align="middle" fullscreen="" width="3000" height="1688" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Liquid Glass hasn’t gone anywhere, as Apple is leaning more into the UI with its latest operating system updates. However, Apple is now giving you greater control over how it looks thanks to a new slider that adjusts the opacity. You can’t eliminate the Liquid Glass look, but you can severely minimize it.</p><p>There are other improvements, such as how complex background visuals now appear more diffuse so that text stands out more. You’ll also notice that the edges of icons are more pronounced to help further separate them from the background. The uniform corner radius of all app windows also helps them stand out more.</p><p>Even if Liquid Glass hasn’t gone anywhere, even detractors should find the updates tolerable since they do greatly improve overall readability and visibility. The Liquid Glass slider is a nice touch.</p><p>I've never had a problem with Liquid Glass because I think it’s an interesting visual effect. That said, I’m glad that folks can now fine-tune it to their liking. The slider is especially neat because it’s easy to use and makes it clear how much of a difference there is when you go from one extreme to the other.</p><h2 id="child-safety-features-2">Child safety features</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3000px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="scMkVXfiwMUYV5YeEAw5JV" name="iPadOS 27" alt="iPadOS 27" src="https://cdn.mos.cms.futurecdn.net/scMkVXfiwMUYV5YeEAw5JV-1920-80.jpg" mos="" align="middle" fullscreen="" width="3000" height="1688" attribution="" endorsement="" class="inline"></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 a parent, you’ll be happy to know that Apple is expanding its parental control features with iPadOS 27. This way, you can let the kiddo use Apple’s tablet without worrying too much about the kind of content they’re watching and for how long they’re using the slate.</p><p>Some of these updates include a redesigned and more intuitive Screen Time Dashboard that offers one-tap controls and expanded safeguards. There is also Time Allowances for app categories, Ask to Browsw website approval, Communication Safety that blurs gore or violence, and one-tap access management. You can tailor these features to suit your child.</p><p>I don’t have kids but I did find the child safety features simple enough to use and customize. Given how much kids love iPads, it’s smart for Apple to continue making adjustments to these safety features.</p><h3 class="article-body__section" id="section-ipados-27-hands-on-preview-other-features"><span>iPadOS 27 hands-on preview: Other features</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3000px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="7oXYaT7tBAEw2Bpdcym2Ab" name="iPadOS 27-4" alt="iPadOS 27" src="https://cdn.mos.cms.futurecdn.net/7oXYaT7tBAEw2Bpdcym2Ab-1920-80.jpg" mos="" align="middle" fullscreen="" width="3000" height="1688" attribution="" endorsement="" class="inline"></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>Spatial Reframing</strong>: As the name suggests, you can now reframe a photo after it’s been taken thanks to this feature. You can also expand your shots with the Extend Tool and remove objects with the Clean Up tool.</p><p><strong>Upgraded Image Playground</strong>: Image Playground can now generate higher quality images than before. You can also modify and transform existing images by describing what you want.</p><p><strong>Siri in Notes</strong>: Siri AI can assist with your handwritten or typed notes in the Notes app by (for example) organizing bullet points into a formatted agenda or turning handwritten lectures into a detailed study guide.</p><p><strong>Safari updates</strong>: In Safari, tabs can now be automatically grouped by topic to make related pages easier to find. With Safari Notify Me, you can receive an alert if there’s a price change or a restock for an item you’ve been eyeing.</p><p><strong>Describe Shortcuts</strong>: Instead of manually building complex workflows, you can now describe what you need, and Shortcuts connects actions across multiple apps to make it happen. This is useful if you want to set specific routines, such as launching a specific app when you connect a peripheral.</p><h3 class="article-body__section" id="section-ipados-27-hands-on-preview-outlook"><span>iPadOS 27 hands-on preview: Outlook</span></h3><p>iPadOS 27 won’t set the world on fire with revolutionary new features, but the upgraded Siri AI and deeper Apple Intelligence integrations help make iPads that support the update more useful. This is especially true if you frequently use Apple’s own apps.</p><p>Keeping in mind that iPadOS 27 is still a work in progress, I think it’s a smart update that finally sees Apple’s AI ambitions bear fruit. Things could change between now and when the expected Fall launch, but right now, Apple has delivered on its promises for a more helpful and intuitive iPad experience.</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/apple-buried-a-perfect-dumb-phone-feature-inside-your-iphone-heres-how-to-turn-it-on">Apple hid a perfect 'dumb phone' feature inside your iPhone that's great for kids — here's how to turn it on</a></li><li><a href="https://www.tomsguide.com/phones/iphones/the-robot-voice-is-gone-how-to-make-siri-sound-truly-human-in-ios-27">iOS 27 beta now lets you customize Siri's pace and expressivity — here's how to do it</a></li><li><a href="https://www.tomsguide.com/phones/iphones/ios-27s-new-ai-feature-will-automatically-fix-your-weak-passwords-how-to-set-it-up">iOS 27's new AI feature will automatically fix your weak passwords — how to set it up</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/ipads/ipados-27-hands-on-preview</link>
                                                                            <description>
                            <![CDATA[ iPadOS 27 brings AI to the forefront, thanks to the new Siri AI and deeper app integration. Here's what we think of the iPadOS 27 public beta. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">NG9nq8g6ZoLDtYconhCDeJ</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/Kg4cbghayrcgsaf6yZstBB-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 15 Jul 2026 08:00:00 +0000</pubDate>                                                                                                                                                                                                                                <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/Kg4cbghayrcgsaf6yZstBB-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPadOS 27]]></media:description>                                                            <media:text><![CDATA[iPadOS 27]]></media:text>
                                <media:title type="plain"><![CDATA[iPadOS 27]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/Kg4cbghayrcgsaf6yZstBB-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Apple is expected to launch <a href="https://www.tomsguide.com/computing/vr-ar/ipados-27-everything-coming-to-the-apples-beloved-tablets">iPadOS 27</a> this Fall, but you can try the upcoming operating system right now via the public beta. While the OS is still a work in progress, it has most of the essential new features coming to the <a href="https://www.tomsguide.com/best-picks/best-ipad">best iPads</a>.</p><p>Like <a href="https://www.tomsguide.com/phones/iphones/ios-27-is-official-all-the-new-upgrades-and-features-announced-at-wwdc-2026">iOS 27</a> and <a href="https://www.tomsguide.com/computing/macos/macos-27">macOS 27</a>, iPadOS 27 is focused on overall system refinements and deeper AI integration. That last bit is especially noteworthy, as there is now a dedicated <a href="https://www.tomsguide.com/ai/apple-finally-fixed-siri-heres-all-the-features-for-the-new-siri-ai-announced-at-wwdc">Siri AI app</a> that functions like a standard chatbot. Beyond answering questions, Siri AI can also take actions on your behalf since it’s integrated into the operating system and works with Apple’s applications.</p><p>Though iPadOS 27 isn’t a monumental update, features like the overhauled Siri AI, the Liquid Glass slider, and other quality-of-life improvements make it worthwhile. Here are my impressions of the upcoming iPad operating system and its new features.</p><h3 class="article-body__section" id="section-ipados-27-hands-on-preview-compatible-ipads"><span>iPadOS 27 hands-on preview: Compatible iPads</span></h3><p>Here are all the iPads that support iPadOS 27.</p><ul><li><strong>iPad Pro (M4 and later)</strong></li><li><strong>iPad Pro 12.9‑inch (4th generation and later)</strong></li><li><strong>iPad Pro 11‑inch (2nd generation and later)</strong></li><li><strong>iPad Air 13-inch (M2 and later)</strong></li><li><strong>iPad Air 11-inch (M2, M3, and M4)</strong></li><li><strong>iPad Air 11-inch (4th generation and later)</strong></li><li><strong>iPad (A16)</strong></li><li><strong>iPad (9th generation and later)</strong></li><li><strong>iPad mini (A17 Pro)</strong></li><li><strong>iPad mini (6th generation)</strong></li></ul><h3 class="article-body__section" id="section-ipados-27-hands-on-preview-new-features"><span>iPadOS 27 hands-on preview: New features</span></h3><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:3000px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="bUdvQNBSqmfRLjfKDiytsJ" name="iPadOS 27-3" alt="iPadOS 27" src="https://cdn.mos.cms.futurecdn.net/bUdvQNBSqmfRLjfKDiytsJ-1920-80.jpg" mos="" align="middle" fullscreen="" width="3000" height="1687" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p><a href="https://www.tomsguide.com/ai/apple-intelligence-unveiled-all-the-new-ai-features-coming-to-ios-18-ipados-18-and-macos-sequoia">Apple Intelligence</a> is finally ready for prime time on the company’s devices. Thanks to the new Siri AI app, you can now interact with Apple’s virtual assistant the same way you would with a chatbot like ChatGPT or <a href="https://www.tomsguide.com/ai/google-gemini/google-gemini-everything-you-need-to-know">Google Gemini</a>. Apple Intelligence runs on both servers and your device to offer better image understanding and more.</p><p>There is now a dedicated Siri AI app, which looks and functions like a regular chatbot app. In this window, you can ask Siri questions or have it perform tasks for you. For example, I used Siri to send a message to one of my iMessage group chats, and it did so after my approval. Sure, I could have just done this directly in the group chat, but it’s a good demonstration of what the new Siri can do.</p><p>Siri AI also understands what it sees on your screen. When I had the Tom’s Guide homepage open on Google Chrome, it correctly detailed what was on the screen, including all the articles. It couldn’t open the articles or read them out loud (despite saying it could), but given that I’m testing a beta version, I’ll give it an A for effort, even if it failed to complete the task.</p><p>Siri is most useful when you’re using Apple’s own apps and programs. It can create events on your calendar, set reminders, play music, and more. For example, when you’re looking at a schedule, you’ll see an “add to calendar” button pop up. When you right-click certain folders, files, or apps, you’ll see an “Ask Siri” option at the bottom. Selecting this will open a window where you can start texting or talking with Siri.</p><p>Though Siri can’t yet interact with most third-party applications (such as those from Google), it’s a huge improvement over the old Siri.</p><h2 id="liquid-glass-improvements-2">Liquid Glass improvements</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3000px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="o8qwJZchHVow7pwSPrizSQ" name="iPadOS 27-2" alt="iPadOS 27" src="https://cdn.mos.cms.futurecdn.net/o8qwJZchHVow7pwSPrizSQ-1920-80.jpg" mos="" align="middle" fullscreen="" width="3000" height="1688" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Liquid Glass hasn’t gone anywhere, as Apple is leaning more into the UI with its latest operating system updates. However, Apple is now giving you greater control over how it looks thanks to a new slider that adjusts the opacity. You can’t eliminate the Liquid Glass look, but you can severely minimize it.</p><p>There are other improvements, such as how complex background visuals now appear more diffuse so that text stands out more. You’ll also notice that the edges of icons are more pronounced to help further separate them from the background. The uniform corner radius of all app windows also helps them stand out more.</p><p>Even if Liquid Glass hasn’t gone anywhere, even detractors should find the updates tolerable since they do greatly improve overall readability and visibility. The Liquid Glass slider is a nice touch.</p><p>I've never had a problem with Liquid Glass because I think it’s an interesting visual effect. That said, I’m glad that folks can now fine-tune it to their liking. The slider is especially neat because it’s easy to use and makes it clear how much of a difference there is when you go from one extreme to the other.</p><h2 id="child-safety-features-2">Child safety features</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3000px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="scMkVXfiwMUYV5YeEAw5JV" name="iPadOS 27" alt="iPadOS 27" src="https://cdn.mos.cms.futurecdn.net/scMkVXfiwMUYV5YeEAw5JV-1920-80.jpg" mos="" align="middle" fullscreen="" width="3000" height="1688" attribution="" endorsement="" class="inline"></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 a parent, you’ll be happy to know that Apple is expanding its parental control features with iPadOS 27. This way, you can let the kiddo use Apple’s tablet without worrying too much about the kind of content they’re watching and for how long they’re using the slate.</p><p>Some of these updates include a redesigned and more intuitive Screen Time Dashboard that offers one-tap controls and expanded safeguards. There is also Time Allowances for app categories, Ask to Browsw website approval, Communication Safety that blurs gore or violence, and one-tap access management. You can tailor these features to suit your child.</p><p>I don’t have kids but I did find the child safety features simple enough to use and customize. Given how much kids love iPads, it’s smart for Apple to continue making adjustments to these safety features.</p><h3 class="article-body__section" id="section-ipados-27-hands-on-preview-other-features"><span>iPadOS 27 hands-on preview: Other features</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3000px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="7oXYaT7tBAEw2Bpdcym2Ab" name="iPadOS 27-4" alt="iPadOS 27" src="https://cdn.mos.cms.futurecdn.net/7oXYaT7tBAEw2Bpdcym2Ab-1920-80.jpg" mos="" align="middle" fullscreen="" width="3000" height="1688" attribution="" endorsement="" class="inline"></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>Spatial Reframing</strong>: As the name suggests, you can now reframe a photo after it’s been taken thanks to this feature. You can also expand your shots with the Extend Tool and remove objects with the Clean Up tool.</p><p><strong>Upgraded Image Playground</strong>: Image Playground can now generate higher quality images than before. You can also modify and transform existing images by describing what you want.</p><p><strong>Siri in Notes</strong>: Siri AI can assist with your handwritten or typed notes in the Notes app by (for example) organizing bullet points into a formatted agenda or turning handwritten lectures into a detailed study guide.</p><p><strong>Safari updates</strong>: In Safari, tabs can now be automatically grouped by topic to make related pages easier to find. With Safari Notify Me, you can receive an alert if there’s a price change or a restock for an item you’ve been eyeing.</p><p><strong>Describe Shortcuts</strong>: Instead of manually building complex workflows, you can now describe what you need, and Shortcuts connects actions across multiple apps to make it happen. This is useful if you want to set specific routines, such as launching a specific app when you connect a peripheral.</p><h3 class="article-body__section" id="section-ipados-27-hands-on-preview-outlook"><span>iPadOS 27 hands-on preview: Outlook</span></h3><p>iPadOS 27 won’t set the world on fire with revolutionary new features, but the upgraded Siri AI and deeper Apple Intelligence integrations help make iPads that support the update more useful. This is especially true if you frequently use Apple’s own apps.</p><p>Keeping in mind that iPadOS 27 is still a work in progress, I think it’s a smart update that finally sees Apple’s AI ambitions bear fruit. Things could change between now and when the expected Fall launch, but right now, Apple has delivered on its promises for a more helpful and intuitive iPad experience.</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/apple-buried-a-perfect-dumb-phone-feature-inside-your-iphone-heres-how-to-turn-it-on">Apple hid a perfect 'dumb phone' feature inside your iPhone that's great for kids — here's how to turn it on</a></li><li><a href="https://www.tomsguide.com/phones/iphones/the-robot-voice-is-gone-how-to-make-siri-sound-truly-human-in-ios-27">iOS 27 beta now lets you customize Siri's pace and expressivity — here's how to do it</a></li><li><a href="https://www.tomsguide.com/phones/iphones/ios-27s-new-ai-feature-will-automatically-fix-your-weak-passwords-how-to-set-it-up">iOS 27's new AI feature will automatically fix your weak passwords — how to set it up</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ iPadOS 27 public beta: How to download it right now ]]></title>
                                                                                                <dc:content><![CDATA[ <p>You don’t have to wait to try <a href="https://www.tomsguide.com/computing/vr-ar/ipados-27-everything-coming-to-the-apples-beloved-tablets">iPadOS 27</a>, as you can try it out now via the public beta. Even if this version of the operating system isn’t groundbreaking, its emphasis on AI should make for a more personal and customized experience.</p><p>As with <a href="https://www.tomsguide.com/phones/iphones/ios-27-public-beta-is-now-live-9-features-you-need-to-try-first">iOS 27</a> and <a href="https://www.tomsguide.com/computing/macos/macos-27">macOS Golden Gate</a>, the main attraction is the reinvented Siri, which finally lives up to its potential. <a href="https://www.tomsguide.com/ai/apple-finally-fixed-siri-heres-all-the-features-for-the-new-siri-ai-announced-at-wwdc">Siri AI</a>, as it’s now called, is context-aware and understands what’s on your screen. Because it’s built into the OS, it can directly control and manage apps. There are also new child safety features, improved readability for Liquid Glass, new photo-editing tools, and more.</p><p>While public betas are generally safer than developer betas, it’s best to proceed with caution, as there may be bugs that could harm your iPad. If you’re not bothered by that (I’ve never had issues in all my years of running these Apple betas), then here’s how to download the iPadOS 27 public beta.</p><h2 id="how-to-download-the-ipados-27-public-beta">How to download the iPadOS 27 public beta</h2><p>Before you install the beta, make sure to back up your iPad, just in case anything goes wrong and you need to return to <a href="https://www.tomsguide.com/computing/ipads/apple-ipados-26-review">iPadOS 26</a>.</p><p>You’ll then need to enroll in the Apple Beta Software Program. You may already be enrolled from prior years, but if not, <a href="https://go.redirectingat.com/?id=92X1584493&xcust=tomsguide_us_8105888556620443092&xs=1&url=https%3A%2F%2Fdeveloper.apple.com%2Fprograms%2Fenroll%2F&sref=https%3A%2F%2Fwww.tomsguide.com" target="_blank">visit the sign-up page</a> to get the ball rolling. You’ll need to log in with your name and address, then set your entity type as an individual. When the payment screen appears, back out, and you’ll be on the free developer tier.</p><p>Here is the full list of iPads that are compatible with iPadOS 27:</p><ul><li><strong>iPad Pro (M4 and later)</strong></li><li><strong>iPad Pro 12.9‑inch (4th generation and later)</strong></li><li><strong>iPad Pro 11‑inch (2nd generation and later)</strong></li><li><strong>iPad Air 13-inch (M2 and later)</strong></li><li><strong>iPad Air 11-inch (M2, M3, and M4)</strong></li><li><strong>iPad Air 11-inch (4th generation and later)</strong></li><li><strong>iPad (A16)</strong></li><li><strong>iPad (9th generation and later)</strong></li><li><strong>iPad mini (A17 Pro)</strong></li><li><strong>iPad mini (6th generation)</strong></li></ul><section class="howto-block">                    <h3>1. Check for software updates</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/wEZBK5bWqaVzSccB3yLyGo.png"                                        alt="iPadOS 27"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/wEZBK5bWqaVzSccB3yLyGo.png"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Apple)</div></figure>                    <p><p><strong>Launch the Settings app and tap General</strong>, followed by <strong>Software Update</strong>.</p></p>                </section><section class="howto-block">                    <h3>2. Select the iPadOS 27 public beta</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/PTH6VMjAXYREDHwRRypDdS.png"                                        alt="iPadOS 27"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/PTH6VMjAXYREDHwRRypDdS.png"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Apple)</div></figure>                    <p><p>If you have the latest version of iPadOS, the iPadOS 27 public beta may already be waiting for you. If not, <strong>tap Beta Updates and select the iPadOS 27 Public Beta from the list</strong>.</p></p>                </section><section class="howto-block">                    <h3>3. Download the beta</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/RUPk92wrMSzKy9UKZZD3bg.png"                                        alt="iPadOS 27 public beta"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/RUPk92wrMSzKy9UKZZD3bg.png"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Apple)</div></figure>                    <p><p>Select either <strong>Update Now</strong>, which starts downloading the beta right away, or <strong>Update Tonight</strong>, which delays the beta until later. You'll be prompted to enter your passcode. If you've selected Update Now, the download will begin. Downloading betas can take a while, so make sure your iPad has enough power or is connected to a charger when downloading the iPadOS 27 public beta.</p></p>                </section><section class="howto-block">                    <h3>4. Install the beta</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/AKRcfSsw2nocJVKgRAsw88.png"                                        alt="iPadOS 27 beta"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/AKRcfSsw2nocJVKgRAsw88.png"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Apple)</div></figure>                    <p><p>Once you've downloaded the beta, you'll be prompted to either <strong>install it now or wait until later</strong>. When installation is done, your iPad will restart. After you enter your passcode, iPadOS 27 will be installed and ready for you to check out.</p></p>                </section><p>And that's how you download the iPadOS 27 public beta! You should be safe using the beta, but if you don’t want to risk it, you can always wait for the full release this Fall.</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-just-downloaded-macos-27-public-beta-skip-the-ai-and-try-these-5-hidden-features-instead">I just downloaded macOS 27 public beta — skip Siri AI and try these 5 hidden features instead</a></li><li><a href="https://www.tomsguide.com/computing/laptops/haptic-vs-mechanical-trackpads-i-put-them-both-through-a-gauntlet-and-one-almost-made-me-throw-my-laptop-into-the-sun">Haptic vs. Mechanical trackpads: I put them both through a gauntlet, and one almost made me throw my laptop into the sun</a></li><li><a href="https://www.tomsguide.com/computing/monitors/exclusive-i-asked-lenovos-gm-to-predict-the-future-of-monitors-and-its-the-end-of-our-chaotic-cable-cluttered-desks-and-monitors-that-fry-your-retinas">Exclusive: I asked Lenovo’s GM to predict the future of monitors, and it's the end of our chaotic, cable-cluttered desks and monitors that fry your retinas</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/ipads/ipados-27-public-beta</link>
                                                                            <description>
                            <![CDATA[ The iPadOS 27 public beta is now live! Here's how to download the new operating system for your iPad. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">LTaDuikThpKgzCpjJdSvE9</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/7oXYaT7tBAEw2Bpdcym2Ab-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 15 Jul 2026 05:15:00 +0000</pubDate>                                                                                                                                <updated>Wed, 15 Jul 2026 17:49:07 +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/7oXYaT7tBAEw2Bpdcym2Ab-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPadOS 27]]></media:description>                                                            <media:text><![CDATA[iPadOS 27]]></media:text>
                                <media:title type="plain"><![CDATA[iPadOS 27]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/7oXYaT7tBAEw2Bpdcym2Ab-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>You don’t have to wait to try <a href="https://www.tomsguide.com/computing/vr-ar/ipados-27-everything-coming-to-the-apples-beloved-tablets">iPadOS 27</a>, as you can try it out now via the public beta. Even if this version of the operating system isn’t groundbreaking, its emphasis on AI should make for a more personal and customized experience.</p><p>As with <a href="https://www.tomsguide.com/phones/iphones/ios-27-public-beta-is-now-live-9-features-you-need-to-try-first">iOS 27</a> and <a href="https://www.tomsguide.com/computing/macos/macos-27">macOS Golden Gate</a>, the main attraction is the reinvented Siri, which finally lives up to its potential. <a href="https://www.tomsguide.com/ai/apple-finally-fixed-siri-heres-all-the-features-for-the-new-siri-ai-announced-at-wwdc">Siri AI</a>, as it’s now called, is context-aware and understands what’s on your screen. Because it’s built into the OS, it can directly control and manage apps. There are also new child safety features, improved readability for Liquid Glass, new photo-editing tools, and more.</p><p>While public betas are generally safer than developer betas, it’s best to proceed with caution, as there may be bugs that could harm your iPad. If you’re not bothered by that (I’ve never had issues in all my years of running these Apple betas), then here’s how to download the iPadOS 27 public beta.</p><h2 id="how-to-download-the-ipados-27-public-beta">How to download the iPadOS 27 public beta</h2><p>Before you install the beta, make sure to back up your iPad, just in case anything goes wrong and you need to return to <a href="https://www.tomsguide.com/computing/ipads/apple-ipados-26-review">iPadOS 26</a>.</p><p>You’ll then need to enroll in the Apple Beta Software Program. You may already be enrolled from prior years, but if not, <a href="https://go.redirectingat.com/?id=92X1584493&xcust=tomsguide_us_8105888556620443092&xs=1&url=https%3A%2F%2Fdeveloper.apple.com%2Fprograms%2Fenroll%2F&sref=https%3A%2F%2Fwww.tomsguide.com" target="_blank">visit the sign-up page</a> to get the ball rolling. You’ll need to log in with your name and address, then set your entity type as an individual. When the payment screen appears, back out, and you’ll be on the free developer tier.</p><p>Here is the full list of iPads that are compatible with iPadOS 27:</p><ul><li><strong>iPad Pro (M4 and later)</strong></li><li><strong>iPad Pro 12.9‑inch (4th generation and later)</strong></li><li><strong>iPad Pro 11‑inch (2nd generation and later)</strong></li><li><strong>iPad Air 13-inch (M2 and later)</strong></li><li><strong>iPad Air 11-inch (M2, M3, and M4)</strong></li><li><strong>iPad Air 11-inch (4th generation and later)</strong></li><li><strong>iPad (A16)</strong></li><li><strong>iPad (9th generation and later)</strong></li><li><strong>iPad mini (A17 Pro)</strong></li><li><strong>iPad mini (6th generation)</strong></li></ul><section class="howto-block">                    <h3>1. Check for software updates</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/wEZBK5bWqaVzSccB3yLyGo.png"                                        alt="iPadOS 27"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/wEZBK5bWqaVzSccB3yLyGo.png"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Apple)</div></figure>                    <p><p><strong>Launch the Settings app and tap General</strong>, followed by <strong>Software Update</strong>.</p></p>                </section><section class="howto-block">                    <h3>2. Select the iPadOS 27 public beta</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/PTH6VMjAXYREDHwRRypDdS.png"                                        alt="iPadOS 27"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/PTH6VMjAXYREDHwRRypDdS.png"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Apple)</div></figure>                    <p><p>If you have the latest version of iPadOS, the iPadOS 27 public beta may already be waiting for you. If not, <strong>tap Beta Updates and select the iPadOS 27 Public Beta from the list</strong>.</p></p>                </section><section class="howto-block">                    <h3>3. Download the beta</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/RUPk92wrMSzKy9UKZZD3bg.png"                                        alt="iPadOS 27 public beta"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/RUPk92wrMSzKy9UKZZD3bg.png"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Apple)</div></figure>                    <p><p>Select either <strong>Update Now</strong>, which starts downloading the beta right away, or <strong>Update Tonight</strong>, which delays the beta until later. You'll be prompted to enter your passcode. If you've selected Update Now, the download will begin. Downloading betas can take a while, so make sure your iPad has enough power or is connected to a charger when downloading the iPadOS 27 public beta.</p></p>                </section><section class="howto-block">                    <h3>4. Install the beta</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/AKRcfSsw2nocJVKgRAsw88.png"                                        alt="iPadOS 27 beta"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/AKRcfSsw2nocJVKgRAsw88.png"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Apple)</div></figure>                    <p><p>Once you've downloaded the beta, you'll be prompted to either <strong>install it now or wait until later</strong>. When installation is done, your iPad will restart. After you enter your passcode, iPadOS 27 will be installed and ready for you to check out.</p></p>                </section><p>And that's how you download the iPadOS 27 public beta! You should be safe using the beta, but if you don’t want to risk it, you can always wait for the full release this Fall.</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-just-downloaded-macos-27-public-beta-skip-the-ai-and-try-these-5-hidden-features-instead">I just downloaded macOS 27 public beta — skip Siri AI and try these 5 hidden features instead</a></li><li><a href="https://www.tomsguide.com/computing/laptops/haptic-vs-mechanical-trackpads-i-put-them-both-through-a-gauntlet-and-one-almost-made-me-throw-my-laptop-into-the-sun">Haptic vs. Mechanical trackpads: I put them both through a gauntlet, and one almost made me throw my laptop into the sun</a></li><li><a href="https://www.tomsguide.com/computing/monitors/exclusive-i-asked-lenovos-gm-to-predict-the-future-of-monitors-and-its-the-end-of-our-chaotic-cable-cluttered-desks-and-monitors-that-fry-your-retinas">Exclusive: I asked Lenovo’s GM to predict the future of monitors, and it's the end of our chaotic, cable-cluttered desks and monitors that fry your retinas</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 'For the first time since 1984 when I bought my first Mac, I am thinking about bailing on Apple' — customers weigh in on Apple's eye-watering price hikes ]]></title>
                                                                                                <dc:content><![CDATA[ <p>A few days ago, Apple finally confirmed that the "unprecedented challenge" of the <a href="https://www.tomsguide.com/computing/the-ram-crisis-is-so-much-bigger-than-pcs-heres-the-rest-of-the-products-caught-in-the-crossfire">RAM crisis</a> had forced it to hike the prices of some of its hardware, with some devices now costing as much as $1,300 more than they did this time last week.</p><p>Question is, are these latest price hikes a fair trade-off for quality devices being manufactured at a time when the AI boom is eating up mountains of RAM, and the Strait of Hormuz shipping disruption has put further commercial pressures on manufacturers, <em>or</em> is Apple being greedy?</p><p>Tom's Guide member relh didn't hold back, <a href="https://www.tomsguide.com/computing/macos/is-your-mac-slowing-down-try-these-3-monthly-resets-before-you-give-up#vf-019f0b5f-b56e-7dd3-b8bf-fcfc01f34882">commenting,</a> "I can understand why Apple had to make an increase but I am not planning to help them maintain their huge profit margin (which I understand is north of 30%). For the first time since 1984 when I bought my first Mac (yes, the very expensive 128K model) I am thinking about bailing on Apple."</p><p>This comment made me feel both nostalgic for the <a href="https://www.tomsguide.com/computing/hardware/we-want-to-hear-from-you-what-was-your-first-ever-apple-device">first Apple product I used</a>, and sympathetic to the user's point.</p><p>In response to our recent poll asking "At what point do you usually give up and buy a new Mac?", relh continued<a href="https://www.tomsguide.com/computing/macos/is-your-mac-slowing-down-try-these-3-monthly-resets-before-you-give-up#vf-019f0b5f-b56e-7dd3-b8bf-fcfc01f34882">,</a> "My answer to the survey used to be 'when hardware can’t run latest system software'. This would have applied this year when my Intel iMac could not run new macOS BUT this year the ridiculous increase of more than 30% for a Mac Studio put a stop to that. I had planned to upgrade on Friday but the price increase I saw on Thursday was more than I could tolerate."</p><p>What do you think? Let us know in the below poll, and in the comments section.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ORVPNO"></div>                            </div>                            <script src="https://kwizly.com/embed/ORVPNO.js" async></script><h3 class="article-body__section" id="section-apple-increases"><span>Apple Increases</span></h3><p>Apple has raised the cost of MacBooks, desktop Macs, iPads, Vision Pro and even the less-memory-hungry devices like Apple TV 4K and Homepod... and has hinted that this is just the beginning. Among the <a href="https://www.tomsguide.com/computing/macbooks/apple-price-hikes-are-official-heres-how-much-more-youll-pay-for-macbooks-and-ipads-now">full list of Apple price hikes</a> are these notable ones:</p><ul><li><strong>Apple TV 4K: </strong>$199 (up from $129, $70 increase)</li><li><strong>HomePod: </strong>$349 (up from $299, $50 increase)</li><li><strong>iPad: </strong>$449 (up from $349, $100 increase)</li><li><strong>MacBook Neo: </strong>$699 (up from $599, $100 increase)</li><li><strong>iMac:</strong> $1,499 (up from $1,299, $200 increase)</li><li><strong>M5 Pro MacBook Pro:</strong> $2,499 (up from $2,199, $300 increase)</li><li><strong>Vision Pro: </strong>$3,699 (up from $3,499, $200 increase)</li><li><strong>M5 Max MacBook Pro: </strong>$4,099 (up from $3,599, $500 increase)</li><li><strong>M3 Ultra Mac Studio: </strong>$5,299 (up from $3,999, $1,300 increase)</li></ul><p>The UK prices mirror the above US prices.</p><h3 class="article-body__section" id="section-apple-users-reactions"><span>Apple users reactions</span></h3><p>Our members weren't the only ones expressing their opinions on Apple's price hikes, with Redditors also feeling hot under the collar. On <a href="https://www.reddit.com/r/macbook/comments/1uigzvq/watching_the_apple_price_hike_unfold_was_surreal/" target="_blank" rel="nofollow">a thread in r/macbook</a>, a user named Up_Beat_Argument wrote, "I feel like I watched the entire ripple effect work its way through the market, and it was surreal. Like being in a nightmare you can’t wake up from... And I guess the worst part is that it’s going to get worse before it gets better."</p><p>Among the 140 comments in that thread, users echoed sentiments about the new prices being too steep, mused that they may need to downgrade their tech in order to afford a new device, and echoed concerns about Apple's profit margins being an unspoken driver behind the costs.</p><figure><blockquote class="reddit-card"  ><a href="https://www.reddit.com/r/macbook/comments/1uigzvq/watching_the_apple_price_hike_unfold_was_surreal">Watching the Apple price hike unfold was surreal</a><figcaption><cite> from <a href="https://www.reddit.com/r/macbook">r/macbook</a></cite></figcaption></blockquote></figure><script async src="//embed.redditmedia.com/widgets/platform.js" charset="UTF-8"></script><p>Are these Redditors being too cynical, or do you think there's more than a grain of truth there?</p><iframe title="What do you think?" description="" minimumCommentCount="3" class="position-center" data-lazy-priority="low" data-lazy-src=""></iframe><a class="card card--standard card--rows-1 card--align-center" href="https://www.tomsguide.com/membership"><div class="card-image-widthsetter"><p class="vanilla-image-block"  style="padding-top:56.25%;"><img style="width: 100%" class="card__image" src="https://cdn.mos.cms.futurecdn.net/CtyBASsPQAuEKTsTEJu6YL.jpg" alt="A screenshot from the Tom's Guide website reading 'Everything you get as a member'"></p></div><div class="card__content"><h3 class="card__title">Tom's Guide Club</h3><div class="card__description-wrapper"><div class="card__description"><p>Join Tom’s Guide Club for free, to earn badges, talk to other members and Tom’s writers, get exclusive deals and more.</p></div></div></div></a><p>On <a href="https://www.reddit.com/r/apple/comments/1ufm4dt/apple_hints_at_more_price_increases_coming_later/" target="_blank" rel="nofollow">another thread</a>, SwampYankee said, "I’d be surprised if they didn’t raise iPhone prices soon." This matches up with what analysts told my colleague Tom Pritchard about <a href="https://www.tomsguide.com/phones/iphones/analysts-warn-the-iphone-18-price-hike-could-be-worse-than-we-thought">iPhone 18 price hikes likely being worse than we thought</a>.</p><figure><blockquote class="reddit-card"  ><a href="https://www.reddit.com/r/apple/comments/1ufm4dt/comment/ott3eal">Comment</a><figcaption><cite> from <a href="https://www.reddit.com/r/apple">r/apple</a></cite></figcaption></blockquote></figure><script async src="//embed.redditmedia.com/widgets/platform.js" charset="UTF-8"></script><p>To which perthguppy added, "Also, announce unpopular stuff from the outgoing CEO now, and give the new CEO a better honeymoon period."</p><p>They may have a point.</p><figure><blockquote class="reddit-card"  ><a href="https://www.reddit.com/r/apple/comments/1ufdkf2/comment/ots7rid">Comment</a><figcaption><cite> from <a href="https://www.reddit.com/r/apple">r/apple</a></cite></figcaption></blockquote></figure><script async src="//embed.redditmedia.com/widgets/platform.js" charset="UTF-8"></script><p>Users on a thread titled '<a href="https://www.reddit.com/r/apple/comments/1ufdkf2/wall_street_isnt_buying_apples_unprecedented/">Wall Street isn't buying Apple's unprecedented price hikes on products</a>', though still generally disgruntled at the soaring RRPs, speculated that perhaps the increase was so steep because Apple had held off increasing prices for a couple of years, to avoid bad publicity.</p><p>Whatever the future holds for Apple prices (and let's face it, it's super unlikely to be any permanent reductions), perhaps it's time to consider shopping <a href="https://www.amazon.com/s?i=computers&bbn=10158976011&rh=n%3A13896617011%2Cp_123%3A110955&dc&ds=v1%3AyLwVIcN6y88tDZEghE5zPJbJ%2FUdQQsmKnGaDr1IdcsI&b%3Fref_=ascp_law&pf_rd_i=10158976011&pf_rd_m=ATVPDKIKX0DER&pf_rd_p=9ff52531-b27b-43c7-91d5-6041f806b75b&pf_rd_r=7WQHYEA7WYKCB6SZJP7F&pf_rd_s=merchandised-search-5&pf_rd_t=101&qid=1782831580&rnid=85457740011&ref=sr_nr_p_123_1" target="_blank" rel="nofollow">second-hand and refurbished Apple products</a> for the time being.</p><p>How do you feel about the price hikes? Let us 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><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 are official — here's how much more you'll pay for MacBooks and iPads now</a></li><li><a href="https://www.tomsguide.com/phones/iphones/analysts-warn-the-iphone-18-price-hike-could-be-worse-than-we-thought">Analysts warn the iPhone 18 price hike could be worse than we thought</a></li><li><a href="https://www.tomsguide.com/computing/laptops/macbook-neo-vs-chromebooks-which-budget-laptop-is-right-for-you">MacBook Neo vs. Chromebooks: Which budget laptop is right for you?</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/macbooks/for-first-time-since-1984-thinking-about-bailing-on-apple-customers-react-apple-price-hikes</link>
                                                                            <description>
                            <![CDATA[ With some Apple devices becoming $1,300 more expensive overnight, Tom's Guide readers weren't shy in expressing their feelings. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">envHCuoKS4uT6MrVprYqch</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/3jYd3KzyqQMdcZoQgE3Ze6-1280-80.png" type="image/png" length="0"></enclosure>
                                                                        <pubDate>Wed, 01 Jul 2026 07:15:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[MacBooks]]></category>
                                                    <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Laptops]]></category>
                                                    <category><![CDATA[Tablets]]></category>
                                                                                                <author><![CDATA[ ella.taylor@futurenet.com (Ella Taylor) ]]></author>                    <dc:creator><![CDATA[ Ella Taylor ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/W2nC7HFA6avQHdFNFbFPNa-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Ella is Tom’s Guide’s Engagement Editor, on a mission to get to know all about our readers, to help you with your burning questions, and to create an exciting mix of content that entices you to keep coming back to the site – whether you’re a regular reader or a &lt;a href=&quot;https://www.tomsguide.com/membership&quot;&gt;member&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;She has more than 15 years of editorial experience, graduating from Kingston University with a First Class Honours degree in Journalism in 2008. She has written for and edited magazines and websites, including fellow Future titles &lt;em&gt;TechRadar.com, CreativeBloq.com, Digital Camera magazine, NPhoto, BikeRadar.com, Mollie Makes&lt;/em&gt; and more. &lt;/p&gt;&lt;p&gt;Most recently, she was Managing Editor of &lt;em&gt;womanandhome.com&lt;/em&gt;, where she co-launched its &lt;a href=&quot;https://www.womanandhome.com/tag/quiz/&quot; target=&quot;_blank&quot;&gt;Quiz of the Day&lt;/a&gt; and led the charge for articles that actively asked readers for their views. Before that, she was Editor of professional photography website &lt;em&gt;canon-europe.com/pro&lt;/em&gt;, having worked her way up from Production Editor. As such, she&#039;s a stickler for fact-checking, has too many opinions about grammar and is easily excited by a beautiful photo.&lt;/p&gt;&lt;p&gt;A mum of two young children, she keeps fit by typically carrying at least one of them on her shoulders around the hilly streets of Bristol. When not chasing her sons around the play parks and soft plays of South West England and worshipping her three rescue cats, she&#039;s likely to be in the garden, steadily turning it from a neglected concrete jungle to a usable green space. She’s also finally embarking on a kitchen extension in May, so 2026 looks set to be a year of big home improvements and lots of builders’ tea.&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/3jYd3KzyqQMdcZoQgE3Ze6-1280-80.png">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A photo of the MacBook Neo on a desk, with a &#039;Tom&#039;s Guide Readers Say&#039; graphic overlaid]]></media:description>                                                            <media:text><![CDATA[A photo of the MacBook Neo on a desk, with a &#039;Tom&#039;s Guide Readers Say&#039; graphic overlaid]]></media:text>
                                <media:title type="plain"><![CDATA[A photo of the MacBook Neo on a desk, with a &#039;Tom&#039;s Guide Readers Say&#039; graphic overlaid]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/3jYd3KzyqQMdcZoQgE3Ze6-1280-80.png" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>A few days ago, Apple finally confirmed that the "unprecedented challenge" of the <a href="https://www.tomsguide.com/computing/the-ram-crisis-is-so-much-bigger-than-pcs-heres-the-rest-of-the-products-caught-in-the-crossfire">RAM crisis</a> had forced it to hike the prices of some of its hardware, with some devices now costing as much as $1,300 more than they did this time last week.</p><p>Question is, are these latest price hikes a fair trade-off for quality devices being manufactured at a time when the AI boom is eating up mountains of RAM, and the Strait of Hormuz shipping disruption has put further commercial pressures on manufacturers, <em>or</em> is Apple being greedy?</p><p>Tom's Guide member relh didn't hold back, <a href="https://www.tomsguide.com/computing/macos/is-your-mac-slowing-down-try-these-3-monthly-resets-before-you-give-up#vf-019f0b5f-b56e-7dd3-b8bf-fcfc01f34882">commenting,</a> "I can understand why Apple had to make an increase but I am not planning to help them maintain their huge profit margin (which I understand is north of 30%). For the first time since 1984 when I bought my first Mac (yes, the very expensive 128K model) I am thinking about bailing on Apple."</p><p>This comment made me feel both nostalgic for the <a href="https://www.tomsguide.com/computing/hardware/we-want-to-hear-from-you-what-was-your-first-ever-apple-device">first Apple product I used</a>, and sympathetic to the user's point.</p><p>In response to our recent poll asking "At what point do you usually give up and buy a new Mac?", relh continued<a href="https://www.tomsguide.com/computing/macos/is-your-mac-slowing-down-try-these-3-monthly-resets-before-you-give-up#vf-019f0b5f-b56e-7dd3-b8bf-fcfc01f34882">,</a> "My answer to the survey used to be 'when hardware can’t run latest system software'. This would have applied this year when my Intel iMac could not run new macOS BUT this year the ridiculous increase of more than 30% for a Mac Studio put a stop to that. I had planned to upgrade on Friday but the price increase I saw on Thursday was more than I could tolerate."</p><p>What do you think? Let us know in the below poll, and in the comments section.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ORVPNO"></div>                            </div>                            <script src="https://kwizly.com/embed/ORVPNO.js" async></script><h3 class="article-body__section" id="section-apple-increases"><span>Apple Increases</span></h3><p>Apple has raised the cost of MacBooks, desktop Macs, iPads, Vision Pro and even the less-memory-hungry devices like Apple TV 4K and Homepod... and has hinted that this is just the beginning. Among the <a href="https://www.tomsguide.com/computing/macbooks/apple-price-hikes-are-official-heres-how-much-more-youll-pay-for-macbooks-and-ipads-now">full list of Apple price hikes</a> are these notable ones:</p><ul><li><strong>Apple TV 4K: </strong>$199 (up from $129, $70 increase)</li><li><strong>HomePod: </strong>$349 (up from $299, $50 increase)</li><li><strong>iPad: </strong>$449 (up from $349, $100 increase)</li><li><strong>MacBook Neo: </strong>$699 (up from $599, $100 increase)</li><li><strong>iMac:</strong> $1,499 (up from $1,299, $200 increase)</li><li><strong>M5 Pro MacBook Pro:</strong> $2,499 (up from $2,199, $300 increase)</li><li><strong>Vision Pro: </strong>$3,699 (up from $3,499, $200 increase)</li><li><strong>M5 Max MacBook Pro: </strong>$4,099 (up from $3,599, $500 increase)</li><li><strong>M3 Ultra Mac Studio: </strong>$5,299 (up from $3,999, $1,300 increase)</li></ul><p>The UK prices mirror the above US prices.</p><h3 class="article-body__section" id="section-apple-users-reactions"><span>Apple users reactions</span></h3><p>Our members weren't the only ones expressing their opinions on Apple's price hikes, with Redditors also feeling hot under the collar. On <a href="https://www.reddit.com/r/macbook/comments/1uigzvq/watching_the_apple_price_hike_unfold_was_surreal/" target="_blank" rel="nofollow">a thread in r/macbook</a>, a user named Up_Beat_Argument wrote, "I feel like I watched the entire ripple effect work its way through the market, and it was surreal. Like being in a nightmare you can’t wake up from... And I guess the worst part is that it’s going to get worse before it gets better."</p><p>Among the 140 comments in that thread, users echoed sentiments about the new prices being too steep, mused that they may need to downgrade their tech in order to afford a new device, and echoed concerns about Apple's profit margins being an unspoken driver behind the costs.</p><figure><blockquote class="reddit-card"  ><a href="https://www.reddit.com/r/macbook/comments/1uigzvq/watching_the_apple_price_hike_unfold_was_surreal">Watching the Apple price hike unfold was surreal</a><figcaption><cite> from <a href="https://www.reddit.com/r/macbook">r/macbook</a></cite></figcaption></blockquote></figure><script async src="//embed.redditmedia.com/widgets/platform.js" charset="UTF-8"></script><p>Are these Redditors being too cynical, or do you think there's more than a grain of truth there?</p><iframe title="What do you think?" description="" minimumCommentCount="3" class="position-center" data-lazy-priority="low" data-lazy-src=""></iframe><a class="card card--standard card--rows-1 card--align-center" href="https://www.tomsguide.com/membership"><div class="card-image-widthsetter"><p class="vanilla-image-block"  style="padding-top:56.25%;"><img style="width: 100%" class="card__image" src="https://cdn.mos.cms.futurecdn.net/CtyBASsPQAuEKTsTEJu6YL.jpg" alt="A screenshot from the Tom's Guide website reading 'Everything you get as a member'"></p></div><div class="card__content"><h3 class="card__title">Tom's Guide Club</h3><div class="card__description-wrapper"><div class="card__description"><p>Join Tom’s Guide Club for free, to earn badges, talk to other members and Tom’s writers, get exclusive deals and more.</p></div></div></div></a><p>On <a href="https://www.reddit.com/r/apple/comments/1ufm4dt/apple_hints_at_more_price_increases_coming_later/" target="_blank" rel="nofollow">another thread</a>, SwampYankee said, "I’d be surprised if they didn’t raise iPhone prices soon." This matches up with what analysts told my colleague Tom Pritchard about <a href="https://www.tomsguide.com/phones/iphones/analysts-warn-the-iphone-18-price-hike-could-be-worse-than-we-thought">iPhone 18 price hikes likely being worse than we thought</a>.</p><figure><blockquote class="reddit-card"  ><a href="https://www.reddit.com/r/apple/comments/1ufm4dt/comment/ott3eal">Comment</a><figcaption><cite> from <a href="https://www.reddit.com/r/apple">r/apple</a></cite></figcaption></blockquote></figure><script async src="//embed.redditmedia.com/widgets/platform.js" charset="UTF-8"></script><p>To which perthguppy added, "Also, announce unpopular stuff from the outgoing CEO now, and give the new CEO a better honeymoon period."</p><p>They may have a point.</p><figure><blockquote class="reddit-card"  ><a href="https://www.reddit.com/r/apple/comments/1ufdkf2/comment/ots7rid">Comment</a><figcaption><cite> from <a href="https://www.reddit.com/r/apple">r/apple</a></cite></figcaption></blockquote></figure><script async src="//embed.redditmedia.com/widgets/platform.js" charset="UTF-8"></script><p>Users on a thread titled '<a href="https://www.reddit.com/r/apple/comments/1ufdkf2/wall_street_isnt_buying_apples_unprecedented/">Wall Street isn't buying Apple's unprecedented price hikes on products</a>', though still generally disgruntled at the soaring RRPs, speculated that perhaps the increase was so steep because Apple had held off increasing prices for a couple of years, to avoid bad publicity.</p><p>Whatever the future holds for Apple prices (and let's face it, it's super unlikely to be any permanent reductions), perhaps it's time to consider shopping <a href="https://www.amazon.com/s?i=computers&bbn=10158976011&rh=n%3A13896617011%2Cp_123%3A110955&dc&ds=v1%3AyLwVIcN6y88tDZEghE5zPJbJ%2FUdQQsmKnGaDr1IdcsI&b%3Fref_=ascp_law&pf_rd_i=10158976011&pf_rd_m=ATVPDKIKX0DER&pf_rd_p=9ff52531-b27b-43c7-91d5-6041f806b75b&pf_rd_r=7WQHYEA7WYKCB6SZJP7F&pf_rd_s=merchandised-search-5&pf_rd_t=101&qid=1782831580&rnid=85457740011&ref=sr_nr_p_123_1" target="_blank" rel="nofollow">second-hand and refurbished Apple products</a> for the time being.</p><p>How do you feel about the price hikes? Let us 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><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 are official — here's how much more you'll pay for MacBooks and iPads now</a></li><li><a href="https://www.tomsguide.com/phones/iphones/analysts-warn-the-iphone-18-price-hike-could-be-worse-than-we-thought">Analysts warn the iPhone 18 price hike could be worse than we thought</a></li><li><a href="https://www.tomsguide.com/computing/laptops/macbook-neo-vs-chromebooks-which-budget-laptop-is-right-for-you">MacBook Neo vs. Chromebooks: Which budget laptop is right for you?</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple price hikes are official — here's how much more you'll pay for MacBooks and iPads now ]]></title>
                                                                                                <dc:content><![CDATA[ <p>We all knew this day was coming. Apple has officially confirmed in statements to publications like <a href="https://www.cnbc.com/2026/06/25/apple-macbook-ipad-price-hike-memory.html" target="_blank">CNBC</a> that the <a href="https://www.tomsguide.com/computing/the-ram-crisis-is-so-much-bigger-than-pcs-heres-the-rest-of-the-products-caught-in-the-crossfire">RAM crisis</a> has come for its devices and that MacBook and iPad devices are going up in price by as much as $500. Some high-end devices are going up by more than $1,000.</p><p>That's a significant bump for anyone looking to get their hands on Apple's latest hardware.</p><p>Apple's online store went down for a few minutes and came back with higher prices on many of its devices. </p><p>Of course, it wasn't done silently, as Apple offered a statement explaining the difficult decision to increase prices: "The consumer electronics industry is facing an unprecedented challenge. The rapid expansion of AI data centers has created an extraordinary surge in demand for memory and storage. We have never seen a component price increase this much, this quickly."</p><h2 id="new-mac-prices">New Mac prices</h2><p>Price increases are hitting across both U.S. and U.K., and since it's the same number on both sides of the pond, I can't help but feel especially hard done by in Britain given it's an apples-to-apples significantly larger number!</p><h3 class="article-body__section" id="section-u-s-increases"><span>U.S. Increases</span></h3><ul><li><strong>MacBook Neo: </strong>$699 (up from $599, $100 increase)</li><li><strong>13-inch MacBook Air: </strong>$1,299 (up from $1,099, $200 increase)</li><li><strong>15-inch MacBook Air: </strong>$1,499 (up from $1,299, $200 increase)</li><li><strong>M5 MacBook Pro: </strong>$1,999 (up from $1,699, $300 increase)</li><li><strong>M5 Pro MacBook Pro:</strong> $2,499 (up from $2,199, $300 increase)</li><li><strong>M5 Max MacBook Pro: </strong>$4,099 (up from $3,599, $500 increase)</li><li><strong>iMac:</strong> $1,499 (up from $1,299, $200 increase)</li><li><strong>M4 Max Mac Studio:</strong> $2,499 (up from $1,999, $500 increase)</li><li><strong>M3 Ultra Mac Studio: </strong>$5,299 (up from $3,999, $1,300 increase)</li></ul><h3 class="article-body__section" id="section-u-k-increases"><span>U.K. increases</span></h3><ul><li><strong>MacBook Neo: </strong>£699 (up from £599, £100 increase)</li><li><strong>13-inch MacBook Air: </strong>£1,299 (up from £1,099, £200 increase)</li><li><strong>15-inch MacBook Air: </strong>£1,499 (up from £1,299, £200 increase)</li><li><strong>M5 MacBook Pro: </strong>£1,999 (up from £1,699, £300 increase)</li><li><strong>M5 Pro MacBook Pro:</strong> £2,499 (up from £2,199, £300 increase)</li><li><strong>M5 Max MacBook Pro: </strong>£4,099 (up from £3,599, £500 increase)</li><li><strong>iMac:</strong> £1,499 (up from £1,299, £200 increase)</li><li><strong>M4 Max Mac Studio:</strong> £2,499 (up from £1,999, £500 increase)</li><li><strong>M3 Ultra Mac Studio: </strong>£5,299 (up from £3,999, £1,300 increase)</li></ul><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ORVPNO"></div>                            </div>                            <script src="https://kwizly.com/embed/ORVPNO.js" async></script><h2 id="new-ipad-prices">New iPad prices </h2><h3 class="article-body__section" id="section-u-s-increases"><span>U.S. Increases</span></h3><ul><li><strong>iPad: </strong>$449 (up from $349, $100 increase)</li><li><strong>11-inch iPad Air: </strong>$749 (up from $599, $150 increase)</li><li><strong>13-inch iPad Air:</strong> $949 (up from $749, $200 increase)</li><li><strong>11-inch iPad Pro:</strong> $1,199 (up from $999, $200 increase)</li><li><strong>13-inch iPad Pro: </strong>$1,499 (up from $1,299, $200 increase)</li><li><strong>iPad mini: </strong>$599 (up from $499, $100 increase)</li></ul><h3 class="article-body__section" id="section-u-k-increases"><span>U.K. Increases</span></h3><ul><li><strong>iPad: </strong>£429 (up from £329, £100 increase)</li><li><strong>11-inch iPad Air: </strong>£749 (up from £599, £150 increase)</li><li><strong>13-inch iPad Air:</strong> £949 (up from £749, £200 increase)</li><li><strong>11-inch iPad Pro:</strong> £1,199 (up from £999, £200 increase)</li><li><strong>13-inch iPad Pro: </strong>£1,499 (up from £1,299, £200 increase)</li><li><strong>iPad mini: </strong>£599 (up from £499, £100 increase)</li></ul><h2 id="apple-tv-homepod-and-vision-pro">Apple TV, HomePod and Vision Pro</h2><h3 class="article-body__section" id="section-u-s-increases"><span>U.S. Increases</span></h3><ul><li><strong>Apple TV 4K: </strong>$199 (up from $129, $70 increase)</li><li><strong>HomePod: </strong>$349 (up from $299, $50 increase)</li><li><strong>HomePod mini:</strong> $129 (up from $99, $30 increase)</li><li><strong>Vision Pro: </strong>$3,699 (up from $3,499, $200 increase)</li></ul><h3 class="article-body__section" id="section-u-k-increases"><span>U.K. Increases</span></h3><ul><li><strong>Apple TV 4K: </strong>£199 (up from £129, £70 increase)</li><li><strong>HomePod: </strong>£349 (up from £299, £50 increase)</li><li><strong>HomePod mini:</strong> £129 (up from £99, £30 increase)</li><li><strong>Vision Pro: </strong>£3,499 (up from £3,299, £200 increase)</li></ul><p>That's a lot of money, especially for ultra-high-end devices like the <a href="https://www.tomsguide.com/news/apple-mac-studio-who-is-apples-new-desktop-for">Mac Studio</a>, which is up to $2,499/£2,499. For MacBooks, the largest increase comes to the M5 Max MacBook Pro, which is going up by $500/£500. In those cases, it's a matter of ultra-expensive devices becoming even more expensive. </p><p>While not the biggest increase, the <a href="https://www.tomsguide.com/computing/macbooks/i-tested-the-macbook-neo-for-4k-video-editing-and-it-surprisingly-didnt-suck-until-it-did">MacBook Neo's</a> $100/£100 price jump could be the most impactful. The Neo is Apple's attempt to target more budget-conscious laptop shoppers who would otherwise opt for a cheap Windows laptop or Chromebook. An extra $100 there could potentially put the laptop out of reach for some buyers.</p><p>Thankfully, iPhone prices are unchanged with this adjustment, but who knows for how long that will last. Perhaps the company will hold off until the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-countdown-starts-now-5-rumored-upgrades-apple-could-be-giving-its-pro-models">iPhone 18 Pro </a>hits the market.</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/windows-fans-say-macbook-neos-8gb-ram-is-ridiculous-so-i-tested-it-and-the-results-are-shocking">Windows fans mocked MacBook Neo’s 8GB RAM — my testing shows why that’s wrong</a></li><li><a href="https://www.tomsguide.com/computing/macbooks/i-ditched-the-macbook-air-for-a-macbook-neo-for-48-hours-and-i-was-shocked">I ditched the MacBook Air for a MacBook Neo for 48 hours — and I'm shocked</a></li><li><a href="https://www.tomsguide.com/computing/laptops/macbook-neo-vs-chromebooks-which-budget-laptop-is-right-for-you">MacBook Neo vs. Chromebooks: Which budget laptop is right for you?</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/macbooks/apple-price-hikes-are-official-heres-how-much-more-youll-pay-for-macbooks-and-ipads-now</link>
                                                                            <description>
                            <![CDATA[ The news we all knew was coming has arrived: Apple is increasing the prices of iPad and Mac devices. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">Kgw79Y7woA4gjzpmfAeRBG</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/xvJgTcuknLbUZo9QawcVzi-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 25 Jun 2026 13:54:52 +0000</pubDate>                                                                                                                                <updated>Tue, 30 Jun 2026 13:53:32 +0000</updated>
                                                                                                                                            <category><![CDATA[MacBooks]]></category>
                                                    <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[Computing Peripherals]]></category>
                                                    <category><![CDATA[Laptops]]></category>
                                                    <category><![CDATA[Tablets]]></category>
                                                                                                <author><![CDATA[ dave.leclair@futurenet.com (Dave LeClair) ]]></author>                    <dc:creator><![CDATA[ Dave LeClair ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/fyx7qYdxPMTNBhdnMfNmaB-320-70.png ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Dave LeClair is the Managing News Editor for Tom&#039;s Guide, keeping his finger on the pulse of all things technology. He loves taking the complicated happenings in the tech world and explaining why they matter. Whether Apple is announcing the next big thing in the mobile space or a small startup advancing generative AI, Dave will apply his experience to help you figure out what&#039;s happening and why it&#039;s relevant to your life.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;Before Tom&#039;s Guide, Dave worked for publications like PCMag, Pocket-lint, MUO, How-To Geek, Digital Trends, and others. He started writing about technology professionally for MUO in 2011 and hasn&#039;t looked back since. In addition to news, you can find reviews, how-to pieces, shopping guides, and many other types of content with Dave&#039;s name attached.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/xvJgTcuknLbUZo9QawcVzi-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[macbook neo]]></media:description>                                                            <media:text><![CDATA[macbook neo]]></media:text>
                                <media:title type="plain"><![CDATA[macbook neo]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/xvJgTcuknLbUZo9QawcVzi-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>We all knew this day was coming. Apple has officially confirmed in statements to publications like <a href="https://www.cnbc.com/2026/06/25/apple-macbook-ipad-price-hike-memory.html" target="_blank">CNBC</a> that the <a href="https://www.tomsguide.com/computing/the-ram-crisis-is-so-much-bigger-than-pcs-heres-the-rest-of-the-products-caught-in-the-crossfire">RAM crisis</a> has come for its devices and that MacBook and iPad devices are going up in price by as much as $500. Some high-end devices are going up by more than $1,000.</p><p>That's a significant bump for anyone looking to get their hands on Apple's latest hardware.</p><p>Apple's online store went down for a few minutes and came back with higher prices on many of its devices. </p><p>Of course, it wasn't done silently, as Apple offered a statement explaining the difficult decision to increase prices: "The consumer electronics industry is facing an unprecedented challenge. The rapid expansion of AI data centers has created an extraordinary surge in demand for memory and storage. We have never seen a component price increase this much, this quickly."</p><h2 id="new-mac-prices">New Mac prices</h2><p>Price increases are hitting across both U.S. and U.K., and since it's the same number on both sides of the pond, I can't help but feel especially hard done by in Britain given it's an apples-to-apples significantly larger number!</p><h3 class="article-body__section" id="section-u-s-increases"><span>U.S. Increases</span></h3><ul><li><strong>MacBook Neo: </strong>$699 (up from $599, $100 increase)</li><li><strong>13-inch MacBook Air: </strong>$1,299 (up from $1,099, $200 increase)</li><li><strong>15-inch MacBook Air: </strong>$1,499 (up from $1,299, $200 increase)</li><li><strong>M5 MacBook Pro: </strong>$1,999 (up from $1,699, $300 increase)</li><li><strong>M5 Pro MacBook Pro:</strong> $2,499 (up from $2,199, $300 increase)</li><li><strong>M5 Max MacBook Pro: </strong>$4,099 (up from $3,599, $500 increase)</li><li><strong>iMac:</strong> $1,499 (up from $1,299, $200 increase)</li><li><strong>M4 Max Mac Studio:</strong> $2,499 (up from $1,999, $500 increase)</li><li><strong>M3 Ultra Mac Studio: </strong>$5,299 (up from $3,999, $1,300 increase)</li></ul><h3 class="article-body__section" id="section-u-k-increases"><span>U.K. increases</span></h3><ul><li><strong>MacBook Neo: </strong>£699 (up from £599, £100 increase)</li><li><strong>13-inch MacBook Air: </strong>£1,299 (up from £1,099, £200 increase)</li><li><strong>15-inch MacBook Air: </strong>£1,499 (up from £1,299, £200 increase)</li><li><strong>M5 MacBook Pro: </strong>£1,999 (up from £1,699, £300 increase)</li><li><strong>M5 Pro MacBook Pro:</strong> £2,499 (up from £2,199, £300 increase)</li><li><strong>M5 Max MacBook Pro: </strong>£4,099 (up from £3,599, £500 increase)</li><li><strong>iMac:</strong> £1,499 (up from £1,299, £200 increase)</li><li><strong>M4 Max Mac Studio:</strong> £2,499 (up from £1,999, £500 increase)</li><li><strong>M3 Ultra Mac Studio: </strong>£5,299 (up from £3,999, £1,300 increase)</li></ul><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ORVPNO"></div>                            </div>                            <script src="https://kwizly.com/embed/ORVPNO.js" async></script><h2 id="new-ipad-prices">New iPad prices </h2><h3 class="article-body__section" id="section-u-s-increases"><span>U.S. Increases</span></h3><ul><li><strong>iPad: </strong>$449 (up from $349, $100 increase)</li><li><strong>11-inch iPad Air: </strong>$749 (up from $599, $150 increase)</li><li><strong>13-inch iPad Air:</strong> $949 (up from $749, $200 increase)</li><li><strong>11-inch iPad Pro:</strong> $1,199 (up from $999, $200 increase)</li><li><strong>13-inch iPad Pro: </strong>$1,499 (up from $1,299, $200 increase)</li><li><strong>iPad mini: </strong>$599 (up from $499, $100 increase)</li></ul><h3 class="article-body__section" id="section-u-k-increases"><span>U.K. Increases</span></h3><ul><li><strong>iPad: </strong>£429 (up from £329, £100 increase)</li><li><strong>11-inch iPad Air: </strong>£749 (up from £599, £150 increase)</li><li><strong>13-inch iPad Air:</strong> £949 (up from £749, £200 increase)</li><li><strong>11-inch iPad Pro:</strong> £1,199 (up from £999, £200 increase)</li><li><strong>13-inch iPad Pro: </strong>£1,499 (up from £1,299, £200 increase)</li><li><strong>iPad mini: </strong>£599 (up from £499, £100 increase)</li></ul><h2 id="apple-tv-homepod-and-vision-pro">Apple TV, HomePod and Vision Pro</h2><h3 class="article-body__section" id="section-u-s-increases"><span>U.S. Increases</span></h3><ul><li><strong>Apple TV 4K: </strong>$199 (up from $129, $70 increase)</li><li><strong>HomePod: </strong>$349 (up from $299, $50 increase)</li><li><strong>HomePod mini:</strong> $129 (up from $99, $30 increase)</li><li><strong>Vision Pro: </strong>$3,699 (up from $3,499, $200 increase)</li></ul><h3 class="article-body__section" id="section-u-k-increases"><span>U.K. Increases</span></h3><ul><li><strong>Apple TV 4K: </strong>£199 (up from £129, £70 increase)</li><li><strong>HomePod: </strong>£349 (up from £299, £50 increase)</li><li><strong>HomePod mini:</strong> £129 (up from £99, £30 increase)</li><li><strong>Vision Pro: </strong>£3,499 (up from £3,299, £200 increase)</li></ul><p>That's a lot of money, especially for ultra-high-end devices like the <a href="https://www.tomsguide.com/news/apple-mac-studio-who-is-apples-new-desktop-for">Mac Studio</a>, which is up to $2,499/£2,499. For MacBooks, the largest increase comes to the M5 Max MacBook Pro, which is going up by $500/£500. In those cases, it's a matter of ultra-expensive devices becoming even more expensive. </p><p>While not the biggest increase, the <a href="https://www.tomsguide.com/computing/macbooks/i-tested-the-macbook-neo-for-4k-video-editing-and-it-surprisingly-didnt-suck-until-it-did">MacBook Neo's</a> $100/£100 price jump could be the most impactful. The Neo is Apple's attempt to target more budget-conscious laptop shoppers who would otherwise opt for a cheap Windows laptop or Chromebook. An extra $100 there could potentially put the laptop out of reach for some buyers.</p><p>Thankfully, iPhone prices are unchanged with this adjustment, but who knows for how long that will last. Perhaps the company will hold off until the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-countdown-starts-now-5-rumored-upgrades-apple-could-be-giving-its-pro-models">iPhone 18 Pro </a>hits the market.</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/windows-fans-say-macbook-neos-8gb-ram-is-ridiculous-so-i-tested-it-and-the-results-are-shocking">Windows fans mocked MacBook Neo’s 8GB RAM — my testing shows why that’s wrong</a></li><li><a href="https://www.tomsguide.com/computing/macbooks/i-ditched-the-macbook-air-for-a-macbook-neo-for-48-hours-and-i-was-shocked">I ditched the MacBook Air for a MacBook Neo for 48 hours — and I'm shocked</a></li><li><a href="https://www.tomsguide.com/computing/laptops/macbook-neo-vs-chromebooks-which-budget-laptop-is-right-for-you">MacBook Neo vs. Chromebooks: Which budget laptop is right for you?</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Best Prime Day iPad deals live for Day 3 — save up to $250 right now ]]></title>
                                                                                                <dc:content><![CDATA[ <p>You're in luck if you're hunting for one of the <a href="https://www.tomsguide.com/best-picks/best-ipad">best iPads</a>, as the entire line is currently discounted for <a href="https://www.tomsguide.com/live/news/savings-squad-prime-day-live-blog-amazon-best-buy-walmart">Amazon Prime Day</a>. Whether you want the regular iPad or the powerful MacBook Pro, you can save big.</p><p>For instance, the <a href="https://www.amazon.com/Apple-iPad-11-inch-Display-All-Day/dp/B0DZ77D5HL?th=1" target="_blank" rel="nofollow">11-inch iPad with the A16 chip is currently on sale for $50 off</a>. If you're looking for something a little more premium but still affordable, the <a href="https://www.amazon.com/Apple-iPad-Air-11-inch-M4/dp/B0GQVPX1PJ?th=1" target="_blank" rel="nofollow">11-inch iPad Air M4 is $80 off right now</a>. Those who want the most powerful Apple tablet yet can check out the <a href="https://www.amazon.com/dp/B0D3J776JL/ref=fs_a_ipt2_us2?th=1" target="_blank" rel="nofollow">13-inch iPad Pro M5 with 512GB for $250 off</a>.</p><p>Keep scrolling to check out the latest iPad deals at Amazon and other vendors. And if you're looking for more savings, check out our <a href="https://www.tomsguide.com/us/best-apple-deals,news-29273.html">best Apple deals</a> guide. Also, take a look at this week's top <a href="https://www.tomsguide.com/news/best-airpods-deals">AirPods sales</a> and <a href="https://www.tomsguide.com/news/cheap-macbook-deals-and-sales">MacBook deals</a>. Plus, bookmark our <a href="https://www.tomsguide.com/coupons/apple.com">Apple Store coupons</a> page for the best promo codes on all Apple devices.</p><h3 class="article-body__section" id="section-quick-links"><span>Quick links</span></h3><ul><li><a href="https://target.georiot.com/Proxy.ashx?tsid=45724&GR_URL=https%3A%2F%2Famazon.com%2Fstores%2Fpage%2F203FCFDF-1254-461E-9A68-F8813C0E0A64%3Ftag%3Dftr-tomsguide-us-20%26ascsubtag%3Dtomsguide-us-1498183392486865160-20" target="_blank" rel="nofollow"><strong>shop all iPads on sale at Amazon</strong></a></li><li><strong>11" iPad (A16, 128GB): </strong><a href="https://target.georiot.com/Proxy.ashx?tsid=45724&GR_URL=https%3A%2F%2Famazon.com%2FApple-iPad-11-inch-Display-All-Day%2Fdp%2FB0DZ77D5HL%3Ftag%3Dftr-tomsguide-us-20%26ascsubtag%3Dtomsguide-us-1498183392486865160-20" target="_blank" rel="nofollow"><strong>was $349 now $299 @ Amazon</strong></a></li><li><strong>Apple iPad Mini (A17 Pro, 128GB): </strong><a href="https://www.amazon.com/dp/B0DK3W4YHS?th=1" target="_blank" rel="nofollow"><strong>was $499 now $399 @ Amazon</strong></a><strong> </strong></li><li><strong>11" iPad Air (M4, 128GB): </strong><a href="https://www.amazon.com/Apple-iPad-Air-11-inch-M4/dp/B0GQVPX1PJ?th=1" target="_blank" rel="nofollow"><strong>was $599 now $519 @ Amazon</strong></a></li><li><strong>11" iPad Pro (M5, 256GB): </strong><a href="https://target.georiot.com/Proxy.ashx?tsid=45724&GR_URL=https%3A%2F%2Famazon.com%2Fdp%2FB0FWCXJVHN%3Ftag%3Dftr-tomsguide-us-20%26ascsubtag%3Dtomsguide-us-1498183392486865160-20" target="_blank" rel="nofollow"><strong>was $999 now $899 @ Amazon</strong></a></li><li><strong>13" iPad Pro (M5, 256GB): </strong><a href="https://target.georiot.com/Proxy.ashx?tsid=45724&GR_URL=https%3A%2F%2Famazon.com%2Fdp%2FB0FWD1MS82%3Ftag%3Dftr-tomsguide-us-20%26ascsubtag%3Dtomsguide-us-1498183392486865160-20" target="_blank" rel="nofollow"><strong>was $1,299 now $1,199 @ Amazon</strong></a></li><li><strong>13" iPad Pro (M5, 512GB): </strong><a href="https://www.amazon.com/dp/B0D3J776JL/ref=fs_a_ipt2_us2?th=1" target="_blank" rel="nofollow"><strong>was $1,499 now $1,249 @ Amazon</strong></a></li></ul><h3 class="article-body__section" id="section-best-ipad-deals"><span>Best iPad deals</span></h3><div class="product"><a data-dimension112="47792ed9-a603-40d7-8c1a-5d6a0de88788" data-action="Deal Block" data-label="11" iPad (WiFi/128GB)" data-dimension48="11" iPad (WiFi/128GB)" data-dimension25="$299" 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="47792ed9-a603-40d7-8c1a-5d6a0de88788" data-action="Deal Block" data-label='11" iPad (WiFi/128GB)' data-dimension48='11" iPad (WiFi/128GB)' data-dimension25="$299">11" iPad (WiFi/128GB): was $349 now $299</a></strong><br>The latest iPad features a larger 11-inch (2360 x 1640) screen, an A16 CPU, 12MP rear/front cameras, USB-C connectivity, and support for the Magic Keyboard Folio ($249). The base model features 128GB of storage, which doubles the capacity of its predecessor. It's available in 128GB, 256GB, and 512GB capacities, and each of those is also discounted for Prime Day.<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="47792ed9-a603-40d7-8c1a-5d6a0de88788" data-action="Deal Block" data-label="11" iPad (WiFi/128GB)" data-dimension48="11" iPad (WiFi/128GB)" data-dimension25="$299">View Deal</a></p></div><div class="product"><a data-dimension112="f5d942e9-0d09-4a88-b6a9-2506af98e371" data-action="Deal Block" data-label="iPad mini 7 (256GB)" data-dimension48="iPad mini 7 (256GB)" data-dimension25="$399" href="https://www.amazon.com/dp/B0DK3W4YHS?th=1" 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><strong><a href="https://www.amazon.com/dp/B0DK3W4YHS?th=1" target="_blank" rel="nofollow" data-dimension112="f5d942e9-0d09-4a88-b6a9-2506af98e371" data-action="Deal Block" data-label="iPad mini 7 (256GB)" data-dimension48="iPad mini 7 (256GB)" data-dimension25="$399">iPad mini 7 (256GB): was $499 now $399</a></strong><br>The iPad mini is getting a big discount during Prime Day. 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">iPad mini 7 review</a>, we said it delivers the full iPad experience in a tiny size. The 256GB and 512GB models are also on sale for $100 for Prime Day.<a class="view-deal button" href="https://www.amazon.com/dp/B0DK3W4YHS?th=1" target="_blank" rel="nofollow" data-dimension112="f5d942e9-0d09-4a88-b6a9-2506af98e371" data-action="Deal Block" data-label="iPad mini 7 (256GB)" data-dimension48="iPad mini 7 (256GB)" data-dimension25="$399">View Deal</a></p></div><h3 class="article-body__section" id="section-best-ipad-air-deals"><span>Best iPad Air deals</span></h3><div class="product"><a data-dimension112="8f95a6a6-ccc7-4583-b77e-45df0a311529" data-action="Deal Block" data-label="11" iPad Air (WiFi/128GB)" data-dimension48="11" iPad Air (WiFi/128GB)" data-dimension25="$519" href="https://www.amazon.com/Apple-iPad-Air-11-inch-M4/dp/B0GQVPX1PJ?th=1" 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?th=1" target="_blank" rel="nofollow" data-dimension112="8f95a6a6-ccc7-4583-b77e-45df0a311529" data-action="Deal Block" data-label='11" iPad Air (WiFi/128GB)' data-dimension48='11" iPad Air (WiFi/128GB)' data-dimension25="$519">11" iPad Air (WiFi/128GB): was $599 now $519</a></strong><br>Save $80 now on the new iPad Air for Prime Day, which packs Apple's faster M4 processor, an 11-inch LED (2360 x 1640) display, 128GB of storage, a 12MP rear camera, and a 12MP front camera. The tablet now supports Wi-Fi 7 as 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?th=1" target="_blank" rel="nofollow" data-dimension112="8f95a6a6-ccc7-4583-b77e-45df0a311529" data-action="Deal Block" data-label="11" iPad Air (WiFi/128GB)" data-dimension48="11" iPad Air (WiFi/128GB)" data-dimension25="$519">View Deal</a></p></div><div class="product"><a data-dimension112="db302dca-811d-4476-adcc-ef9d0c458ce0" data-action="Deal Block" data-label="iPad Air (13-inch, M4)" data-dimension48="iPad Air (13-inch, M4)" data-dimension25="$699" href="https://www.amazon.com/Apple-iPad-Air-13-inch-M4/dp/B0GQVLJGJH?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1368px;"><p class="vanilla-image-block" style="padding-top:109.65%;"><img id="5LtYHnqoh7QQJRLor82SEG" name="iPad Air 13 2024 deal block.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/5LtYHnqoh7QQJRLor82SEG-1920-80.jpg" mos="" align="middle" fullscreen="" width="1368" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Apple-iPad-Air-13-inch-M4/dp/B0GQVLJGJH?th=1" target="_blank" rel="nofollow" data-dimension112="db302dca-811d-4476-adcc-ef9d0c458ce0" data-action="Deal Block" data-label="iPad Air (13-inch, M4)" data-dimension48="iPad Air (13-inch, M4)" data-dimension25="$699">iPad Air (13-inch, M4): was $799 now $699</a></strong><br>This larger-size iPad Air sports the same M4 processor, but it's coupled with a 13-inch LED (2732 x 2048) display. Right now you can save $100 for Prime Day. Otherwise, it packs the same 128GB of storage, 12MP rear camera, and 12MP front camera. You also get Wi-Fi 7 support, Bluetooth 6, and Thread. The larger display and more potent CPU should make this a great tablet for gaming.<a class="view-deal button" href="https://www.amazon.com/Apple-iPad-Air-13-inch-M4/dp/B0GQVLJGJH?th=1" target="_blank" rel="nofollow" data-dimension112="db302dca-811d-4476-adcc-ef9d0c458ce0" data-action="Deal Block" data-label="iPad Air (13-inch, M4)" data-dimension48="iPad Air (13-inch, M4)" data-dimension25="$699">View Deal</a></p></div><h3 class="article-body__section" id="section-best-ipad-pro-deals"><span>Best iPad Pro deals</span></h3><div class="product"><a data-dimension112="e55da603-a99f-4778-b4f0-7cedfd51c988" data-action="Deal Block" data-label="iPad Pro M5 11" (Wi-Fi/256GB)" data-dimension48="iPad Pro M5 11" (Wi-Fi/256GB)" data-dimension25="$899" href="https://www.amazon.com/dp/B0FWCXJVHN" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1308px;"><p class="vanilla-image-block" style="padding-top:114.68%;"><img id="kVGdyTH2y4y4yS5Mwos2bg" name="iPad Pro M5 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/kVGdyTH2y4y4yS5Mwos2bg-1920-80.jpg" mos="" align="middle" fullscreen="" width="1308" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0FWCXJVHN" target="_blank" rel="nofollow" data-dimension112="e55da603-a99f-4778-b4f0-7cedfd51c988" data-action="Deal Block" data-label='iPad Pro M5 11" (Wi-Fi/256GB)' data-dimension48='iPad Pro M5 11" (Wi-Fi/256GB)' data-dimension25="$899">iPad Pro M5 11" (Wi-Fi/256GB): was $999 now $899</a></strong><br>This iPad Pro packs Apple's latest M5 processor paired with a stunning 11-inch Ultra Retina XDR OLED (2420 x 1668) display. The M5 processor features 9 CPU cores and 10 GPU cores. It also features a landscape 12MP Center Stage camera and a 12MP Wide camera with adaptive True Tone flash. In our <a href="https://www.tomsguide.com/computing/ipads/ipad-pro-m5-review">iPad Pro M5 review,</a> we said this is "the most powerful tablet ever." This is an equally powerful Prime Day deal at $100 off.<a class="view-deal button" href="https://www.amazon.com/dp/B0FWCXJVHN" target="_blank" rel="nofollow" data-dimension112="e55da603-a99f-4778-b4f0-7cedfd51c988" data-action="Deal Block" data-label="iPad Pro M5 11" (Wi-Fi/256GB)" data-dimension48="iPad Pro M5 11" (Wi-Fi/256GB)" data-dimension25="$899">View Deal</a></p></div><div class="product"><a data-dimension112="f2742dee-1c42-4c95-b7b8-375a2d2356a8" data-action="Deal Block" data-label="iPad Pro M5 13" (Wi-Fi/256GB)" data-dimension48="iPad Pro M5 13" (Wi-Fi/256GB)" data-dimension25="$1199" href="https://www.amazon.com/Apple-iPad-Pro-13-inch-Landscape/dp/B0FWD1MS82" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1308px;"><p class="vanilla-image-block" style="padding-top:114.68%;"><img id="kVGdyTH2y4y4yS5Mwos2bg" name="iPad Pro M5 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/kVGdyTH2y4y4yS5Mwos2bg-1920-80.jpg" mos="" align="middle" fullscreen="" width="1308" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Apple-iPad-Pro-13-inch-Landscape/dp/B0FWD1MS82" target="_blank" rel="nofollow" data-dimension112="f2742dee-1c42-4c95-b7b8-375a2d2356a8" data-action="Deal Block" data-label='iPad Pro M5 13" (Wi-Fi/256GB)' data-dimension48='iPad Pro M5 13" (Wi-Fi/256GB)' data-dimension25="$1199">iPad Pro M5 13" (Wi-Fi/256GB): was $1299 now $1199</a></strong><br>If you want a bigger screen, the 13-inch iPad Pro is hard to beat at $100 off for Prime Day right now. It features an Ultra Retina XDR OLED (2752 x 2064) display, along with all the other aforementioned features of the 11-inch model. The iPad Pro is for those who want the best of the best.<a class="view-deal button" href="https://www.amazon.com/Apple-iPad-Pro-13-inch-Landscape/dp/B0FWD1MS82" target="_blank" rel="nofollow" data-dimension112="f2742dee-1c42-4c95-b7b8-375a2d2356a8" data-action="Deal Block" data-label="iPad Pro M5 13" (Wi-Fi/256GB)" data-dimension48="iPad Pro M5 13" (Wi-Fi/256GB)" data-dimension25="$1199">View Deal</a></p></div><div class="product"><a data-dimension112="340f7c6d-8d5c-4a93-b968-e7ea6170834d" data-action="Deal Block" data-label="iPad Pro (13-inch, 512GB)" data-dimension48="iPad Pro (13-inch, 512GB)" data-dimension25="$1249" href="https://www.amazon.com/dp/B0D3J776JL/ref=fs_a_ipt2_us2?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1308px;"><p class="vanilla-image-block" style="padding-top:114.68%;"><img id="kVGdyTH2y4y4yS5Mwos2bg" name="iPad Pro M5 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/kVGdyTH2y4y4yS5Mwos2bg-1920-80.jpg" mos="" align="middle" fullscreen="" width="1308" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0D3J776JL/ref=fs_a_ipt2_us2?th=1" target="_blank" rel="nofollow" data-dimension112="340f7c6d-8d5c-4a93-b968-e7ea6170834d" data-action="Deal Block" data-label="iPad Pro (13-inch, 512GB)" data-dimension48="iPad Pro (13-inch, 512GB)" data-dimension25="$1249">iPad Pro (13-inch, 512GB): was $1499 now $1249</a></strong><br>This is the biggest discount we've seen so far at $250 off, and it's well worth it if you want an iPad Pro with more storage. Besides that, this model has the same specs as the 13-inch iPad Pro with 256GB of storage.<a class="view-deal button" href="https://www.amazon.com/dp/B0D3J776JL/ref=fs_a_ipt2_us2?th=1" target="_blank" rel="nofollow" data-dimension112="340f7c6d-8d5c-4a93-b968-e7ea6170834d" data-action="Deal Block" data-label="iPad Pro (13-inch, 512GB)" data-dimension48="iPad Pro (13-inch, 512GB)" data-dimension25="$1249">View Deal</a></p></div><h3 class="article-body__section" id="section-best-ipad-deals-accessories"><span>Best iPad deals accessories</span></h3><div class="product"><a data-dimension112="e3352fdd-a168-4d94-9c91-4baa6fa17305" data-action="Deal Block" data-label="Pencil Pro" data-dimension48="Pencil Pro" data-dimension25="$99" href="https://www.amazon.com/dp/B0D3J71RM7" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:661px;"><p class="vanilla-image-block" style="padding-top:90.62%;"><img id="8NaAt3NqWhFrzB2jAsKTfL" name="Apple Pencil Pro deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/8NaAt3NqWhFrzB2jAsKTfL-1920-80.jpg" mos="" align="middle" fullscreen="" width="661" height="599" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Apple Pencil Pro is Apple's latest iPad stylus. Its gestures and haptics allow you to seamlessly create without missing a beat. It features pixel-perfect precision, tilt and pressure sensitivity, and low latency. It attaches to your iPad magnetically for wireless pairing and charging. It's compatible with the iPad Pro 13-inch (M4), iPad Pro 11-inch (M4), iPad Air 13-inch (M2), iPad Air 11-inch (M2), and iPad mini (A17 Pro).<a class="view-deal button" href="https://www.amazon.com/dp/B0D3J71RM7" target="_blank" rel="nofollow" data-dimension112="e3352fdd-a168-4d94-9c91-4baa6fa17305" data-action="Deal Block" data-label="Pencil Pro" data-dimension48="Pencil Pro" data-dimension25="$99">View Deal</a></p></div><div class="product"><a data-dimension112="57b82807-cf19-47e2-b728-8dad2026c60c" data-action="Deal Block" data-label="Smart Folio (iPad Mini A17)" data-dimension48="Smart Folio (iPad Mini A17)" data-dimension25="$52" href="https://www.amazon.com/Apple-Smart-Folio-iPad-Mini/dp/B0DK3WBL4P" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1168px;"><p class="vanilla-image-block" style="padding-top:88.61%;"><img id="u2NQFncqhBZum6AXktTg4R" name="Apple Smart Folio for iPad Air.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/u2NQFncqhBZum6AXktTg4R-1920-80.jpg" mos="" align="middle" fullscreen="" width="1168" height="1035" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Apple-Smart-Folio-iPad-Mini/dp/B0DK3WBL4P" target="_blank" rel="nofollow" data-dimension112="57b82807-cf19-47e2-b728-8dad2026c60c" data-action="Deal Block" data-label="Smart Folio (iPad Mini A17)" data-dimension48="Smart Folio (iPad Mini A17)" data-dimension25="$52">Smart Folio (iPad Mini A17): was $59 now $52</a></strong><br>The Apple Smart Folio (for the iPad Mini A17 Pro and iPad Mini 6th generation)  is on sale for Prime Day. The case protects the front and back of your iPad Mini and can also be used for propping up your iPad.<a class="view-deal button" href="https://www.amazon.com/Apple-Smart-Folio-iPad-Mini/dp/B0DK3WBL4P" target="_blank" rel="nofollow" data-dimension112="57b82807-cf19-47e2-b728-8dad2026c60c" data-action="Deal Block" data-label="Smart Folio (iPad Mini A17)" data-dimension48="Smart Folio (iPad Mini A17)" data-dimension25="$52">View Deal</a></p></div><div class="product"><a data-dimension112="c88a2ac2-1539-455c-8485-7c274672f966" data-action="Deal Block" data-label="ZAGG iPad cases/keyboards: up to 35% off @ Amazon" data-dimension48="ZAGG iPad cases/keyboards: up to 35% off @ Amazon" href="https://www.amazon.com/stores/page/95B57F20-ECDA-432D-9A36-8F6767ABF8F8" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1019px;"><p class="vanilla-image-block" style="padding-top:96.66%;"><img id="mnQ5ank7EYesxjauvV63vF" name="ZAGG Pro Keys Wireless Keyboard and Detachable Case.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/mnQ5ank7EYesxjauvV63vF-1920-80.jpg" mos="" align="middle" fullscreen="" width="1019" height="985" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>ZAGG iPad cases/keyboards: </strong><a href="https://www.amazon.com/stores/page/95B57F20-ECDA-432D-9A36-8F6767ABF8F8" target="_blank" rel="nofollow" data-dimension112="c88a2ac2-1539-455c-8485-7c274672f966" data-action="Deal Block" data-label="ZAGG iPad cases/keyboards: up to 35% off @ Amazon" data-dimension48="ZAGG iPad cases/keyboards: up to 35% off @ Amazon" data-dimension25=""><strong>up to 35% off @ Amazon</strong></a>. <br>Amazon is taking up to 35% off select ZAGG iPad cases and accessories. After discount, prices start as low as $47. It's one of the best iPad deals we've seen on these accessories.<a class="view-deal button" href="https://www.amazon.com/stores/page/95B57F20-ECDA-432D-9A36-8F6767ABF8F8" target="_blank" rel="nofollow" data-dimension112="c88a2ac2-1539-455c-8485-7c274672f966" data-action="Deal Block" data-label="ZAGG iPad cases/keyboards: up to 35% off @ Amazon" data-dimension48="ZAGG iPad cases/keyboards: up to 35% off @ Amazon" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="d030fa65-2280-47ff-8b90-e74102420aa7" data-action="Deal Block" data-label="Combo Touch iPad Case" data-dimension48="Combo Touch iPad Case" data-dimension25="$186" href="https://www.amazon.com/dp/B0937Z63SR" 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:83.00%;"><img id="bbqTx2XZJfkBxwrvfHwSpK" name="logitech combo touch ipad pro 11 inch case.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/bbqTx2XZJfkBxwrvfHwSpK-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="1245" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0937Z63SR" target="_blank" rel="nofollow" data-dimension112="d030fa65-2280-47ff-8b90-e74102420aa7" data-action="Deal Block" data-label="Combo Touch iPad Case" data-dimension48="Combo Touch iPad Case" data-dimension25="$186">Combo Touch iPad Case: was $229 now $186</a></strong><br>This is our favorite iPad case. It's got an outstanding feature set, with a built-in keyboard and trackpad and dedicated shortcut buttons. It's pricy, but that's less of a problem now that it's on sale. This deal is for the 11-inch iPad Pro case.<a class="view-deal button" href="https://www.amazon.com/dp/B0937Z63SR" target="_blank" rel="nofollow" data-dimension112="d030fa65-2280-47ff-8b90-e74102420aa7" data-action="Deal Block" data-label="Combo Touch iPad Case" data-dimension48="Combo Touch iPad Case" data-dimension25="$186">View Deal</a></p></div><div class="product"><a data-dimension112="09f48bd7-6e48-4418-8d0d-67a9c625e730" data-action="Deal Block" data-label="Smart Keyboard for iPad" data-dimension48="Smart Keyboard for iPad" data-dimension25="$79" href="https://www.amazon.com/Apple-Smart-Keyboard-iPad-Generation/dp/B0863F5KCT" 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:78.73%;"><img id="KRkh8wJLEXPoiACGEjCHEZ" name="Apple Smart Keyboard for iPad.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/KRkh8wJLEXPoiACGEjCHEZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="1181" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Apple-Smart-Keyboard-iPad-Generation/dp/B0863F5KCT" target="_blank" rel="nofollow" data-dimension112="09f48bd7-6e48-4418-8d0d-67a9c625e730" data-action="Deal Block" data-label="Smart Keyboard for iPad" data-dimension48="Smart Keyboard for iPad" data-dimension25="$79">Smart Keyboard for iPad: was $159 now $79</a></strong><br>Amazon has the Apple Smart Keyboard on sale for $115. The keyboard is compatible with the iPad (7th and 8th generation) as well as the iPad Air (3rd generation). <a class="view-deal button" href="https://www.amazon.com/Apple-Smart-Keyboard-iPad-Generation/dp/B0863F5KCT" target="_blank" rel="nofollow" data-dimension112="09f48bd7-6e48-4418-8d0d-67a9c625e730" data-action="Deal Block" data-label="Smart Keyboard for iPad" data-dimension48="Smart Keyboard for iPad" data-dimension25="$79">View Deal</a></p></div><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=ipads&brands=Apple&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="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 { background-color: #5DAF08 !important; }              .tg-df-container .hawk-affiliate-link-deal-button:hover { background-color: #4a8c06 !important; }            `;            this.root.appendChild(style);          }                    if (this.regionSelect) {            this.regionSelect.value = params.get('region') || 'auto';            this.updatePriceDropdownCurrency();          }                    if (this.retailerSelect && params.has('retailer')) {            this.retailerSelect.value = params.get('retailer');          }                    if (params.has('brands')) {            const b = params.get('brands');            if (b) {              this.selectedBrands = b.split(',');            }          }                    if (this.offerTypeSelect && params.has('offer_type')) {            this.offerTypeSelect.value = params.get('offer_type');          }          if (params.has('bg_color')) {            const bg = params.get('bg_color');            if (bg === 'white') {              this.root.style.setProperty('background-color', '#ffffff', 'important');            } else if (bg === 'transparent') {              this.root.style.setProperty('background-color', 'transparent', 'important');            } else if (bg === 'light_blue') {              this.root.style.setProperty('background-color', '#E7F0FF', 'important');            }          } else {             this.root.style.removeProperty('background-color');          }                    if (params.has('view_mode')) {            if (this.viewModeSelect) {              this.viewModeSelect.value = params.get('view_mode');            } else {              this.viewModeOverride = params.get('view_mode');            }          }          if (this.rowsSelect && params.has('rows')) {            this.rowsSelect.value = params.get('rows');          }          if (params.has('price')) {            const priceVal = params.get('price');            if (this.priceFilter) {               // Try assigning it directly to select. If it's not present implicitly ignores               this.priceFilter.value = priceVal;            }            if (priceVal.includes('_')) {               const parts = priceVal.split('_');               if (this.customPriceMin && parts[0]) this.customPriceMin.value = parts[0];               if (this.customPriceMax && parts[1]) this.customPriceMax.value = parts[1];            }          }          if (this.discountFilter && params.has('min_discount_ratio')) {            // Need to convert back from ratio (e.g. 0.8) to select value (e.g. "20")            const ratioStr = params.get('min_discount_ratio');            const ratioFloat = parseFloat(ratioStr);            if (!isNaN(ratioFloat)) {               const percentage = Math.round((1 - ratioFloat) * 100);               this.discountFilter.value = percentage.toString();            }          }          if (this.sortSelect) {            this.sortSelect.value = params.get('sort') || 'discount_desc';          }          if (this.dealModeToggle && params.has('deal_mode')) {            this.dealModeToggle.checked = params.get('deal_mode') === 'true' || params.get('deal_mode') === '1';          }                    // Re-apply layout after params have updated control values          this.applyLayoutMode();                    if (params.get('search')) {            initialQuery = params.get('search');          } else if (params.get('q')) {            initialQuery = params.get('q');          } else if (params.get('query')) {            initialQuery = params.get('query');          }                    this.currentQuery = initialQuery;          if (this.searchInput) {            this.searchInput.value = this.currentQuery;          }                    if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {            this.fetchDeals(this.currentQuery);          } else {            this.render();          }        }        updatePriceDropdownCurrency() {          if (!this.priceFilter || !this.regionSelect) return;          const currencySymbols = {            'US': '$',            'GB': '£',            'CA': '$CA',            'AU': '$AU',            'DE': '€',            'FR': '€',            'IT': '€',          };          const area = this.getAreaCode();          const cur = currencySymbols[area || 'US'] || '$';                    const options = this.priceFilter.options;          for (let i = 0; i < options.length; i++) {            const opt = options[i];            if (opt.value === 'all') {              opt.innerText = 'All Prices';            } else if (opt.value === 'under50') {              opt.innerText = `Under ${cur}50`;            } else if (opt.value === '50_100') {              opt.innerText = `${cur}50 - ${cur}100`;            } else if (opt.value === '100_200') {              opt.innerText = `${cur}100 - ${cur}200`;            } else if (opt.value === '200_500') {              opt.innerText = `${cur}200 - ${cur}500`;            } else if (opt.value === 'over500') {              opt.innerText = `Over ${cur}500`;            }          }        }        populateBrandDropdown(values) {          if (!this.brandDropdown || !this.brandFilterWrapper) return;          this.brandFilterWrapper.style.display = 'flex'; // show the wrapper                    let html = '';          const allChecked = this.selectedBrands.length === 0 ? 'checked' : '';          const _div = '<' + '/div>';          const _span = '<' + '/span>';          html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="" ${allChecked} class="tg-df-brand-chk"> Any Brand${_div}`;                    values.forEach(v => {             if (!v.formatted_value || v.formatted_value === 'Any Brand') return;             const isChecked = this.selectedBrands.includes(v.formatted_value) ? 'checked' : '';             html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="${this.escapeHTML(v.formatted_value)}" ${isChecked} class="tg-df-brand-chk"> ${this.escapeHTML(v.formatted_value)} \x3Cspan style="color:var(--tg-df-text-muted);font-size:12px">(${v.count || 0})${_span}${_div}`;          });                    this.brandDropdown.innerHTML = html;                    // Re-bind listeners          const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');          chks.forEach(chk => {            chk.addEventListener('change', (e) => {              const val = e.target.value;              if (val === '') {                this.selectedBrands = [];              } else {                if (e.target.checked) {                   if (!this.selectedBrands.includes(val)) this.selectedBrands.push(val);                } else {                   this.selectedBrands = this.selectedBrands.filter(b => b !== val);                }              }                            if (this.selectedBrands.length === 0) {                 this.brandTrigger.innerText = 'Any Brand';              } else if (this.selectedBrands.length === 1) {                 this.brandTrigger.innerText = this.selectedBrands[0];              } else {                 this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;              }                            // Only call API if changed from UI interactions              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.updateURLParams();                 this.fetchDeals(this.currentQuery);              }            });          });                    // Update button text on load          if (this.selectedBrands.length === 0) {             this.brandTrigger.innerText = 'Any Brand';          } else if (this.selectedBrands.length === 1) {             this.brandTrigger.innerText = this.selectedBrands[0];          } else {             this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;          }        }        updateURLParams() {          const url = new URL(window.location);          if (this.currentQuery && this.currentQuery !== 'Gaming laptops') {            url.searchParams.set('q', this.currentQuery);          } else {            url.searchParams.delete('q');            url.searchParams.delete('search');            url.searchParams.delete('query');          }                    if (this.regionSelect && this.regionSelect.value !== 'auto') {            url.searchParams.set('region', this.regionSelect.value);          } else {            url.searchParams.delete('region');          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.set('retailer', this.retailerSelect.value);          } else {            url.searchParams.delete('retailer');          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.set('brands', this.selectedBrands.join(','));          } else {            url.searchParams.delete('brands');          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.set('offer_type', this.offerTypeSelect.value);          } else {            url.searchParams.delete('offer_type');          }                    if (this.viewModeSelect && this.viewModeSelect.value !== 'auto') {            url.searchParams.set('view_mode', this.viewModeSelect.value);          } else {            url.searchParams.delete('view_mode');          }                    if (this.rowsSelect && this.rowsSelect.value !== '12') {            url.searchParams.set('rows', this.rowsSelect.value);          } else {            url.searchParams.delete('rows');          }                    const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             url.searchParams.set('price', `${min}_${max}`);          } else if (this.priceFilter && this.priceFilter.value !== 'all') {            url.searchParams.set('price', this.priceFilter.value);          } else {            url.searchParams.delete('price');          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {               const ratio = (100 - v) / 100;               url.searchParams.set('min_discount_ratio', ratio.toString());            }          } else {            url.searchParams.delete('min_discount_ratio');          }                    if (this.sortSelect && this.sortSelect.value !== 'discount_desc') {            url.searchParams.set('sort', this.sortSelect.value);          } else {            url.searchParams.delete('sort');          }                    if (this.dealModeToggle && this.dealModeToggle.checked) {            url.searchParams.set('deal_mode', 'true');          } else {            url.searchParams.delete('deal_mode');          }                    window.history.replaceState({}, '', url);        }        bindEvents() {          const roundels = this.root.querySelectorAll('.tg-df-carousel-cat.original-hardcoded');          roundels.forEach(r => {             r.addEventListener('click', () => {                const q = r.getAttribute('data-query');                const pr = r.getAttribute('data-pr');                if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: q,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = q;                const label = this.root.querySelector('#tg-df-carousel-title-label');                if (label) label.textContent = 'Best ' + q;                if (this.priceFilter) this.priceFilter.value = pr || 'all';                if (this.discountFilter) this.discountFilter.value = '5';                if (this.searchInput) this.searchInput.value = q;                                roundels.forEach(ro => ro.classList.remove('active'));                r.classList.add('active');                this.fetchDeals(this.currentQuery);             });          });          const discBtns = this.root.querySelectorAll('.tg-df-carousel-filter-btn');          discBtns.forEach(b => {             b.addEventListener('click', () => {                const d = b.getAttribute('data-d');                const pr = b.getAttribute('data-pr');                const ot = b.getAttribute('data-ot');                let label = b.innerText ? b.innerText.trim() : '';                let filterType = 'unknown';                let filterVal = 'unknown';                if (d !== null) { filterType = 'discount'; filterVal = d; }                else if (pr !== null) { filterType = 'price'; filterVal = pr; }                else if (ot !== null) { filterType = 'offertype'; filterVal = ot; }                if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-${filterType}-${filterVal}`, name: 'Filter Button', label: label });                                if (d !== null) {                   if (this.discountFilter) this.discountFilter.value = this.discountFilter.value === d ? '0' : d;                } else if (pr !== null) {                   if (this.priceFilter) this.priceFilter.value = this.priceFilter.value === pr ? 'all' : pr;                } else if (ot !== null) {                   if (this.offerTypeSelect) this.offerTypeSelect.value = this.offerTypeSelect.value === ot ? 'all' : ot;                } else {                   if (this.discountFilter) this.discountFilter.value = '0';                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.offerTypeSelect) this.offerTypeSelect.value = 'all';                }                if (d === null && pr === null && ot === null && b.getAttribute("data-type") !== "custom") {                   discBtns.forEach(ro => ro.classList.remove('active'));                   b.classList.add('active');                } else if (b.getAttribute("data-type") !== "custom") {                   // Only operate on hardcoded buttons (those without data-type)                   discBtns.forEach(ro => {                      if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active');                   });                                      let makeActive = true;                   if (d !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-d') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (pr !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-pr') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (ot !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-ot') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   }                                      if (makeActive) b.classList.add('active');                                      // Check if anything is active, if not activate "All"                   let anyActive = false;                   discBtns.forEach(ro => { if (ro.classList.contains('active') && ro.getAttribute('data-type') !== 'custom') anyActive = true; });                   if (!anyActive) {                       discBtns.forEach(ro => { if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.add('active'); });                   }                }                                this.fetchDeals(this.currentQuery);             });          });          if (this.brandTrigger && this.brandDropdown) {            this.brandTrigger.addEventListener('click', () => {              this.brandDropdown.classList.toggle('active');            });            document.addEventListener('click', (e) => {              if (this.brandFilterWrapper && !e.composedPath().includes(this.brandFilterWrapper)) {                this.brandDropdown.classList.remove('active');              }            });          }          let debounceTimer;          if(this.searchInput) {            this.searchInput.addEventListener('input', (e) => {              clearTimeout(debounceTimer);              const query = e.target.value.trim();              this.currentQuery = query;              if (this.getViewMode() === 'savings_squad' && this.autocompleteDropdown && this.airedaleTags && query.length > 0) {                 const matches = this.airedaleTags.filter(t => t.toLowerCase().includes(query.toLowerCase()) && t.toLowerCase() !== query.toLowerCase()).slice(0, 5);                 if (matches.length > 0) {                    this.autocompleteDropdown.innerHTML = matches.map(m => `\x3Cdiv class="tg-df-autocomplete-item" data-tag="${this.escapeHTML(m)}">${this.escapeHTML(m)}<` + `/div>`).join('');                    this.autocompleteDropdown.classList.add('active');                 } else {                    this.autocompleteDropdown.classList.remove('active');                 }              } else if (this.autocompleteDropdown) {                 this.autocompleteDropdown.classList.remove('active');              }              debounceTimer = setTimeout(() => {                this.updateURLParams();                if (query.length > 2) {                  this.fetchDeals(query);                } else if (query.length === 0) {                  this.deals = [];                  this.render();                }              }, 400);            });            this.searchInput.addEventListener('keypress', (e) => {              if (e.key === 'Enter') {                if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');                clearTimeout(debounceTimer);                const query = e.target.value.trim();                this.currentQuery = query;                this.activeDealTag = null;                trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                this.updateURLParams();                if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                   this.fetchDeals(query);                }              }            });          }          if (this.autocompleteDropdown) {             this.autocompleteDropdown.addEventListener('click', (e) => {                const item = e.target.closest('.tg-df-autocomplete-item');                if (item) {                   const tag = item.getAttribute('data-tag');                   this.currentQuery = tag;                   if (this.searchInput) this.searchInput.value = tag;                   this.activeDealTag = tag;                   this.autocompleteDropdown.classList.remove('active');                   this.updateURLParams();                   this.fetchDeals(tag);                }             });             document.addEventListener('click', (e) => {               if (this.autocompleteDropdown && this.searchInput && !e.composedPath().includes(this.searchInput) && !e.composedPath().includes(this.autocompleteDropdown)) {                 this.autocompleteDropdown.classList.remove('active');               }             });          }          if (this.searchBtn) {            this.searchBtn.addEventListener('click', () => {              if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');              clearTimeout(debounceTimer);              const query = this.searchInput.value.trim();              trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });              this.activeDealTag = null;              this.currentQuery = query;              this.updateURLParams();              if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.fetchDeals(query);              }            });          }          if(this.sortSelect) this.sortSelect.addEventListener('change', () => {            trackElementInteraction({ id: `sort-option-${this.sortSelect.value}`, name: 'Sort', label: `Sort: ${this.sortSelect.options[this.sortSelect.selectedIndex].text}` });            this.updateURLParams();            if (this.deals.length > 0) {              this.sortData();              this.render();            }          });                    const priceFilter = this.root.querySelector('#tg-df-price-filter');          if (priceFilter) {            this.priceFilter = priceFilter;            this.priceFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-price-${this.priceFilter.value}`, name: 'Price', label: this.priceFilter.options[this.priceFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          const updateCustomPrice = () => {             this.updateURLParams();             if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);             } else {                this.render();             }          };          if (this.customPriceMin) {             this.customPriceMin.addEventListener('change', updateCustomPrice);             this.customPriceMin.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          if (this.customPriceMax) {             this.customPriceMax.addEventListener('change', updateCustomPrice);             this.customPriceMax.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          const discountFilter = this.root.querySelector('#tg-df-discount-filter');          if (discountFilter) {            this.discountFilter = discountFilter;            this.discountFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-discount-${this.discountFilter.value}`, name: 'Discount', label: this.discountFilter.options[this.discountFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          if (this.categoryFilter) {            this.categoryFilter.addEventListener('change', (e) => {               const val = e.target.value === 'all' ? null : e.target.value;               this.activeDealTag = val;               this.fetchSavingsSquad();            });          }                    if (this.settingsToggle) {            this.settingsToggle.addEventListener('click', () => {              const o = this.settingsPanel.classList.toggle('active');              this.settingsBackdrop.classList.toggle('active');              if (o) trackElementInteraction({ id: 'filter-open', name: 'Filters', label: 'Open filters' });            });          }                    if (this.settingsBackdrop) {            this.settingsBackdrop.addEventListener('click', () => {              this.settingsPanel.classList.remove('active');              this.settingsBackdrop.classList.remove('active');            });          }                    if (this.regionSelect) {            this.regionSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-region-${this.regionSelect.value}`, name: 'Region', label: this.regionSelect.options[this.regionSelect.selectedIndex].text });              this.updateURLParams();              this.updatePriceDropdownCurrency();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.retailerSelect) {            this.retailerSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-merchant-${this.retailerSelect.value}`, name: 'Retailer', label: this.retailerSelect.options[this.retailerSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.offerTypeSelect) {            this.offerTypeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-offertype-${this.offerTypeSelect.value}`, name: 'Offer Type', label: this.offerTypeSelect.options[this.offerTypeSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.viewModeSelect) {            this._prevViewMode = this.viewModeSelect.value;            this.viewModeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-viewmode-${this.viewModeSelect.value}`, name: 'View Mode', label: this.viewModeSelect.options[this.viewModeSelect.selectedIndex].text });                            // Reset all active toggles and filters to prevent config carry-over              this.selectedBrands = [];              if (this.brandTrigger) this.brandTrigger.innerText = 'Select Brands';              if (this.brandDropdown) {                const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                chks.forEach(chk => { chk.checked = false; });              }              if (this.priceFilter) this.priceFilter.value = 'all';              if (this.customPriceMin) this.customPriceMin.value = '';              if (this.customPriceMax) this.customPriceMax.value = '';              if (this.sortSelect) this.sortSelect.value = this.viewModeSelect.value === 'savings_squad' ? 'date_desc' : 'discount_desc';              if (this.discountFilter) this.discountFilter.value = '0';              if (this.retailerSelect) this.retailerSelect.value = '';              if (this.offerTypeSelect) this.offerTypeSelect.value = '';              if (this.rowsSelect) this.rowsSelect.value = '12';              if (this.categoryFilter) this.categoryFilter.value = 'all';              this.activeDealTag = null;              this.updateURLParams();              this.applyLayoutMode();                            if (this.getViewMode() === 'savings_squad' || this._prevViewMode === 'savings_squad') {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }              this._prevViewMode = this.viewModeSelect.value;            });          }                    if (this.rowsSelect) {            this.rowsSelect.addEventListener('change', () => {              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.dealModeToggle) {            this.dealModeToggle.addEventListener('change', () => {              this.updateURLParams();              this.render();            });          }          if (this.editorModeToggle) {             this.editorModeToggle.addEventListener('change', (e) => {                this.editorMode = e.target.checked;                this.render();                this.updateFloatingCopyBar();             });          }          if (this.editorCopyBtn) {             this.editorCopyBtn.addEventListener('click', () => {                this.copySelectedDealsToCMS();             });          }          if (this.editorClearBtn) {             this.editorClearBtn.addEventListener('click', () => {                this.selectedDeals.clear();                this.render();                this.updateFloatingCopyBar();             });          }          if (this.grid) {            this.grid.addEventListener('change', (e) => {               if (e.target.classList.contains('tg-df-deal-checkbox')) {                  const dealId = e.target.getAttribute('data-id');                  if (e.target.checked) {                     const dealObj = this.deals.find(d => d.id === dealId);                     if (dealObj) this.selectedDeals.set(dealId, dealObj);                  } else {                     this.selectedDeals.delete(dealId);                  }                  this.updateFloatingCopyBar();               }            });            this.grid.addEventListener('click', (e) => {              const dealCard = e.target.closest('[data-action="deal-click"]');              const similarCard = e.target.closest('[data-action="view-similar-click"]');              const cardLink = dealCard || similarCard;              if (cardLink) {                const productName = cardLink.getAttribute('data-product-name');                const merchantName = cardLink.getAttribute('data-merchant-name');                const productId = cardLink.getAttribute('data-analytics-id');                const price = parseFloat(cardLink.getAttribute('data-price')) || null;                const prevPriceStr = cardLink.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = cardLink.getAttribute('data-original-link');                const rewrittenLink = cardLink.getAttribute('href');                const revenueId = cardLink.getAttribute('data-revenue-id');                const index = parseInt(cardLink.getAttribute('data-index'), 10) || 0;                const inStock = cardLink.getAttribute('data-in-stock') === 'true';                const totalText = cardLink.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: cardLink.getAttribute('data-model-id') || null,                    matchId: cardLink.getAttribute('data-match-id') || null,                    brand: cardLink.getAttribute('data-model-brand') || null,                    parent: cardLink.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: cardLink.getAttribute('data-merchant-id') || null,                    network: cardLink.getAttribute('data-merchant-network') || null,                    url: cardLink.getAttribute('data-merchant-url') || null,                    name: merchantName                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: normalizeCurrency(this.escapeHTML(cardLink.getAttribute('data-currency') || '$'))                };                if (dealCard) {                  trackDealClick(trackingParams);                } else {                  trackViewSimilarClick(trackingParams);                }              }              const couponsBtn = e.target.closest('[data-action="coupons-click"]');              if (couponsBtn) {                trackElementInteraction({                  id: 'product-card-show-coupons',                  name: 'Coupons',                  label: `Product card coupons: ${couponsBtn.getAttribute('data-merchant')}`                });              }            });          }          this.setupScrollListeners();        }        setupScrollListeners() {          const containers = [             this.root.querySelector('.tg-df-carousel-roundels'),             this.root.querySelector('.tg-df-carousel-filters-wrap'),             this.root.querySelector('#tg-df-grid')          ];                    containers.forEach(container => {             if (!container) return;                          const checkScroll = () => {                if (!container.parentElement) return;                const leftBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-left');                const rightBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-right');                                if (leftBtn) {                   if (container.scrollLeft <= 5) leftBtn.style.display = 'none';                   else leftBtn.style.display = 'flex';                }                                if (rightBtn) {                   if (container.scrollWidth <= container.clientWidth) {                       rightBtn.style.display = 'none';                   } else if (container.scrollLeft >= container.scrollWidth - container.clientWidth - 5) {                       rightBtn.style.display = 'none';                   } else {                       rightBtn.style.display = 'flex';                   }                }             };                          container.addEventListener('scroll', checkScroll);             checkScroll();                          window.addEventListener('resize', checkScroll);                          const observer = new MutationObserver(checkScroll);             observer.observe(container, { childList: true, subtree: true, characterData: false });          });        }        get widgetTypeName() {          const mode = this.viewModeSelect ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');          switch(mode) {              case 'carousel': return 'Carousel';              case 'savings_squad': return 'Savings Squad';              case 'grid': return 'Grid';              case 'row': return 'Row';              default: return 'Auto Collection';          }        }        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("LCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNQ0KUm91bmRlbCB0ZXh0LEFsbCxUVnMsRm9vdHdlYXIsQXBwYXJlbCxNYXR0cmVzZXMsQXBwbGlhbmNlcyxXZWFyYWJsZSB0ZWNoLEhlYWRwaG9uZXMsU21hcnQgSG9tZSxTcGVha2VycyxMYXB0b3BzLFRhYmxldHMsQ29tcHV0aW5nLFBob25lcyxHYW1pbmcsTGVnbw0KUm91bmRlbCBpbWFnZSxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL2FpLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3R2cy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvN2IzYTIyNGIwNzk2M2M2MjdiNmI5MDliZDc4MzM4MzZlMDJmZjgxOS5qcGcud2VicCxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy84NGRhYzVkNDhlZDJkNDQ4NTU5ZWJhNjdhY2U4MzE0Y2M2N2NjZDk0LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vcHJvZHVjdHMvY2Fyb3VzZWwvbWF0dHJlc3Nlcy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvNzY4ZTk3Y2ViMDcxODAxZmFlMjA5MTBkMDgyMGIxNmY3NDdhZjkzOS5qcGcud2VicCxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3dlbGxuZXNzLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL2hlYWRwaG9uZXMuanBnLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzg5NTM1YmVlYmUyMGRiYmQ0YTM0NmQ2ZDZiZGZlOTFkOGE4ODRhMjEuanBnLndlYnAsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9hdWRpby5qcGcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9sYXB0b3BzLmpwZyxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy8yMzk3NTY0ZWQ3YTVmZjk0N2U5YjZiMzBlNTRmNDc0OTRiODQxZjg5LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vcHJvZHVjdHMvY2Fyb3VzZWwvY29tcHV0aW5nLmpwZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3Bob25lcy5wbmcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9nYW1pbmcucG5nLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzRmNmM2MjFjYWMwYmMxYTg1ZDU5M2UzNTk0YmE1YjM0OWVmZmQyOTIuanBnLndlYnANClNlYXJjaCBRdWVyeSxFdmVyeXRoaW5nLFRlbGV2aXNpb25zLCJTbmVha2VycywgcnVubmluZyBzaG9lcywgc2FuZGFscyIsQ2xvdGhpbmcsTWF0dHJlc3NlcyxIb21lIEFwcGxpYW5jZXMsV2VhcmFibGVzICYgRml0bmVzcyBUZWNoLEhlYWRwaG9uZXMsSG9tZSBUZWNoLFNwZWFrZXJzLExhcHRvcHMsVGFibGV0cyxDb21wdXRpbmcsUGhvbmVzLEdhbWluZyxDb25zdHJ1Y3Rpb24gVG95cw0KRGlzY291bnQgQW1vdW50LG1pbiA1JSxtaW4gMTAlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUNClByaWNlIFJhbmdlLCwsLCxtaW4gJDQwMCwsLCxtaW4gJDI1LCxtaW4gJDMwMCwsLG1pbiAkMTAwLCwNCkJyYW5kIFNlbGVjdGlvbiwsLCwsLCwsLCwsLCwsLCwNCkZpbHRlciBidXR0b25zLCwsLCwsLCwsLCwsLCwsLA0KMSxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMNCjIsQW1hem9uIGRlYWxzLFVuZGVyICQxMDAwLDUwJSBvZmYsQWRpZGFzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsNTAlIG9mZixBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscw0KMyxPdmVyICQ0MDAsVW5kZXIgJDUwMCxIb2thLE5pa2UsU2FhdHZhLE5pbmphLDQwJSBvZmYsSkxhYiwsSkJMLERlbGwsLEFzdXMsQXBwbGUsQ29uc29sZXMsU3RhciBXYXJzDQo0LFVuZGVyICQxMDAwLDUwJSBvZmYsU2tlY2hlcnMsVW5kZXIgQXJtb3VyLEhlbGl4LFNoYXJrLEdhcm1pbixBbmtlciBTb3VuZGNvcmUsUmluZyxTb25vcyxBcHBsZSxBcHBsZSxUUC1saW5rLFNhbXN1bmcsQWNjZXNzb3JpZXMsVW5kZXIgJDI1DQo1LFVuZGVyICQ1MDAsTEcsQXNpY3MsQ29sdW1iaWEsRHJlYW1DbG91ZCxLZXVyaWcsQXBwbGUsU29ueSxHb3ZlZSxUcmliaXQsTGVub3ZvLFNhbXN1bmcsRWVybyxHb29nbGUsR2FtZXMsVW5kZXIgJDUwDQo2LDUwJSBvZmYsU2Ftc3VuZyxOaWtlLFBhdGFnb25pYSxOZWN0YXIsRGUnTG9uZ2hpLEFtYXpmaXQsQXBwbGUsS2FzYSBzbWFydCxTb255LEFsaWVud2FyZSxUQ0wsTmV0Z2VhcixNb3Rvcm9sYSxOaW50ZW5kbyxCb3RhbmljYWxzDQo3LEFtYXpvbixIaXNlbnNlLE5ldyBCYWxhbmNlLEFyYyd0ZXJ5eCxUZW1wdXItcGVkaWMsRHlzb24sRml0Yml0LEJlYXRzLFBoaWxpcHMgSHVlLEFua2VyLEFjZXIsT25lUGx1cyxEZWxsLE9uZVBsdXMsU29ueSxEaXNuZXkNCjgsQXBwbGUsVENMLEFkaWRhcyxDYXJoYXJ0dCxCZWFyLEJpc3NlbGwsU2Ftc3VuZyxFYXJmdW4sQmxpbmssQmVhdHMsTVNJLE1pY3Jvc29mdCxBY2VyLE5vdGhpbmcsWGJveCxNYXJ2ZWwNCjksLFNvbnksU2F1Y29ueSxUaGUgTm9ydGggRmFjZSxTaWVuYSxOdXRyaWJ1bGxldCxPdXJhLFNhbXN1bmcsR29vZ2xlIE5lc3QgLE1hcnNoYWxsLFNhbXN1bmcsTGVub3ZvLExlbm92bywsLFBva2Vtb24NCjEwLCxSb2t1LEJpcmtlbnN0b2NrLENSWiBZb2dhLFdpbmtCZWRzLEJsYWNrIGFuZCBEZWNrZXIsUmluZ2Nvbm4sQ01GLEV1ZnksU2Ftc3VuZyxNaWNyb3NvZnQsUmVNYXJrYWJsZSxBbGllbndhcmUsLCwNCjExLCwsQnJvb2tzLFRoZSBHeW0gUGVvcGxlLEJyb29rbHluIGJlZGRpbmcsTmVzcHJlc3NvLCwxTW9yZSxBcmxvLCxSYXplciwsQ29yc2FpciwsLA0KMTIsLCxDcm9jcywsRWlnaHQgU2xlZXAsQ3Vpc2luYXJ0LCxKQkwsLCwsLEhQLCwsDQpOb3RlcywsLCwsLCwsLCwsLCwsLCwNCiwsIlByaW9yaXRpc2UgYmlnZ2VzdCAlLyQgZGlzY291bnQsIFR2cyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiB0aGUgbW9zdCBwb3B1bGFyIGV2ZW4gaWYgdGhleSBhcmUgc3RpbGwgZXhwZW5zaXZlIiwiTm8gcGF0dGVybiB0byBwcmljaW5nL2Rpc2NvdW50LCByZWFkZXJzIG1haW5seSBzaG9wIGJ5IGJyYW5kL3JlY29nbmlzYWJsZSBzaG9lcyIsIk5vIHBhdHRlcm4gdG8gcHJpY2luZy9kaXNjb3VudCwgcmVhZGVycyBtYWlubHkgc2hvcCBieSBicmFuZCIsIkEgbGFiZWwgd2lsbCBkZWZpbml0ZWx5IGhlbHAgaGVyZSBlLmcuIGJlc3QgZm9yIHNpZGUgc2xlZXBlciwgYmVzdCBtZW1vcnkgZm9hbSIsIkFwcGxpYW5jZXMgaXMgYSBiaWcgY2F0ZWdvcnksIGlzIGl0IHBvc3NpYmxlIHRvIHNwbGl0IGludG8ga2l0Y2hlbiBhcHBsaWFuY2VzLCBmbG9vcmNhcmUsIGFpciBoZWFsdGgvY29vbGluZz8gT3Igc2ltaWxhciIsIkZvY3VzIG9uIHZhbHVlIGZvciBtb25leSwgR2FybWlucyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiBwb3B1bGFyIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIHN0aWxsICQ1MDAiLCwsLCxJbmNsdWRlIEtpbmRsZXMsSSB3b3VsZCBpbmNsdWRlIHdpZmkgcm91dGVycyBoZXJlIGluc3RlYWQgb2Ygc21hcnQgaG9tZSxDYW4gd2Ugc3VyZmFjZSBwaG9uZSBwcm92aWRlciBkZWFscz8gVC1tb2JpbGUgYW5kIHZlcml6b24gd291bGQgbWFrZSBhIGxvdCBtb3JlIG1vbmV5IHRoYW4gQW1hem9uLCwNCiwsaGF2aW5nIGEgJ2Jlc3QgZm9yJyBsYWJlbCB3b3VsZCBiZSBoZWxwZnVsIGUuZy4gYmVzdCBmb3IgYnJpZ2h0IHJvb20sQ2FuIHdlIHN0b3Aga2lkcyBzaG9lcyBmcm9tIHB1bGxpbmcgdGhyb3VnaD8sIldpbGwgdGhpcyBpbmNsdWRlIGFjY2Vzc29yaWVzIGUuZy4gY2FwcywgYmFncywgaWYgc28gbWFrZSBzdXJlIHRoZXNlIGFyZSBtaXhlZCB0aHJvdWdob3V0IGNsb3RoaW5nIGRlYWxzIixXaWxsIHRoaXMgaW5jbHVkZSB0b3BwZXJzIGFuZCBwaWxsb3dzPyBTZWVpbmcgbW9yZSBtb21lbnR1bSB3aXRoIHRoaXMgY2F0ZWdvcnkgcmVjZW50bHkgc28gYSBiZWRkaW5nIHRhYiBtaWdodCB3b3JrLCwiTmVlZCB0byBtYWtlIHN1cmUgYmFuZHMsIHNjcmVlbiBwcm90ZWN0b3JzIGV0Yy4gZG9uJ3QgcHVsbCBpbnRvIGhlcmUiLCwsLCwsLCwsDQosLCJQcmlvcml0aXNlIDY1JycgYW5kIDU1JyBpbmNoIFRWcywgdGhlbiBiaWdnZXIgc2NyZWVucyBiZWZvcmUgdGhlIHNtYWxsZXIgc2l6ZXMiLCwsUXVlZW4gaXMgdGhlIG1vc3QgcG9wdWxhciBzaXplIGluIHRoZSBVUyAtIHByaW9yaXRpc2UgZGVhbHMgZm9yIHRoaXMgc2l6ZSwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpDYXRlZ29yaWVzIHRvIGNvbnNpZGVyLCxQcm9kdWN0cyBpbmNsdWRlZCwsLCwsLCwsLCwsLCwsDQpVbmRlciAkNTA/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.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12;          } else {             this.displayLimit += (this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12;          }                    try {            if (this.getViewMode() === 'savings_squad') {               await this.fetchSavingsSquad(append);            } else {               if (this.isBroadQuery(query)) {                 await this.fetchAdviserDeals(query, append);               } else {                 await this.fetchHawkDeals(query, append);                 if (this.deals.length === 0) {                   await this.fetchAdviserDeals(query, append);                 }               }            }          } catch (error) {            console.warn("[Tom's Guide Widget] Fetch error:", error);            this.showError();          }        }        async fetchSavingsSquad() {          let topArticles = this.airedaleArticles;          if (!topArticles) {            const airedaleUrl = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`;            let res;            try {               res = await fetch(airedaleUrl);            } catch(e) {               try { res = await fetch(`https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`); } catch (err) { console.warn("Fallback fetch failed", err); return; }            }            if (!res.ok) throw new Error('Airedale API Error');            const articles = await res.json();            topArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);            this.airedaleArticles = topArticles;                        let tagCounts = {};            topArticles.forEach((a) => {              let articleTags = new Set();              if (a.articlecategory && Array.isArray(a.articlecategory)) {                 a.articlecategory.forEach((t) => articleTags.add(t));              }              articleTags.forEach(t => {                 tagCounts[t] = (tagCounts[t] || 0) + 1;              });            });                        this.airedaleTags = Object.keys(tagCounts).sort((a, b) => tagCounts[b] - tagCounts[a]);            this.airedaleTagCounts = tagCounts;          }                    let targetArticles = topArticles;          if (this.activeDealTag) {             const cleanTag = this.activeDealTag.toLowerCase().replace(/&/g, '').replace(/[^a-z0-9]+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');             const encodedTag = encodeURIComponent(cleanTag);             const url = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50&articleCategoryHandle=${encodedTag}`;             try {                const res = await fetch(url);                if (res.ok) {                   const articles = await res.json();                   targetArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);                }             } catch(e) {                console.warn("Failed to fetch by activeDealTag", e);             }          }          let extractedDeals = [];          let dynamicBrandsCounts = {};                    targetArticles.forEach((article) => {             if (!article.articlepage) return;                          let pageData = [];             try {                pageData = JSON.parse(article.articlepage[0]);             } catch(e){ console.warn(e); }                          const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');                          savingsSquad.forEach((block, idx) => {                const data = block.data || {};                const isFeatured = block.type === 'featured-product';                                const link = data.link || {};                const priceObj = data.price || {};                const image = data.image || {};                                if (data.brand) {                   data.brand = data.brand.replace(/^\d+\.\s*/, '').trim();                   dynamicBrandsCounts[data.brand] = (dynamicBrandsCounts[data.brand] || 0) + 1;                }                const externalUrl = isFeatured ? data.url : (link.href || null);                let summaryTitle = isFeatured ? (data.name || data.brand) : (data.productName || link.label || article.articlename);                let description = isFeatured ? (data.strapline || '') : (data.text || '');                                if (!isFeatured && !data.productName && data.text) {                   const brSplit = data.text.split(new RegExp('\x3Cbr\\s*\\/?\\x3E', 'i'));                   if (brSplit.length > 1) {                     summaryTitle = brSplit[0].replace(/<[^>]+>/g, '').trim();                     description = brSplit.slice(1).join(' ').replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').trim();                   } else {                     const match = data.text.match(/\x3Cstrong>(.*?)<\/strong>/);                     if (match) {                       summaryTitle = match[1].replace(/<[^>]+>/g, '').trim();                       if (summaryTitle.endsWith(':')) summaryTitle = summaryTitle.slice(0, -1);                     }                   }                }                                let imageUrl = isFeatured ? image.mos : (image.src || null);                if (imageUrl && imageUrl.startsWith('//')) imageUrl = 'https:' + imageUrl;                                description = description.replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').replace(/View Deal$/i, '').trim();                                let merchantName = data.retailer || '';                if (!merchantName && externalUrl) {                   try {                     merchantName = new URL(externalUrl).hostname.replace('www.', '').split('.')[0];                     merchantName = merchantName.charAt(0).toUpperCase() + merchantName.slice(1);                   }catch(e){ console.warn(e); }                }                if (!merchantName) merchantName = 'Retailer';                const q = (this.currentQuery || '').toLowerCase();                const activeTagLogic = (this.activeDealTag || '').toLowerCase();                if (q.length > 2 && q !== activeTagLogic) {                   const searchTarget = `${summaryTitle || ''} ${description || ''}`.toLowerCase();                   if (!searchTarget.includes(q)) return;                }                let rawPrice = 0;                let rawMsrp = 0;                let currencyStr = '$';                if (isFeatured) {                   rawPrice = typeof data.salePrice === 'number' && data.salePrice > 0 ? data.salePrice : (typeof data.price === 'number' ? data.price : 0);                   rawMsrp = typeof data.salePrice === 'number' && typeof data.price === 'number' && data.price > data.salePrice ? data.price : 0;                   currencyStr = data.currency === 'GBP' ? '£' : '$';                } else {                   rawPrice = priceObj.amount ? parseFloat(priceObj.amount) : 0;                   rawMsrp = priceObj.amountWas ? parseFloat(priceObj.amountWas) : 0;                   currencyStr = priceObj.currency === 'GBP' ? '£' : '$';                }                                let savingAmt = 0;                let savingLabel = '';                if (rawPrice > 0 && rawMsrp > rawPrice) {                   savingAmt = parseFloat((rawMsrp - rawPrice).toFixed(2));                   savingLabel = `Save ${currencyStr}${savingAmt}`;                }                                // Apply Brand filter                if (this.selectedBrands && this.selectedBrands.length > 0) {                   const itemBrand = (data.brand || '').toLowerCase();                   const hasMatch = this.selectedBrands.some(sb => sb.toLowerCase() === itemBrand);                   if (!hasMatch) return;                }                // Apply Price filter                let priceFilterVal = null;                const min = this.customPriceMin ? this.customPriceMin.value : '';                const max = this.customPriceMax ? this.customPriceMax.value : '';                if (min || max) {                   priceFilterVal = `${min}_${max}`;                } else if (this.priceFilter && this.priceFilter.value !== 'all') {                   priceFilterVal = this.priceFilter.value;                }                if (priceFilterVal && rawPrice > 0) {                   if (priceFilterVal === 'under50' && rawPrice >= 50) return;                   if (priceFilterVal === 'over50' && rawPrice <= 50) return;                   if (priceFilterVal === 'over30' && rawPrice <= 30) return;                   if (priceFilterVal === 'over500' && rawPrice <= 500) return;                   if (priceFilterVal.includes('_')) {                      const parts = priceFilterVal.split('_');                      const min = parseFloat(parts[0]);                      const max = parseFloat(parts[1]);                      if (!isNaN(min) && rawPrice < min) return;                      if (!isNaN(max) && rawPrice > max) return;                   }                }                // Apply Discount filter                if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {                   const requiredDiscount = parseInt(this.discountFilter.value);                   if (!isNaN(requiredDiscount) && requiredDiscount > 0) {                      if (!rawMsrp || rawMsrp <= rawPrice) return;                      const ratio = Math.round((1 - (rawPrice / rawMsrp)) * 100);                      if (ratio < requiredDiscount) return;                   }                }                                extractedDeals.push({                   id: `airedale-${article.id || Math.random()}-${idx}`,                   url: externalUrl,                   image: imageUrl,                   fallbackImage: imageUrl,                   title: summaryTitle,                   brand: data.brand || '',                   productName: data.productName || '',                   merchant: merchantName,                   rawPrice: rawPrice,                   rawMsrp: rawMsrp,                   price: rawPrice > 0 ? rawPrice.toString() : '',                   msrp: rawMsrp > 0 ? rawMsrp.toString() : '',                   currency: currencyStr,                   isCheckPrice: !rawPrice,                   savingLabel: savingLabel,                   savingType: rawMsrp > rawPrice ? 'amount' : 'none',                   isPrime: false,                   starRating: null,                   description: description,                   text: data.text || ''                });             });          });                    const airedaleBrandsList = Object.keys(dynamicBrandsCounts).map(b => ({              formatted_value: b,              count: dynamicBrandsCounts[b]          })).sort((a,b) => b.count - a.count);                    if (this.getViewMode() === 'savings_squad') {             this.populateBrandDropdown(airedaleBrandsList.slice(0, 15));             if (this.brandFilterWrapper) {                if (airedaleBrandsList.length === 0) {                    this.brandFilterWrapper.style.display = 'none';                } else {                    this.brandFilterWrapper.style.display = 'flex';                }             }          }                    this.deals = extractedDeals;          this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        isBroadQuery(query) {          const q = query.toLowerCase();          const intentModifiers = ['deals', 'best', 'sale', 'under', 'cheap', 'offers', 'discount'];          return intentModifiers.some(term => q.includes(term));        }        async fetchHawkDeals(query, append = false) {          const url = new URL(this.apiUrl);          url.searchParams.append('model_name', query);          const areaCode = this.getAreaCode();          if (areaCode) {            url.searchParams.append('area', areaCode);          }                    if (append && this.deals.length > 0) {            url.searchParams.append('offset', this.deals.length.toString());          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.append('filter_merchant_name', this.retailerSelect.value);          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.append('filter_label[text_brand]', this.selectedBrands.join(','));          }                    let priceVal = null;          const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             priceVal = `${min}_${max}`;          } else if (this.priceFilter && this.priceFilter.value !== 'all') {             priceVal = this.priceFilter.value;          }          if (priceVal) {            if (priceVal === 'under50') {              url.searchParams.append('filter_max_price', '50');            } else if (priceVal === 'over50') {              url.searchParams.append('filter_min_price', '50');            } else if (priceVal === 'over30') {              url.searchParams.append('filter_min_price', '30');            } else if (priceVal === 'over500') {              url.searchParams.append('filter_min_price', '500');            } else if (priceVal.includes('_')) {              const parts = priceVal.split('_');              if (parts[0]) url.searchParams.append('filter_min_price', parts[0]);              if (parts[1]) url.searchParams.append('filter_max_price', parts[1]);            }          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {              const ratio = (100 - v) / 100;              url.searchParams.append('min_discount_ratio', ratio.toString());            }          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.append('offer', this.offerTypeSelect.value);          }                    url.searchParams.append('filter_product_types', 'deals');                    if (this.rowsSelect && this.rowsSelect.value) {            url.searchParams.append('rows', this.rowsSelect.value);          } else {             url.searchParams.append('rows', '12'); // default          }          let response;          try {             response = await fetch(url.toString());          } catch(e) {             if (window.location.protocol === 'file:') {                console.warn("[Tom's Guide Widget] fetch from file:// blocked by local CORS policy, falling back to Adviser mock.");                await this.fetchAdviserDeals(query);                return;             }             console.warn("Hawk fetch failed", e);             this.deals = [];             this.render();             return;          }          if (!response.ok) {            throw new Error('Hawk API Response Error');          }          const rawData = await response.json();          // Safely locate data array from potentially wrapped response          let offers = [];          let modelInfoArray = [];                    let brandFilterData = null;          if (rawData && rawData.widget && rawData.widget.data && Array.isArray(rawData.widget.data.filters)) {             brandFilterData = rawData.widget.data.filters.find(f => f.type === 'label_text_brand');          } else if (rawData && rawData.data && Array.isArray(rawData.data.filters)) {             brandFilterData = rawData.data.filters.find(f => f.type === 'label_text_brand');          }          if (brandFilterData && Array.isArray(brandFilterData.values) && brandFilterData.values.length > 0) {             this.populateBrandDropdown(brandFilterData.values);          } else {             if (this.brandFilterWrapper && this.selectedBrands.length === 0) {                this.brandFilterWrapper.style.display = 'none';             }          }                    if (rawData && rawData.widget && rawData.widget.data) {            if (Array.isArray(rawData.widget.data.offers)) offers = rawData.widget.data.offers;            if (rawData.widget.data.model_info && typeof rawData.widget.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.widget.data.model_info) ? rawData.widget.data.model_info : Object.values(rawData.widget.data.model_info);            }          } else if (rawData && rawData.data) {            if (Array.isArray(rawData.data.offers)) offers = rawData.data.offers;            if (rawData.data.model_info && typeof rawData.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.data.model_info) ? rawData.data.model_info : Object.values(rawData.data.model_info);            }          } else {            if (Array.isArray(rawData)) offers = rawData;            else if (rawData && Array.isArray(rawData.offers)) offers = rawData.offers;            else if (rawData && rawData.offers && Array.isArray(rawData.offers.offer)) offers = rawData.offers.offer;            else if (rawData && rawData.offers) offers = [].concat(rawData.offers);                        if (rawData && rawData.model_info && typeof rawData.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.model_info) ? rawData.model_info : Object.values(rawData.model_info);            }          }          let modelDetails = {};          modelInfoArray.forEach(m => {            const mId = m.model_id || m.id;            if (mId) {              modelDetails[mId] = {                score: m.score != null ? parseFloat(m.score) : null,                brand: m.brand || null,                parent: (m.parents && Array.isArray(m.parents) && m.parents.length > 0) ? m.parents[0].name : null              };            }          });          offers.forEach(item => {            let data = { ...item };            const mId = data.model_id;            if (mId && modelDetails[mId]) {              data.review_score = modelDetails[mId].score;              data.model_brand = modelDetails[mId].brand;              data.model_parent = modelDetails[mId].parent;            } else {              data.review_score = null;            }                        let itemOffers = [];            if (Array.isArray(item.offers)) itemOffers = item.offers;            else if (Array.isArray(item.offer)) itemOffers = item.offer;            else if (item.offers && typeof item.offers === 'object') itemOffers = [item.offers];            else if (item.offer && typeof item.offer === 'object') itemOffers = [item.offer];            if (itemOffers.length > 0) {              itemOffers.forEach(subItem => {                let subData = { ...item, ...subItem };                const subId = subData.model_id;                if (subId && modelDetails[subId]) {                  subData.review_score = modelDetails[subId].score;                  subData.model_brand = modelDetails[subId].brand;                  subData.model_parent = modelDetails[subId].parent;                } else if (data.review_score != null) {                  subData.review_score = data.review_score;                }                if (subData.merchant && typeof subData.merchant === 'object') {                  subData.merchant_name = subData.merchant.name;                }                this.deals.push(this.extractDealData(subData));              });              return;            }                        if (item.merchant && typeof item.merchant === 'object') {              data.merchant_name = item.merchant.name;            }                        this.deals.push(this.extractDealData(data));          });                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        async fetchAdviserDeals(query) {          // ======================================================================          // TODO: ADVISER API REPLACEMENT          // The code below simulates the Adviser API response using mock data.          // Once the real endpoint is ready, remove getAdviserMockData() and           // perform an actual fetch() request similar to fetchHawkDeals().          // Example:          // const area = this.getAreaCode();          // let apiUrl = `https://your-adviser-api.com/search?q=${query}&area=${area}`;          // if (this.priceFilter && this.priceFilter.value !== 'all') {          //   const val = this.priceFilter.value;          //   if (val === 'under50') apiUrl += '&filter_max_price=50';          //   else if (val === '50_100') apiUrl += '&filter_max_price=100';          //   else if (val === '100_200') apiUrl += '&filter_max_price=200';          //   else if (val === '200_500') apiUrl += '&filter_max_price=500';          // }          // const res = await fetch(apiUrl);          // const rawData = await res.json();          // ======================================================================          // Simulating network latency          await new Promise(resolve => setTimeout(resolve, 400));                    const rawData = this.getAdviserMockData();          let offers = [];                    if (rawData && rawData.data && rawData.data.Get && Array.isArray(rawData.data.Get.Deal)) {            offers = rawData.data.Get.Deal;          }                    // Basic client-side filtering for the mock if we want it to react to the query          const q = query.toLowerCase();          const selectedRetailer = (this.retailerSelect && this.retailerSelect.value) ? this.retailerSelect.value.toLowerCase() : null;                    offers.forEach(item => {            const dataObj = item;                        // Apply retailer filter            const itemRetailer = (dataObj.dataRetailer || '').toLowerCase();            if (selectedRetailer && itemRetailer !== selectedRetailer && !itemRetailer.includes(selectedRetailer)) {              return;            }                        // Apply mock price filter            let price = dataObj.dataDiscountedPrice || 0;            if (typeof price === 'string') {              price = parseFloat(price.replace(/[^0-9.]/g, ''));            }            let priceVal = null;            const min = this.customPriceMin ? this.customPriceMin.value : '';            const max = this.customPriceMax ? this.customPriceMax.value : '';            if (min || max) {               priceVal = `${min}_${max}`;            } else if (this.priceFilter && this.priceFilter.value !== 'all') {               priceVal = this.priceFilter.value;            }            if (priceVal) {              if (priceVal === 'under50' && price >= 50) return;              if (priceVal === 'over50' && price <= 50) return;              if (priceVal === 'over30' && price <= 30) return;              if (priceVal === 'over500' && price <= 500) return;              if (priceVal.includes('_')) {                 const parts = priceVal.split('_');                 if (parts[0] && price < parseFloat(parts[0])) return;                 if (parts[1] && price > parseFloat(parts[1])) return;              }            }                        // Map Adviser schema to our widget's expected schema            const mappedData = {              url: dataObj.linkHREF || dataObj.dataLink || '#',              image: dataObj.imageURL || (dataObj.image && dataObj.image.src) || '',              title: dataObj.dataProduct || (dataObj.product && dataObj.product.name) || 'Product Deal',              merchant: dataObj.dataRetailer || 'Retailer',              price: dataObj.dataDiscountedPrice || 0,              currency: dataObj.dataCurrency === 'USD' ? '$' : (dataObj.dataCurrency || '$'),              msrp: dataObj.dataOriginalPrice || null            };                        const titleLow = mappedData.title.toLowerCase();            const merchLow = mappedData.merchant.toLowerCase();                        // Smarter mock filtering            let isMatch = false;            if (q === '' || this.isBroadQuery(q)) {              isMatch = true;            } else if (titleLow.includes(q) || merchLow.includes(q)) {              isMatch = true;            } else if ((q.includes('laptop') || q.includes('mac') || q.includes('pc')) && (titleLow.includes('macbook') || titleLow.includes('laptop'))) {              isMatch = true;            } else if ((q.includes('tv') || q.includes('television')) && (titleLow.includes('tv') || titleLow.includes('oled') || titleLow.includes('qled'))) {              isMatch = true;            } else if ((q.includes('phone') || q.includes('smartphone')) && (titleLow.includes('galaxy') || titleLow.includes('phone'))) {              isMatch = true;            } else if ((q.match(/watch|fitness|run|shoe/)) && (titleLow.includes('forerunner') || titleLow.includes('saucony') || titleLow.includes('watch'))) {              isMatch = true;            }                        if (isMatch) {               this.deals.push(this.extractDealData(mappedData));            }          });                    let rowLimit = 12;          if (this.rowsSelect && this.rowsSelect.value) {            rowLimit = parseInt(this.rowsSelect.value, 10) || 12;          }          // Intentionally omitting the slice here to allow "Load More" to work if the API returns more                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        getAdviserMockData() {          return {            "data": {              "Get": {                "Deal": [                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 300,                    "dataOriginalPrice": 399,                    "dataProduct": "Samsung Galaxy A36",                    "dataRetailer": "Samsung",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/MqDYsukV3JBG54te6dEs7j.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 14,                    "dataOriginalPrice": 24,                    "dataProduct": "Blink Mini",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/3JurmAjHsDa5tPdaHAwEV8.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 59,                    "dataOriginalPrice": 99,                    "dataProduct": "Ring Video Doorbell",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/rAh4uR7AsAsALCCLTXnLNJ.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 10,                    "dataOriginalPrice": 599,                    "dataProduct": "MacBook Neo",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/Lg4Dvg68j9SbB5CPNrTEpH.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 749,                    "dataOriginalPrice": 849,                    "dataProduct": "65\\\" Fire TV Omni 4K QLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/SG34ZWodUkLTxJvMTbjPYR.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 71,                    "dataOriginalPrice": 160,                    "dataProduct": "Saucony Hurricane 24",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/vxf7UD5T2Am7guVzFoFcZ4.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 649,                    "dataOriginalPrice": 749,                    "dataProduct": "Garmin Forerunner 970",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/3GKnEu7CdhtxPMfnPCMCiA.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1049,                    "dataOriginalPrice": 1499,                    "dataProduct": "LG 48\\\" C4 4K OLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/imvwZV9zoMD6fn9Afuge35.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1499,                    "dataOriginalPrice": 2199,                    "dataProduct": "Samsung 49\\\" Odyssey Neo G9 4K Gaming Monitor",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/XWDEJ5dUAE2nhK8k3Jk7k7.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 299,                    "dataOriginalPrice": 699,                    "dataProduct": "EGOHOME Black Memory Foam Mattress (queen)",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/hMUemtAejNETLVYxNrktzm.jpg"                  }                ]              }            }          };        }        decodeHTML(html) {          if (!html) return '';          const txt = document.createElement("textarea");          txt.innerHTML = String(html);          return txt.value;        }        extractDealData(item) {          const priceRawStr = String(item.price || item.current_price || '0');          const msrpRawStr = String(item.was_price || item.msrp || item.original_price || '0');          const rawPrice = parseFloat(priceRawStr.replace(/[^\d.]/g, '')) || 0;          const rawMsrp = parseFloat(msrpRawStr.replace(/[^\d.]/g, '')) || 0;          const isCheckPrice = rawPrice === 0 || priceRawStr === '0.00' || priceRawStr === '0';                    let originalImageUrl = item.image || item.image_url || item.product_image || '';          let imageUrl = originalImageUrl;          if ((!imageUrl || isCheckPrice) && item.model_image_url) {             imageUrl = item.model_image_url;             originalImageUrl = imageUrl;          } else if ((!imageUrl || isCheckPrice) && item.model_image) {             imageUrl = item.model_image;             originalImageUrl = imageUrl;          }                    if (imageUrl) {            imageUrl = imageUrl.replace(/-(\d+)-(\d+)(\.[a-z.]+)$/i, '$3');          }                    let fallbackImage = '';          if (originalImageUrl && originalImageUrl !== imageUrl) {             fallbackImage = originalImageUrl;          } else if (item.model_image && item.model_image !== imageUrl) {             fallbackImage = item.model_image;          } else if (item.model_image_url && item.model_image_url !== imageUrl) {             fallbackImage = item.model_image_url;          }                    const rawCurrency = item.currency || item.currency_symbol || '$';                    let savingLabel = item.percentage_saving_label || '';          if (!savingLabel && rawMsrp > rawPrice && rawPrice > 0) {            const pct = Math.round(((rawMsrp - rawPrice) / rawMsrp) * 100);            if (pct > 0) {              savingLabel = `${pct}% OFF`;            }          }                    const isPrime = item.shipping && item.shipping.prime === true;                    let scoreRaw = (item.review_score !== undefined && item.review_score !== null && item.review_score > 0) ? parseFloat(item.review_score) : null;          let starRating = 0;          if (scoreRaw !== null) {            starRating = Math.round((scoreRaw > 10 ? scoreRaw / 20 : scoreRaw / 2) * 2) / 2;          }                    return {            id: item.offer_id || item.link || item.url || item.offer_link || Math.random().toString(),            url: item.link || item.url || item.offer_link || '#',            image: imageUrl,            fallbackImage: fallbackImage,            title: item.name || item.title || item.model_name || item.product_name || 'Unknown Product',            brand: item.brand || '',            productName: item.model_name || item.product_name || item.name || '',            merchant: item.merchant_name || item.merchant || item.retailer || 'Retailer',            price: item.price !== undefined ? String(item.price) : '0.00',            currency: this.decodeHTML(rawCurrency),            msrp: item.was_price || item.msrp || item.original_price || null,            rawPrice: rawPrice,            rawMsrp: rawMsrp,            hasWasPrice: (item.was_price !== undefined && item.was_price !== null),            isCheckPrice: isCheckPrice,            savingLabel: savingLabel,            isPrime: isPrime,            starRating: starRating > 0 ? starRating : null,            modelId: item.model_id || '',            productKey: item.product_key || '',            merchantId: (item.merchant && typeof item.merchant === 'object') ? item.merchant.id || '' : '',            matchId: item.match_id || '',            merchantNetwork: (item.merchant && typeof item.merchant === 'object') ? item.merchant.an || '' : '',            merchantUrl: (item.merchant && typeof item.merchant === 'object') ? item.merchant.url || '' : '',            modelBrand: item.model_brand || item.brand || '',            modelParent: item.model_parent || ''          };        }        sortData() {          const sortVal = this.sortSelect ? this.sortSelect.value : (this.getViewMode() === 'savings_squad' ? 'date_desc' : 'discount_desc');          if (sortVal === 'price_asc') {            this.deals.sort((a, b) => a.rawPrice - b.rawPrice);          } else if (sortVal === 'price_desc') {            this.deals.sort((a, b) => b.rawPrice - a.rawPrice);          } else if (sortVal === 'discount_desc') {            this.deals.sort((a, b) => {              const aDiscount = a.rawMsrp > a.rawPrice ? (a.rawMsrp - a.rawPrice) : 0;              const bDiscount = b.rawMsrp > b.rawPrice ? (b.rawMsrp - b.rawPrice) : 0;              return bDiscount - aDiscount;            });          } else if (sortVal === 'date_desc') {             this.deals.sort((a, b) => {                let dateA = 0;                let dateB = 0;                if (a && a.modifiedDate) {                   const valA = Array.isArray(a.modifiedDate) ? a.modifiedDate[0] : a.modifiedDate;                   dateA = new Date(valA).getTime();                   if (isNaN(dateA)) dateA = 0;                }                if (b && b.modifiedDate) {                   const valB = Array.isArray(b.modifiedDate) ? b.modifiedDate[0] : b.modifiedDate;                   dateB = new Date(valB).getTime();                   if (isNaN(dateB)) dateB = 0;                }                return dateB - dateA;             });          }        }        getFilteredDeals() {          let filteredDeals = [...this.deals];                    if (this.dealModeToggle && this.dealModeToggle.checked) {            filteredDeals = filteredDeals.filter(d => d.hasWasPrice || (d.msrp && d.rawMsrp > d.rawPrice));          }                    return filteredDeals;        }        showLoading() {          const _div = '<' + '/div>';          const skeletonCardHtml = `            \x3Cdiv class="tg-df-card">              \x3Cdiv class="tg-df-card-image-box">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-img">${_div}              ${_div}              \x3Cdiv class="tg-df-card-body">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-card-footer mt-auto">                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="height:24px;">${_div}                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text" style="height:44px; margin-top:8px;">${_div}                ${_div}              ${_div}            ${_div}`;          this.grid.innerHTML = Array(4).fill(skeletonCardHtml).join('');        }        showError() {          const _div = '<' + '/div>';          this.grid.innerHTML = `\x3Cdiv class="tg-df-message">            An error occurred while finding deals. Please check your connection and try again.          ${_div}`;        }        escapeHTML(str) {          if (!str) return '';          return String(str).replace(/[&<>'"]/g, tag => ({              '&': '&', '<': '<', '>': '>', "'": ''', '"': '"'          }[tag] || tag));        }                bindCouponButtons() {          const btns = this.root.querySelectorAll('.tg-df-tag-coupons');          btns.forEach(btn => {            btn.addEventListener('click', (e) => {              e.preventDefault();              e.stopPropagation();              const merchant = btn.getAttribute('data-merchant');              this.openVouchersModal(merchant);            });          });                    const closeBtn = this.root.querySelector('#tg-df-vouchers-close');          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (closeBtn) {            closeBtn.onclick = () => this.closeVouchersModal();          }          if (backdrop) {            backdrop.onclick = (e) => {              if (e.target === backdrop) this.closeVouchersModal();            };          }        }                closeVouchersModal() {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (backdrop) backdrop.classList.remove('active');        }                async checkMerchantsCouponsBulk(merchants) {          if (!merchants || merchants.length === 0) return {};          const controller = new AbortController();          const timeoutId = setTimeout(() => controller.abort(), 4000);          try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchants.join(','));            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '120');            url.searchParams.append('origin', 'widgets-clientside');                        let res; try { res = await fetch(url.toString(), { signal: controller.signal }); } catch (e) { return {}; }            clearTimeout(timeoutId);            if (!res.ok) return {};            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        const foundMerchants = new Set();            offers.forEach(o => {              let mName = o.merchant_name || o.merchant || o.retailer;              if (mName && typeof mName === 'object') mName = mName.name;              if (mName) foundMerchants.add(String(mName).toLowerCase());            });            const resultMap = {};            merchants.forEach(m => {              if (m) resultMap[m] = foundMerchants.has(String(m).toLowerCase());            });            return resultMap;          } catch (e) {            return {};          }        }                async openVouchersModal(merchantName) {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          const title = this.root.querySelector('#tg-df-vouchers-title');          const content = this.root.querySelector('#tg-df-vouchers-content');                    if (!backdrop || !content) return;                    // HACK: Hide closing tags          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h4 = '<' + '/h4>';          const _svg = '<' + '/svg>';          const _circle = '<' + '/circle>';          const _polyline = '<' + '/polyline>';          const _rect = '<' + '/rect>';          const _path = '<' + '/path>';                    title.innerText = `${merchantName} Coupons & Deals`;          content.innerHTML = `\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}                               \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}`;          backdrop.classList.add('active');                    try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchantName);            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '50');            url.searchParams.append('origin', 'widgets-clientside');                        const res = await fetch(url.toString());            if (!res.ok) throw new Error('API Error');            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        if (offers.length === 0) {              content.innerHTML = `\x3Cdiv class="tg-df-message">No vouchers currently available for ${this.escapeHTML(merchantName)}.${_div}`;              return;            }                        content.innerHTML = offers.map((v, idx) => {              let offerObj = v;              if (v.offers && v.offers.offer) {                offerObj = Array.isArray(v.offers.offer) ? v.offers.offer[0] : v.offers.offer;              } else if (v.offer) {                offerObj = Array.isArray(v.offer) ? v.offer[0] : v.offer;              }              let logoUrl = v.logo_url || offerObj.logo_url || '';              if (!logoUrl && v.merchant) {                if (Array.isArray(v.merchant) && v.merchant.length > 0) logoUrl = v.merchant[0].logo_url || '';                else logoUrl = v.merchant.logo_url || '';              }                            const offerName = offerObj.name || offerObj.title || v.name || v.title || 'Special Offer';              const endTime = offerObj.end_time || v.end_time || '';              const linkUrl = offerObj.link || offerObj.url || v.link || v.url || '#';                            let foundVoucherCode = '';              const findVoucherCode = (obj) => {                if (!obj || typeof obj !== 'object') return;                if (obj.type === 'voucher_code' && obj.display_value) {                  foundVoucherCode = obj.display_value;                  return;                }                if (Array.isArray(obj)) {                  for (const item of obj) {                    findVoucherCode(item);                    if (foundVoucherCode) return;                  }                } else {                  for (const k in obj) {                    if (Object.prototype.hasOwnProperty.call(obj, k)) {                      findVoucherCode(obj[k]);                      if (foundVoucherCode) return;                    }                  }                }              };              findVoucherCode(offerObj);              if (!foundVoucherCode) findVoucherCode(v);                            const voucherCode = foundVoucherCode || offerObj.voucher_code || v.voucher_code || '';              const codeHtml = voucherCode ? `\x3Cspan class="tg-df-voucher-code" data-action="copy-code" data-code="${this.escapeHTML(voucherCode)}" title="Copy to clipboard">                \x3Cspan class="tg-df-voucher-code-text">${this.escapeHTML(voucherCode)}${_span}                \x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-left:6px;flex-shrink:0;" class="tg-df-voucher-copy-icon">                  \x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">${_rect}                  \x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">${_path}                ${_svg}              ${_span}` : '';                            const logoHtml = logoUrl                 ? `\x3Cimg src="${this.escapeHTML(logoUrl)}" alt="${this.escapeHTML(offerName)}" class="tg-df-voucher-logo" />`                 : `\x3Cdiv class="tg-df-voucher-logo" style="background:#e2e8f0;">${_div}`;                            let expiryHtml = '';              if (endTime) {                let dStr = endTime;                if (!isNaN(dStr) && String(dStr).length === 10) dStr = Number(dStr) * 1000;                const d = new Date(dStr);                if (!isNaN(d.getTime())) {                  const options = { year: 'numeric', month: 'short', day: 'numeric' };                  expiryHtml = `                    \x3Cdiv class="tg-df-voucher-expiry">                      \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                        \x3Ccircle cx="12" cy="12" r="10">${_circle}                        \x3Cpolyline points="12 6 12 12 16 14">${_polyline}                      ${_svg}                      Expires ${d.toLocaleDateString(undefined, options)}                    ${_div}`;                }              }              const revenueIdVal = generateRevenueId(linkUrl, offerName, merchantName, null);              const rewrittenLinkUrl = rewriteAffiliateLink(linkUrl, area, revenueIdVal);              return `                \x3Ca href="${this.escapeHTML(rewrittenLinkUrl)}" target="_blank" rel="noopener nofollow" class="tg-df-voucher-item"                  data-action="voucher-click"                  data-product-name="${this.escapeHTML(offerName)}"                  data-merchant-name="${this.escapeHTML(merchantName)}"                  data-analytics-id="${this.escapeHTML(offerObj.offer_id || offerObj.id || v.id || '')}"                  data-price=""                  data-previous-price=""                  data-original-link="${this.escapeHTML(linkUrl)}"                  data-revenue-id="${revenueIdVal}"                  data-index="${idx}"                  data-total="${offers.length}"                  data-in-stock="true"                  data-currency="USD"                  data-model-id="${this.escapeHTML(offerObj.model_id || v.model_id || offerObj.id || v.id || '')}"                  data-merchant-id="${this.escapeHTML(offerObj.merchant_id || offerObj.merchant?.id || '')}"                >                  ${logoHtml}                  \x3Cdiv class="tg-df-voucher-content">                    \x3Ch4 class="tg-df-voucher-title">${this.escapeHTML(offerName)}${_h4}                    ${codeHtml}                    ${expiryHtml}                  ${_div}                ${_a}              `;            }).join('');                        // Attach copy functionality            const copyBtns = content.querySelectorAll('[data-action="copy-code"]');            copyBtns.forEach(btn => {              btn.addEventListener('click', async (e) => {                e.preventDefault();                e.stopPropagation();                                const code = btn.getAttribute('data-code');                if (!code) return;                                try {                  const copyToClipboard = async (text) => {                     if (window.navigator.clipboard && window.isSecureContext) {                        try { await window.navigator.clipboard.writeText(text); return; } catch (e) {}                     }                     const textArea = document.createElement("textarea");                     textArea.value = text;                     textArea.style.position = "fixed";                     document.body.appendChild(textArea);                     textArea.focus();                     textArea.select();                     document.execCommand('copy');                     textArea.remove();                  };                  await copyToClipboard(code);                                    // Visual feedback                  btn.classList.add('copied');                  const textSpan = btn.querySelector('.tg-df-voucher-code-text');                  const iconSvg = btn.querySelector('.tg-df-voucher-copy-icon');                                    const origText = textSpan.innerText;                  const origIcon = iconSvg.innerHTML;                                    textSpan.innerText = 'Copied!';                  iconSvg.innerHTML = `\x3Cpolyline points="20 6 9 17 4 12">${_polyline}`;                                    setTimeout(() => {                    if (btn) {                      btn.classList.remove('copied');                      if (textSpan) textSpan.innerText = origText;                      if (iconSvg) iconSvg.innerHTML = origIcon;                    }                  }, 2000);                                    trackElementInteraction({                    id: 'voucher-code-copy',                    name: 'Copy Voucher Code',                    label: `Copied ${code} for ${merchantName}`                  });                } catch (err) {                  console.warn('Failed to copy text: ', err);                }              });            });            // Attach voucher click tracking            const voucherBtns = content.querySelectorAll('[data-action="voucher-click"]');            voucherBtns.forEach(btn => {              btn.addEventListener('click', (e) => {                if (e.target.closest('[data-action="copy-code"]')) return;                                const productName = btn.getAttribute('data-product-name');                const merchantNameAttr = btn.getAttribute('data-merchant-name');                const productId = btn.getAttribute('data-analytics-id');                const price = parseFloat(btn.getAttribute('data-price')) || null;                const prevPriceStr = btn.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = btn.getAttribute('data-original-link');                const rewrittenLink = btn.getAttribute('href');                const revenueId = btn.getAttribute('data-revenue-id');                const index = parseInt(btn.getAttribute('data-index'), 10) || 0;                const inStock = btn.getAttribute('data-in-stock') === 'true';                const totalText = btn.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: btn.getAttribute('data-model-id') || null,                    matchId: btn.getAttribute('data-match-id') || null,                    brand: btn.getAttribute('data-model-brand') || null,                    parent: btn.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: btn.getAttribute('data-merchant-id') || null,                    network: btn.getAttribute('data-merchant-network') || null,                    url: btn.getAttribute('data-merchant-url') || null,                    name: merchantNameAttr                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: btn.getAttribute('data-currency') || 'USD'                };                if (typeof trackDealClick === 'function') {                  trackDealClick(trackingParams);                }              });            });                                  } catch (e) {            console.warn(e);            content.innerHTML = `\x3Cdiv class="tg-df-message">Failed to load vouchers.${_div}`;          }        }        render() {          try {            if (this.getViewMode() === 'savings_squad' && this.airedaleTags.length > 0) {              if (this.categoryFilterWrapper) {                 this.categoryFilterWrapper.style.display = 'flex';              }              if (this.categoryFilter) {                 const _option = '<' + '/option>';                 let optionsHtml = `\x3Coption value="all">All Categories${_option}`;                 this.airedaleTags.forEach(tag => {                    const isSelected = this.activeDealTag === tag ? 'selected' : '';                    optionsHtml += `\x3Coption value="${this.escapeHTML(tag)}" ${isSelected}>${this.escapeHTML(tag)} (${this.airedaleTagCounts[tag] || 0})${_option}`;                 });                 this.categoryFilter.innerHTML = optionsHtml;                 this.categoryFilter.value = this.activeDealTag || 'all';              }            } else {               if (this.categoryFilterWrapper) {                  this.categoryFilterWrapper.style.display = 'none';               }            }            const displayDeals = this.getFilteredDeals();          // HACK: Hide closing tags from the CMS HTML sanitizer so it doesn't strip them during in-page injection          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h3 = '<' + '/h3>';          const _p = '<' + '/p>';          const _strong = '<' + '/strong>';          const _sup = '<' + '/sup>';          const _button = '<' + '/button>';          if (displayDeals.length === 0) {            if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {              if (this.deals.length > 0) {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No deals match your selected filters.                ${_div}`;              } else if (this.getViewMode() === 'savings_squad' && this.currentQuery.length <= 2) {                 // Do not show "no exact matches" if query is empty for savings_squad                 this.grid.innerHTML = '';              } else {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No exact matches found for "\x3Cstrong>${this.escapeHTML(this.currentQuery)}${_strong}". Try adjusting your search term.                ${_div}`;              }            } else {              this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                Search product or category names to discover the best deals from across the web.              ${_div}`;            }            return;          }          let dealsHtml = displayDeals.slice(0, this.displayLimit).map((deal, index) => {            try {               const currencySym = this.escapeHTML(deal.currency);               const isoCurrencyCode = normalizeCurrency(currencySym);               const escapedPrice = this.escapeHTML(deal.price);               const escapedMsrp = this.escapeHTML(deal.msrp);               const areaCode = this.getAreaCode();                              const revenueId = generateRevenueId(deal.url, deal.title, deal.merchant, null);               const originalLink = deal.url;               const rewrittenLink = rewriteAffiliateLink(deal.url, areaCode, revenueId);                        const productCategoryName = 'deals';            const dataAttr = `              data-action="${deal.isCheckPrice ? 'view-similar-click' : 'deal-click'}"              data-analytics-id="${this.escapeHTML(deal.externalProductId || deal.id || '')}"              data-product-name="${this.escapeHTML(deal.title)}"              data-merchant-name="${this.escapeHTML(deal.merchant)}"              data-price="${deal.rawPrice || ''}"              data-previous-price="${deal.rawMsrp || ''}"              data-original-link="${this.escapeHTML(originalLink)}"              data-revenue-id="${revenueId}"              data-index="${index}"              data-total="${displayDeals.length}"              data-in-stock="${deal.inStock !== false}"              data-currency="${this.escapeHTML(isoCurrencyCode)}"              data-model-id="${this.escapeHTML(deal.modelId || '')}"              data-product-key="${this.escapeHTML(deal.productKey || '')}"              data-merchant-id="${this.escapeHTML(deal.merchantId || '')}"            `;                        let priceGroupHtml = '';            let isSavingsSquadMode = this.getViewMode() === 'savings_squad';            let ctaText = 'View Deal';            let formattedPrice = '';            let msrpHtml = '';                        if (deal.isCheckPrice) {              ctaText = isSavingsSquadMode ? 'View Deal' : 'Check Price';              if (isSavingsSquadMode) {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-merchant-wrapper">                    \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                  \x3Cdiv class="tg-df-card-price-group">                  ${_div}                `;              } else {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-merchant-wrapper">                    \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                  \x3Cdiv class="tg-df-card-price-group">                    \x3Cspan class="tg-df-card-price" style="font-size: 15px; font-weight: 500; font-style: italic;">See price at retailer${_span}                  ${_div}                `;              }            } else {              // Format Price              formattedPrice = escapedPrice.includes(currencySym)                 ? escapedPrice                 : `${currencySym}${escapedPrice}`;                              // Format MSRP              msrpHtml = deal.msrp && deal.rawMsrp > deal.rawPrice                ? `\x3Cspan class="tg-df-card-msrp">${escapedMsrp.includes(currencySym) ? escapedMsrp : currencySym + escapedMsrp}${_span}`                : '';                              priceGroupHtml = `                \x3Cdiv class="tg-df-card-merchant-wrapper">                  \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                ${_div}                \x3Cdiv class="tg-df-card-price-group">                  ${isSavingsSquadMode ? '' : `                  \x3Cspan class="tg-df-card-price">${formattedPrice}${_span}                  ${msrpHtml}                  `}                ${_div}              `;            }                        const discountBadgeHtml = deal.savingLabel && !deal.isCheckPrice              ? `\x3Cspan class="tg-df-card-discount-badge">${this.escapeHTML(deal.savingLabel)}${_span}`              : '';                          // HACK for CMS            const _button = '<' + '/button>';            const _svg = '<' + '/svg>';            const _path = '<' + '/path>';            const _rect = '<' + '/rect>';            const _circle = '<' + '/circle>';            const _polyline = '<' + '/polyline>';            const _line = '<' + '/line>';                        let badgesHtml = '';            const primeBadge = deal.isPrime ? `              \x3Cspan class="tg-df-tag tg-df-tag-prime">                \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="currentColor">                  \x3Cpath d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z">${_path}                ${_svg} Prime              ${_span}            ` : '';                        const couponsBadge = deal.merchant && deal.merchant.toLowerCase().includes('amazon') ? '' : `              \x3Cdiv class="tg-df-coupon-wrapper" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:inline-flex; align-items:center;">                \x3Cdiv class="tg-df-coupon-spinner">${_div}                \x3Cbutton type="button" class="tg-df-tag tg-df-tag-coupons" data-action="coupons-click" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:none;">                  \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                    \x3Cpath d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z">${_path}                    \x3Cline x1="7" y1="7" x2="7.01" y2="7">${_line}                  ${_svg} Coupons                ${_button}              ${_div}            `;                        // Note: We always add coupons badge if there's a chance, but to allow 3-line titles we check wrapper display state            badgesHtml = `              \x3Cdiv class="tg-df-card-badges">                ${primeBadge}                ${couponsBadge}              ${_div}            `;            const _linearGradient = '<' + '/linearGradient>';            const _polygon = '<' + '/polygon>';            const _stop = '<' + '/stop>';            const _defs = '<' + '/defs>';                        let starHtml = '';            if (deal.starRating) {              let rating = deal.starRating;                            if (rating > 0) {                const fullStars = Math.floor(rating);                const halfStar = (rating - fullStars) >= 0.5 ? 1 : 0;                const emptyStars = Math.max(0, 5 - fullStars - halfStar);                const blue = '#1f69ff'; // Tom's guide brand color from VIEW DEAL button                const gray = '#cbd5e1';                                const starSvgFull = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="${blue}" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                const gradId = 'half_grad_' + Math.floor(Math.random()*1000000);                const starSvgHalf = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cdefs>\x3ClinearGradient id="${gradId}" x1="0" x2="1" y1="0" y2="0">\x3Cstop offset="50%" stop-color="${blue}">${_stop}\x3Cstop offset="50%" stop-color="transparent">${_stop}${_linearGradient}${_defs}                  \x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26" fill="url(#${gradId})">${_polygon}${_svg}`;                                  const starSvgEmpty = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="${gray}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                let stars = [];                for (let i=0; i<fullStars; i++) stars.push(starSvgFull);                if (halfStar) stars.push(starSvgHalf);                for (let i=0; i<emptyStars; i++) stars.push(starSvgEmpty);                                starHtml = `\x3Cdiv class="tg-df-card-stars" style="display:flex;align-items:center;margin-bottom:8px;font-size:13px;font-weight:600;color:var(--tg-df-text-muted);">                  \x3Cspan style="margin-right:6px;">Tom's Guide:${_span}                  \x3Cdiv style="display:flex;gap:2px;">                    ${stars.join('')}                  ${_div}                ${_div}`;              }            }            let htmlOutput = '';            if (isSavingsSquadMode) {              htmlOutput += `              \x3Cdiv class="hawk-deal-widget-container tg-df-mobile-only" data-collapsible="true">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''} style="margin-bottom: 10px;">` : ''}                \x3Cdiv class="hawk-deal-widget-wrap">                  \x3Cdiv class="hawk-deal-widget-image-container">                    \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" rel="sponsored noopener" target="_blank" class="hawk-affiliate-link-deal-widget" ${dataAttr}>                      \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="hawk-lazy-image-deal-widget" loading="lazy" width="140" height="160" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                    ${_a}                  ${_div}                  \x3Cdiv class="hawk-deal-widget-text-cta-container">                    \x3Cdiv class="hawk-deal-widget-text-body-container">                      \x3Cdiv class="hawk-deal-widget-text-body-main">                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          ${deal.isCheckPrice ? `                            \x3Cspan class="hawk-deal-widget-title-product-title">${this.escapeHTML(deal.title)}${_span}                          ` : `                            \x3Cspan class="hawk-deal-widget-title-product-title">${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_span}                          `}                        ${_a}                        ${!deal.isCheckPrice && deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan class="hawk-deal-widget-title-was-price">was ${currencySym}${escapedMsrp}${_span}                          ${_a}                        ` : ''}                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          \x3Cspan class="hawk-deal-widget-title-retailer-price">                            ${!deal.isCheckPrice ? `                              \x3Cspan class="hawk-deal-widget-title-price">now ${formattedPrice}${_span}                              \x3Cspan class="hawk-deal-widget-title-retailer"> at ${this.escapeHTML(deal.merchant)}${_span}                            ` : `                              \x3Cspan class="hawk-deal-widget-title-price">See price at ${this.escapeHTML(deal.merchant)}${_span}                            `}                          ${_span}                        ${_a}                        ${deal.description ? `\x3Cdiv class="hawk-deal-widget-text-body-description">\x3Cp>${this.escapeHTML(deal.description)}${_p}${_div}` : ''}                      ${_div}                    ${_div}                    \x3Cdiv class="hawk-deal-widget-footer">                      \x3Cdiv class="hawk-deal-widget-button-wrapper">                        \x3Cdiv class="hawk-deal-widget-preferred-partner-wrapper">                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-deal-button" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan>${deal.isCheckPrice ? 'Check Price' : 'View Deal'}${_span}                          ${_a}                        ${_div}                      ${_div}                    ${_div}                  ${_div}                ${_div}              ${_div}              `;            }            htmlOutput += `              \x3Cdiv class="tg-df-card ${isSavingsSquadMode ? 'tg-df-desktop-only' : ''}">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''}>` : ''}                \x3Cdiv class="tg-df-card-image-box">                  ${discountBadgeHtml}                  \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" style="display: flex; align-items: center; justify-content: center; width: 100%; height: 100%;">                    \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="tg-df-card-image" loading="lazy" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                  ${_a}                ${_div}                \x3Cdiv class="tg-df-card-body">                  ${starHtml}                  ${badgesHtml}                  \x3Ch3 class="tg-df-card-title tg-df-custom-savings-squad-title" title="${this.escapeHTML(deal.title)}">                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" disable-tracking="true" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit;">                      ${isSavingsSquadMode                         ? (deal.isCheckPrice                             ? (deal.title && deal.title.includes(':')                                 ? `\x3Cstrong>${this.escapeHTML(deal.title.substring(0, deal.title.indexOf(':') + 1))}${_strong}\x3Cspan style="color: #1f69ff; font-weight: normal;">${this.escapeHTML(deal.title.substring(deal.title.indexOf(':') + 1))}${_span}`                                : this.escapeHTML(deal.title)                              )                             : `\x3Cstrong>${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_strong} ${deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `\x3Cspan style="color: #d0021b; text-decoration: line-through; font-weight: normal; margin-right: 4px;">was ${currencySym}${escapedMsrp}${_span} ` : ''}\x3Cspan style="color: #1f69ff; font-weight: normal;">now ${formattedPrice} at ${this.escapeHTML(deal.merchant)}${_span}`                          )                        : this.escapeHTML(deal.title)                      }                    ${_a}                  ${_h3}                  ${deal.description ? `\x3Cp style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 12px; line-height: 1.4;">${this.escapeHTML(deal.description)}${_p}` : ''}                  \x3Cdiv class="tg-df-card-footer">                    ${priceGroupHtml}                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" class="tg-df-card-cta ${isSavingsSquadMode ? 'tg-df-cta-savings-squad' : ''}" style="text-decoration: none;">${ctaText}${_a}                  ${_div}                ${_div}              ${_div}            `;                        return htmlOutput;            } catch (e) {               console.log("Error rendering deal in map for index", index, typeof deal === 'object' ? JSON.stringify(deal) : deal, "MSG:", e.message);               return '';            }          }).join('');                    if (displayDeals.length > this.displayLimit || ((this.getViewMode() === 'carousel' || this.getViewMode() === 'auto') && displayDeals.length > 0 && displayDeals.length % ((this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12) === 0)) {            if (this.getViewMode() === 'carousel') {               dealsHtml += `                 \x3Cbutton type="button" class="tg-df-load-more-card tg-df-load-more">                   \x3Csvg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-bottom: 8px;">\x3Cpath d="M5 12h14">\x3C/path>\x3Cpath d="m12 5 7 7-7 7">\x3C/path>\x3C/svg>                   Load More                 ${_button}               `;            } else {               dealsHtml += `                 \x3Cdiv style="width: 100%; display: flex; justify-content: center; margin-top: 16px; grid-column: 1 / -1;">                   \x3Cbutton type="button" class="tg-df-tag-outline tg-df-load-more" style="padding: 8px 24px; border-radius: 100px; font-weight: 600; font-size: 14px; cursor: pointer; display: flex; align-items: center;">Load More${_button}                 ${_div}               `;            }          }                    this.grid.innerHTML = dealsHtml;          // Inject JSON-LD          try {            let targetNode = this.hostContainer || document.head;            let jsonLdScript = targetNode.querySelector('#tg-df-json-ld-' + this.widgetId);            if (!jsonLdScript) {                jsonLdScript = document.createElement('script');                jsonLdScript.type = 'application/ld+json';                jsonLdScript.id = 'tg-df-json-ld-' + this.widgetId;                targetNode.appendChild(jsonLdScript);            }            const jsonLdData = {              "@context": "https://schema.org",              "@type": "ItemList",              "itemListElement": displayDeals.slice(0, this.displayLimit).map((deal, index) => {                 let isoCurrency = "USD";                 if (deal.currency === '£') isoCurrency = "GBP";                 else if (deal.currency === '€') isoCurrency = "EUR";                 else if (deal.currency === 'A$') isoCurrency = "AUD";                 else if (deal.currency === 'CA$') isoCurrency = "CAD";                 const areaCode = typeof this.getAreaCode === 'function' ? this.getAreaCode() : 'US';                 const revenueId = typeof generateRevenueId === 'function' ? generateRevenueId(deal.url, deal.title, deal.merchant, null) : '';                 const rewrittenLink = typeof rewriteAffiliateLink === 'function' ? rewriteAffiliateLink(deal.url, areaCode, revenueId) : deal.url;                 return {                   "@type": "ListItem",                   "position": index + 1,                   "item": {                     "@type": "Product",                     "name": deal.title,                     "image": deal.image || "",                     "description": deal.description || "",                     "brand": {                       "@type": "Brand",                       "name": deal.brand || ""                     },                     "offers": {                       "@type": "Offer",                       "priceCurrency": isoCurrency,                       "price": deal.rawPrice || 0,                       "url": rewrittenLink,                       "seller": {                         "@type": "Organization",                         "name": deal.merchant || ""                       }                     }                   }                 };              }).filter(item => item.item.name)            };            jsonLdScript.textContent = JSON.stringify(jsonLdData);          } catch(e) { console.warn("JSON-LD generation failed", e); }                    let gridWrapper = this.grid.parentElement;          if (gridWrapper && gridWrapper.classList.contains('tg-df-grid-wrapper')) {             let rightChevron = gridWrapper.querySelector('.tg-df-carousel-scroll-right');             let leftChevron = gridWrapper.querySelector('.tg-df-carousel-scroll-left');             if (this.getViewMode() === 'carousel') {                 // The observer set up in setupScrollListeners handles visibility.                 if (rightChevron) rightChevron.style.display = 'flex';                 if (leftChevron) leftChevron.style.display = 'none'; // reset correctly             } else {                 if (rightChevron) rightChevron.style.display = 'none';                 if (leftChevron) leftChevron.style.display = 'none';             }          }                    const loadMoreBtn = this.grid.querySelector('.tg-df-load-more');          if (loadMoreBtn) {            loadMoreBtn.addEventListener('click', async () => {              if (typeof trackElementInteraction === 'function') {                trackElementInteraction({ id: 'load-more', name: 'Load more', label: 'Load More Results' });              }              if (displayDeals.length <= this.displayLimit) {                 loadMoreBtn.innerHTML = `                  <svg class="tg-df-spinner" style="width: 16px; height: 16px; display: inline-block; vertical-align: middle; margin-right: 8px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M12 2v4m0 12v4M4.93 4.93l2.83 2.83m8.48 8.48l2.83 2.83M2 12h4m12 0h4M4.93 19.07l2.83-2.83m8.48-8.48l2.83-2.83"/></svg>                  Loading...                 `;                 loadMoreBtn.disabled = true;                 await this.fetchDeals(this.currentQuery, true);              } else {                 this.displayLimit += ((this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12);                 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');            if (!this.processArticleFired) {                  this.processArticleFired = true;                  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/computing/ipads/best-prime-day-ipad-deals-live-for-day-2-save-up-to-usd250-right-now</link>
                                                                            <description>
                            <![CDATA[ With Amazon Prime Day going strong, every model of iPad is currently on sale. Here are the best deals happening right now. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">k5YzhxMSB6zRZt4Hg5By7X</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/fRTmtbazdf5kMBTpXsGhC5-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 24 Jun 2026 15:25:35 +0000</pubDate>                                                                                                                                <updated>Thu, 25 Jun 2026 14:25:16 +0000</updated>
                                                                                                                                            <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[Computing Peripherals]]></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/fRTmtbazdf5kMBTpXsGhC5-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPad Pro M4 deals]]></media:description>                                                            <media:text><![CDATA[iPad Pro M4 deals]]></media:text>
                                <media:title type="plain"><![CDATA[iPad Pro M4 deals]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/fRTmtbazdf5kMBTpXsGhC5-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>You're in luck if you're hunting for one of the <a href="https://www.tomsguide.com/best-picks/best-ipad">best iPads</a>, as the entire line is currently discounted for <a href="https://www.tomsguide.com/live/news/savings-squad-prime-day-live-blog-amazon-best-buy-walmart">Amazon Prime Day</a>. Whether you want the regular iPad or the powerful MacBook Pro, you can save big.</p><p>For instance, the <a href="https://www.amazon.com/Apple-iPad-11-inch-Display-All-Day/dp/B0DZ77D5HL?th=1" target="_blank" rel="nofollow">11-inch iPad with the A16 chip is currently on sale for $50 off</a>. If you're looking for something a little more premium but still affordable, the <a href="https://www.amazon.com/Apple-iPad-Air-11-inch-M4/dp/B0GQVPX1PJ?th=1" target="_blank" rel="nofollow">11-inch iPad Air M4 is $80 off right now</a>. Those who want the most powerful Apple tablet yet can check out the <a href="https://www.amazon.com/dp/B0D3J776JL/ref=fs_a_ipt2_us2?th=1" target="_blank" rel="nofollow">13-inch iPad Pro M5 with 512GB for $250 off</a>.</p><p>Keep scrolling to check out the latest iPad deals at Amazon and other vendors. And if you're looking for more savings, check out our <a href="https://www.tomsguide.com/us/best-apple-deals,news-29273.html">best Apple deals</a> guide. Also, take a look at this week's top <a href="https://www.tomsguide.com/news/best-airpods-deals">AirPods sales</a> and <a href="https://www.tomsguide.com/news/cheap-macbook-deals-and-sales">MacBook deals</a>. Plus, bookmark our <a href="https://www.tomsguide.com/coupons/apple.com">Apple Store coupons</a> page for the best promo codes on all Apple devices.</p><h3 class="article-body__section" id="section-quick-links"><span>Quick links</span></h3><ul><li><a href="https://target.georiot.com/Proxy.ashx?tsid=45724&GR_URL=https%3A%2F%2Famazon.com%2Fstores%2Fpage%2F203FCFDF-1254-461E-9A68-F8813C0E0A64%3Ftag%3Dftr-tomsguide-us-20%26ascsubtag%3Dtomsguide-us-1498183392486865160-20" target="_blank" rel="nofollow"><strong>shop all iPads on sale at Amazon</strong></a></li><li><strong>11" iPad (A16, 128GB): </strong><a href="https://target.georiot.com/Proxy.ashx?tsid=45724&GR_URL=https%3A%2F%2Famazon.com%2FApple-iPad-11-inch-Display-All-Day%2Fdp%2FB0DZ77D5HL%3Ftag%3Dftr-tomsguide-us-20%26ascsubtag%3Dtomsguide-us-1498183392486865160-20" target="_blank" rel="nofollow"><strong>was $349 now $299 @ Amazon</strong></a></li><li><strong>Apple iPad Mini (A17 Pro, 128GB): </strong><a href="https://www.amazon.com/dp/B0DK3W4YHS?th=1" target="_blank" rel="nofollow"><strong>was $499 now $399 @ Amazon</strong></a><strong> </strong></li><li><strong>11" iPad Air (M4, 128GB): </strong><a href="https://www.amazon.com/Apple-iPad-Air-11-inch-M4/dp/B0GQVPX1PJ?th=1" target="_blank" rel="nofollow"><strong>was $599 now $519 @ Amazon</strong></a></li><li><strong>11" iPad Pro (M5, 256GB): </strong><a href="https://target.georiot.com/Proxy.ashx?tsid=45724&GR_URL=https%3A%2F%2Famazon.com%2Fdp%2FB0FWCXJVHN%3Ftag%3Dftr-tomsguide-us-20%26ascsubtag%3Dtomsguide-us-1498183392486865160-20" target="_blank" rel="nofollow"><strong>was $999 now $899 @ Amazon</strong></a></li><li><strong>13" iPad Pro (M5, 256GB): </strong><a href="https://target.georiot.com/Proxy.ashx?tsid=45724&GR_URL=https%3A%2F%2Famazon.com%2Fdp%2FB0FWD1MS82%3Ftag%3Dftr-tomsguide-us-20%26ascsubtag%3Dtomsguide-us-1498183392486865160-20" target="_blank" rel="nofollow"><strong>was $1,299 now $1,199 @ Amazon</strong></a></li><li><strong>13" iPad Pro (M5, 512GB): </strong><a href="https://www.amazon.com/dp/B0D3J776JL/ref=fs_a_ipt2_us2?th=1" target="_blank" rel="nofollow"><strong>was $1,499 now $1,249 @ Amazon</strong></a></li></ul><h3 class="article-body__section" id="section-best-ipad-deals"><span>Best iPad deals</span></h3><div class="product"><a data-dimension112="47792ed9-a603-40d7-8c1a-5d6a0de88788" data-action="Deal Block" data-label="11" iPad (WiFi/128GB)" data-dimension48="11" iPad (WiFi/128GB)" data-dimension25="$299" 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="47792ed9-a603-40d7-8c1a-5d6a0de88788" data-action="Deal Block" data-label='11" iPad (WiFi/128GB)' data-dimension48='11" iPad (WiFi/128GB)' data-dimension25="$299">11" iPad (WiFi/128GB): was $349 now $299</a></strong><br>The latest iPad features a larger 11-inch (2360 x 1640) screen, an A16 CPU, 12MP rear/front cameras, USB-C connectivity, and support for the Magic Keyboard Folio ($249). The base model features 128GB of storage, which doubles the capacity of its predecessor. It's available in 128GB, 256GB, and 512GB capacities, and each of those is also discounted for Prime Day.<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="47792ed9-a603-40d7-8c1a-5d6a0de88788" data-action="Deal Block" data-label="11" iPad (WiFi/128GB)" data-dimension48="11" iPad (WiFi/128GB)" data-dimension25="$299">View Deal</a></p></div><div class="product"><a data-dimension112="f5d942e9-0d09-4a88-b6a9-2506af98e371" data-action="Deal Block" data-label="iPad mini 7 (256GB)" data-dimension48="iPad mini 7 (256GB)" data-dimension25="$399" href="https://www.amazon.com/dp/B0DK3W4YHS?th=1" 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><strong><a href="https://www.amazon.com/dp/B0DK3W4YHS?th=1" target="_blank" rel="nofollow" data-dimension112="f5d942e9-0d09-4a88-b6a9-2506af98e371" data-action="Deal Block" data-label="iPad mini 7 (256GB)" data-dimension48="iPad mini 7 (256GB)" data-dimension25="$399">iPad mini 7 (256GB): was $499 now $399</a></strong><br>The iPad mini is getting a big discount during Prime Day. 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">iPad mini 7 review</a>, we said it delivers the full iPad experience in a tiny size. The 256GB and 512GB models are also on sale for $100 for Prime Day.<a class="view-deal button" href="https://www.amazon.com/dp/B0DK3W4YHS?th=1" target="_blank" rel="nofollow" data-dimension112="f5d942e9-0d09-4a88-b6a9-2506af98e371" data-action="Deal Block" data-label="iPad mini 7 (256GB)" data-dimension48="iPad mini 7 (256GB)" data-dimension25="$399">View Deal</a></p></div><h3 class="article-body__section" id="section-best-ipad-air-deals"><span>Best iPad Air deals</span></h3><div class="product"><a data-dimension112="8f95a6a6-ccc7-4583-b77e-45df0a311529" data-action="Deal Block" data-label="11" iPad Air (WiFi/128GB)" data-dimension48="11" iPad Air (WiFi/128GB)" data-dimension25="$519" href="https://www.amazon.com/Apple-iPad-Air-11-inch-M4/dp/B0GQVPX1PJ?th=1" 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?th=1" target="_blank" rel="nofollow" data-dimension112="8f95a6a6-ccc7-4583-b77e-45df0a311529" data-action="Deal Block" data-label='11" iPad Air (WiFi/128GB)' data-dimension48='11" iPad Air (WiFi/128GB)' data-dimension25="$519">11" iPad Air (WiFi/128GB): was $599 now $519</a></strong><br>Save $80 now on the new iPad Air for Prime Day, which packs Apple's faster M4 processor, an 11-inch LED (2360 x 1640) display, 128GB of storage, a 12MP rear camera, and a 12MP front camera. The tablet now supports Wi-Fi 7 as 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?th=1" target="_blank" rel="nofollow" data-dimension112="8f95a6a6-ccc7-4583-b77e-45df0a311529" data-action="Deal Block" data-label="11" iPad Air (WiFi/128GB)" data-dimension48="11" iPad Air (WiFi/128GB)" data-dimension25="$519">View Deal</a></p></div><div class="product"><a data-dimension112="db302dca-811d-4476-adcc-ef9d0c458ce0" data-action="Deal Block" data-label="iPad Air (13-inch, M4)" data-dimension48="iPad Air (13-inch, M4)" data-dimension25="$699" href="https://www.amazon.com/Apple-iPad-Air-13-inch-M4/dp/B0GQVLJGJH?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1368px;"><p class="vanilla-image-block" style="padding-top:109.65%;"><img id="5LtYHnqoh7QQJRLor82SEG" name="iPad Air 13 2024 deal block.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/5LtYHnqoh7QQJRLor82SEG-1920-80.jpg" mos="" align="middle" fullscreen="" width="1368" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Apple-iPad-Air-13-inch-M4/dp/B0GQVLJGJH?th=1" target="_blank" rel="nofollow" data-dimension112="db302dca-811d-4476-adcc-ef9d0c458ce0" data-action="Deal Block" data-label="iPad Air (13-inch, M4)" data-dimension48="iPad Air (13-inch, M4)" data-dimension25="$699">iPad Air (13-inch, M4): was $799 now $699</a></strong><br>This larger-size iPad Air sports the same M4 processor, but it's coupled with a 13-inch LED (2732 x 2048) display. Right now you can save $100 for Prime Day. Otherwise, it packs the same 128GB of storage, 12MP rear camera, and 12MP front camera. You also get Wi-Fi 7 support, Bluetooth 6, and Thread. The larger display and more potent CPU should make this a great tablet for gaming.<a class="view-deal button" href="https://www.amazon.com/Apple-iPad-Air-13-inch-M4/dp/B0GQVLJGJH?th=1" target="_blank" rel="nofollow" data-dimension112="db302dca-811d-4476-adcc-ef9d0c458ce0" data-action="Deal Block" data-label="iPad Air (13-inch, M4)" data-dimension48="iPad Air (13-inch, M4)" data-dimension25="$699">View Deal</a></p></div><h3 class="article-body__section" id="section-best-ipad-pro-deals"><span>Best iPad Pro deals</span></h3><div class="product"><a data-dimension112="e55da603-a99f-4778-b4f0-7cedfd51c988" data-action="Deal Block" data-label="iPad Pro M5 11" (Wi-Fi/256GB)" data-dimension48="iPad Pro M5 11" (Wi-Fi/256GB)" data-dimension25="$899" href="https://www.amazon.com/dp/B0FWCXJVHN" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1308px;"><p class="vanilla-image-block" style="padding-top:114.68%;"><img id="kVGdyTH2y4y4yS5Mwos2bg" name="iPad Pro M5 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/kVGdyTH2y4y4yS5Mwos2bg-1920-80.jpg" mos="" align="middle" fullscreen="" width="1308" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0FWCXJVHN" target="_blank" rel="nofollow" data-dimension112="e55da603-a99f-4778-b4f0-7cedfd51c988" data-action="Deal Block" data-label='iPad Pro M5 11" (Wi-Fi/256GB)' data-dimension48='iPad Pro M5 11" (Wi-Fi/256GB)' data-dimension25="$899">iPad Pro M5 11" (Wi-Fi/256GB): was $999 now $899</a></strong><br>This iPad Pro packs Apple's latest M5 processor paired with a stunning 11-inch Ultra Retina XDR OLED (2420 x 1668) display. The M5 processor features 9 CPU cores and 10 GPU cores. It also features a landscape 12MP Center Stage camera and a 12MP Wide camera with adaptive True Tone flash. In our <a href="https://www.tomsguide.com/computing/ipads/ipad-pro-m5-review">iPad Pro M5 review,</a> we said this is "the most powerful tablet ever." This is an equally powerful Prime Day deal at $100 off.<a class="view-deal button" href="https://www.amazon.com/dp/B0FWCXJVHN" target="_blank" rel="nofollow" data-dimension112="e55da603-a99f-4778-b4f0-7cedfd51c988" data-action="Deal Block" data-label="iPad Pro M5 11" (Wi-Fi/256GB)" data-dimension48="iPad Pro M5 11" (Wi-Fi/256GB)" data-dimension25="$899">View Deal</a></p></div><div class="product"><a data-dimension112="f2742dee-1c42-4c95-b7b8-375a2d2356a8" data-action="Deal Block" data-label="iPad Pro M5 13" (Wi-Fi/256GB)" data-dimension48="iPad Pro M5 13" (Wi-Fi/256GB)" data-dimension25="$1199" href="https://www.amazon.com/Apple-iPad-Pro-13-inch-Landscape/dp/B0FWD1MS82" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1308px;"><p class="vanilla-image-block" style="padding-top:114.68%;"><img id="kVGdyTH2y4y4yS5Mwos2bg" name="iPad Pro M5 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/kVGdyTH2y4y4yS5Mwos2bg-1920-80.jpg" mos="" align="middle" fullscreen="" width="1308" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Apple-iPad-Pro-13-inch-Landscape/dp/B0FWD1MS82" target="_blank" rel="nofollow" data-dimension112="f2742dee-1c42-4c95-b7b8-375a2d2356a8" data-action="Deal Block" data-label='iPad Pro M5 13" (Wi-Fi/256GB)' data-dimension48='iPad Pro M5 13" (Wi-Fi/256GB)' data-dimension25="$1199">iPad Pro M5 13" (Wi-Fi/256GB): was $1299 now $1199</a></strong><br>If you want a bigger screen, the 13-inch iPad Pro is hard to beat at $100 off for Prime Day right now. It features an Ultra Retina XDR OLED (2752 x 2064) display, along with all the other aforementioned features of the 11-inch model. The iPad Pro is for those who want the best of the best.<a class="view-deal button" href="https://www.amazon.com/Apple-iPad-Pro-13-inch-Landscape/dp/B0FWD1MS82" target="_blank" rel="nofollow" data-dimension112="f2742dee-1c42-4c95-b7b8-375a2d2356a8" data-action="Deal Block" data-label="iPad Pro M5 13" (Wi-Fi/256GB)" data-dimension48="iPad Pro M5 13" (Wi-Fi/256GB)" data-dimension25="$1199">View Deal</a></p></div><div class="product"><a data-dimension112="340f7c6d-8d5c-4a93-b968-e7ea6170834d" data-action="Deal Block" data-label="iPad Pro (13-inch, 512GB)" data-dimension48="iPad Pro (13-inch, 512GB)" data-dimension25="$1249" href="https://www.amazon.com/dp/B0D3J776JL/ref=fs_a_ipt2_us2?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1308px;"><p class="vanilla-image-block" style="padding-top:114.68%;"><img id="kVGdyTH2y4y4yS5Mwos2bg" name="iPad Pro M5 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/kVGdyTH2y4y4yS5Mwos2bg-1920-80.jpg" mos="" align="middle" fullscreen="" width="1308" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0D3J776JL/ref=fs_a_ipt2_us2?th=1" target="_blank" rel="nofollow" data-dimension112="340f7c6d-8d5c-4a93-b968-e7ea6170834d" data-action="Deal Block" data-label="iPad Pro (13-inch, 512GB)" data-dimension48="iPad Pro (13-inch, 512GB)" data-dimension25="$1249">iPad Pro (13-inch, 512GB): was $1499 now $1249</a></strong><br>This is the biggest discount we've seen so far at $250 off, and it's well worth it if you want an iPad Pro with more storage. Besides that, this model has the same specs as the 13-inch iPad Pro with 256GB of storage.<a class="view-deal button" href="https://www.amazon.com/dp/B0D3J776JL/ref=fs_a_ipt2_us2?th=1" target="_blank" rel="nofollow" data-dimension112="340f7c6d-8d5c-4a93-b968-e7ea6170834d" data-action="Deal Block" data-label="iPad Pro (13-inch, 512GB)" data-dimension48="iPad Pro (13-inch, 512GB)" data-dimension25="$1249">View Deal</a></p></div><h3 class="article-body__section" id="section-best-ipad-deals-accessories"><span>Best iPad deals accessories</span></h3><div class="product"><a data-dimension112="e3352fdd-a168-4d94-9c91-4baa6fa17305" data-action="Deal Block" data-label="Pencil Pro" data-dimension48="Pencil Pro" data-dimension25="$99" href="https://www.amazon.com/dp/B0D3J71RM7" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:661px;"><p class="vanilla-image-block" style="padding-top:90.62%;"><img id="8NaAt3NqWhFrzB2jAsKTfL" name="Apple Pencil Pro deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/8NaAt3NqWhFrzB2jAsKTfL-1920-80.jpg" mos="" align="middle" fullscreen="" width="661" height="599" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Apple Pencil Pro is Apple's latest iPad stylus. Its gestures and haptics allow you to seamlessly create without missing a beat. It features pixel-perfect precision, tilt and pressure sensitivity, and low latency. It attaches to your iPad magnetically for wireless pairing and charging. It's compatible with the iPad Pro 13-inch (M4), iPad Pro 11-inch (M4), iPad Air 13-inch (M2), iPad Air 11-inch (M2), and iPad mini (A17 Pro).<a class="view-deal button" href="https://www.amazon.com/dp/B0D3J71RM7" target="_blank" rel="nofollow" data-dimension112="e3352fdd-a168-4d94-9c91-4baa6fa17305" data-action="Deal Block" data-label="Pencil Pro" data-dimension48="Pencil Pro" data-dimension25="$99">View Deal</a></p></div><div class="product"><a data-dimension112="57b82807-cf19-47e2-b728-8dad2026c60c" data-action="Deal Block" data-label="Smart Folio (iPad Mini A17)" data-dimension48="Smart Folio (iPad Mini A17)" data-dimension25="$52" href="https://www.amazon.com/Apple-Smart-Folio-iPad-Mini/dp/B0DK3WBL4P" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1168px;"><p class="vanilla-image-block" style="padding-top:88.61%;"><img id="u2NQFncqhBZum6AXktTg4R" name="Apple Smart Folio for iPad Air.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/u2NQFncqhBZum6AXktTg4R-1920-80.jpg" mos="" align="middle" fullscreen="" width="1168" height="1035" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Apple-Smart-Folio-iPad-Mini/dp/B0DK3WBL4P" target="_blank" rel="nofollow" data-dimension112="57b82807-cf19-47e2-b728-8dad2026c60c" data-action="Deal Block" data-label="Smart Folio (iPad Mini A17)" data-dimension48="Smart Folio (iPad Mini A17)" data-dimension25="$52">Smart Folio (iPad Mini A17): was $59 now $52</a></strong><br>The Apple Smart Folio (for the iPad Mini A17 Pro and iPad Mini 6th generation)  is on sale for Prime Day. The case protects the front and back of your iPad Mini and can also be used for propping up your iPad.<a class="view-deal button" href="https://www.amazon.com/Apple-Smart-Folio-iPad-Mini/dp/B0DK3WBL4P" target="_blank" rel="nofollow" data-dimension112="57b82807-cf19-47e2-b728-8dad2026c60c" data-action="Deal Block" data-label="Smart Folio (iPad Mini A17)" data-dimension48="Smart Folio (iPad Mini A17)" data-dimension25="$52">View Deal</a></p></div><div class="product"><a data-dimension112="c88a2ac2-1539-455c-8485-7c274672f966" data-action="Deal Block" data-label="ZAGG iPad cases/keyboards: up to 35% off @ Amazon" data-dimension48="ZAGG iPad cases/keyboards: up to 35% off @ Amazon" href="https://www.amazon.com/stores/page/95B57F20-ECDA-432D-9A36-8F6767ABF8F8" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1019px;"><p class="vanilla-image-block" style="padding-top:96.66%;"><img id="mnQ5ank7EYesxjauvV63vF" name="ZAGG Pro Keys Wireless Keyboard and Detachable Case.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/mnQ5ank7EYesxjauvV63vF-1920-80.jpg" mos="" align="middle" fullscreen="" width="1019" height="985" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>ZAGG iPad cases/keyboards: </strong><a href="https://www.amazon.com/stores/page/95B57F20-ECDA-432D-9A36-8F6767ABF8F8" target="_blank" rel="nofollow" data-dimension112="c88a2ac2-1539-455c-8485-7c274672f966" data-action="Deal Block" data-label="ZAGG iPad cases/keyboards: up to 35% off @ Amazon" data-dimension48="ZAGG iPad cases/keyboards: up to 35% off @ Amazon" data-dimension25=""><strong>up to 35% off @ Amazon</strong></a>. <br>Amazon is taking up to 35% off select ZAGG iPad cases and accessories. After discount, prices start as low as $47. It's one of the best iPad deals we've seen on these accessories.<a class="view-deal button" href="https://www.amazon.com/stores/page/95B57F20-ECDA-432D-9A36-8F6767ABF8F8" target="_blank" rel="nofollow" data-dimension112="c88a2ac2-1539-455c-8485-7c274672f966" data-action="Deal Block" data-label="ZAGG iPad cases/keyboards: up to 35% off @ Amazon" data-dimension48="ZAGG iPad cases/keyboards: up to 35% off @ Amazon" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="d030fa65-2280-47ff-8b90-e74102420aa7" data-action="Deal Block" data-label="Combo Touch iPad Case" data-dimension48="Combo Touch iPad Case" data-dimension25="$186" href="https://www.amazon.com/dp/B0937Z63SR" 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:83.00%;"><img id="bbqTx2XZJfkBxwrvfHwSpK" name="logitech combo touch ipad pro 11 inch case.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/bbqTx2XZJfkBxwrvfHwSpK-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="1245" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0937Z63SR" target="_blank" rel="nofollow" data-dimension112="d030fa65-2280-47ff-8b90-e74102420aa7" data-action="Deal Block" data-label="Combo Touch iPad Case" data-dimension48="Combo Touch iPad Case" data-dimension25="$186">Combo Touch iPad Case: was $229 now $186</a></strong><br>This is our favorite iPad case. It's got an outstanding feature set, with a built-in keyboard and trackpad and dedicated shortcut buttons. It's pricy, but that's less of a problem now that it's on sale. This deal is for the 11-inch iPad Pro case.<a class="view-deal button" href="https://www.amazon.com/dp/B0937Z63SR" target="_blank" rel="nofollow" data-dimension112="d030fa65-2280-47ff-8b90-e74102420aa7" data-action="Deal Block" data-label="Combo Touch iPad Case" data-dimension48="Combo Touch iPad Case" data-dimension25="$186">View Deal</a></p></div><div class="product"><a data-dimension112="09f48bd7-6e48-4418-8d0d-67a9c625e730" data-action="Deal Block" data-label="Smart Keyboard for iPad" data-dimension48="Smart Keyboard for iPad" data-dimension25="$79" href="https://www.amazon.com/Apple-Smart-Keyboard-iPad-Generation/dp/B0863F5KCT" 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:78.73%;"><img id="KRkh8wJLEXPoiACGEjCHEZ" name="Apple Smart Keyboard for iPad.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/KRkh8wJLEXPoiACGEjCHEZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="1181" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Apple-Smart-Keyboard-iPad-Generation/dp/B0863F5KCT" target="_blank" rel="nofollow" data-dimension112="09f48bd7-6e48-4418-8d0d-67a9c625e730" data-action="Deal Block" data-label="Smart Keyboard for iPad" data-dimension48="Smart Keyboard for iPad" data-dimension25="$79">Smart Keyboard for iPad: was $159 now $79</a></strong><br>Amazon has the Apple Smart Keyboard on sale for $115. The keyboard is compatible with the iPad (7th and 8th generation) as well as the iPad Air (3rd generation). <a class="view-deal button" href="https://www.amazon.com/Apple-Smart-Keyboard-iPad-Generation/dp/B0863F5KCT" target="_blank" rel="nofollow" data-dimension112="09f48bd7-6e48-4418-8d0d-67a9c625e730" data-action="Deal Block" data-label="Smart Keyboard for iPad" data-dimension48="Smart Keyboard for iPad" data-dimension25="$79">View Deal</a></p></div><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=ipads&brands=Apple&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="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 { background-color: #5DAF08 !important; }              .tg-df-container .hawk-affiliate-link-deal-button:hover { background-color: #4a8c06 !important; }            `;            this.root.appendChild(style);          }                    if (this.regionSelect) {            this.regionSelect.value = params.get('region') || 'auto';            this.updatePriceDropdownCurrency();          }                    if (this.retailerSelect && params.has('retailer')) {            this.retailerSelect.value = params.get('retailer');          }                    if (params.has('brands')) {            const b = params.get('brands');            if (b) {              this.selectedBrands = b.split(',');            }          }                    if (this.offerTypeSelect && params.has('offer_type')) {            this.offerTypeSelect.value = params.get('offer_type');          }          if (params.has('bg_color')) {            const bg = params.get('bg_color');            if (bg === 'white') {              this.root.style.setProperty('background-color', '#ffffff', 'important');            } else if (bg === 'transparent') {              this.root.style.setProperty('background-color', 'transparent', 'important');            } else if (bg === 'light_blue') {              this.root.style.setProperty('background-color', '#E7F0FF', 'important');            }          } else {             this.root.style.removeProperty('background-color');          }                    if (params.has('view_mode')) {            if (this.viewModeSelect) {              this.viewModeSelect.value = params.get('view_mode');            } else {              this.viewModeOverride = params.get('view_mode');            }          }          if (this.rowsSelect && params.has('rows')) {            this.rowsSelect.value = params.get('rows');          }          if (params.has('price')) {            const priceVal = params.get('price');            if (this.priceFilter) {               // Try assigning it directly to select. If it's not present implicitly ignores               this.priceFilter.value = priceVal;            }            if (priceVal.includes('_')) {               const parts = priceVal.split('_');               if (this.customPriceMin && parts[0]) this.customPriceMin.value = parts[0];               if (this.customPriceMax && parts[1]) this.customPriceMax.value = parts[1];            }          }          if (this.discountFilter && params.has('min_discount_ratio')) {            // Need to convert back from ratio (e.g. 0.8) to select value (e.g. "20")            const ratioStr = params.get('min_discount_ratio');            const ratioFloat = parseFloat(ratioStr);            if (!isNaN(ratioFloat)) {               const percentage = Math.round((1 - ratioFloat) * 100);               this.discountFilter.value = percentage.toString();            }          }          if (this.sortSelect) {            this.sortSelect.value = params.get('sort') || 'discount_desc';          }          if (this.dealModeToggle && params.has('deal_mode')) {            this.dealModeToggle.checked = params.get('deal_mode') === 'true' || params.get('deal_mode') === '1';          }                    // Re-apply layout after params have updated control values          this.applyLayoutMode();                    if (params.get('search')) {            initialQuery = params.get('search');          } else if (params.get('q')) {            initialQuery = params.get('q');          } else if (params.get('query')) {            initialQuery = params.get('query');          }                    this.currentQuery = initialQuery;          if (this.searchInput) {            this.searchInput.value = this.currentQuery;          }                    if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {            this.fetchDeals(this.currentQuery);          } else {            this.render();          }        }        updatePriceDropdownCurrency() {          if (!this.priceFilter || !this.regionSelect) return;          const currencySymbols = {            'US': '$',            'GB': '£',            'CA': '$CA',            'AU': '$AU',            'DE': '€',            'FR': '€',            'IT': '€',          };          const area = this.getAreaCode();          const cur = currencySymbols[area || 'US'] || '$';                    const options = this.priceFilter.options;          for (let i = 0; i < options.length; i++) {            const opt = options[i];            if (opt.value === 'all') {              opt.innerText = 'All Prices';            } else if (opt.value === 'under50') {              opt.innerText = `Under ${cur}50`;            } else if (opt.value === '50_100') {              opt.innerText = `${cur}50 - ${cur}100`;            } else if (opt.value === '100_200') {              opt.innerText = `${cur}100 - ${cur}200`;            } else if (opt.value === '200_500') {              opt.innerText = `${cur}200 - ${cur}500`;            } else if (opt.value === 'over500') {              opt.innerText = `Over ${cur}500`;            }          }        }        populateBrandDropdown(values) {          if (!this.brandDropdown || !this.brandFilterWrapper) return;          this.brandFilterWrapper.style.display = 'flex'; // show the wrapper                    let html = '';          const allChecked = this.selectedBrands.length === 0 ? 'checked' : '';          const _div = '<' + '/div>';          const _span = '<' + '/span>';          html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="" ${allChecked} class="tg-df-brand-chk"> Any Brand${_div}`;                    values.forEach(v => {             if (!v.formatted_value || v.formatted_value === 'Any Brand') return;             const isChecked = this.selectedBrands.includes(v.formatted_value) ? 'checked' : '';             html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="${this.escapeHTML(v.formatted_value)}" ${isChecked} class="tg-df-brand-chk"> ${this.escapeHTML(v.formatted_value)} \x3Cspan style="color:var(--tg-df-text-muted);font-size:12px">(${v.count || 0})${_span}${_div}`;          });                    this.brandDropdown.innerHTML = html;                    // Re-bind listeners          const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');          chks.forEach(chk => {            chk.addEventListener('change', (e) => {              const val = e.target.value;              if (val === '') {                this.selectedBrands = [];              } else {                if (e.target.checked) {                   if (!this.selectedBrands.includes(val)) this.selectedBrands.push(val);                } else {                   this.selectedBrands = this.selectedBrands.filter(b => b !== val);                }              }                            if (this.selectedBrands.length === 0) {                 this.brandTrigger.innerText = 'Any Brand';              } else if (this.selectedBrands.length === 1) {                 this.brandTrigger.innerText = this.selectedBrands[0];              } else {                 this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;              }                            // Only call API if changed from UI interactions              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.updateURLParams();                 this.fetchDeals(this.currentQuery);              }            });          });                    // Update button text on load          if (this.selectedBrands.length === 0) {             this.brandTrigger.innerText = 'Any Brand';          } else if (this.selectedBrands.length === 1) {             this.brandTrigger.innerText = this.selectedBrands[0];          } else {             this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;          }        }        updateURLParams() {          const url = new URL(window.location);          if (this.currentQuery && this.currentQuery !== 'Gaming laptops') {            url.searchParams.set('q', this.currentQuery);          } else {            url.searchParams.delete('q');            url.searchParams.delete('search');            url.searchParams.delete('query');          }                    if (this.regionSelect && this.regionSelect.value !== 'auto') {            url.searchParams.set('region', this.regionSelect.value);          } else {            url.searchParams.delete('region');          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.set('retailer', this.retailerSelect.value);          } else {            url.searchParams.delete('retailer');          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.set('brands', this.selectedBrands.join(','));          } else {            url.searchParams.delete('brands');          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.set('offer_type', this.offerTypeSelect.value);          } else {            url.searchParams.delete('offer_type');          }                    if (this.viewModeSelect && this.viewModeSelect.value !== 'auto') {            url.searchParams.set('view_mode', this.viewModeSelect.value);          } else {            url.searchParams.delete('view_mode');          }                    if (this.rowsSelect && this.rowsSelect.value !== '12') {            url.searchParams.set('rows', this.rowsSelect.value);          } else {            url.searchParams.delete('rows');          }                    const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             url.searchParams.set('price', `${min}_${max}`);          } else if (this.priceFilter && this.priceFilter.value !== 'all') {            url.searchParams.set('price', this.priceFilter.value);          } else {            url.searchParams.delete('price');          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {               const ratio = (100 - v) / 100;               url.searchParams.set('min_discount_ratio', ratio.toString());            }          } else {            url.searchParams.delete('min_discount_ratio');          }                    if (this.sortSelect && this.sortSelect.value !== 'discount_desc') {            url.searchParams.set('sort', this.sortSelect.value);          } else {            url.searchParams.delete('sort');          }                    if (this.dealModeToggle && this.dealModeToggle.checked) {            url.searchParams.set('deal_mode', 'true');          } else {            url.searchParams.delete('deal_mode');          }                    window.history.replaceState({}, '', url);        }        bindEvents() {          const roundels = this.root.querySelectorAll('.tg-df-carousel-cat.original-hardcoded');          roundels.forEach(r => {             r.addEventListener('click', () => {                const q = r.getAttribute('data-query');                const pr = r.getAttribute('data-pr');                if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: q,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = q;                const label = this.root.querySelector('#tg-df-carousel-title-label');                if (label) label.textContent = 'Best ' + q;                if (this.priceFilter) this.priceFilter.value = pr || 'all';                if (this.discountFilter) this.discountFilter.value = '5';                if (this.searchInput) this.searchInput.value = q;                                roundels.forEach(ro => ro.classList.remove('active'));                r.classList.add('active');                this.fetchDeals(this.currentQuery);             });          });          const discBtns = this.root.querySelectorAll('.tg-df-carousel-filter-btn');          discBtns.forEach(b => {             b.addEventListener('click', () => {                const d = b.getAttribute('data-d');                const pr = b.getAttribute('data-pr');                const ot = b.getAttribute('data-ot');                let label = b.innerText ? b.innerText.trim() : '';                let filterType = 'unknown';                let filterVal = 'unknown';                if (d !== null) { filterType = 'discount'; filterVal = d; }                else if (pr !== null) { filterType = 'price'; filterVal = pr; }                else if (ot !== null) { filterType = 'offertype'; filterVal = ot; }                if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-${filterType}-${filterVal}`, name: 'Filter Button', label: label });                                if (d !== null) {                   if (this.discountFilter) this.discountFilter.value = this.discountFilter.value === d ? '0' : d;                } else if (pr !== null) {                   if (this.priceFilter) this.priceFilter.value = this.priceFilter.value === pr ? 'all' : pr;                } else if (ot !== null) {                   if (this.offerTypeSelect) this.offerTypeSelect.value = this.offerTypeSelect.value === ot ? 'all' : ot;                } else {                   if (this.discountFilter) this.discountFilter.value = '0';                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.offerTypeSelect) this.offerTypeSelect.value = 'all';                }                if (d === null && pr === null && ot === null && b.getAttribute("data-type") !== "custom") {                   discBtns.forEach(ro => ro.classList.remove('active'));                   b.classList.add('active');                } else if (b.getAttribute("data-type") !== "custom") {                   // Only operate on hardcoded buttons (those without data-type)                   discBtns.forEach(ro => {                      if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active');                   });                                      let makeActive = true;                   if (d !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-d') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (pr !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-pr') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (ot !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-ot') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   }                                      if (makeActive) b.classList.add('active');                                      // Check if anything is active, if not activate "All"                   let anyActive = false;                   discBtns.forEach(ro => { if (ro.classList.contains('active') && ro.getAttribute('data-type') !== 'custom') anyActive = true; });                   if (!anyActive) {                       discBtns.forEach(ro => { if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.add('active'); });                   }                }                                this.fetchDeals(this.currentQuery);             });          });          if (this.brandTrigger && this.brandDropdown) {            this.brandTrigger.addEventListener('click', () => {              this.brandDropdown.classList.toggle('active');            });            document.addEventListener('click', (e) => {              if (this.brandFilterWrapper && !e.composedPath().includes(this.brandFilterWrapper)) {                this.brandDropdown.classList.remove('active');              }            });          }          let debounceTimer;          if(this.searchInput) {            this.searchInput.addEventListener('input', (e) => {              clearTimeout(debounceTimer);              const query = e.target.value.trim();              this.currentQuery = query;              if (this.getViewMode() === 'savings_squad' && this.autocompleteDropdown && this.airedaleTags && query.length > 0) {                 const matches = this.airedaleTags.filter(t => t.toLowerCase().includes(query.toLowerCase()) && t.toLowerCase() !== query.toLowerCase()).slice(0, 5);                 if (matches.length > 0) {                    this.autocompleteDropdown.innerHTML = matches.map(m => `\x3Cdiv class="tg-df-autocomplete-item" data-tag="${this.escapeHTML(m)}">${this.escapeHTML(m)}<` + `/div>`).join('');                    this.autocompleteDropdown.classList.add('active');                 } else {                    this.autocompleteDropdown.classList.remove('active');                 }              } else if (this.autocompleteDropdown) {                 this.autocompleteDropdown.classList.remove('active');              }              debounceTimer = setTimeout(() => {                this.updateURLParams();                if (query.length > 2) {                  this.fetchDeals(query);                } else if (query.length === 0) {                  this.deals = [];                  this.render();                }              }, 400);            });            this.searchInput.addEventListener('keypress', (e) => {              if (e.key === 'Enter') {                if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');                clearTimeout(debounceTimer);                const query = e.target.value.trim();                this.currentQuery = query;                this.activeDealTag = null;                trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                this.updateURLParams();                if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                   this.fetchDeals(query);                }              }            });          }          if (this.autocompleteDropdown) {             this.autocompleteDropdown.addEventListener('click', (e) => {                const item = e.target.closest('.tg-df-autocomplete-item');                if (item) {                   const tag = item.getAttribute('data-tag');                   this.currentQuery = tag;                   if (this.searchInput) this.searchInput.value = tag;                   this.activeDealTag = tag;                   this.autocompleteDropdown.classList.remove('active');                   this.updateURLParams();                   this.fetchDeals(tag);                }             });             document.addEventListener('click', (e) => {               if (this.autocompleteDropdown && this.searchInput && !e.composedPath().includes(this.searchInput) && !e.composedPath().includes(this.autocompleteDropdown)) {                 this.autocompleteDropdown.classList.remove('active');               }             });          }          if (this.searchBtn) {            this.searchBtn.addEventListener('click', () => {              if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');              clearTimeout(debounceTimer);              const query = this.searchInput.value.trim();              trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });              this.activeDealTag = null;              this.currentQuery = query;              this.updateURLParams();              if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.fetchDeals(query);              }            });          }          if(this.sortSelect) this.sortSelect.addEventListener('change', () => {            trackElementInteraction({ id: `sort-option-${this.sortSelect.value}`, name: 'Sort', label: `Sort: ${this.sortSelect.options[this.sortSelect.selectedIndex].text}` });            this.updateURLParams();            if (this.deals.length > 0) {              this.sortData();              this.render();            }          });                    const priceFilter = this.root.querySelector('#tg-df-price-filter');          if (priceFilter) {            this.priceFilter = priceFilter;            this.priceFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-price-${this.priceFilter.value}`, name: 'Price', label: this.priceFilter.options[this.priceFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          const updateCustomPrice = () => {             this.updateURLParams();             if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);             } else {                this.render();             }          };          if (this.customPriceMin) {             this.customPriceMin.addEventListener('change', updateCustomPrice);             this.customPriceMin.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          if (this.customPriceMax) {             this.customPriceMax.addEventListener('change', updateCustomPrice);             this.customPriceMax.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          const discountFilter = this.root.querySelector('#tg-df-discount-filter');          if (discountFilter) {            this.discountFilter = discountFilter;            this.discountFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-discount-${this.discountFilter.value}`, name: 'Discount', label: this.discountFilter.options[this.discountFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          if (this.categoryFilter) {            this.categoryFilter.addEventListener('change', (e) => {               const val = e.target.value === 'all' ? null : e.target.value;               this.activeDealTag = val;               this.fetchSavingsSquad();            });          }                    if (this.settingsToggle) {            this.settingsToggle.addEventListener('click', () => {              const o = this.settingsPanel.classList.toggle('active');              this.settingsBackdrop.classList.toggle('active');              if (o) trackElementInteraction({ id: 'filter-open', name: 'Filters', label: 'Open filters' });            });          }                    if (this.settingsBackdrop) {            this.settingsBackdrop.addEventListener('click', () => {              this.settingsPanel.classList.remove('active');              this.settingsBackdrop.classList.remove('active');            });          }                    if (this.regionSelect) {            this.regionSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-region-${this.regionSelect.value}`, name: 'Region', label: this.regionSelect.options[this.regionSelect.selectedIndex].text });              this.updateURLParams();              this.updatePriceDropdownCurrency();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.retailerSelect) {            this.retailerSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-merchant-${this.retailerSelect.value}`, name: 'Retailer', label: this.retailerSelect.options[this.retailerSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.offerTypeSelect) {            this.offerTypeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-offertype-${this.offerTypeSelect.value}`, name: 'Offer Type', label: this.offerTypeSelect.options[this.offerTypeSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.viewModeSelect) {            this._prevViewMode = this.viewModeSelect.value;            this.viewModeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-viewmode-${this.viewModeSelect.value}`, name: 'View Mode', label: this.viewModeSelect.options[this.viewModeSelect.selectedIndex].text });                            // Reset all active toggles and filters to prevent config carry-over              this.selectedBrands = [];              if (this.brandTrigger) this.brandTrigger.innerText = 'Select Brands';              if (this.brandDropdown) {                const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                chks.forEach(chk => { chk.checked = false; });              }              if (this.priceFilter) this.priceFilter.value = 'all';              if (this.customPriceMin) this.customPriceMin.value = '';              if (this.customPriceMax) this.customPriceMax.value = '';              if (this.sortSelect) this.sortSelect.value = this.viewModeSelect.value === 'savings_squad' ? 'date_desc' : 'discount_desc';              if (this.discountFilter) this.discountFilter.value = '0';              if (this.retailerSelect) this.retailerSelect.value = '';              if (this.offerTypeSelect) this.offerTypeSelect.value = '';              if (this.rowsSelect) this.rowsSelect.value = '12';              if (this.categoryFilter) this.categoryFilter.value = 'all';              this.activeDealTag = null;              this.updateURLParams();              this.applyLayoutMode();                            if (this.getViewMode() === 'savings_squad' || this._prevViewMode === 'savings_squad') {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }              this._prevViewMode = this.viewModeSelect.value;            });          }                    if (this.rowsSelect) {            this.rowsSelect.addEventListener('change', () => {              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.dealModeToggle) {            this.dealModeToggle.addEventListener('change', () => {              this.updateURLParams();              this.render();            });          }          if (this.editorModeToggle) {             this.editorModeToggle.addEventListener('change', (e) => {                this.editorMode = e.target.checked;                this.render();                this.updateFloatingCopyBar();             });          }          if (this.editorCopyBtn) {             this.editorCopyBtn.addEventListener('click', () => {                this.copySelectedDealsToCMS();             });          }          if (this.editorClearBtn) {             this.editorClearBtn.addEventListener('click', () => {                this.selectedDeals.clear();                this.render();                this.updateFloatingCopyBar();             });          }          if (this.grid) {            this.grid.addEventListener('change', (e) => {               if (e.target.classList.contains('tg-df-deal-checkbox')) {                  const dealId = e.target.getAttribute('data-id');                  if (e.target.checked) {                     const dealObj = this.deals.find(d => d.id === dealId);                     if (dealObj) this.selectedDeals.set(dealId, dealObj);                  } else {                     this.selectedDeals.delete(dealId);                  }                  this.updateFloatingCopyBar();               }            });            this.grid.addEventListener('click', (e) => {              const dealCard = e.target.closest('[data-action="deal-click"]');              const similarCard = e.target.closest('[data-action="view-similar-click"]');              const cardLink = dealCard || similarCard;              if (cardLink) {                const productName = cardLink.getAttribute('data-product-name');                const merchantName = cardLink.getAttribute('data-merchant-name');                const productId = cardLink.getAttribute('data-analytics-id');                const price = parseFloat(cardLink.getAttribute('data-price')) || null;                const prevPriceStr = cardLink.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = cardLink.getAttribute('data-original-link');                const rewrittenLink = cardLink.getAttribute('href');                const revenueId = cardLink.getAttribute('data-revenue-id');                const index = parseInt(cardLink.getAttribute('data-index'), 10) || 0;                const inStock = cardLink.getAttribute('data-in-stock') === 'true';                const totalText = cardLink.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: cardLink.getAttribute('data-model-id') || null,                    matchId: cardLink.getAttribute('data-match-id') || null,                    brand: cardLink.getAttribute('data-model-brand') || null,                    parent: cardLink.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: cardLink.getAttribute('data-merchant-id') || null,                    network: cardLink.getAttribute('data-merchant-network') || null,                    url: cardLink.getAttribute('data-merchant-url') || null,                    name: merchantName                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: normalizeCurrency(this.escapeHTML(cardLink.getAttribute('data-currency') || '$'))                };                if (dealCard) {                  trackDealClick(trackingParams);                } else {                  trackViewSimilarClick(trackingParams);                }              }              const couponsBtn = e.target.closest('[data-action="coupons-click"]');              if (couponsBtn) {                trackElementInteraction({                  id: 'product-card-show-coupons',                  name: 'Coupons',                  label: `Product card coupons: ${couponsBtn.getAttribute('data-merchant')}`                });              }            });          }          this.setupScrollListeners();        }        setupScrollListeners() {          const containers = [             this.root.querySelector('.tg-df-carousel-roundels'),             this.root.querySelector('.tg-df-carousel-filters-wrap'),             this.root.querySelector('#tg-df-grid')          ];                    containers.forEach(container => {             if (!container) return;                          const checkScroll = () => {                if (!container.parentElement) return;                const leftBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-left');                const rightBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-right');                                if (leftBtn) {                   if (container.scrollLeft <= 5) leftBtn.style.display = 'none';                   else leftBtn.style.display = 'flex';                }                                if (rightBtn) {                   if (container.scrollWidth <= container.clientWidth) {                       rightBtn.style.display = 'none';                   } else if (container.scrollLeft >= container.scrollWidth - container.clientWidth - 5) {                       rightBtn.style.display = 'none';                   } else {                       rightBtn.style.display = 'flex';                   }                }             };                          container.addEventListener('scroll', checkScroll);             checkScroll();                          window.addEventListener('resize', checkScroll);                          const observer = new MutationObserver(checkScroll);             observer.observe(container, { childList: true, subtree: true, characterData: false });          });        }        get widgetTypeName() {          const mode = this.viewModeSelect ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');          switch(mode) {              case 'carousel': return 'Carousel';              case 'savings_squad': return 'Savings Squad';              case 'grid': return 'Grid';              case 'row': return 'Row';              default: return 'Auto Collection';          }        }        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("LCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNQ0KUm91bmRlbCB0ZXh0LEFsbCxUVnMsRm9vdHdlYXIsQXBwYXJlbCxNYXR0cmVzZXMsQXBwbGlhbmNlcyxXZWFyYWJsZSB0ZWNoLEhlYWRwaG9uZXMsU21hcnQgSG9tZSxTcGVha2VycyxMYXB0b3BzLFRhYmxldHMsQ29tcHV0aW5nLFBob25lcyxHYW1pbmcsTGVnbw0KUm91bmRlbCBpbWFnZSxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL2FpLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3R2cy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvN2IzYTIyNGIwNzk2M2M2MjdiNmI5MDliZDc4MzM4MzZlMDJmZjgxOS5qcGcud2VicCxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy84NGRhYzVkNDhlZDJkNDQ4NTU5ZWJhNjdhY2U4MzE0Y2M2N2NjZDk0LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vcHJvZHVjdHMvY2Fyb3VzZWwvbWF0dHJlc3Nlcy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvNzY4ZTk3Y2ViMDcxODAxZmFlMjA5MTBkMDgyMGIxNmY3NDdhZjkzOS5qcGcud2VicCxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3dlbGxuZXNzLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL2hlYWRwaG9uZXMuanBnLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzg5NTM1YmVlYmUyMGRiYmQ0YTM0NmQ2ZDZiZGZlOTFkOGE4ODRhMjEuanBnLndlYnAsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9hdWRpby5qcGcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9sYXB0b3BzLmpwZyxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy8yMzk3NTY0ZWQ3YTVmZjk0N2U5YjZiMzBlNTRmNDc0OTRiODQxZjg5LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vcHJvZHVjdHMvY2Fyb3VzZWwvY29tcHV0aW5nLmpwZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3Bob25lcy5wbmcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9nYW1pbmcucG5nLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzRmNmM2MjFjYWMwYmMxYTg1ZDU5M2UzNTk0YmE1YjM0OWVmZmQyOTIuanBnLndlYnANClNlYXJjaCBRdWVyeSxFdmVyeXRoaW5nLFRlbGV2aXNpb25zLCJTbmVha2VycywgcnVubmluZyBzaG9lcywgc2FuZGFscyIsQ2xvdGhpbmcsTWF0dHJlc3NlcyxIb21lIEFwcGxpYW5jZXMsV2VhcmFibGVzICYgRml0bmVzcyBUZWNoLEhlYWRwaG9uZXMsSG9tZSBUZWNoLFNwZWFrZXJzLExhcHRvcHMsVGFibGV0cyxDb21wdXRpbmcsUGhvbmVzLEdhbWluZyxDb25zdHJ1Y3Rpb24gVG95cw0KRGlzY291bnQgQW1vdW50LG1pbiA1JSxtaW4gMTAlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUNClByaWNlIFJhbmdlLCwsLCxtaW4gJDQwMCwsLCxtaW4gJDI1LCxtaW4gJDMwMCwsLG1pbiAkMTAwLCwNCkJyYW5kIFNlbGVjdGlvbiwsLCwsLCwsLCwsLCwsLCwNCkZpbHRlciBidXR0b25zLCwsLCwsLCwsLCwsLCwsLA0KMSxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMNCjIsQW1hem9uIGRlYWxzLFVuZGVyICQxMDAwLDUwJSBvZmYsQWRpZGFzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsNTAlIG9mZixBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscw0KMyxPdmVyICQ0MDAsVW5kZXIgJDUwMCxIb2thLE5pa2UsU2FhdHZhLE5pbmphLDQwJSBvZmYsSkxhYiwsSkJMLERlbGwsLEFzdXMsQXBwbGUsQ29uc29sZXMsU3RhciBXYXJzDQo0LFVuZGVyICQxMDAwLDUwJSBvZmYsU2tlY2hlcnMsVW5kZXIgQXJtb3VyLEhlbGl4LFNoYXJrLEdhcm1pbixBbmtlciBTb3VuZGNvcmUsUmluZyxTb25vcyxBcHBsZSxBcHBsZSxUUC1saW5rLFNhbXN1bmcsQWNjZXNzb3JpZXMsVW5kZXIgJDI1DQo1LFVuZGVyICQ1MDAsTEcsQXNpY3MsQ29sdW1iaWEsRHJlYW1DbG91ZCxLZXVyaWcsQXBwbGUsU29ueSxHb3ZlZSxUcmliaXQsTGVub3ZvLFNhbXN1bmcsRWVybyxHb29nbGUsR2FtZXMsVW5kZXIgJDUwDQo2LDUwJSBvZmYsU2Ftc3VuZyxOaWtlLFBhdGFnb25pYSxOZWN0YXIsRGUnTG9uZ2hpLEFtYXpmaXQsQXBwbGUsS2FzYSBzbWFydCxTb255LEFsaWVud2FyZSxUQ0wsTmV0Z2VhcixNb3Rvcm9sYSxOaW50ZW5kbyxCb3RhbmljYWxzDQo3LEFtYXpvbixIaXNlbnNlLE5ldyBCYWxhbmNlLEFyYyd0ZXJ5eCxUZW1wdXItcGVkaWMsRHlzb24sRml0Yml0LEJlYXRzLFBoaWxpcHMgSHVlLEFua2VyLEFjZXIsT25lUGx1cyxEZWxsLE9uZVBsdXMsU29ueSxEaXNuZXkNCjgsQXBwbGUsVENMLEFkaWRhcyxDYXJoYXJ0dCxCZWFyLEJpc3NlbGwsU2Ftc3VuZyxFYXJmdW4sQmxpbmssQmVhdHMsTVNJLE1pY3Jvc29mdCxBY2VyLE5vdGhpbmcsWGJveCxNYXJ2ZWwNCjksLFNvbnksU2F1Y29ueSxUaGUgTm9ydGggRmFjZSxTaWVuYSxOdXRyaWJ1bGxldCxPdXJhLFNhbXN1bmcsR29vZ2xlIE5lc3QgLE1hcnNoYWxsLFNhbXN1bmcsTGVub3ZvLExlbm92bywsLFBva2Vtb24NCjEwLCxSb2t1LEJpcmtlbnN0b2NrLENSWiBZb2dhLFdpbmtCZWRzLEJsYWNrIGFuZCBEZWNrZXIsUmluZ2Nvbm4sQ01GLEV1ZnksU2Ftc3VuZyxNaWNyb3NvZnQsUmVNYXJrYWJsZSxBbGllbndhcmUsLCwNCjExLCwsQnJvb2tzLFRoZSBHeW0gUGVvcGxlLEJyb29rbHluIGJlZGRpbmcsTmVzcHJlc3NvLCwxTW9yZSxBcmxvLCxSYXplciwsQ29yc2FpciwsLA0KMTIsLCxDcm9jcywsRWlnaHQgU2xlZXAsQ3Vpc2luYXJ0LCxKQkwsLCwsLEhQLCwsDQpOb3RlcywsLCwsLCwsLCwsLCwsLCwNCiwsIlByaW9yaXRpc2UgYmlnZ2VzdCAlLyQgZGlzY291bnQsIFR2cyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiB0aGUgbW9zdCBwb3B1bGFyIGV2ZW4gaWYgdGhleSBhcmUgc3RpbGwgZXhwZW5zaXZlIiwiTm8gcGF0dGVybiB0byBwcmljaW5nL2Rpc2NvdW50LCByZWFkZXJzIG1haW5seSBzaG9wIGJ5IGJyYW5kL3JlY29nbmlzYWJsZSBzaG9lcyIsIk5vIHBhdHRlcm4gdG8gcHJpY2luZy9kaXNjb3VudCwgcmVhZGVycyBtYWlubHkgc2hvcCBieSBicmFuZCIsIkEgbGFiZWwgd2lsbCBkZWZpbml0ZWx5IGhlbHAgaGVyZSBlLmcuIGJlc3QgZm9yIHNpZGUgc2xlZXBlciwgYmVzdCBtZW1vcnkgZm9hbSIsIkFwcGxpYW5jZXMgaXMgYSBiaWcgY2F0ZWdvcnksIGlzIGl0IHBvc3NpYmxlIHRvIHNwbGl0IGludG8ga2l0Y2hlbiBhcHBsaWFuY2VzLCBmbG9vcmNhcmUsIGFpciBoZWFsdGgvY29vbGluZz8gT3Igc2ltaWxhciIsIkZvY3VzIG9uIHZhbHVlIGZvciBtb25leSwgR2FybWlucyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiBwb3B1bGFyIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIHN0aWxsICQ1MDAiLCwsLCxJbmNsdWRlIEtpbmRsZXMsSSB3b3VsZCBpbmNsdWRlIHdpZmkgcm91dGVycyBoZXJlIGluc3RlYWQgb2Ygc21hcnQgaG9tZSxDYW4gd2Ugc3VyZmFjZSBwaG9uZSBwcm92aWRlciBkZWFscz8gVC1tb2JpbGUgYW5kIHZlcml6b24gd291bGQgbWFrZSBhIGxvdCBtb3JlIG1vbmV5IHRoYW4gQW1hem9uLCwNCiwsaGF2aW5nIGEgJ2Jlc3QgZm9yJyBsYWJlbCB3b3VsZCBiZSBoZWxwZnVsIGUuZy4gYmVzdCBmb3IgYnJpZ2h0IHJvb20sQ2FuIHdlIHN0b3Aga2lkcyBzaG9lcyBmcm9tIHB1bGxpbmcgdGhyb3VnaD8sIldpbGwgdGhpcyBpbmNsdWRlIGFjY2Vzc29yaWVzIGUuZy4gY2FwcywgYmFncywgaWYgc28gbWFrZSBzdXJlIHRoZXNlIGFyZSBtaXhlZCB0aHJvdWdob3V0IGNsb3RoaW5nIGRlYWxzIixXaWxsIHRoaXMgaW5jbHVkZSB0b3BwZXJzIGFuZCBwaWxsb3dzPyBTZWVpbmcgbW9yZSBtb21lbnR1bSB3aXRoIHRoaXMgY2F0ZWdvcnkgcmVjZW50bHkgc28gYSBiZWRkaW5nIHRhYiBtaWdodCB3b3JrLCwiTmVlZCB0byBtYWtlIHN1cmUgYmFuZHMsIHNjcmVlbiBwcm90ZWN0b3JzIGV0Yy4gZG9uJ3QgcHVsbCBpbnRvIGhlcmUiLCwsLCwsLCwsDQosLCJQcmlvcml0aXNlIDY1JycgYW5kIDU1JyBpbmNoIFRWcywgdGhlbiBiaWdnZXIgc2NyZWVucyBiZWZvcmUgdGhlIHNtYWxsZXIgc2l6ZXMiLCwsUXVlZW4gaXMgdGhlIG1vc3QgcG9wdWxhciBzaXplIGluIHRoZSBVUyAtIHByaW9yaXRpc2UgZGVhbHMgZm9yIHRoaXMgc2l6ZSwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpDYXRlZ29yaWVzIHRvIGNvbnNpZGVyLCxQcm9kdWN0cyBpbmNsdWRlZCwsLCwsLCwsLCwsLCwsDQpVbmRlciAkNTA/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.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12;          } else {             this.displayLimit += (this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12;          }                    try {            if (this.getViewMode() === 'savings_squad') {               await this.fetchSavingsSquad(append);            } else {               if (this.isBroadQuery(query)) {                 await this.fetchAdviserDeals(query, append);               } else {                 await this.fetchHawkDeals(query, append);                 if (this.deals.length === 0) {                   await this.fetchAdviserDeals(query, append);                 }               }            }          } catch (error) {            console.warn("[Tom's Guide Widget] Fetch error:", error);            this.showError();          }        }        async fetchSavingsSquad() {          let topArticles = this.airedaleArticles;          if (!topArticles) {            const airedaleUrl = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`;            let res;            try {               res = await fetch(airedaleUrl);            } catch(e) {               try { res = await fetch(`https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`); } catch (err) { console.warn("Fallback fetch failed", err); return; }            }            if (!res.ok) throw new Error('Airedale API Error');            const articles = await res.json();            topArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);            this.airedaleArticles = topArticles;                        let tagCounts = {};            topArticles.forEach((a) => {              let articleTags = new Set();              if (a.articlecategory && Array.isArray(a.articlecategory)) {                 a.articlecategory.forEach((t) => articleTags.add(t));              }              articleTags.forEach(t => {                 tagCounts[t] = (tagCounts[t] || 0) + 1;              });            });                        this.airedaleTags = Object.keys(tagCounts).sort((a, b) => tagCounts[b] - tagCounts[a]);            this.airedaleTagCounts = tagCounts;          }                    let targetArticles = topArticles;          if (this.activeDealTag) {             const cleanTag = this.activeDealTag.toLowerCase().replace(/&/g, '').replace(/[^a-z0-9]+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');             const encodedTag = encodeURIComponent(cleanTag);             const url = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50&articleCategoryHandle=${encodedTag}`;             try {                const res = await fetch(url);                if (res.ok) {                   const articles = await res.json();                   targetArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);                }             } catch(e) {                console.warn("Failed to fetch by activeDealTag", e);             }          }          let extractedDeals = [];          let dynamicBrandsCounts = {};                    targetArticles.forEach((article) => {             if (!article.articlepage) return;                          let pageData = [];             try {                pageData = JSON.parse(article.articlepage[0]);             } catch(e){ console.warn(e); }                          const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');                          savingsSquad.forEach((block, idx) => {                const data = block.data || {};                const isFeatured = block.type === 'featured-product';                                const link = data.link || {};                const priceObj = data.price || {};                const image = data.image || {};                                if (data.brand) {                   data.brand = data.brand.replace(/^\d+\.\s*/, '').trim();                   dynamicBrandsCounts[data.brand] = (dynamicBrandsCounts[data.brand] || 0) + 1;                }                const externalUrl = isFeatured ? data.url : (link.href || null);                let summaryTitle = isFeatured ? (data.name || data.brand) : (data.productName || link.label || article.articlename);                let description = isFeatured ? (data.strapline || '') : (data.text || '');                                if (!isFeatured && !data.productName && data.text) {                   const brSplit = data.text.split(new RegExp('\x3Cbr\\s*\\/?\\x3E', 'i'));                   if (brSplit.length > 1) {                     summaryTitle = brSplit[0].replace(/<[^>]+>/g, '').trim();                     description = brSplit.slice(1).join(' ').replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').trim();                   } else {                     const match = data.text.match(/\x3Cstrong>(.*?)<\/strong>/);                     if (match) {                       summaryTitle = match[1].replace(/<[^>]+>/g, '').trim();                       if (summaryTitle.endsWith(':')) summaryTitle = summaryTitle.slice(0, -1);                     }                   }                }                                let imageUrl = isFeatured ? image.mos : (image.src || null);                if (imageUrl && imageUrl.startsWith('//')) imageUrl = 'https:' + imageUrl;                                description = description.replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').replace(/View Deal$/i, '').trim();                                let merchantName = data.retailer || '';                if (!merchantName && externalUrl) {                   try {                     merchantName = new URL(externalUrl).hostname.replace('www.', '').split('.')[0];                     merchantName = merchantName.charAt(0).toUpperCase() + merchantName.slice(1);                   }catch(e){ console.warn(e); }                }                if (!merchantName) merchantName = 'Retailer';                const q = (this.currentQuery || '').toLowerCase();                const activeTagLogic = (this.activeDealTag || '').toLowerCase();                if (q.length > 2 && q !== activeTagLogic) {                   const searchTarget = `${summaryTitle || ''} ${description || ''}`.toLowerCase();                   if (!searchTarget.includes(q)) return;                }                let rawPrice = 0;                let rawMsrp = 0;                let currencyStr = '$';                if (isFeatured) {                   rawPrice = typeof data.salePrice === 'number' && data.salePrice > 0 ? data.salePrice : (typeof data.price === 'number' ? data.price : 0);                   rawMsrp = typeof data.salePrice === 'number' && typeof data.price === 'number' && data.price > data.salePrice ? data.price : 0;                   currencyStr = data.currency === 'GBP' ? '£' : '$';                } else {                   rawPrice = priceObj.amount ? parseFloat(priceObj.amount) : 0;                   rawMsrp = priceObj.amountWas ? parseFloat(priceObj.amountWas) : 0;                   currencyStr = priceObj.currency === 'GBP' ? '£' : '$';                }                                let savingAmt = 0;                let savingLabel = '';                if (rawPrice > 0 && rawMsrp > rawPrice) {                   savingAmt = parseFloat((rawMsrp - rawPrice).toFixed(2));                   savingLabel = `Save ${currencyStr}${savingAmt}`;                }                                // Apply Brand filter                if (this.selectedBrands && this.selectedBrands.length > 0) {                   const itemBrand = (data.brand || '').toLowerCase();                   const hasMatch = this.selectedBrands.some(sb => sb.toLowerCase() === itemBrand);                   if (!hasMatch) return;                }                // Apply Price filter                let priceFilterVal = null;                const min = this.customPriceMin ? this.customPriceMin.value : '';                const max = this.customPriceMax ? this.customPriceMax.value : '';                if (min || max) {                   priceFilterVal = `${min}_${max}`;                } else if (this.priceFilter && this.priceFilter.value !== 'all') {                   priceFilterVal = this.priceFilter.value;                }                if (priceFilterVal && rawPrice > 0) {                   if (priceFilterVal === 'under50' && rawPrice >= 50) return;                   if (priceFilterVal === 'over50' && rawPrice <= 50) return;                   if (priceFilterVal === 'over30' && rawPrice <= 30) return;                   if (priceFilterVal === 'over500' && rawPrice <= 500) return;                   if (priceFilterVal.includes('_')) {                      const parts = priceFilterVal.split('_');                      const min = parseFloat(parts[0]);                      const max = parseFloat(parts[1]);                      if (!isNaN(min) && rawPrice < min) return;                      if (!isNaN(max) && rawPrice > max) return;                   }                }                // Apply Discount filter                if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {                   const requiredDiscount = parseInt(this.discountFilter.value);                   if (!isNaN(requiredDiscount) && requiredDiscount > 0) {                      if (!rawMsrp || rawMsrp <= rawPrice) return;                      const ratio = Math.round((1 - (rawPrice / rawMsrp)) * 100);                      if (ratio < requiredDiscount) return;                   }                }                                extractedDeals.push({                   id: `airedale-${article.id || Math.random()}-${idx}`,                   url: externalUrl,                   image: imageUrl,                   fallbackImage: imageUrl,                   title: summaryTitle,                   brand: data.brand || '',                   productName: data.productName || '',                   merchant: merchantName,                   rawPrice: rawPrice,                   rawMsrp: rawMsrp,                   price: rawPrice > 0 ? rawPrice.toString() : '',                   msrp: rawMsrp > 0 ? rawMsrp.toString() : '',                   currency: currencyStr,                   isCheckPrice: !rawPrice,                   savingLabel: savingLabel,                   savingType: rawMsrp > rawPrice ? 'amount' : 'none',                   isPrime: false,                   starRating: null,                   description: description,                   text: data.text || ''                });             });          });                    const airedaleBrandsList = Object.keys(dynamicBrandsCounts).map(b => ({              formatted_value: b,              count: dynamicBrandsCounts[b]          })).sort((a,b) => b.count - a.count);                    if (this.getViewMode() === 'savings_squad') {             this.populateBrandDropdown(airedaleBrandsList.slice(0, 15));             if (this.brandFilterWrapper) {                if (airedaleBrandsList.length === 0) {                    this.brandFilterWrapper.style.display = 'none';                } else {                    this.brandFilterWrapper.style.display = 'flex';                }             }          }                    this.deals = extractedDeals;          this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        isBroadQuery(query) {          const q = query.toLowerCase();          const intentModifiers = ['deals', 'best', 'sale', 'under', 'cheap', 'offers', 'discount'];          return intentModifiers.some(term => q.includes(term));        }        async fetchHawkDeals(query, append = false) {          const url = new URL(this.apiUrl);          url.searchParams.append('model_name', query);          const areaCode = this.getAreaCode();          if (areaCode) {            url.searchParams.append('area', areaCode);          }                    if (append && this.deals.length > 0) {            url.searchParams.append('offset', this.deals.length.toString());          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.append('filter_merchant_name', this.retailerSelect.value);          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.append('filter_label[text_brand]', this.selectedBrands.join(','));          }                    let priceVal = null;          const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             priceVal = `${min}_${max}`;          } else if (this.priceFilter && this.priceFilter.value !== 'all') {             priceVal = this.priceFilter.value;          }          if (priceVal) {            if (priceVal === 'under50') {              url.searchParams.append('filter_max_price', '50');            } else if (priceVal === 'over50') {              url.searchParams.append('filter_min_price', '50');            } else if (priceVal === 'over30') {              url.searchParams.append('filter_min_price', '30');            } else if (priceVal === 'over500') {              url.searchParams.append('filter_min_price', '500');            } else if (priceVal.includes('_')) {              const parts = priceVal.split('_');              if (parts[0]) url.searchParams.append('filter_min_price', parts[0]);              if (parts[1]) url.searchParams.append('filter_max_price', parts[1]);            }          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {              const ratio = (100 - v) / 100;              url.searchParams.append('min_discount_ratio', ratio.toString());            }          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.append('offer', this.offerTypeSelect.value);          }                    url.searchParams.append('filter_product_types', 'deals');                    if (this.rowsSelect && this.rowsSelect.value) {            url.searchParams.append('rows', this.rowsSelect.value);          } else {             url.searchParams.append('rows', '12'); // default          }          let response;          try {             response = await fetch(url.toString());          } catch(e) {             if (window.location.protocol === 'file:') {                console.warn("[Tom's Guide Widget] fetch from file:// blocked by local CORS policy, falling back to Adviser mock.");                await this.fetchAdviserDeals(query);                return;             }             console.warn("Hawk fetch failed", e);             this.deals = [];             this.render();             return;          }          if (!response.ok) {            throw new Error('Hawk API Response Error');          }          const rawData = await response.json();          // Safely locate data array from potentially wrapped response          let offers = [];          let modelInfoArray = [];                    let brandFilterData = null;          if (rawData && rawData.widget && rawData.widget.data && Array.isArray(rawData.widget.data.filters)) {             brandFilterData = rawData.widget.data.filters.find(f => f.type === 'label_text_brand');          } else if (rawData && rawData.data && Array.isArray(rawData.data.filters)) {             brandFilterData = rawData.data.filters.find(f => f.type === 'label_text_brand');          }          if (brandFilterData && Array.isArray(brandFilterData.values) && brandFilterData.values.length > 0) {             this.populateBrandDropdown(brandFilterData.values);          } else {             if (this.brandFilterWrapper && this.selectedBrands.length === 0) {                this.brandFilterWrapper.style.display = 'none';             }          }                    if (rawData && rawData.widget && rawData.widget.data) {            if (Array.isArray(rawData.widget.data.offers)) offers = rawData.widget.data.offers;            if (rawData.widget.data.model_info && typeof rawData.widget.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.widget.data.model_info) ? rawData.widget.data.model_info : Object.values(rawData.widget.data.model_info);            }          } else if (rawData && rawData.data) {            if (Array.isArray(rawData.data.offers)) offers = rawData.data.offers;            if (rawData.data.model_info && typeof rawData.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.data.model_info) ? rawData.data.model_info : Object.values(rawData.data.model_info);            }          } else {            if (Array.isArray(rawData)) offers = rawData;            else if (rawData && Array.isArray(rawData.offers)) offers = rawData.offers;            else if (rawData && rawData.offers && Array.isArray(rawData.offers.offer)) offers = rawData.offers.offer;            else if (rawData && rawData.offers) offers = [].concat(rawData.offers);                        if (rawData && rawData.model_info && typeof rawData.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.model_info) ? rawData.model_info : Object.values(rawData.model_info);            }          }          let modelDetails = {};          modelInfoArray.forEach(m => {            const mId = m.model_id || m.id;            if (mId) {              modelDetails[mId] = {                score: m.score != null ? parseFloat(m.score) : null,                brand: m.brand || null,                parent: (m.parents && Array.isArray(m.parents) && m.parents.length > 0) ? m.parents[0].name : null              };            }          });          offers.forEach(item => {            let data = { ...item };            const mId = data.model_id;            if (mId && modelDetails[mId]) {              data.review_score = modelDetails[mId].score;              data.model_brand = modelDetails[mId].brand;              data.model_parent = modelDetails[mId].parent;            } else {              data.review_score = null;            }                        let itemOffers = [];            if (Array.isArray(item.offers)) itemOffers = item.offers;            else if (Array.isArray(item.offer)) itemOffers = item.offer;            else if (item.offers && typeof item.offers === 'object') itemOffers = [item.offers];            else if (item.offer && typeof item.offer === 'object') itemOffers = [item.offer];            if (itemOffers.length > 0) {              itemOffers.forEach(subItem => {                let subData = { ...item, ...subItem };                const subId = subData.model_id;                if (subId && modelDetails[subId]) {                  subData.review_score = modelDetails[subId].score;                  subData.model_brand = modelDetails[subId].brand;                  subData.model_parent = modelDetails[subId].parent;                } else if (data.review_score != null) {                  subData.review_score = data.review_score;                }                if (subData.merchant && typeof subData.merchant === 'object') {                  subData.merchant_name = subData.merchant.name;                }                this.deals.push(this.extractDealData(subData));              });              return;            }                        if (item.merchant && typeof item.merchant === 'object') {              data.merchant_name = item.merchant.name;            }                        this.deals.push(this.extractDealData(data));          });                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        async fetchAdviserDeals(query) {          // ======================================================================          // TODO: ADVISER API REPLACEMENT          // The code below simulates the Adviser API response using mock data.          // Once the real endpoint is ready, remove getAdviserMockData() and           // perform an actual fetch() request similar to fetchHawkDeals().          // Example:          // const area = this.getAreaCode();          // let apiUrl = `https://your-adviser-api.com/search?q=${query}&area=${area}`;          // if (this.priceFilter && this.priceFilter.value !== 'all') {          //   const val = this.priceFilter.value;          //   if (val === 'under50') apiUrl += '&filter_max_price=50';          //   else if (val === '50_100') apiUrl += '&filter_max_price=100';          //   else if (val === '100_200') apiUrl += '&filter_max_price=200';          //   else if (val === '200_500') apiUrl += '&filter_max_price=500';          // }          // const res = await fetch(apiUrl);          // const rawData = await res.json();          // ======================================================================          // Simulating network latency          await new Promise(resolve => setTimeout(resolve, 400));                    const rawData = this.getAdviserMockData();          let offers = [];                    if (rawData && rawData.data && rawData.data.Get && Array.isArray(rawData.data.Get.Deal)) {            offers = rawData.data.Get.Deal;          }                    // Basic client-side filtering for the mock if we want it to react to the query          const q = query.toLowerCase();          const selectedRetailer = (this.retailerSelect && this.retailerSelect.value) ? this.retailerSelect.value.toLowerCase() : null;                    offers.forEach(item => {            const dataObj = item;                        // Apply retailer filter            const itemRetailer = (dataObj.dataRetailer || '').toLowerCase();            if (selectedRetailer && itemRetailer !== selectedRetailer && !itemRetailer.includes(selectedRetailer)) {              return;            }                        // Apply mock price filter            let price = dataObj.dataDiscountedPrice || 0;            if (typeof price === 'string') {              price = parseFloat(price.replace(/[^0-9.]/g, ''));            }            let priceVal = null;            const min = this.customPriceMin ? this.customPriceMin.value : '';            const max = this.customPriceMax ? this.customPriceMax.value : '';            if (min || max) {               priceVal = `${min}_${max}`;            } else if (this.priceFilter && this.priceFilter.value !== 'all') {               priceVal = this.priceFilter.value;            }            if (priceVal) {              if (priceVal === 'under50' && price >= 50) return;              if (priceVal === 'over50' && price <= 50) return;              if (priceVal === 'over30' && price <= 30) return;              if (priceVal === 'over500' && price <= 500) return;              if (priceVal.includes('_')) {                 const parts = priceVal.split('_');                 if (parts[0] && price < parseFloat(parts[0])) return;                 if (parts[1] && price > parseFloat(parts[1])) return;              }            }                        // Map Adviser schema to our widget's expected schema            const mappedData = {              url: dataObj.linkHREF || dataObj.dataLink || '#',              image: dataObj.imageURL || (dataObj.image && dataObj.image.src) || '',              title: dataObj.dataProduct || (dataObj.product && dataObj.product.name) || 'Product Deal',              merchant: dataObj.dataRetailer || 'Retailer',              price: dataObj.dataDiscountedPrice || 0,              currency: dataObj.dataCurrency === 'USD' ? '$' : (dataObj.dataCurrency || '$'),              msrp: dataObj.dataOriginalPrice || null            };                        const titleLow = mappedData.title.toLowerCase();            const merchLow = mappedData.merchant.toLowerCase();                        // Smarter mock filtering            let isMatch = false;            if (q === '' || this.isBroadQuery(q)) {              isMatch = true;            } else if (titleLow.includes(q) || merchLow.includes(q)) {              isMatch = true;            } else if ((q.includes('laptop') || q.includes('mac') || q.includes('pc')) && (titleLow.includes('macbook') || titleLow.includes('laptop'))) {              isMatch = true;            } else if ((q.includes('tv') || q.includes('television')) && (titleLow.includes('tv') || titleLow.includes('oled') || titleLow.includes('qled'))) {              isMatch = true;            } else if ((q.includes('phone') || q.includes('smartphone')) && (titleLow.includes('galaxy') || titleLow.includes('phone'))) {              isMatch = true;            } else if ((q.match(/watch|fitness|run|shoe/)) && (titleLow.includes('forerunner') || titleLow.includes('saucony') || titleLow.includes('watch'))) {              isMatch = true;            }                        if (isMatch) {               this.deals.push(this.extractDealData(mappedData));            }          });                    let rowLimit = 12;          if (this.rowsSelect && this.rowsSelect.value) {            rowLimit = parseInt(this.rowsSelect.value, 10) || 12;          }          // Intentionally omitting the slice here to allow "Load More" to work if the API returns more                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        getAdviserMockData() {          return {            "data": {              "Get": {                "Deal": [                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 300,                    "dataOriginalPrice": 399,                    "dataProduct": "Samsung Galaxy A36",                    "dataRetailer": "Samsung",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/MqDYsukV3JBG54te6dEs7j.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 14,                    "dataOriginalPrice": 24,                    "dataProduct": "Blink Mini",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/3JurmAjHsDa5tPdaHAwEV8.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 59,                    "dataOriginalPrice": 99,                    "dataProduct": "Ring Video Doorbell",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/rAh4uR7AsAsALCCLTXnLNJ.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 10,                    "dataOriginalPrice": 599,                    "dataProduct": "MacBook Neo",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/Lg4Dvg68j9SbB5CPNrTEpH.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 749,                    "dataOriginalPrice": 849,                    "dataProduct": "65\\\" Fire TV Omni 4K QLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/SG34ZWodUkLTxJvMTbjPYR.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 71,                    "dataOriginalPrice": 160,                    "dataProduct": "Saucony Hurricane 24",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/vxf7UD5T2Am7guVzFoFcZ4.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 649,                    "dataOriginalPrice": 749,                    "dataProduct": "Garmin Forerunner 970",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/3GKnEu7CdhtxPMfnPCMCiA.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1049,                    "dataOriginalPrice": 1499,                    "dataProduct": "LG 48\\\" C4 4K OLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/imvwZV9zoMD6fn9Afuge35.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1499,                    "dataOriginalPrice": 2199,                    "dataProduct": "Samsung 49\\\" Odyssey Neo G9 4K Gaming Monitor",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/XWDEJ5dUAE2nhK8k3Jk7k7.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 299,                    "dataOriginalPrice": 699,                    "dataProduct": "EGOHOME Black Memory Foam Mattress (queen)",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/hMUemtAejNETLVYxNrktzm.jpg"                  }                ]              }            }          };        }        decodeHTML(html) {          if (!html) return '';          const txt = document.createElement("textarea");          txt.innerHTML = String(html);          return txt.value;        }        extractDealData(item) {          const priceRawStr = String(item.price || item.current_price || '0');          const msrpRawStr = String(item.was_price || item.msrp || item.original_price || '0');          const rawPrice = parseFloat(priceRawStr.replace(/[^\d.]/g, '')) || 0;          const rawMsrp = parseFloat(msrpRawStr.replace(/[^\d.]/g, '')) || 0;          const isCheckPrice = rawPrice === 0 || priceRawStr === '0.00' || priceRawStr === '0';                    let originalImageUrl = item.image || item.image_url || item.product_image || '';          let imageUrl = originalImageUrl;          if ((!imageUrl || isCheckPrice) && item.model_image_url) {             imageUrl = item.model_image_url;             originalImageUrl = imageUrl;          } else if ((!imageUrl || isCheckPrice) && item.model_image) {             imageUrl = item.model_image;             originalImageUrl = imageUrl;          }                    if (imageUrl) {            imageUrl = imageUrl.replace(/-(\d+)-(\d+)(\.[a-z.]+)$/i, '$3');          }                    let fallbackImage = '';          if (originalImageUrl && originalImageUrl !== imageUrl) {             fallbackImage = originalImageUrl;          } else if (item.model_image && item.model_image !== imageUrl) {             fallbackImage = item.model_image;          } else if (item.model_image_url && item.model_image_url !== imageUrl) {             fallbackImage = item.model_image_url;          }                    const rawCurrency = item.currency || item.currency_symbol || '$';                    let savingLabel = item.percentage_saving_label || '';          if (!savingLabel && rawMsrp > rawPrice && rawPrice > 0) {            const pct = Math.round(((rawMsrp - rawPrice) / rawMsrp) * 100);            if (pct > 0) {              savingLabel = `${pct}% OFF`;            }          }                    const isPrime = item.shipping && item.shipping.prime === true;                    let scoreRaw = (item.review_score !== undefined && item.review_score !== null && item.review_score > 0) ? parseFloat(item.review_score) : null;          let starRating = 0;          if (scoreRaw !== null) {            starRating = Math.round((scoreRaw > 10 ? scoreRaw / 20 : scoreRaw / 2) * 2) / 2;          }                    return {            id: item.offer_id || item.link || item.url || item.offer_link || Math.random().toString(),            url: item.link || item.url || item.offer_link || '#',            image: imageUrl,            fallbackImage: fallbackImage,            title: item.name || item.title || item.model_name || item.product_name || 'Unknown Product',            brand: item.brand || '',            productName: item.model_name || item.product_name || item.name || '',            merchant: item.merchant_name || item.merchant || item.retailer || 'Retailer',            price: item.price !== undefined ? String(item.price) : '0.00',            currency: this.decodeHTML(rawCurrency),            msrp: item.was_price || item.msrp || item.original_price || null,            rawPrice: rawPrice,            rawMsrp: rawMsrp,            hasWasPrice: (item.was_price !== undefined && item.was_price !== null),            isCheckPrice: isCheckPrice,            savingLabel: savingLabel,            isPrime: isPrime,            starRating: starRating > 0 ? starRating : null,            modelId: item.model_id || '',            productKey: item.product_key || '',            merchantId: (item.merchant && typeof item.merchant === 'object') ? item.merchant.id || '' : '',            matchId: item.match_id || '',            merchantNetwork: (item.merchant && typeof item.merchant === 'object') ? item.merchant.an || '' : '',            merchantUrl: (item.merchant && typeof item.merchant === 'object') ? item.merchant.url || '' : '',            modelBrand: item.model_brand || item.brand || '',            modelParent: item.model_parent || ''          };        }        sortData() {          const sortVal = this.sortSelect ? this.sortSelect.value : (this.getViewMode() === 'savings_squad' ? 'date_desc' : 'discount_desc');          if (sortVal === 'price_asc') {            this.deals.sort((a, b) => a.rawPrice - b.rawPrice);          } else if (sortVal === 'price_desc') {            this.deals.sort((a, b) => b.rawPrice - a.rawPrice);          } else if (sortVal === 'discount_desc') {            this.deals.sort((a, b) => {              const aDiscount = a.rawMsrp > a.rawPrice ? (a.rawMsrp - a.rawPrice) : 0;              const bDiscount = b.rawMsrp > b.rawPrice ? (b.rawMsrp - b.rawPrice) : 0;              return bDiscount - aDiscount;            });          } else if (sortVal === 'date_desc') {             this.deals.sort((a, b) => {                let dateA = 0;                let dateB = 0;                if (a && a.modifiedDate) {                   const valA = Array.isArray(a.modifiedDate) ? a.modifiedDate[0] : a.modifiedDate;                   dateA = new Date(valA).getTime();                   if (isNaN(dateA)) dateA = 0;                }                if (b && b.modifiedDate) {                   const valB = Array.isArray(b.modifiedDate) ? b.modifiedDate[0] : b.modifiedDate;                   dateB = new Date(valB).getTime();                   if (isNaN(dateB)) dateB = 0;                }                return dateB - dateA;             });          }        }        getFilteredDeals() {          let filteredDeals = [...this.deals];                    if (this.dealModeToggle && this.dealModeToggle.checked) {            filteredDeals = filteredDeals.filter(d => d.hasWasPrice || (d.msrp && d.rawMsrp > d.rawPrice));          }                    return filteredDeals;        }        showLoading() {          const _div = '<' + '/div>';          const skeletonCardHtml = `            \x3Cdiv class="tg-df-card">              \x3Cdiv class="tg-df-card-image-box">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-img">${_div}              ${_div}              \x3Cdiv class="tg-df-card-body">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-card-footer mt-auto">                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="height:24px;">${_div}                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text" style="height:44px; margin-top:8px;">${_div}                ${_div}              ${_div}            ${_div}`;          this.grid.innerHTML = Array(4).fill(skeletonCardHtml).join('');        }        showError() {          const _div = '<' + '/div>';          this.grid.innerHTML = `\x3Cdiv class="tg-df-message">            An error occurred while finding deals. Please check your connection and try again.          ${_div}`;        }        escapeHTML(str) {          if (!str) return '';          return String(str).replace(/[&<>'"]/g, tag => ({              '&': '&', '<': '<', '>': '>', "'": ''', '"': '"'          }[tag] || tag));        }                bindCouponButtons() {          const btns = this.root.querySelectorAll('.tg-df-tag-coupons');          btns.forEach(btn => {            btn.addEventListener('click', (e) => {              e.preventDefault();              e.stopPropagation();              const merchant = btn.getAttribute('data-merchant');              this.openVouchersModal(merchant);            });          });                    const closeBtn = this.root.querySelector('#tg-df-vouchers-close');          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (closeBtn) {            closeBtn.onclick = () => this.closeVouchersModal();          }          if (backdrop) {            backdrop.onclick = (e) => {              if (e.target === backdrop) this.closeVouchersModal();            };          }        }                closeVouchersModal() {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (backdrop) backdrop.classList.remove('active');        }                async checkMerchantsCouponsBulk(merchants) {          if (!merchants || merchants.length === 0) return {};          const controller = new AbortController();          const timeoutId = setTimeout(() => controller.abort(), 4000);          try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchants.join(','));            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '120');            url.searchParams.append('origin', 'widgets-clientside');                        let res; try { res = await fetch(url.toString(), { signal: controller.signal }); } catch (e) { return {}; }            clearTimeout(timeoutId);            if (!res.ok) return {};            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        const foundMerchants = new Set();            offers.forEach(o => {              let mName = o.merchant_name || o.merchant || o.retailer;              if (mName && typeof mName === 'object') mName = mName.name;              if (mName) foundMerchants.add(String(mName).toLowerCase());            });            const resultMap = {};            merchants.forEach(m => {              if (m) resultMap[m] = foundMerchants.has(String(m).toLowerCase());            });            return resultMap;          } catch (e) {            return {};          }        }                async openVouchersModal(merchantName) {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          const title = this.root.querySelector('#tg-df-vouchers-title');          const content = this.root.querySelector('#tg-df-vouchers-content');                    if (!backdrop || !content) return;                    // HACK: Hide closing tags          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h4 = '<' + '/h4>';          const _svg = '<' + '/svg>';          const _circle = '<' + '/circle>';          const _polyline = '<' + '/polyline>';          const _rect = '<' + '/rect>';          const _path = '<' + '/path>';                    title.innerText = `${merchantName} Coupons & Deals`;          content.innerHTML = `\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}                               \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}`;          backdrop.classList.add('active');                    try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchantName);            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '50');            url.searchParams.append('origin', 'widgets-clientside');                        const res = await fetch(url.toString());            if (!res.ok) throw new Error('API Error');            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        if (offers.length === 0) {              content.innerHTML = `\x3Cdiv class="tg-df-message">No vouchers currently available for ${this.escapeHTML(merchantName)}.${_div}`;              return;            }                        content.innerHTML = offers.map((v, idx) => {              let offerObj = v;              if (v.offers && v.offers.offer) {                offerObj = Array.isArray(v.offers.offer) ? v.offers.offer[0] : v.offers.offer;              } else if (v.offer) {                offerObj = Array.isArray(v.offer) ? v.offer[0] : v.offer;              }              let logoUrl = v.logo_url || offerObj.logo_url || '';              if (!logoUrl && v.merchant) {                if (Array.isArray(v.merchant) && v.merchant.length > 0) logoUrl = v.merchant[0].logo_url || '';                else logoUrl = v.merchant.logo_url || '';              }                            const offerName = offerObj.name || offerObj.title || v.name || v.title || 'Special Offer';              const endTime = offerObj.end_time || v.end_time || '';              const linkUrl = offerObj.link || offerObj.url || v.link || v.url || '#';                            let foundVoucherCode = '';              const findVoucherCode = (obj) => {                if (!obj || typeof obj !== 'object') return;                if (obj.type === 'voucher_code' && obj.display_value) {                  foundVoucherCode = obj.display_value;                  return;                }                if (Array.isArray(obj)) {                  for (const item of obj) {                    findVoucherCode(item);                    if (foundVoucherCode) return;                  }                } else {                  for (const k in obj) {                    if (Object.prototype.hasOwnProperty.call(obj, k)) {                      findVoucherCode(obj[k]);                      if (foundVoucherCode) return;                    }                  }                }              };              findVoucherCode(offerObj);              if (!foundVoucherCode) findVoucherCode(v);                            const voucherCode = foundVoucherCode || offerObj.voucher_code || v.voucher_code || '';              const codeHtml = voucherCode ? `\x3Cspan class="tg-df-voucher-code" data-action="copy-code" data-code="${this.escapeHTML(voucherCode)}" title="Copy to clipboard">                \x3Cspan class="tg-df-voucher-code-text">${this.escapeHTML(voucherCode)}${_span}                \x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-left:6px;flex-shrink:0;" class="tg-df-voucher-copy-icon">                  \x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">${_rect}                  \x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">${_path}                ${_svg}              ${_span}` : '';                            const logoHtml = logoUrl                 ? `\x3Cimg src="${this.escapeHTML(logoUrl)}" alt="${this.escapeHTML(offerName)}" class="tg-df-voucher-logo" />`                 : `\x3Cdiv class="tg-df-voucher-logo" style="background:#e2e8f0;">${_div}`;                            let expiryHtml = '';              if (endTime) {                let dStr = endTime;                if (!isNaN(dStr) && String(dStr).length === 10) dStr = Number(dStr) * 1000;                const d = new Date(dStr);                if (!isNaN(d.getTime())) {                  const options = { year: 'numeric', month: 'short', day: 'numeric' };                  expiryHtml = `                    \x3Cdiv class="tg-df-voucher-expiry">                      \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                        \x3Ccircle cx="12" cy="12" r="10">${_circle}                        \x3Cpolyline points="12 6 12 12 16 14">${_polyline}                      ${_svg}                      Expires ${d.toLocaleDateString(undefined, options)}                    ${_div}`;                }              }              const revenueIdVal = generateRevenueId(linkUrl, offerName, merchantName, null);              const rewrittenLinkUrl = rewriteAffiliateLink(linkUrl, area, revenueIdVal);              return `                \x3Ca href="${this.escapeHTML(rewrittenLinkUrl)}" target="_blank" rel="noopener nofollow" class="tg-df-voucher-item"                  data-action="voucher-click"                  data-product-name="${this.escapeHTML(offerName)}"                  data-merchant-name="${this.escapeHTML(merchantName)}"                  data-analytics-id="${this.escapeHTML(offerObj.offer_id || offerObj.id || v.id || '')}"                  data-price=""                  data-previous-price=""                  data-original-link="${this.escapeHTML(linkUrl)}"                  data-revenue-id="${revenueIdVal}"                  data-index="${idx}"                  data-total="${offers.length}"                  data-in-stock="true"                  data-currency="USD"                  data-model-id="${this.escapeHTML(offerObj.model_id || v.model_id || offerObj.id || v.id || '')}"                  data-merchant-id="${this.escapeHTML(offerObj.merchant_id || offerObj.merchant?.id || '')}"                >                  ${logoHtml}                  \x3Cdiv class="tg-df-voucher-content">                    \x3Ch4 class="tg-df-voucher-title">${this.escapeHTML(offerName)}${_h4}                    ${codeHtml}                    ${expiryHtml}                  ${_div}                ${_a}              `;            }).join('');                        // Attach copy functionality            const copyBtns = content.querySelectorAll('[data-action="copy-code"]');            copyBtns.forEach(btn => {              btn.addEventListener('click', async (e) => {                e.preventDefault();                e.stopPropagation();                                const code = btn.getAttribute('data-code');                if (!code) return;                                try {                  const copyToClipboard = async (text) => {                     if (window.navigator.clipboard && window.isSecureContext) {                        try { await window.navigator.clipboard.writeText(text); return; } catch (e) {}                     }                     const textArea = document.createElement("textarea");                     textArea.value = text;                     textArea.style.position = "fixed";                     document.body.appendChild(textArea);                     textArea.focus();                     textArea.select();                     document.execCommand('copy');                     textArea.remove();                  };                  await copyToClipboard(code);                                    // Visual feedback                  btn.classList.add('copied');                  const textSpan = btn.querySelector('.tg-df-voucher-code-text');                  const iconSvg = btn.querySelector('.tg-df-voucher-copy-icon');                                    const origText = textSpan.innerText;                  const origIcon = iconSvg.innerHTML;                                    textSpan.innerText = 'Copied!';                  iconSvg.innerHTML = `\x3Cpolyline points="20 6 9 17 4 12">${_polyline}`;                                    setTimeout(() => {                    if (btn) {                      btn.classList.remove('copied');                      if (textSpan) textSpan.innerText = origText;                      if (iconSvg) iconSvg.innerHTML = origIcon;                    }                  }, 2000);                                    trackElementInteraction({                    id: 'voucher-code-copy',                    name: 'Copy Voucher Code',                    label: `Copied ${code} for ${merchantName}`                  });                } catch (err) {                  console.warn('Failed to copy text: ', err);                }              });            });            // Attach voucher click tracking            const voucherBtns = content.querySelectorAll('[data-action="voucher-click"]');            voucherBtns.forEach(btn => {              btn.addEventListener('click', (e) => {                if (e.target.closest('[data-action="copy-code"]')) return;                                const productName = btn.getAttribute('data-product-name');                const merchantNameAttr = btn.getAttribute('data-merchant-name');                const productId = btn.getAttribute('data-analytics-id');                const price = parseFloat(btn.getAttribute('data-price')) || null;                const prevPriceStr = btn.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = btn.getAttribute('data-original-link');                const rewrittenLink = btn.getAttribute('href');                const revenueId = btn.getAttribute('data-revenue-id');                const index = parseInt(btn.getAttribute('data-index'), 10) || 0;                const inStock = btn.getAttribute('data-in-stock') === 'true';                const totalText = btn.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: btn.getAttribute('data-model-id') || null,                    matchId: btn.getAttribute('data-match-id') || null,                    brand: btn.getAttribute('data-model-brand') || null,                    parent: btn.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: btn.getAttribute('data-merchant-id') || null,                    network: btn.getAttribute('data-merchant-network') || null,                    url: btn.getAttribute('data-merchant-url') || null,                    name: merchantNameAttr                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: btn.getAttribute('data-currency') || 'USD'                };                if (typeof trackDealClick === 'function') {                  trackDealClick(trackingParams);                }              });            });                                  } catch (e) {            console.warn(e);            content.innerHTML = `\x3Cdiv class="tg-df-message">Failed to load vouchers.${_div}`;          }        }        render() {          try {            if (this.getViewMode() === 'savings_squad' && this.airedaleTags.length > 0) {              if (this.categoryFilterWrapper) {                 this.categoryFilterWrapper.style.display = 'flex';              }              if (this.categoryFilter) {                 const _option = '<' + '/option>';                 let optionsHtml = `\x3Coption value="all">All Categories${_option}`;                 this.airedaleTags.forEach(tag => {                    const isSelected = this.activeDealTag === tag ? 'selected' : '';                    optionsHtml += `\x3Coption value="${this.escapeHTML(tag)}" ${isSelected}>${this.escapeHTML(tag)} (${this.airedaleTagCounts[tag] || 0})${_option}`;                 });                 this.categoryFilter.innerHTML = optionsHtml;                 this.categoryFilter.value = this.activeDealTag || 'all';              }            } else {               if (this.categoryFilterWrapper) {                  this.categoryFilterWrapper.style.display = 'none';               }            }            const displayDeals = this.getFilteredDeals();          // HACK: Hide closing tags from the CMS HTML sanitizer so it doesn't strip them during in-page injection          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h3 = '<' + '/h3>';          const _p = '<' + '/p>';          const _strong = '<' + '/strong>';          const _sup = '<' + '/sup>';          const _button = '<' + '/button>';          if (displayDeals.length === 0) {            if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {              if (this.deals.length > 0) {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No deals match your selected filters.                ${_div}`;              } else if (this.getViewMode() === 'savings_squad' && this.currentQuery.length <= 2) {                 // Do not show "no exact matches" if query is empty for savings_squad                 this.grid.innerHTML = '';              } else {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No exact matches found for "\x3Cstrong>${this.escapeHTML(this.currentQuery)}${_strong}". Try adjusting your search term.                ${_div}`;              }            } else {              this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                Search product or category names to discover the best deals from across the web.              ${_div}`;            }            return;          }          let dealsHtml = displayDeals.slice(0, this.displayLimit).map((deal, index) => {            try {               const currencySym = this.escapeHTML(deal.currency);               const isoCurrencyCode = normalizeCurrency(currencySym);               const escapedPrice = this.escapeHTML(deal.price);               const escapedMsrp = this.escapeHTML(deal.msrp);               const areaCode = this.getAreaCode();                              const revenueId = generateRevenueId(deal.url, deal.title, deal.merchant, null);               const originalLink = deal.url;               const rewrittenLink = rewriteAffiliateLink(deal.url, areaCode, revenueId);                        const productCategoryName = 'deals';            const dataAttr = `              data-action="${deal.isCheckPrice ? 'view-similar-click' : 'deal-click'}"              data-analytics-id="${this.escapeHTML(deal.externalProductId || deal.id || '')}"              data-product-name="${this.escapeHTML(deal.title)}"              data-merchant-name="${this.escapeHTML(deal.merchant)}"              data-price="${deal.rawPrice || ''}"              data-previous-price="${deal.rawMsrp || ''}"              data-original-link="${this.escapeHTML(originalLink)}"              data-revenue-id="${revenueId}"              data-index="${index}"              data-total="${displayDeals.length}"              data-in-stock="${deal.inStock !== false}"              data-currency="${this.escapeHTML(isoCurrencyCode)}"              data-model-id="${this.escapeHTML(deal.modelId || '')}"              data-product-key="${this.escapeHTML(deal.productKey || '')}"              data-merchant-id="${this.escapeHTML(deal.merchantId || '')}"            `;                        let priceGroupHtml = '';            let isSavingsSquadMode = this.getViewMode() === 'savings_squad';            let ctaText = 'View Deal';            let formattedPrice = '';            let msrpHtml = '';                        if (deal.isCheckPrice) {              ctaText = isSavingsSquadMode ? 'View Deal' : 'Check Price';              if (isSavingsSquadMode) {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-merchant-wrapper">                    \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                  \x3Cdiv class="tg-df-card-price-group">                  ${_div}                `;              } else {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-merchant-wrapper">                    \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                  \x3Cdiv class="tg-df-card-price-group">                    \x3Cspan class="tg-df-card-price" style="font-size: 15px; font-weight: 500; font-style: italic;">See price at retailer${_span}                  ${_div}                `;              }            } else {              // Format Price              formattedPrice = escapedPrice.includes(currencySym)                 ? escapedPrice                 : `${currencySym}${escapedPrice}`;                              // Format MSRP              msrpHtml = deal.msrp && deal.rawMsrp > deal.rawPrice                ? `\x3Cspan class="tg-df-card-msrp">${escapedMsrp.includes(currencySym) ? escapedMsrp : currencySym + escapedMsrp}${_span}`                : '';                              priceGroupHtml = `                \x3Cdiv class="tg-df-card-merchant-wrapper">                  \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                ${_div}                \x3Cdiv class="tg-df-card-price-group">                  ${isSavingsSquadMode ? '' : `                  \x3Cspan class="tg-df-card-price">${formattedPrice}${_span}                  ${msrpHtml}                  `}                ${_div}              `;            }                        const discountBadgeHtml = deal.savingLabel && !deal.isCheckPrice              ? `\x3Cspan class="tg-df-card-discount-badge">${this.escapeHTML(deal.savingLabel)}${_span}`              : '';                          // HACK for CMS            const _button = '<' + '/button>';            const _svg = '<' + '/svg>';            const _path = '<' + '/path>';            const _rect = '<' + '/rect>';            const _circle = '<' + '/circle>';            const _polyline = '<' + '/polyline>';            const _line = '<' + '/line>';                        let badgesHtml = '';            const primeBadge = deal.isPrime ? `              \x3Cspan class="tg-df-tag tg-df-tag-prime">                \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="currentColor">                  \x3Cpath d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z">${_path}                ${_svg} Prime              ${_span}            ` : '';                        const couponsBadge = deal.merchant && deal.merchant.toLowerCase().includes('amazon') ? '' : `              \x3Cdiv class="tg-df-coupon-wrapper" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:inline-flex; align-items:center;">                \x3Cdiv class="tg-df-coupon-spinner">${_div}                \x3Cbutton type="button" class="tg-df-tag tg-df-tag-coupons" data-action="coupons-click" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:none;">                  \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                    \x3Cpath d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z">${_path}                    \x3Cline x1="7" y1="7" x2="7.01" y2="7">${_line}                  ${_svg} Coupons                ${_button}              ${_div}            `;                        // Note: We always add coupons badge if there's a chance, but to allow 3-line titles we check wrapper display state            badgesHtml = `              \x3Cdiv class="tg-df-card-badges">                ${primeBadge}                ${couponsBadge}              ${_div}            `;            const _linearGradient = '<' + '/linearGradient>';            const _polygon = '<' + '/polygon>';            const _stop = '<' + '/stop>';            const _defs = '<' + '/defs>';                        let starHtml = '';            if (deal.starRating) {              let rating = deal.starRating;                            if (rating > 0) {                const fullStars = Math.floor(rating);                const halfStar = (rating - fullStars) >= 0.5 ? 1 : 0;                const emptyStars = Math.max(0, 5 - fullStars - halfStar);                const blue = '#1f69ff'; // Tom's guide brand color from VIEW DEAL button                const gray = '#cbd5e1';                                const starSvgFull = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="${blue}" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                const gradId = 'half_grad_' + Math.floor(Math.random()*1000000);                const starSvgHalf = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cdefs>\x3ClinearGradient id="${gradId}" x1="0" x2="1" y1="0" y2="0">\x3Cstop offset="50%" stop-color="${blue}">${_stop}\x3Cstop offset="50%" stop-color="transparent">${_stop}${_linearGradient}${_defs}                  \x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26" fill="url(#${gradId})">${_polygon}${_svg}`;                                  const starSvgEmpty = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="${gray}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                let stars = [];                for (let i=0; i<fullStars; i++) stars.push(starSvgFull);                if (halfStar) stars.push(starSvgHalf);                for (let i=0; i<emptyStars; i++) stars.push(starSvgEmpty);                                starHtml = `\x3Cdiv class="tg-df-card-stars" style="display:flex;align-items:center;margin-bottom:8px;font-size:13px;font-weight:600;color:var(--tg-df-text-muted);">                  \x3Cspan style="margin-right:6px;">Tom's Guide:${_span}                  \x3Cdiv style="display:flex;gap:2px;">                    ${stars.join('')}                  ${_div}                ${_div}`;              }            }            let htmlOutput = '';            if (isSavingsSquadMode) {              htmlOutput += `              \x3Cdiv class="hawk-deal-widget-container tg-df-mobile-only" data-collapsible="true">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''} style="margin-bottom: 10px;">` : ''}                \x3Cdiv class="hawk-deal-widget-wrap">                  \x3Cdiv class="hawk-deal-widget-image-container">                    \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" rel="sponsored noopener" target="_blank" class="hawk-affiliate-link-deal-widget" ${dataAttr}>                      \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="hawk-lazy-image-deal-widget" loading="lazy" width="140" height="160" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                    ${_a}                  ${_div}                  \x3Cdiv class="hawk-deal-widget-text-cta-container">                    \x3Cdiv class="hawk-deal-widget-text-body-container">                      \x3Cdiv class="hawk-deal-widget-text-body-main">                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          ${deal.isCheckPrice ? `                            \x3Cspan class="hawk-deal-widget-title-product-title">${this.escapeHTML(deal.title)}${_span}                          ` : `                            \x3Cspan class="hawk-deal-widget-title-product-title">${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_span}                          `}                        ${_a}                        ${!deal.isCheckPrice && deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan class="hawk-deal-widget-title-was-price">was ${currencySym}${escapedMsrp}${_span}                          ${_a}                        ` : ''}                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          \x3Cspan class="hawk-deal-widget-title-retailer-price">                            ${!deal.isCheckPrice ? `                              \x3Cspan class="hawk-deal-widget-title-price">now ${formattedPrice}${_span}                              \x3Cspan class="hawk-deal-widget-title-retailer"> at ${this.escapeHTML(deal.merchant)}${_span}                            ` : `                              \x3Cspan class="hawk-deal-widget-title-price">See price at ${this.escapeHTML(deal.merchant)}${_span}                            `}                          ${_span}                        ${_a}                        ${deal.description ? `\x3Cdiv class="hawk-deal-widget-text-body-description">\x3Cp>${this.escapeHTML(deal.description)}${_p}${_div}` : ''}                      ${_div}                    ${_div}                    \x3Cdiv class="hawk-deal-widget-footer">                      \x3Cdiv class="hawk-deal-widget-button-wrapper">                        \x3Cdiv class="hawk-deal-widget-preferred-partner-wrapper">                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-deal-button" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan>${deal.isCheckPrice ? 'Check Price' : 'View Deal'}${_span}                          ${_a}                        ${_div}                      ${_div}                    ${_div}                  ${_div}                ${_div}              ${_div}              `;            }            htmlOutput += `              \x3Cdiv class="tg-df-card ${isSavingsSquadMode ? 'tg-df-desktop-only' : ''}">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''}>` : ''}                \x3Cdiv class="tg-df-card-image-box">                  ${discountBadgeHtml}                  \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" style="display: flex; align-items: center; justify-content: center; width: 100%; height: 100%;">                    \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="tg-df-card-image" loading="lazy" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                  ${_a}                ${_div}                \x3Cdiv class="tg-df-card-body">                  ${starHtml}                  ${badgesHtml}                  \x3Ch3 class="tg-df-card-title tg-df-custom-savings-squad-title" title="${this.escapeHTML(deal.title)}">                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" disable-tracking="true" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit;">                      ${isSavingsSquadMode                         ? (deal.isCheckPrice                             ? (deal.title && deal.title.includes(':')                                 ? `\x3Cstrong>${this.escapeHTML(deal.title.substring(0, deal.title.indexOf(':') + 1))}${_strong}\x3Cspan style="color: #1f69ff; font-weight: normal;">${this.escapeHTML(deal.title.substring(deal.title.indexOf(':') + 1))}${_span}`                                : this.escapeHTML(deal.title)                              )                             : `\x3Cstrong>${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_strong} ${deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `\x3Cspan style="color: #d0021b; text-decoration: line-through; font-weight: normal; margin-right: 4px;">was ${currencySym}${escapedMsrp}${_span} ` : ''}\x3Cspan style="color: #1f69ff; font-weight: normal;">now ${formattedPrice} at ${this.escapeHTML(deal.merchant)}${_span}`                          )                        : this.escapeHTML(deal.title)                      }                    ${_a}                  ${_h3}                  ${deal.description ? `\x3Cp style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 12px; line-height: 1.4;">${this.escapeHTML(deal.description)}${_p}` : ''}                  \x3Cdiv class="tg-df-card-footer">                    ${priceGroupHtml}                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" class="tg-df-card-cta ${isSavingsSquadMode ? 'tg-df-cta-savings-squad' : ''}" style="text-decoration: none;">${ctaText}${_a}                  ${_div}                ${_div}              ${_div}            `;                        return htmlOutput;            } catch (e) {               console.log("Error rendering deal in map for index", index, typeof deal === 'object' ? JSON.stringify(deal) : deal, "MSG:", e.message);               return '';            }          }).join('');                    if (displayDeals.length > this.displayLimit || ((this.getViewMode() === 'carousel' || this.getViewMode() === 'auto') && displayDeals.length > 0 && displayDeals.length % ((this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12) === 0)) {            if (this.getViewMode() === 'carousel') {               dealsHtml += `                 \x3Cbutton type="button" class="tg-df-load-more-card tg-df-load-more">                   \x3Csvg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-bottom: 8px;">\x3Cpath d="M5 12h14">\x3C/path>\x3Cpath d="m12 5 7 7-7 7">\x3C/path>\x3C/svg>                   Load More                 ${_button}               `;            } else {               dealsHtml += `                 \x3Cdiv style="width: 100%; display: flex; justify-content: center; margin-top: 16px; grid-column: 1 / -1;">                   \x3Cbutton type="button" class="tg-df-tag-outline tg-df-load-more" style="padding: 8px 24px; border-radius: 100px; font-weight: 600; font-size: 14px; cursor: pointer; display: flex; align-items: center;">Load More${_button}                 ${_div}               `;            }          }                    this.grid.innerHTML = dealsHtml;          // Inject JSON-LD          try {            let targetNode = this.hostContainer || document.head;            let jsonLdScript = targetNode.querySelector('#tg-df-json-ld-' + this.widgetId);            if (!jsonLdScript) {                jsonLdScript = document.createElement('script');                jsonLdScript.type = 'application/ld+json';                jsonLdScript.id = 'tg-df-json-ld-' + this.widgetId;                targetNode.appendChild(jsonLdScript);            }            const jsonLdData = {              "@context": "https://schema.org",              "@type": "ItemList",              "itemListElement": displayDeals.slice(0, this.displayLimit).map((deal, index) => {                 let isoCurrency = "USD";                 if (deal.currency === '£') isoCurrency = "GBP";                 else if (deal.currency === '€') isoCurrency = "EUR";                 else if (deal.currency === 'A$') isoCurrency = "AUD";                 else if (deal.currency === 'CA$') isoCurrency = "CAD";                 const areaCode = typeof this.getAreaCode === 'function' ? this.getAreaCode() : 'US';                 const revenueId = typeof generateRevenueId === 'function' ? generateRevenueId(deal.url, deal.title, deal.merchant, null) : '';                 const rewrittenLink = typeof rewriteAffiliateLink === 'function' ? rewriteAffiliateLink(deal.url, areaCode, revenueId) : deal.url;                 return {                   "@type": "ListItem",                   "position": index + 1,                   "item": {                     "@type": "Product",                     "name": deal.title,                     "image": deal.image || "",                     "description": deal.description || "",                     "brand": {                       "@type": "Brand",                       "name": deal.brand || ""                     },                     "offers": {                       "@type": "Offer",                       "priceCurrency": isoCurrency,                       "price": deal.rawPrice || 0,                       "url": rewrittenLink,                       "seller": {                         "@type": "Organization",                         "name": deal.merchant || ""                       }                     }                   }                 };              }).filter(item => item.item.name)            };            jsonLdScript.textContent = JSON.stringify(jsonLdData);          } catch(e) { console.warn("JSON-LD generation failed", e); }                    let gridWrapper = this.grid.parentElement;          if (gridWrapper && gridWrapper.classList.contains('tg-df-grid-wrapper')) {             let rightChevron = gridWrapper.querySelector('.tg-df-carousel-scroll-right');             let leftChevron = gridWrapper.querySelector('.tg-df-carousel-scroll-left');             if (this.getViewMode() === 'carousel') {                 // The observer set up in setupScrollListeners handles visibility.                 if (rightChevron) rightChevron.style.display = 'flex';                 if (leftChevron) leftChevron.style.display = 'none'; // reset correctly             } else {                 if (rightChevron) rightChevron.style.display = 'none';                 if (leftChevron) leftChevron.style.display = 'none';             }          }                    const loadMoreBtn = this.grid.querySelector('.tg-df-load-more');          if (loadMoreBtn) {            loadMoreBtn.addEventListener('click', async () => {              if (typeof trackElementInteraction === 'function') {                trackElementInteraction({ id: 'load-more', name: 'Load more', label: 'Load More Results' });              }              if (displayDeals.length <= this.displayLimit) {                 loadMoreBtn.innerHTML = `                  <svg class="tg-df-spinner" style="width: 16px; height: 16px; display: inline-block; vertical-align: middle; margin-right: 8px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M12 2v4m0 12v4M4.93 4.93l2.83 2.83m8.48 8.48l2.83 2.83M2 12h4m12 0h4M4.93 19.07l2.83-2.83m8.48-8.48l2.83-2.83"/></svg>                  Loading...                 `;                 loadMoreBtn.disabled = true;                 await this.fetchDeals(this.currentQuery, true);              } else {                 this.displayLimit += ((this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12);                 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');            if (!this.processArticleFired) {                  this.processArticleFired = true;                  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[ 5 early Prime Day tablet deals worth your money — Lenovo, TCL and iPads for up to 27% off ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The next <a href="https://www.tomsguide.com/news/best-prime-day-deals-and-sales">Prime Day</a> event launches on June 23, which means it’ll be your opportunity to save some cash on your next tablet. While the big sales haven’t hit just yet, some worthwhile deals are happening right now.</p><p>For instance, you can <a href="https://www.amazon.com/TCL-TAB-A1-Plus-Entertainment/dp/B0GS1JK2SV" target="_blank" rel="nofollow">save $80 off the TCL Tab A1 Plus</a> and <a href="https://www.amazon.com/Lenovo-MediaTek-Octa-Core-1920x1200-Light-Sensor/dp/B0CQMGKBK9" target="_blank" rel="nofollow">$40 off the Lenovo Tab M11</a> if you’re looking for an Android tablet. Want an iPad instead? Well, <a href="https://www.amazon.com/Apple-iPad-11-inch-Display-All-Day/dp/B0DZ77D5HL" target="_blank" rel="nofollow">the base iPad 11 is currently $50 off</a>, while <a href="https://www.amazon.com/dp/B0FWCXJVHN" target="_blank" rel="nofollow">the 11-inch iPad Pro M5 has been discounted by $62</a>.</p><p>There isn’t much to choose from at the moment from well-known brands, but I’ll update this post with the latest deals as we get closer to Prime Day, when we’ll surely see better offerings. Now, here are 5 early Prime Day deals to check out.</p><p>Also, if you’re not yet an Amazon Prime member, you can <a href="https://www.amazon.com/amazonprime" target="_blank" rel="nofollow">sign up for a free 30-day trial at Amazon</a> and <a href="https://www.amazon.com/amazonprime?primeCampaignId=studentWlpPrimeRedir" target="_blank" rel="nofollow">students can get a 6-month free trial</a>. For more ways to save, check out the <a href="https://www.tomsguide.com/savings-squad">Tom's Guide Savings Squad</a> as well as our list of the best <a href="https://www.tomsguide.com/coupons/amazon.com">Amazon promo codes</a> this week. </p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links</span></h3><ul><li><strong>Lenovo Tab M11: </strong><a href="https://www.amazon.com/Lenovo-MediaTek-Octa-Core-1920x1200-Light-Sensor/dp/B0CQMGKBK9" target="_blank" rel="nofollow"><strong>was $249 now $209 @ Amazon</strong></a><strong></strong></li><li><strong>TCL Tab A1 Plus: </strong><a href="https://www.amazon.com/TCL-TAB-A1-Plus-Entertainment/dp/B0GS1JK2SV" target="_blank" rel="nofollow"><strong>was $299 now $279 @ Amazon</strong></a></li><li><strong>11" iPad (A16): </strong><a href="https://www.amazon.com/Apple-iPad-11-inch-Display-All-Day/dp/B0DZ77D5HL" target="_blank" rel="nofollow"><strong>was $349 now $299 @ Amazon</strong></a></li><li><strong>11" iPad Air (M4): </strong><a href="https://www.amazon.com/Apple-iPad-Air-11-inch-M4/dp/B0GQVBJT4J" target="_blank" rel="nofollow"><strong>was $599 now $559 @ Amazon</strong></a></li><li><strong>11" iPad Pro (M5): </strong><a href="https://www.amazon.com/dp/B0FWCXJVHN" target="_blank" rel="nofollow"><strong>was $999 now $937 @ Amazon</strong></a></li></ul><h3 class="article-body__section" id="section-early-prime-day-tablet-deals"><span>Early Prime Day tablet deals</span></h3><div class="product"><a data-dimension112="b4988528-0b66-407e-96b2-0e1e6631bfe7" data-action="Deal Block" data-label="Tab M11" data-dimension48="Tab M11" data-dimension25="$209" href="https://www.amazon.com/Lenovo-MediaTek-Octa-Core-1920x1200-Light-Sensor/dp/B0CQMGKBK9" 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="o5Rc2NcN4CUySEAJUBeBi4" name="Lenovo Tab M11" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/o5Rc2NcN4CUySEAJUBeBi4-1920-80.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>This Lenovo Tab M11 might not be the most powerful slate out there, but it'll get the job done if you mainly want to watch streaming videos or do some sketching. It has an 11-inch 1920 x 1200 LCD display, a MediaTek Helio G88 processor, 4GB of RAM, and a 128GB SSD.<a class="view-deal button" href="https://www.amazon.com/Lenovo-MediaTek-Octa-Core-1920x1200-Light-Sensor/dp/B0CQMGKBK9" target="_blank" rel="nofollow" data-dimension112="b4988528-0b66-407e-96b2-0e1e6631bfe7" data-action="Deal Block" data-label="Tab M11" data-dimension48="Tab M11" data-dimension25="$209">View Deal</a></p></div><div class="product"><a data-dimension112="05693e55-0f66-4cfe-ad98-e2a5b0c576fc" data-action="Deal Block" data-label="Tab A1 Plus" data-dimension48="Tab A1 Plus" data-dimension25="$278.5" href="https://www.amazon.com/TCL-TAB-A1-Plus-Entertainment/dp/B0GS1JK2SV" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1497px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="eALW3tEHxz63pJinHv7pP4" name="TCL Tab A1 Plus" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/eALW3tEHxz63pJinHv7pP4-1920-80.jpg" mos="" align="middle" fullscreen="" width="1497" height="1497" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>If you're looking for a more powerful Android tablet that's still affordable, the TCL Tab A1 Plus is a solid choice. This model features a 12.2-inch 2.4K display with a 120Hz refresh rate, 16GB of RAM, and a generous 128GB of storage. The Snapdragon 4 Gen 2 processor inside is more than capable for streaming videos and even some light gaming.<a class="view-deal button" href="https://www.amazon.com/TCL-TAB-A1-Plus-Entertainment/dp/B0GS1JK2SV" target="_blank" rel="nofollow" data-dimension112="05693e55-0f66-4cfe-ad98-e2a5b0c576fc" data-action="Deal Block" data-label="Tab A1 Plus" data-dimension48="Tab A1 Plus" data-dimension25="$278.5">View Deal</a></p></div><div class="product"><a data-dimension112="bf163e7e-3aa9-401c-9c24-439b2e7966a7" data-action="Deal Block" data-label="11" iPad (WiFi/128GB)" data-dimension48="11" iPad (WiFi/128GB)" data-dimension25="$299" 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="bf163e7e-3aa9-401c-9c24-439b2e7966a7" data-action="Deal Block" data-label='11" iPad (WiFi/128GB)' data-dimension48='11" iPad (WiFi/128GB)' data-dimension25="$299">11" iPad (WiFi/128GB): was $349 now $299</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 double the capacity of its predecessor. It's available in 128GB, 256GB, and 512GB capacities.<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="bf163e7e-3aa9-401c-9c24-439b2e7966a7" data-action="Deal Block" data-label="11" iPad (WiFi/128GB)" data-dimension48="11" iPad (WiFi/128GB)" data-dimension25="$299">View Deal</a></p></div><div class="product"><a data-dimension112="1595d7ed-d903-4068-834c-4a2b8fe10ba0" data-action="Deal Block" data-label="11" iPad Air (WiFi/128GB)" data-dimension48="11" iPad Air (WiFi/128GB)" data-dimension25="$559" href="https://www.amazon.com/Apple-iPad-Air-11-inch-M4/dp/B0GQVBJT4J" 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/B0GQVBJT4J" target="_blank" rel="nofollow" data-dimension112="1595d7ed-d903-4068-834c-4a2b8fe10ba0" data-action="Deal Block" data-label='11" iPad Air (WiFi/128GB)' data-dimension48='11" iPad Air (WiFi/128GB)' data-dimension25="$559">11" iPad Air (WiFi/128GB): was $599 now $559</a></strong><br>The 2026 iPad Air packs Apple's M4 processor, which Apple states is up to 30 percent faster than the iPad Air with M3. It also has an 11-inch LED display (2360 x 1640), 128GB of storage, a 12MP rear camera, and a 12MP front camera. The tablet now supports Wi-Fi 7, 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 on the market.<a class="view-deal button" href="https://www.amazon.com/Apple-iPad-Air-11-inch-M4/dp/B0GQVBJT4J" target="_blank" rel="nofollow" data-dimension112="1595d7ed-d903-4068-834c-4a2b8fe10ba0" data-action="Deal Block" data-label="11" iPad Air (WiFi/128GB)" data-dimension48="11" iPad Air (WiFi/128GB)" data-dimension25="$559">View Deal</a></p></div><div class="product"><a data-dimension112="44b29820-8aaa-4fcc-bf1d-f43d349bafb6" data-action="Deal Block" data-label="iPad Pro M5 11" (Wi-Fi/256GB)" data-dimension48="iPad Pro M5 11" (Wi-Fi/256GB)" data-dimension25="$937" href="https://www.amazon.com/dp/B0FWCXJVHN" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1308px;"><p class="vanilla-image-block" style="padding-top:114.68%;"><img id="kVGdyTH2y4y4yS5Mwos2bg" name="iPad Pro M5 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/kVGdyTH2y4y4yS5Mwos2bg-1920-80.jpg" mos="" align="middle" fullscreen="" width="1308" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0FWCXJVHN" target="_blank" rel="nofollow" data-dimension112="44b29820-8aaa-4fcc-bf1d-f43d349bafb6" data-action="Deal Block" data-label='iPad Pro M5 11" (Wi-Fi/256GB)' data-dimension48='iPad Pro M5 11" (Wi-Fi/256GB)' data-dimension25="$937">iPad Pro M5 11" (Wi-Fi/256GB): was $999 now $937</a></strong><br>This iPad Pro packs Apple's latest M5 processor, paired with a stunning 11-inch Ultra Retina XDR OLED display (2420 x 1668). The new M5 processor features 9 CPU cores and 10 GPU cores. It also features a landscape 12MP Center Stage camera and a 12MP Wide camera with adaptive True Tone flash. In our <a href="https://www.tomsguide.com/computing/ipads/ipad-pro-m5-review">iPad Pro M5 review,</a> we said this is "the most powerful tablet ever." <a class="view-deal button" href="https://www.amazon.com/dp/B0FWCXJVHN" target="_blank" rel="nofollow" data-dimension112="44b29820-8aaa-4fcc-bf1d-f43d349bafb6" data-action="Deal Block" data-label="iPad Pro M5 11" (Wi-Fi/256GB)" data-dimension48="iPad Pro M5 11" (Wi-Fi/256GB)" data-dimension25="$937">View Deal</a></p></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/tablets/best-early-prime-day-tablet-deals</link>
                                                                            <description>
                            <![CDATA[ Looking for a new tablet? If so, here are 5 early Amazon Prime Day tablet deals worth your money, from Android tablets to iPads. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">5jYSty4NtnE9fZvMjvL6i5</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/S3BJ6ra54aiDHT5j9bTspF-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 16 Jun 2026 11:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Tablets]]></category>
                                                    <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/S3BJ6ra54aiDHT5j9bTspF-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPad (2025)]]></media:description>                                                            <media:text><![CDATA[iPad (2025)]]></media:text>
                                <media:title type="plain"><![CDATA[iPad (2025)]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/S3BJ6ra54aiDHT5j9bTspF-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The next <a href="https://www.tomsguide.com/news/best-prime-day-deals-and-sales">Prime Day</a> event launches on June 23, which means it’ll be your opportunity to save some cash on your next tablet. While the big sales haven’t hit just yet, some worthwhile deals are happening right now.</p><p>For instance, you can <a href="https://www.amazon.com/TCL-TAB-A1-Plus-Entertainment/dp/B0GS1JK2SV" target="_blank" rel="nofollow">save $80 off the TCL Tab A1 Plus</a> and <a href="https://www.amazon.com/Lenovo-MediaTek-Octa-Core-1920x1200-Light-Sensor/dp/B0CQMGKBK9" target="_blank" rel="nofollow">$40 off the Lenovo Tab M11</a> if you’re looking for an Android tablet. Want an iPad instead? Well, <a href="https://www.amazon.com/Apple-iPad-11-inch-Display-All-Day/dp/B0DZ77D5HL" target="_blank" rel="nofollow">the base iPad 11 is currently $50 off</a>, while <a href="https://www.amazon.com/dp/B0FWCXJVHN" target="_blank" rel="nofollow">the 11-inch iPad Pro M5 has been discounted by $62</a>.</p><p>There isn’t much to choose from at the moment from well-known brands, but I’ll update this post with the latest deals as we get closer to Prime Day, when we’ll surely see better offerings. Now, here are 5 early Prime Day deals to check out.</p><p>Also, if you’re not yet an Amazon Prime member, you can <a href="https://www.amazon.com/amazonprime" target="_blank" rel="nofollow">sign up for a free 30-day trial at Amazon</a> and <a href="https://www.amazon.com/amazonprime?primeCampaignId=studentWlpPrimeRedir" target="_blank" rel="nofollow">students can get a 6-month free trial</a>. For more ways to save, check out the <a href="https://www.tomsguide.com/savings-squad">Tom's Guide Savings Squad</a> as well as our list of the best <a href="https://www.tomsguide.com/coupons/amazon.com">Amazon promo codes</a> this week. </p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links</span></h3><ul><li><strong>Lenovo Tab M11: </strong><a href="https://www.amazon.com/Lenovo-MediaTek-Octa-Core-1920x1200-Light-Sensor/dp/B0CQMGKBK9" target="_blank" rel="nofollow"><strong>was $249 now $209 @ Amazon</strong></a><strong></strong></li><li><strong>TCL Tab A1 Plus: </strong><a href="https://www.amazon.com/TCL-TAB-A1-Plus-Entertainment/dp/B0GS1JK2SV" target="_blank" rel="nofollow"><strong>was $299 now $279 @ Amazon</strong></a></li><li><strong>11" iPad (A16): </strong><a href="https://www.amazon.com/Apple-iPad-11-inch-Display-All-Day/dp/B0DZ77D5HL" target="_blank" rel="nofollow"><strong>was $349 now $299 @ Amazon</strong></a></li><li><strong>11" iPad Air (M4): </strong><a href="https://www.amazon.com/Apple-iPad-Air-11-inch-M4/dp/B0GQVBJT4J" target="_blank" rel="nofollow"><strong>was $599 now $559 @ Amazon</strong></a></li><li><strong>11" iPad Pro (M5): </strong><a href="https://www.amazon.com/dp/B0FWCXJVHN" target="_blank" rel="nofollow"><strong>was $999 now $937 @ Amazon</strong></a></li></ul><h3 class="article-body__section" id="section-early-prime-day-tablet-deals"><span>Early Prime Day tablet deals</span></h3><div class="product"><a data-dimension112="b4988528-0b66-407e-96b2-0e1e6631bfe7" data-action="Deal Block" data-label="Tab M11" data-dimension48="Tab M11" data-dimension25="$209" href="https://www.amazon.com/Lenovo-MediaTek-Octa-Core-1920x1200-Light-Sensor/dp/B0CQMGKBK9" 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="o5Rc2NcN4CUySEAJUBeBi4" name="Lenovo Tab M11" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/o5Rc2NcN4CUySEAJUBeBi4-1920-80.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>This Lenovo Tab M11 might not be the most powerful slate out there, but it'll get the job done if you mainly want to watch streaming videos or do some sketching. It has an 11-inch 1920 x 1200 LCD display, a MediaTek Helio G88 processor, 4GB of RAM, and a 128GB SSD.<a class="view-deal button" href="https://www.amazon.com/Lenovo-MediaTek-Octa-Core-1920x1200-Light-Sensor/dp/B0CQMGKBK9" target="_blank" rel="nofollow" data-dimension112="b4988528-0b66-407e-96b2-0e1e6631bfe7" data-action="Deal Block" data-label="Tab M11" data-dimension48="Tab M11" data-dimension25="$209">View Deal</a></p></div><div class="product"><a data-dimension112="05693e55-0f66-4cfe-ad98-e2a5b0c576fc" data-action="Deal Block" data-label="Tab A1 Plus" data-dimension48="Tab A1 Plus" data-dimension25="$278.5" href="https://www.amazon.com/TCL-TAB-A1-Plus-Entertainment/dp/B0GS1JK2SV" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1497px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="eALW3tEHxz63pJinHv7pP4" name="TCL Tab A1 Plus" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/eALW3tEHxz63pJinHv7pP4-1920-80.jpg" mos="" align="middle" fullscreen="" width="1497" height="1497" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>If you're looking for a more powerful Android tablet that's still affordable, the TCL Tab A1 Plus is a solid choice. This model features a 12.2-inch 2.4K display with a 120Hz refresh rate, 16GB of RAM, and a generous 128GB of storage. The Snapdragon 4 Gen 2 processor inside is more than capable for streaming videos and even some light gaming.<a class="view-deal button" href="https://www.amazon.com/TCL-TAB-A1-Plus-Entertainment/dp/B0GS1JK2SV" target="_blank" rel="nofollow" data-dimension112="05693e55-0f66-4cfe-ad98-e2a5b0c576fc" data-action="Deal Block" data-label="Tab A1 Plus" data-dimension48="Tab A1 Plus" data-dimension25="$278.5">View Deal</a></p></div><div class="product"><a data-dimension112="bf163e7e-3aa9-401c-9c24-439b2e7966a7" data-action="Deal Block" data-label="11" iPad (WiFi/128GB)" data-dimension48="11" iPad (WiFi/128GB)" data-dimension25="$299" 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="bf163e7e-3aa9-401c-9c24-439b2e7966a7" data-action="Deal Block" data-label='11" iPad (WiFi/128GB)' data-dimension48='11" iPad (WiFi/128GB)' data-dimension25="$299">11" iPad (WiFi/128GB): was $349 now $299</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 double the capacity of its predecessor. It's available in 128GB, 256GB, and 512GB capacities.<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="bf163e7e-3aa9-401c-9c24-439b2e7966a7" data-action="Deal Block" data-label="11" iPad (WiFi/128GB)" data-dimension48="11" iPad (WiFi/128GB)" data-dimension25="$299">View Deal</a></p></div><div class="product"><a data-dimension112="1595d7ed-d903-4068-834c-4a2b8fe10ba0" data-action="Deal Block" data-label="11" iPad Air (WiFi/128GB)" data-dimension48="11" iPad Air (WiFi/128GB)" data-dimension25="$559" href="https://www.amazon.com/Apple-iPad-Air-11-inch-M4/dp/B0GQVBJT4J" 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/B0GQVBJT4J" target="_blank" rel="nofollow" data-dimension112="1595d7ed-d903-4068-834c-4a2b8fe10ba0" data-action="Deal Block" data-label='11" iPad Air (WiFi/128GB)' data-dimension48='11" iPad Air (WiFi/128GB)' data-dimension25="$559">11" iPad Air (WiFi/128GB): was $599 now $559</a></strong><br>The 2026 iPad Air packs Apple's M4 processor, which Apple states is up to 30 percent faster than the iPad Air with M3. It also has an 11-inch LED display (2360 x 1640), 128GB of storage, a 12MP rear camera, and a 12MP front camera. The tablet now supports Wi-Fi 7, 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 on the market.<a class="view-deal button" href="https://www.amazon.com/Apple-iPad-Air-11-inch-M4/dp/B0GQVBJT4J" target="_blank" rel="nofollow" data-dimension112="1595d7ed-d903-4068-834c-4a2b8fe10ba0" data-action="Deal Block" data-label="11" iPad Air (WiFi/128GB)" data-dimension48="11" iPad Air (WiFi/128GB)" data-dimension25="$559">View Deal</a></p></div><div class="product"><a data-dimension112="44b29820-8aaa-4fcc-bf1d-f43d349bafb6" data-action="Deal Block" data-label="iPad Pro M5 11" (Wi-Fi/256GB)" data-dimension48="iPad Pro M5 11" (Wi-Fi/256GB)" data-dimension25="$937" href="https://www.amazon.com/dp/B0FWCXJVHN" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1308px;"><p class="vanilla-image-block" style="padding-top:114.68%;"><img id="kVGdyTH2y4y4yS5Mwos2bg" name="iPad Pro M5 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/kVGdyTH2y4y4yS5Mwos2bg-1920-80.jpg" mos="" align="middle" fullscreen="" width="1308" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0FWCXJVHN" target="_blank" rel="nofollow" data-dimension112="44b29820-8aaa-4fcc-bf1d-f43d349bafb6" data-action="Deal Block" data-label='iPad Pro M5 11" (Wi-Fi/256GB)' data-dimension48='iPad Pro M5 11" (Wi-Fi/256GB)' data-dimension25="$937">iPad Pro M5 11" (Wi-Fi/256GB): was $999 now $937</a></strong><br>This iPad Pro packs Apple's latest M5 processor, paired with a stunning 11-inch Ultra Retina XDR OLED display (2420 x 1668). The new M5 processor features 9 CPU cores and 10 GPU cores. It also features a landscape 12MP Center Stage camera and a 12MP Wide camera with adaptive True Tone flash. In our <a href="https://www.tomsguide.com/computing/ipads/ipad-pro-m5-review">iPad Pro M5 review,</a> we said this is "the most powerful tablet ever." <a class="view-deal button" href="https://www.amazon.com/dp/B0FWCXJVHN" target="_blank" rel="nofollow" data-dimension112="44b29820-8aaa-4fcc-bf1d-f43d349bafb6" data-action="Deal Block" data-label="iPad Pro M5 11" (Wi-Fi/256GB)" data-dimension48="iPad Pro M5 11" (Wi-Fi/256GB)" data-dimension25="$937">View Deal</a></p></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I saw the new Siri AI in action at WWDC — and those 'Siri is stupid' jokes could soon be obsolete ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Even before ChatGPT went mainstream Siri has been the butt of jokes for not being very smart. And it’s been justified. Trying anything beyond the basics — playing music, getting the weather, setting timers — has been an exercise in futility. That (hopefully) changes with <a href="https://www.tomsguide.com/ai/apple-finally-fixed-siri-heres-all-the-features-for-the-new-siri-ai-announced-at-wwdc">Siri AI</a>, which is coming to iPhones, iPads and Macs with <a href="https://www.tomsguide.com/phones/iphones/ios-27-is-official-all-the-new-upgrades-and-features-announced-at-wwdc-2026">iOS 27</a>.</p><p>I had a chance to see some in-person demos of the new Siri AI in action, and while these were very much rehearsed, there’s real potential here to save you time and make your life easier. However, the new Visual Intelligence is no Gemini Live, and Siri can take its time with certain tasks (at least in the beta stage). Here’s what I like so far, and what needs work.</p><h2 id="siri-ai-on-iphone">Siri AI on iPhone</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="8Dv4VjtkWH7AH2ALXMA4mL" name="Siri AI personal context" alt="Siri AI personal context on iPhone" src="https://cdn.mos.cms.futurecdn.net/8Dv4VjtkWH7AH2ALXMA4mL-1920-80.jpg" mos="" align="middle" fullscreen="" width="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 first thing you should know about Siri AI is that it understands personal context. So you can ask questions about pretty much anything on your device, and the assistant is smart enough to dig through apps for you to surface the right info.</p><p>During one demo, an Apple rep asked “Which podcast did my sister recommend recently.” And Siri AI then pulled up the answer from a text message. Even better, you can just say “Play it” and Siri will fire up Apple Music and help you dive right in. (Apple will open up this capability to other developers in case you have another favorite music or podcast app.)</p><p>Siri can also get stuff done on your behalf across multiple apps, including performing multiple tasks with a single prompt.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ogeoX4X3QERdWvELLvsdJK" name="Siri AI multiple actions" alt="Siri AI" src="https://cdn.mos.cms.futurecdn.net/ogeoX4X3QERdWvELLvsdJK-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The second demo started with just a couple of items on a camping list, but an email from a friend had a lot more recommendations. You can just say “add this stuff to my camping gear list and remind me to pack for my trip when I get home.”</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-evLaaO"></div>                            </div>                            <script src="https://kwizly.com/embed/evLaaO.js" async></script><p>Siri then got to work, updating the list in the Notes app and then setting a location-based reminder. However, it did take a while to complete these tasks. Hopefully, the final Siri will be faster.</p><p>I was pretty impressed by the improved Visual Intelligence experience, too. You can now access it via a dedicated Siri mode within the camera app, so you don’t have to use the Camera Control button shortcut. I think that’s huge for ease of use and discoverability.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="8nskRdSqDca3nQxFk7AxLK" name="Siri AI visual intelligence" alt="Siri AI" src="https://cdn.mos.cms.futurecdn.net/8nskRdSqDca3nQxFk7AxLK-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>During the demo, an iPhone captured an image of two books. You could then ask which book you should read first if you really liked <em>Hyperion </em>and Siri gave its recommendation. The Apple rep then asked which of these books had been turned into a movie and <em>Wool</em> had been adapted into the <a href="https://www.tomsguide.com/entertainment/streaming/silo-season-3-everything-we-know-so-far">‘Silo’ </a>TV series. Cool, yes, but yeah I told you it was canned.</p><p>What’s not clear is whether this works with live video and I’m following up on that.  </p><h2 id="siri-ai-on-mac">Siri AI on 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="cFZGBBx3BSPBb2Us9ENxHK" name="Siri AI Mac" alt="Siri AI" src="https://cdn.mos.cms.futurecdn.net/cFZGBBx3BSPBb2Us9ENxHK-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Accessing Siri AI on Mac is as easy as just pulling up Spotlight or typing command + Shift + Space. When you start typing Spotlight will know what sorts of queries should go to Siri versus say just launching apps.</p><p>Let’s say you’re looking for vacation spot and type “What’s the best Hawaiian Island for a young family.” Siri will get to work and pull up recommendations in a new window, which you can then expand and park on either side of the screen. </p><p>You can then ask follow-up questions like “Which is best for sea turtles” to narrow your selections. From there you can hit a button in the top right corner to bring you into the dedicated Siri app. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="CdxHHTQuGShDA7CRtCpEMK" name="Siri AI Mac events" alt="Siri AI" src="https://cdn.mos.cms.futurecdn.net/CdxHHTQuGShDA7CRtCpEMK-1920-80.jpg" mos="" align="middle" fullscreen="" width="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 dual-pane app will have your chat in the right window and your history of all Siri chats in the left window. It’s pretty easy to navigate.</p><p>To help you save time on productivity tasks, you can use Siri AI wherever you can use a cursor. The demo showed how you can be looking at a messy note with a bunch of info and then use a secondary click to bring up the Ask Siri menu. </p><p>After typing “Draft an email that summarizes this and include the action items,” Siri did just that. It’s definitely a timesaver. I just wish it worked with Gmail as well Apple Mail. Google would have to plug into Siri AI’s framework.</p><p>My favorite Siri AI on Mac demo came when a mock summer schedule appeared on screen with dates, times and locations for the matches. You can use Command + Shift + Space and then click the Add to Calendar button that automatically appears. </p><p>From there Siri AI will let you add all of the games to your calendar. Or you could tell Siri to only add the home games to your calendar if you wanted. Where was this when my kids were playing sports?</p><h2 id="siri-on-ipad">Siri on iPad</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="mDTqjVMFVgrWa89ZqupNMK" name="Siri AI iPad" alt="Siri AI" src="https://cdn.mos.cms.futurecdn.net/mDTqjVMFVgrWa89ZqupNMK-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Last but not least, Siri AI on iPad works in much the same that it does on the iPhone, but having a larger canvas has its benefits.</p><p>You can access Siri AI at any time just by swiping down from the top middle of the display. As you begin to type “Who are the top golfers in the PGA right now,” the text “Ask Siri” appears right after it because Apple’s assistant knows that it can help.</p><p>Siri AI will then tap into Apple’s Broad World Knowledge and bring back answers, complete with citations you can click on. </p><p>Apple’s Siri AI can also help you plan a trip and you make the query pretty specific, like “What are the best national parks to visit in the US in July with my family? Recommend something that’s not too hot or crowded.”</p><p>Siri AI recommended where to go, including North Cascades National Park in Washington. You can then pop into the full Siri app if you like to ask follow-up questions, or use the Slide Over feature to keep the Siri conversation just a swipe away. </p><h2 id="siri-ai-outlook">Siri AI outlook</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="EEzyWeGDDhFExNraQiMu2g" name="Siri AI demo wwdc" alt="Siri AI demo at WWDC with Mike Rockwell" src="https://cdn.mos.cms.futurecdn.net/EEzyWeGDDhFExNraQiMu2g-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Overall, Siri AI isn't just a rebranding for Apple. It’s a much more capable and personal assistant that's more deeply integrated into the apps you use. </p><p>I’m especially impressed by Siri AI’s use of personal context, and the ability to complete multiple actions at once. And while Visual Intelligence doesn’t seem quite as robust as Gemini Live in terms of having a real-time conversation about whatever’s in your camera view or on your screen, it’s certainly much improved.</p><p>In addition to a bit more speed, I just want to see what happens when developers get their hands on Siri AI so that you’re not just locked into Apple’s own apps. </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/apple-finally-fixed-siri-heres-all-the-features-for-the-new-siri-ai-announced-at-wwdc"><strong>Apple just completely rebuilt Siri AI — here are the 7 biggest upgrades coming to your iPhone</strong></a></li><li><a href="https://www.tomsguide.com/phones/iphones/ios-27-is-official-all-the-new-upgrades-and-features-announced-at-wwdc-2026"><strong>iOS 27 is official: All the new upgrades and features announced at WWDC 2026</strong></a></li><li><a href="https://www.tomsguide.com/computing/macos/macos-27"><strong>macOS Golden Gate: The biggest updates coming to Macs</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/ai/apple-intelligence/i-just-saw-the-new-siri-ai-in-action-at-wwdc-heres-what-i-like-and-what-still-needs-work</link>
                                                                            <description>
                            <![CDATA[ I got a first look at Siri powered by Apple Intelligence at WWDC. It can finally understand personal context, but the demos show it's still a work in progress. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">nnYhqyRUW8ADLkxrUcgtV6</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/EjLomL6cUAsVygMTKgKWJK-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 09 Jun 2026 15:58:54 +0000</pubDate>                                                                                                                                <updated>Wed, 10 Jun 2026 01:17:36 +0000</updated>
                                                                                                                                            <category><![CDATA[Apple Intelligence]]></category>
                                                    <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[MacBooks]]></category>
                                                    <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[AI]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Computing Peripherals]]></category>
                                                    <category><![CDATA[Laptops]]></category>
                                                    <category><![CDATA[Tablets]]></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;&lt;br&gt;&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.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&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.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&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/EjLomL6cUAsVygMTKgKWJK-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Siri AI]]></media:description>                                                            <media:text><![CDATA[Siri AI]]></media:text>
                                <media:title type="plain"><![CDATA[Siri AI]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/EjLomL6cUAsVygMTKgKWJK-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Even before ChatGPT went mainstream Siri has been the butt of jokes for not being very smart. And it’s been justified. Trying anything beyond the basics — playing music, getting the weather, setting timers — has been an exercise in futility. That (hopefully) changes with <a href="https://www.tomsguide.com/ai/apple-finally-fixed-siri-heres-all-the-features-for-the-new-siri-ai-announced-at-wwdc">Siri AI</a>, which is coming to iPhones, iPads and Macs with <a href="https://www.tomsguide.com/phones/iphones/ios-27-is-official-all-the-new-upgrades-and-features-announced-at-wwdc-2026">iOS 27</a>.</p><p>I had a chance to see some in-person demos of the new Siri AI in action, and while these were very much rehearsed, there’s real potential here to save you time and make your life easier. However, the new Visual Intelligence is no Gemini Live, and Siri can take its time with certain tasks (at least in the beta stage). Here’s what I like so far, and what needs work.</p><h2 id="siri-ai-on-iphone">Siri AI on iPhone</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="8Dv4VjtkWH7AH2ALXMA4mL" name="Siri AI personal context" alt="Siri AI personal context on iPhone" src="https://cdn.mos.cms.futurecdn.net/8Dv4VjtkWH7AH2ALXMA4mL-1920-80.jpg" mos="" align="middle" fullscreen="" width="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 first thing you should know about Siri AI is that it understands personal context. So you can ask questions about pretty much anything on your device, and the assistant is smart enough to dig through apps for you to surface the right info.</p><p>During one demo, an Apple rep asked “Which podcast did my sister recommend recently.” And Siri AI then pulled up the answer from a text message. Even better, you can just say “Play it” and Siri will fire up Apple Music and help you dive right in. (Apple will open up this capability to other developers in case you have another favorite music or podcast app.)</p><p>Siri can also get stuff done on your behalf across multiple apps, including performing multiple tasks with a single prompt.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ogeoX4X3QERdWvELLvsdJK" name="Siri AI multiple actions" alt="Siri AI" src="https://cdn.mos.cms.futurecdn.net/ogeoX4X3QERdWvELLvsdJK-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The second demo started with just a couple of items on a camping list, but an email from a friend had a lot more recommendations. You can just say “add this stuff to my camping gear list and remind me to pack for my trip when I get home.”</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-evLaaO"></div>                            </div>                            <script src="https://kwizly.com/embed/evLaaO.js" async></script><p>Siri then got to work, updating the list in the Notes app and then setting a location-based reminder. However, it did take a while to complete these tasks. Hopefully, the final Siri will be faster.</p><p>I was pretty impressed by the improved Visual Intelligence experience, too. You can now access it via a dedicated Siri mode within the camera app, so you don’t have to use the Camera Control button shortcut. I think that’s huge for ease of use and discoverability.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="8nskRdSqDca3nQxFk7AxLK" name="Siri AI visual intelligence" alt="Siri AI" src="https://cdn.mos.cms.futurecdn.net/8nskRdSqDca3nQxFk7AxLK-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>During the demo, an iPhone captured an image of two books. You could then ask which book you should read first if you really liked <em>Hyperion </em>and Siri gave its recommendation. The Apple rep then asked which of these books had been turned into a movie and <em>Wool</em> had been adapted into the <a href="https://www.tomsguide.com/entertainment/streaming/silo-season-3-everything-we-know-so-far">‘Silo’ </a>TV series. Cool, yes, but yeah I told you it was canned.</p><p>What’s not clear is whether this works with live video and I’m following up on that.  </p><h2 id="siri-ai-on-mac">Siri AI on 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="cFZGBBx3BSPBb2Us9ENxHK" name="Siri AI Mac" alt="Siri AI" src="https://cdn.mos.cms.futurecdn.net/cFZGBBx3BSPBb2Us9ENxHK-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Accessing Siri AI on Mac is as easy as just pulling up Spotlight or typing command + Shift + Space. When you start typing Spotlight will know what sorts of queries should go to Siri versus say just launching apps.</p><p>Let’s say you’re looking for vacation spot and type “What’s the best Hawaiian Island for a young family.” Siri will get to work and pull up recommendations in a new window, which you can then expand and park on either side of the screen. </p><p>You can then ask follow-up questions like “Which is best for sea turtles” to narrow your selections. From there you can hit a button in the top right corner to bring you into the dedicated Siri app. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="CdxHHTQuGShDA7CRtCpEMK" name="Siri AI Mac events" alt="Siri AI" src="https://cdn.mos.cms.futurecdn.net/CdxHHTQuGShDA7CRtCpEMK-1920-80.jpg" mos="" align="middle" fullscreen="" width="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 dual-pane app will have your chat in the right window and your history of all Siri chats in the left window. It’s pretty easy to navigate.</p><p>To help you save time on productivity tasks, you can use Siri AI wherever you can use a cursor. The demo showed how you can be looking at a messy note with a bunch of info and then use a secondary click to bring up the Ask Siri menu. </p><p>After typing “Draft an email that summarizes this and include the action items,” Siri did just that. It’s definitely a timesaver. I just wish it worked with Gmail as well Apple Mail. Google would have to plug into Siri AI’s framework.</p><p>My favorite Siri AI on Mac demo came when a mock summer schedule appeared on screen with dates, times and locations for the matches. You can use Command + Shift + Space and then click the Add to Calendar button that automatically appears. </p><p>From there Siri AI will let you add all of the games to your calendar. Or you could tell Siri to only add the home games to your calendar if you wanted. Where was this when my kids were playing sports?</p><h2 id="siri-on-ipad">Siri on iPad</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="mDTqjVMFVgrWa89ZqupNMK" name="Siri AI iPad" alt="Siri AI" src="https://cdn.mos.cms.futurecdn.net/mDTqjVMFVgrWa89ZqupNMK-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Last but not least, Siri AI on iPad works in much the same that it does on the iPhone, but having a larger canvas has its benefits.</p><p>You can access Siri AI at any time just by swiping down from the top middle of the display. As you begin to type “Who are the top golfers in the PGA right now,” the text “Ask Siri” appears right after it because Apple’s assistant knows that it can help.</p><p>Siri AI will then tap into Apple’s Broad World Knowledge and bring back answers, complete with citations you can click on. </p><p>Apple’s Siri AI can also help you plan a trip and you make the query pretty specific, like “What are the best national parks to visit in the US in July with my family? Recommend something that’s not too hot or crowded.”</p><p>Siri AI recommended where to go, including North Cascades National Park in Washington. You can then pop into the full Siri app if you like to ask follow-up questions, or use the Slide Over feature to keep the Siri conversation just a swipe away. </p><h2 id="siri-ai-outlook">Siri AI outlook</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="EEzyWeGDDhFExNraQiMu2g" name="Siri AI demo wwdc" alt="Siri AI demo at WWDC with Mike Rockwell" src="https://cdn.mos.cms.futurecdn.net/EEzyWeGDDhFExNraQiMu2g-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Overall, Siri AI isn't just a rebranding for Apple. It’s a much more capable and personal assistant that's more deeply integrated into the apps you use. </p><p>I’m especially impressed by Siri AI’s use of personal context, and the ability to complete multiple actions at once. And while Visual Intelligence doesn’t seem quite as robust as Gemini Live in terms of having a real-time conversation about whatever’s in your camera view or on your screen, it’s certainly much improved.</p><p>In addition to a bit more speed, I just want to see what happens when developers get their hands on Siri AI so that you’re not just locked into Apple’s own apps. </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/apple-finally-fixed-siri-heres-all-the-features-for-the-new-siri-ai-announced-at-wwdc"><strong>Apple just completely rebuilt Siri AI — here are the 7 biggest upgrades coming to your iPhone</strong></a></li><li><a href="https://www.tomsguide.com/phones/iphones/ios-27-is-official-all-the-new-upgrades-and-features-announced-at-wwdc-2026"><strong>iOS 27 is official: All the new upgrades and features announced at WWDC 2026</strong></a></li><li><a href="https://www.tomsguide.com/computing/macos/macos-27"><strong>macOS Golden Gate: The biggest updates coming to Macs</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ The iPadOS 27 developer beta is live — here's how to download it on your iPad ]]></title>
                                                                                                <dc:content><![CDATA[ <p>WWDC 26 is in the books (or at least, the keynote is), and as is tradition, we got a good look at OS updates across the Apple ecosystem.</p><p>iPadOS 27 is one such release, and developer beta 1 is out as of right now. Here’s what’s new, and why you might want to give it a try — and why you might want to skip it for now.</p><h2 id="what-s-new-in-ipados-27">What’s new in iPadOS 27?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:696px;"><p class="vanilla-image-block" style="padding-top:64.94%;"><img id="w4N7Xodv2eHmZPdzd92Gjh" name="imgi_32_time_allowance__bt772zp1sz1e_large" alt="iPadOS 27 screenshots" src="https://cdn.mos.cms.futurecdn.net/w4N7Xodv2eHmZPdzd92Gjh-1920-80.jpg" mos="" align="middle" fullscreen="" width="696" height="452" 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>As with iPhone and Mac, the big draw here is the reinvented Siri, which is now much more capable. <a href="https://www.tomsguide.com/computing/vr-ar/ipados-27-everything-coming-to-the-apples-beloved-tablets">It’s context-aware</a>, understands what’s on your screen, and can search through your data via on-device processing to find key data from your contacts, messages, Mail, and more.</p><p>There are also new child safety features like allowed apps, and a laundry list of tweaks under the hood to things like memory usage, display rendering, and more granularity over the Liquid Glass interface, which debuted last year.</p><h2 id="a-word-of-warning">A word of warning</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:696px;"><p class="vanilla-image-block" style="padding-top:64.94%;"><img id="Twg7U5kYbXspPSztgqi7kh" name="imgi_23_handwritten_notes__e0kvf725uwsy_large" alt="iPadOS 27 screenshots" src="https://cdn.mos.cms.futurecdn.net/Twg7U5kYbXspPSztgqi7kh-1920-80.jpg" mos="" align="middle" fullscreen="" width="696" height="452" 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>As with any beta, iPadOS or otherwise, you should be wary of features (both new and old) working inconsistently. It’s not uncommon for even a tech giant like Apple to go through multiple rounds of testing before the public beta, which tends to be a little more stable (at least historically speaking).</p><p>It’s also possible that running the beta will cause a drop in your battery expectancy. If you find yourself needing to charge more regularly, it could be because you’re on the beta.</p><h2 id="supported-ipados-27-models">Supported iPadOS 27 models</h2><p>iPadOS 27 is compatible with the following devices:</p><ul><li><strong>iPad Pro 2nd Gen or later</strong></li><li><strong>iPad Air 4th Gen or later</strong></li><li><strong>iPad Mini 6th Gen or later</strong></li><li><strong>iPad 9th Gen or later</strong></li></ul><p>It’s worth noting that the new Siri AI features are only supported on M4 or later iPad models.</p><h2 id="how-to-get-the-ipados-27-beta">How to get the iPadOS 27 beta</h2><p>With those considerations out of the way, the process of enrolling your iPad is very similar to that in prior years.</p><p>First, you’ll need to enroll in the Apple Developer Program. You may already be enrolled from prior years, but if not, <a href="https://developer.apple.com/programs/enroll/">visit the sign-up page</a> to get the ball rolling. </p><p>You’ll need to log your name and address, then set your entity type as an individual. When the payment screen appears, back out, and you’ll be on the free developer tier.</p><p>With that done, open your iPad and follow these instructions:</p><ul><li>Open Settings > General > Software Update</li><li>Tap Beta Updates</li><li>Select ‘iPadOS 27 Developer Beta’</li><li>Then download it and install via the on-screen instructions</li></ul><h3 class="article-body__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/ios-27-is-official-all-the-new-upgrades-and-features-announced-at-wwdc-2026">iOS 27 is official: All the new upgrades and features announced at WWDC 2026</a></li><li><a href="https://www.tomsguide.com/computing/macos/macos-27">macOS Golden Gate: The biggest updates coming to Macs</a></li><li><a href="https://www.tomsguide.com/ai/apple-finally-fixed-siri-heres-all-the-features-for-the-new-siri-ai-announced-at-wwdc">Apple just completely rebuilt Siri AI — here are the 7 biggest upgrades coming to your iPhone</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/ipads/the-ipados-27-developer-beta-is-live-heres-how-to-download-it-on-your-ipad</link>
                                                                            <description>
                            <![CDATA[ iPadOS is learning some new tricks, and you can check them out today with the iPadOS 27 beta. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">yMX4wJYg6M9uguKSZXSPfH</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/iG5tTdDFXptufbDQzuJPyL-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 09 Jun 2026 11:00:00 +0000</pubDate>                                                                                                                                <updated>Thu, 16 Jul 2026 13:30:47 +0000</updated>
                                                                                                                                            <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[Computing Peripherals]]></category>
                                                    <category><![CDATA[Tablets]]></category>
                                                                                                                    <dc:creator><![CDATA[ Lloyd Coombes ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/xcWocVTwa9yiwXRs559XNA-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Lloyd Coombes is a freelance tech and fitness writer. He&#039;s an expert in all things Apple as well as in computer and gaming tech, with previous works published on TechRadar, Tom&#039;s Guide, Live Science and more. You&#039;ll find him regularly testing the latest MacBook or iPhone, but he spends most of his time writing about video games as Gaming Editor for the Daily Star. He also covers board games and virtual reality, just to round out the nerdy pursuits.&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/iG5tTdDFXptufbDQzuJPyL-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide / Apple]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPadOS 27]]></media:description>                                                            <media:text><![CDATA[iPadOS 27]]></media:text>
                                <media:title type="plain"><![CDATA[iPadOS 27]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/iG5tTdDFXptufbDQzuJPyL-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>WWDC 26 is in the books (or at least, the keynote is), and as is tradition, we got a good look at OS updates across the Apple ecosystem.</p><p>iPadOS 27 is one such release, and developer beta 1 is out as of right now. Here’s what’s new, and why you might want to give it a try — and why you might want to skip it for now.</p><h2 id="what-s-new-in-ipados-27">What’s new in iPadOS 27?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:696px;"><p class="vanilla-image-block" style="padding-top:64.94%;"><img id="w4N7Xodv2eHmZPdzd92Gjh" name="imgi_32_time_allowance__bt772zp1sz1e_large" alt="iPadOS 27 screenshots" src="https://cdn.mos.cms.futurecdn.net/w4N7Xodv2eHmZPdzd92Gjh-1920-80.jpg" mos="" align="middle" fullscreen="" width="696" height="452" 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>As with iPhone and Mac, the big draw here is the reinvented Siri, which is now much more capable. <a href="https://www.tomsguide.com/computing/vr-ar/ipados-27-everything-coming-to-the-apples-beloved-tablets">It’s context-aware</a>, understands what’s on your screen, and can search through your data via on-device processing to find key data from your contacts, messages, Mail, and more.</p><p>There are also new child safety features like allowed apps, and a laundry list of tweaks under the hood to things like memory usage, display rendering, and more granularity over the Liquid Glass interface, which debuted last year.</p><h2 id="a-word-of-warning">A word of warning</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:696px;"><p class="vanilla-image-block" style="padding-top:64.94%;"><img id="Twg7U5kYbXspPSztgqi7kh" name="imgi_23_handwritten_notes__e0kvf725uwsy_large" alt="iPadOS 27 screenshots" src="https://cdn.mos.cms.futurecdn.net/Twg7U5kYbXspPSztgqi7kh-1920-80.jpg" mos="" align="middle" fullscreen="" width="696" height="452" 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>As with any beta, iPadOS or otherwise, you should be wary of features (both new and old) working inconsistently. It’s not uncommon for even a tech giant like Apple to go through multiple rounds of testing before the public beta, which tends to be a little more stable (at least historically speaking).</p><p>It’s also possible that running the beta will cause a drop in your battery expectancy. If you find yourself needing to charge more regularly, it could be because you’re on the beta.</p><h2 id="supported-ipados-27-models">Supported iPadOS 27 models</h2><p>iPadOS 27 is compatible with the following devices:</p><ul><li><strong>iPad Pro 2nd Gen or later</strong></li><li><strong>iPad Air 4th Gen or later</strong></li><li><strong>iPad Mini 6th Gen or later</strong></li><li><strong>iPad 9th Gen or later</strong></li></ul><p>It’s worth noting that the new Siri AI features are only supported on M4 or later iPad models.</p><h2 id="how-to-get-the-ipados-27-beta">How to get the iPadOS 27 beta</h2><p>With those considerations out of the way, the process of enrolling your iPad is very similar to that in prior years.</p><p>First, you’ll need to enroll in the Apple Developer Program. You may already be enrolled from prior years, but if not, <a href="https://developer.apple.com/programs/enroll/">visit the sign-up page</a> to get the ball rolling. </p><p>You’ll need to log your name and address, then set your entity type as an individual. When the payment screen appears, back out, and you’ll be on the free developer tier.</p><p>With that done, open your iPad and follow these instructions:</p><ul><li>Open Settings > General > Software Update</li><li>Tap Beta Updates</li><li>Select ‘iPadOS 27 Developer Beta’</li><li>Then download it and install via the on-screen instructions</li></ul><h3 class="article-body__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/ios-27-is-official-all-the-new-upgrades-and-features-announced-at-wwdc-2026">iOS 27 is official: All the new upgrades and features announced at WWDC 2026</a></li><li><a href="https://www.tomsguide.com/computing/macos/macos-27">macOS Golden Gate: The biggest updates coming to Macs</a></li><li><a href="https://www.tomsguide.com/ai/apple-finally-fixed-siri-heres-all-the-features-for-the-new-siri-ai-announced-at-wwdc">Apple just completely rebuilt Siri AI — here are the 7 biggest upgrades coming to your iPhone</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ iPadOS 27: Everything announced for Apple's beloved tablets at WWDC 2026 ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Apple's annual developer conference, <a href="https://www.tomsguide.com/news/live/wwdc-2026-live-news-updates">WWDC 2026</a>, is happening right now, and there are plenty of announcements covering all of the company's major operating systems. </p><p>Apple recently switched to an annual naming convention with its operating systems, naming them after the following year. That includes iPadOS 27, which runs on the company's incredibly popular tablets. </p><p>Apple is constantly moving ahead with the iPad, and we know that WWDC 2026, which is likely to be outgoing CEO Tim Cook's last, will feature news and info on the latest version of Apple's slate OS.</p><p>The company's big focus with iPadOS 27 seems to be on improvements rather than adding new features, which makes it less exciting at first, but will be great for longtime users with sticking points.</p><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gK4rJ8" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><h2 id="liquid-glass-improvements-3">Liquid Glass improvements</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Mo6tj7vp6LVbGvC99heiRD" name="WWDC 2026 — June 8 _ Apple 5-58 screenshot" alt="All the new OS releases at WWDC 2026" src="https://cdn.mos.cms.futurecdn.net/Mo6tj7vp6LVbGvC99heiRD-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Apple)</span></figcaption></figure><p><a href="https://www.tomsguide.com/phones/iphones/ios-26s-biggest-selling-point-is-the-one-thing-i-dislike-the-most">Liquid Glass</a> is one of Apple's most divisive design choices in recent memory, and the company is showing no signs of ditching it in iPadOS 27. Instead, the company is leaning into it more with more Liquid-focused icons. </p><p>However, Apple is also adding a slider that provides better control over Liquid Glass, allowing you to go more transparent or increase the tint so it's barely transparent. </p><p>This seems like a smart design move for iPadOS 27 (and other Apple operating systems), as it allows people who really love the transparent look and feel to lean into it, while everyone else can limit it.</p><h2 id="child-safety-features-3">Child Safety features</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="whAkfMKmBNvmkF7p275UMd" name="WWDC 2026 — June 8 _ Apple 24-41 screenshot" alt="Ask to Browse at WWDC 2026" src="https://cdn.mos.cms.futurecdn.net/whAkfMKmBNvmkF7p275UMd-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Apple)</span></figcaption></figure><p>Apple is making a massive expansion to its parental controls features for <a href="https://www.tomsguide.com/computing/ipads/ipados-27-the-3-biggest-expected-upgrades-coming-to-ipads">iPadOS 27</a>. Screen management time is getting some notable upgrades, and developers will have better access to parental control tools within their apps.</p><p>"At Apple, our mission has always been to create technology that empowers people and enriches their lives, while helping keep them safe,” said Sumbul Desai, M.D., Apple’s vice president of Health and Fitness. “Our approach to helping families create safer digital experiences is grounded in the belief that every child is unique."</p><h2 id="apple-intelligence">Apple Intelligence</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="FfBAeGxYgEgqeDXa6zccxa" name="WWDC 2026 — June 8 _ Apple 52-49 screenshot" alt="Siri proofreading on iPad" src="https://cdn.mos.cms.futurecdn.net/FfBAeGxYgEgqeDXa6zccxa-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Apple)</span></figcaption></figure><p>Apple is running new models that will run both on a server and on your device, which Apple says will offer powerful image understanding and more. The most powerful version of its on-device model will only support iPad devices with M4 chips, so older and more affordable iPads will be left out.</p><p>The biggest change here for iPad users is that everything is integrated into the OS, including the <a href="https://www.tomsguide.com/ai/i-thought-siri-was-finished-these-5-leaked-wwdc-2026-features-are-its-biggest-update-since-2011">new Siri</a>, so you can use speech to find what you're looking for. And of course, it can also go online to find answers and then provide them (much like ChatGPT and other AI chatbots).</p><p>Siri AI is Apple's name for its new personal assistant, which seems like the obvious choice. Apple promises more conversational features, a dedicated Siri app and a new visual design for the personal assistant.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1960px;"><p class="vanilla-image-block" style="padding-top:66.68%;"><img id="UXfSfZuATf5H7dReLHGMv3" name="Apple-Siri-AI-Spotlight-integration-260608_big.jpg.large_2x" alt="Siri AI on iPad" src="https://cdn.mos.cms.futurecdn.net/UXfSfZuATf5H7dReLHGMv3-1920-80.jpg" mos="" align="middle" fullscreen="" width="1960" height="1307" 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 Siri is more conversational, so you can go back and forth with it to get what you need done. Apple demonstrated how to use the conversation feature to plan a World Cup watch party, including a match schedule, menu items, and even searching conversations to find a suggestion from his daughter.  </p><p>On iPadOS, Apple showcased a pop-out window showing a conversation with Siri and the Siri AI app. It also showed cross-platform conversations, so if you use an iPad, iPhone or other Apple devices, you can switch between them and keep your AI queries going.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1960px;"><p class="vanilla-image-block" style="padding-top:71.43%;"><img id="xccmdHUbrwyBXBvwGBLRPC" name="Apple-Siri-AI-helpful-tips-and-suggestions-260608_big.jpg.large_2x" alt="Siri AI on an iPad" src="https://cdn.mos.cms.futurecdn.net/xccmdHUbrwyBXBvwGBLRPC-1920-80.jpg" mos="" align="middle" fullscreen="" width="1960" height="1400" 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><a href="https://www.tomsguide.com/ai/siri-just-got-a-huge-boost-with-apple-intelligence-heres-everything-it-can-do-now">On-screen awareness</a>, a feature discussed previously, sounds useful, but Apple didn't go into much detail on how it will work.</p><p>Siri AI will also offer writing advice and a proofreading system-wide, which sounds useful if you write on an iPad. </p><p>Apple says privacy is a major focus for its AI features on iPad, which is important. </p><h2 id="ipados-27-release-date">iPadOS 27 release date</h2><p>Apple appears to be following its typical release schedule, with Tim Cook rounding out the keynote citing a Fall release date for the latest version of its iPad operating system and the beta is scheduled to launch </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/even-more-android-phones-now-support-file-sharing-to-apple-airdrop-heres-a-full-list">Even more Android phones now support file-sharing to Apple AirDrop — here's a full list</a></li><li><a href="https://www.tomsguide.com/phones/iphones/wwdc-2026-7-biggest-announcements-we-expect">Apple WWDC 2026 event — 9 biggest announcements we expect</a></li><li><a href="https://www.tomsguide.com/phones/iphones/apples-foldable-iphone-ultra-just-leaked-in-new-photos-and-we-have-a-release-date-update">Apple's foldable iPhone Ultra just leaked in new photos — and we have a release date update</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/vr-ar/ipados-27-everything-coming-to-the-apples-beloved-tablets</link>
                                                                            <description>
                            <![CDATA[ Apple announced several updates for iPadOS 27, which powers its popular line of tablets. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">mNdkt2F77ncUSRksfKujxa</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/KkJeeF9BeTdiNH2DUJNhjh-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 08 Jun 2026 17:37:35 +0000</pubDate>                                                                                                                                <updated>Mon, 08 Jun 2026 19:07:38 +0000</updated>
                                                                                                                                            <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[Computing Peripherals]]></category>
                                                    <category><![CDATA[Tablets]]></category>
                                                                                                <author><![CDATA[ dave.leclair@futurenet.com (Dave LeClair) ]]></author>                    <dc:creator><![CDATA[ Dave LeClair ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/fyx7qYdxPMTNBhdnMfNmaB-320-70.png ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Dave LeClair is the Managing News Editor for Tom&#039;s Guide, keeping his finger on the pulse of all things technology. He loves taking the complicated happenings in the tech world and explaining why they matter. Whether Apple is announcing the next big thing in the mobile space or a small startup advancing generative AI, Dave will apply his experience to help you figure out what&#039;s happening and why it&#039;s relevant to your life.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;Before Tom&#039;s Guide, Dave worked for publications like PCMag, Pocket-lint, MUO, How-To Geek, Digital Trends, and others. He started writing about technology professionally for MUO in 2011 and hasn&#039;t looked back since. In addition to news, you can find reviews, how-to pieces, shopping guides, and many other types of content with Dave&#039;s name attached.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/KkJeeF9BeTdiNH2DUJNhjh-1280-80.jpg">
                                                            <media:credit><![CDATA[Apple]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Apple Child safety feature on iPad]]></media:description>                                                            <media:text><![CDATA[Apple Child safety feature on iPad]]></media:text>
                                <media:title type="plain"><![CDATA[Apple Child safety feature on iPad]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/KkJeeF9BeTdiNH2DUJNhjh-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Apple's annual developer conference, <a href="https://www.tomsguide.com/news/live/wwdc-2026-live-news-updates">WWDC 2026</a>, is happening right now, and there are plenty of announcements covering all of the company's major operating systems. </p><p>Apple recently switched to an annual naming convention with its operating systems, naming them after the following year. That includes iPadOS 27, which runs on the company's incredibly popular tablets. </p><p>Apple is constantly moving ahead with the iPad, and we know that WWDC 2026, which is likely to be outgoing CEO Tim Cook's last, will feature news and info on the latest version of Apple's slate OS.</p><p>The company's big focus with iPadOS 27 seems to be on improvements rather than adding new features, which makes it less exciting at first, but will be great for longtime users with sticking points.</p><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gK4rJ8" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><h2 id="liquid-glass-improvements-3">Liquid Glass improvements</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Mo6tj7vp6LVbGvC99heiRD" name="WWDC 2026 — June 8 _ Apple 5-58 screenshot" alt="All the new OS releases at WWDC 2026" src="https://cdn.mos.cms.futurecdn.net/Mo6tj7vp6LVbGvC99heiRD-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Apple)</span></figcaption></figure><p><a href="https://www.tomsguide.com/phones/iphones/ios-26s-biggest-selling-point-is-the-one-thing-i-dislike-the-most">Liquid Glass</a> is one of Apple's most divisive design choices in recent memory, and the company is showing no signs of ditching it in iPadOS 27. Instead, the company is leaning into it more with more Liquid-focused icons. </p><p>However, Apple is also adding a slider that provides better control over Liquid Glass, allowing you to go more transparent or increase the tint so it's barely transparent. </p><p>This seems like a smart design move for iPadOS 27 (and other Apple operating systems), as it allows people who really love the transparent look and feel to lean into it, while everyone else can limit it.</p><h2 id="child-safety-features-3">Child Safety features</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="whAkfMKmBNvmkF7p275UMd" name="WWDC 2026 — June 8 _ Apple 24-41 screenshot" alt="Ask to Browse at WWDC 2026" src="https://cdn.mos.cms.futurecdn.net/whAkfMKmBNvmkF7p275UMd-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Apple)</span></figcaption></figure><p>Apple is making a massive expansion to its parental controls features for <a href="https://www.tomsguide.com/computing/ipads/ipados-27-the-3-biggest-expected-upgrades-coming-to-ipads">iPadOS 27</a>. Screen management time is getting some notable upgrades, and developers will have better access to parental control tools within their apps.</p><p>"At Apple, our mission has always been to create technology that empowers people and enriches their lives, while helping keep them safe,” said Sumbul Desai, M.D., Apple’s vice president of Health and Fitness. “Our approach to helping families create safer digital experiences is grounded in the belief that every child is unique."</p><h2 id="apple-intelligence">Apple Intelligence</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="FfBAeGxYgEgqeDXa6zccxa" name="WWDC 2026 — June 8 _ Apple 52-49 screenshot" alt="Siri proofreading on iPad" src="https://cdn.mos.cms.futurecdn.net/FfBAeGxYgEgqeDXa6zccxa-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Apple)</span></figcaption></figure><p>Apple is running new models that will run both on a server and on your device, which Apple says will offer powerful image understanding and more. The most powerful version of its on-device model will only support iPad devices with M4 chips, so older and more affordable iPads will be left out.</p><p>The biggest change here for iPad users is that everything is integrated into the OS, including the <a href="https://www.tomsguide.com/ai/i-thought-siri-was-finished-these-5-leaked-wwdc-2026-features-are-its-biggest-update-since-2011">new Siri</a>, so you can use speech to find what you're looking for. And of course, it can also go online to find answers and then provide them (much like ChatGPT and other AI chatbots).</p><p>Siri AI is Apple's name for its new personal assistant, which seems like the obvious choice. Apple promises more conversational features, a dedicated Siri app and a new visual design for the personal assistant.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1960px;"><p class="vanilla-image-block" style="padding-top:66.68%;"><img id="UXfSfZuATf5H7dReLHGMv3" name="Apple-Siri-AI-Spotlight-integration-260608_big.jpg.large_2x" alt="Siri AI on iPad" src="https://cdn.mos.cms.futurecdn.net/UXfSfZuATf5H7dReLHGMv3-1920-80.jpg" mos="" align="middle" fullscreen="" width="1960" height="1307" 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 Siri is more conversational, so you can go back and forth with it to get what you need done. Apple demonstrated how to use the conversation feature to plan a World Cup watch party, including a match schedule, menu items, and even searching conversations to find a suggestion from his daughter.  </p><p>On iPadOS, Apple showcased a pop-out window showing a conversation with Siri and the Siri AI app. It also showed cross-platform conversations, so if you use an iPad, iPhone or other Apple devices, you can switch between them and keep your AI queries going.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1960px;"><p class="vanilla-image-block" style="padding-top:71.43%;"><img id="xccmdHUbrwyBXBvwGBLRPC" name="Apple-Siri-AI-helpful-tips-and-suggestions-260608_big.jpg.large_2x" alt="Siri AI on an iPad" src="https://cdn.mos.cms.futurecdn.net/xccmdHUbrwyBXBvwGBLRPC-1920-80.jpg" mos="" align="middle" fullscreen="" width="1960" height="1400" 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><a href="https://www.tomsguide.com/ai/siri-just-got-a-huge-boost-with-apple-intelligence-heres-everything-it-can-do-now">On-screen awareness</a>, a feature discussed previously, sounds useful, but Apple didn't go into much detail on how it will work.</p><p>Siri AI will also offer writing advice and a proofreading system-wide, which sounds useful if you write on an iPad. </p><p>Apple says privacy is a major focus for its AI features on iPad, which is important. </p><h2 id="ipados-27-release-date">iPadOS 27 release date</h2><p>Apple appears to be following its typical release schedule, with Tim Cook rounding out the keynote citing a Fall release date for the latest version of its iPad operating system and the beta is scheduled to launch </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/even-more-android-phones-now-support-file-sharing-to-apple-airdrop-heres-a-full-list">Even more Android phones now support file-sharing to Apple AirDrop — here's a full list</a></li><li><a href="https://www.tomsguide.com/phones/iphones/wwdc-2026-7-biggest-announcements-we-expect">Apple WWDC 2026 event — 9 biggest announcements we expect</a></li><li><a href="https://www.tomsguide.com/phones/iphones/apples-foldable-iphone-ultra-just-leaked-in-new-photos-and-we-have-a-release-date-update">Apple's foldable iPhone Ultra just leaked in new photos — and we have a release date update</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ iPadOS 27: The 3 biggest rumored upgrades coming to your iPad ]]></title>
                                                                                                <dc:content><![CDATA[ <p><a href="https://www.tomsguide.com/phones/iphones/wwdc-2026">WWDC 2026</a> is upon us, which means we’re about to learn all the upgrades coming to various Apple operating systems. Naturally, one of these will be iPadOS 27. If rumors are correct, we won’t get major iPad-specific upgrades as we saw with iPadOS 26. However, there should be plenty for iPad users to get excited about.</p><p>The biggest upgrade should be for <a href="https://www.tomsguide.com/us/pictures-story/867-best-hey-siri-commands.html">Siri</a> and <a href="https://www.tomsguide.com/ai/apple-intelligence">Apple Intelligence</a>, which is also expected for iOS 27 and macOS 27. Apple has lagged in the current AI race, but with <a href="https://www.tomsguide.com/ai/openai-reportedly-passed-on-siri-now-apples-gemini-deal-could-be-worth-billions">Google Gemini powering Siri</a> and Apple Intelligence, Cupertino might finally catch up. We also expect some enhancements to core apps, along with some performance updates.</p><p>We’ll officially learn what Apple has been cooking when WWDC kicks off on June 8. For now, here are the three biggest iPadOS 27 announcements we expect.</p><h3 class="article-body__section" id="section-siri-and-apple-intelligence-overhaul"><span>Siri and Apple Intelligence overhaul</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="4dXjpiE5xEoGzMLQrEQ7ZS" name="apple intelligence.shutterstock_2499085945" alt="Apple Intelligence logo on iPad" src="https://cdn.mos.cms.futurecdn.net/4dXjpiE5xEoGzMLQrEQ7ZS-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Similar to iOS 27 and macOS 27, iPadOS 27 should see an Apple Intelligence overhaul, specifically targeting Siri.</p><p>One of the biggest rumored upgrades is Apple turning Siri into a full-fledged chatbot capable of complex, multi-turn dialogue. This will be possible thanks to Apple’s partnership with Google, which will use <a href="https://www.tomsguide.com/ai/google-gemini/google-gemini-everything-you-need-to-know">Google’s Gemini</a> model to power Apple Intelligence. Expect advanced text- and image-generation features.</p><p>We should also see on-screen awareness, which will allow Siri to understand what is happening on your iPad screen. For example, if you’re looking at a document or photo, you can ask Siri to edit it or send it to a specific contact without manually dragging and dropping.</p><p>Similarly, Siri should also gain the ability to execute multi-step actions across different apps, such as cross-referencing information in Calendar and drafting an email response in Mail.</p><h3 class="article-body__section" id="section-core-app-enhancements"><span>Core app enhancements</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4909px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="TshkX2iMHSa9kTFe9zmeuZ" name="iPad Pro (iPadOS 26)" alt="iPad Pro M4" src="https://cdn.mos.cms.futurecdn.net/TshkX2iMHSa9kTFe9zmeuZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="4909" height="2761" attribution="" endorsement="" class="inline"></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 with iOS 27, expect some core app upgrades. One such app is Photos, which is expected to receive a major Apple Intelligence boost. A new <a href="https://www.tomsguide.com/phones/iphones/ios-27-reportedly-getting-ai-photo-editing-overhaul-heres-all-the-new-features">Extend tool</a> will use generative AI to fill in background scenery beyond a photo's original crop. Meanwhile, a Reframe tool will let you manipulate the perspective of spatial photos.</p><p>Apple is also reportedly adjusting system-wide app layouts to better leverage the iPad’s large display. To that end, apps like Apple Music, Podcasts, and Apple TV will see their navigation sidebars and tab bars consolidated, merging the search function right into the main navigation interface.</p><h3 class="article-body__section" id="section-performance-and-stability"><span>Performance and stability</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="fTLBUGYWebi9ZYA6AY93K7" name="iPad Pro M5--01-LIST" alt="iPad Pro M5" src="https://cdn.mos.cms.futurecdn.net/fTLBUGYWebi9ZYA6AY93K7-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Since iPadOS 27 is more of an iterative update than a substantial one like iPadOS 26, Apple’s engineers have focused most of their efforts on under-the-hood optimization.</p><p>For example, the team is reportedly removing outdated code, squashing long-standing bugs, and improving battery life efficiency and system responsiveness.</p><p>Liquid Glass was the major UI overhaul last year, and it’s expected to stick around. However, Apple is reportedly expanding its custom layout tools. This includes a system-wide opacity slider that lets you precisely adjust the appearance of interface elements to your liking.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-X8o7vO"></div>                            </div>                            <script src="https://kwizly.com/embed/X8o7vO.js" async></script><h3 class="article-body__section" id="section-ipados-27-outlook"><span>iPadOS 27: Outlook</span></h3><p>Even if iPadOS 27 isn’t as monumental as iPadOS 26, features like a smarter Siri, easier search, and a more stable operating system should make using iPads smoother.</p><p>Naturally, this is all based on rumors and reports, so we’ll have to wait until WWDC kicks off on Monday, June 8, to see what Apple has in store for us. Stay tuned!</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/how-to-watch-the-apple-wwdc-2026-keynote-live">How to watch the Apple WWDC 2026 keynote live</a></li><li><a href="https://www.tomsguide.com/phones/iphones/wwdc-2026-7-biggest-announcements-we-expect">Apple WWDC 2026 event — 9 biggest announcements we expect</a></li><li><a href="https://www.tomsguide.com/computing/macos/ive-been-covering-apple-events-for-8-years-heres-what-im-excited-for-from-wwdc-2026">Here's what I'm excited for from WWDC 2026</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/ipads/ipados-27-the-3-biggest-expected-upgrades-coming-to-ipads</link>
                                                                            <description>
                            <![CDATA[ At WWDC 2026, we should hear news about all the updates coming to iPadOS 27. Here are the latest rumors and reports that give us an idea of what to expect. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">hZmPeGUpDfWgMs2Zm9sVdf</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/iG5tTdDFXptufbDQzuJPyL-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 07 Jun 2026 09:45:00 +0000</pubDate>                                                                                                                                <updated>Sun, 07 Jun 2026 10:47:05 +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/iG5tTdDFXptufbDQzuJPyL-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide / Apple]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPadOS 27]]></media:description>                                                            <media:text><![CDATA[iPadOS 27]]></media:text>
                                <media:title type="plain"><![CDATA[iPadOS 27]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/iG5tTdDFXptufbDQzuJPyL-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p><a href="https://www.tomsguide.com/phones/iphones/wwdc-2026">WWDC 2026</a> is upon us, which means we’re about to learn all the upgrades coming to various Apple operating systems. Naturally, one of these will be iPadOS 27. If rumors are correct, we won’t get major iPad-specific upgrades as we saw with iPadOS 26. However, there should be plenty for iPad users to get excited about.</p><p>The biggest upgrade should be for <a href="https://www.tomsguide.com/us/pictures-story/867-best-hey-siri-commands.html">Siri</a> and <a href="https://www.tomsguide.com/ai/apple-intelligence">Apple Intelligence</a>, which is also expected for iOS 27 and macOS 27. Apple has lagged in the current AI race, but with <a href="https://www.tomsguide.com/ai/openai-reportedly-passed-on-siri-now-apples-gemini-deal-could-be-worth-billions">Google Gemini powering Siri</a> and Apple Intelligence, Cupertino might finally catch up. We also expect some enhancements to core apps, along with some performance updates.</p><p>We’ll officially learn what Apple has been cooking when WWDC kicks off on June 8. For now, here are the three biggest iPadOS 27 announcements we expect.</p><h3 class="article-body__section" id="section-siri-and-apple-intelligence-overhaul"><span>Siri and Apple Intelligence overhaul</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="4dXjpiE5xEoGzMLQrEQ7ZS" name="apple intelligence.shutterstock_2499085945" alt="Apple Intelligence logo on iPad" src="https://cdn.mos.cms.futurecdn.net/4dXjpiE5xEoGzMLQrEQ7ZS-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Similar to iOS 27 and macOS 27, iPadOS 27 should see an Apple Intelligence overhaul, specifically targeting Siri.</p><p>One of the biggest rumored upgrades is Apple turning Siri into a full-fledged chatbot capable of complex, multi-turn dialogue. This will be possible thanks to Apple’s partnership with Google, which will use <a href="https://www.tomsguide.com/ai/google-gemini/google-gemini-everything-you-need-to-know">Google’s Gemini</a> model to power Apple Intelligence. Expect advanced text- and image-generation features.</p><p>We should also see on-screen awareness, which will allow Siri to understand what is happening on your iPad screen. For example, if you’re looking at a document or photo, you can ask Siri to edit it or send it to a specific contact without manually dragging and dropping.</p><p>Similarly, Siri should also gain the ability to execute multi-step actions across different apps, such as cross-referencing information in Calendar and drafting an email response in Mail.</p><h3 class="article-body__section" id="section-core-app-enhancements"><span>Core app enhancements</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4909px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="TshkX2iMHSa9kTFe9zmeuZ" name="iPad Pro (iPadOS 26)" alt="iPad Pro M4" src="https://cdn.mos.cms.futurecdn.net/TshkX2iMHSa9kTFe9zmeuZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="4909" height="2761" attribution="" endorsement="" class="inline"></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 with iOS 27, expect some core app upgrades. One such app is Photos, which is expected to receive a major Apple Intelligence boost. A new <a href="https://www.tomsguide.com/phones/iphones/ios-27-reportedly-getting-ai-photo-editing-overhaul-heres-all-the-new-features">Extend tool</a> will use generative AI to fill in background scenery beyond a photo's original crop. Meanwhile, a Reframe tool will let you manipulate the perspective of spatial photos.</p><p>Apple is also reportedly adjusting system-wide app layouts to better leverage the iPad’s large display. To that end, apps like Apple Music, Podcasts, and Apple TV will see their navigation sidebars and tab bars consolidated, merging the search function right into the main navigation interface.</p><h3 class="article-body__section" id="section-performance-and-stability"><span>Performance and stability</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="fTLBUGYWebi9ZYA6AY93K7" name="iPad Pro M5--01-LIST" alt="iPad Pro M5" src="https://cdn.mos.cms.futurecdn.net/fTLBUGYWebi9ZYA6AY93K7-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Since iPadOS 27 is more of an iterative update than a substantial one like iPadOS 26, Apple’s engineers have focused most of their efforts on under-the-hood optimization.</p><p>For example, the team is reportedly removing outdated code, squashing long-standing bugs, and improving battery life efficiency and system responsiveness.</p><p>Liquid Glass was the major UI overhaul last year, and it’s expected to stick around. However, Apple is reportedly expanding its custom layout tools. This includes a system-wide opacity slider that lets you precisely adjust the appearance of interface elements to your liking.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-X8o7vO"></div>                            </div>                            <script src="https://kwizly.com/embed/X8o7vO.js" async></script><h3 class="article-body__section" id="section-ipados-27-outlook"><span>iPadOS 27: Outlook</span></h3><p>Even if iPadOS 27 isn’t as monumental as iPadOS 26, features like a smarter Siri, easier search, and a more stable operating system should make using iPads smoother.</p><p>Naturally, this is all based on rumors and reports, so we’ll have to wait until WWDC kicks off on Monday, June 8, to see what Apple has in store for us. Stay tuned!</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/how-to-watch-the-apple-wwdc-2026-keynote-live">How to watch the Apple WWDC 2026 keynote live</a></li><li><a href="https://www.tomsguide.com/phones/iphones/wwdc-2026-7-biggest-announcements-we-expect">Apple WWDC 2026 event — 9 biggest announcements we expect</a></li><li><a href="https://www.tomsguide.com/computing/macos/ive-been-covering-apple-events-for-8-years-heres-what-im-excited-for-from-wwdc-2026">Here's what I'm excited for from WWDC 2026</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 15 Apple devices expected in second half of 2026 — iPhone Fold, MacBook Pro M6 OLED and a lot more ]]></title>
                                                                                                <dc:content><![CDATA[ <p>As the first half of 2026 winds down, it feels as though Apple has been relatively quiet while we wait for the big Fall product releases. <a href="https://www.tomsguide.com/phones/iphones/wwdc-2026">WWDC 2026</a> is right around the corner in June and as is often the case, it marks the shift between the barren Apple months and the fruitful ones. </p><p>With that in mind, based on rumors and leaks, I expect Apple to debut at least 15 new devices between now and the end of the year. </p><p>Some like the iPhone and Apple Watches are your typical annual updates (save the over-rumored <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-heres-what-the-leaks-and-rumors-say-about-apples-alleged-upcoming-foldable-phone">iPhone Fold</a>), and potential updates to the MacBook Pro lineup. Others, like Apple's long-awaited <a href="https://www.tomsguide.com/home/smart-home/apple-could-launch-7-new-smart-home-devices-this-year-but-theres-a-catch">smart home lineup,</a> all depend on whether Apple has finally figured out <a href="https://www.tomsguide.com/phones/iphones/apples-upgraded-siri-may-be-almost-two-years-late-but-apple-could-offer-something-no-other-chatbot-has">Siri 2.0</a>.</p><p>All of these devices could give us an idea if the recently reported <a href="https://www.tomsguide.com/phones/apples-shake-up-could-speed-up-development-of-new-products-and-thats-the-best-news-ive-heard-all-year">hardware shakeup</a> is ready to bear fruit.</p><p>So, here are the 15 Apple devices we could see this year in order of potential release date.</p><h2 id="iphone-18-pro-models-and-iphone-fold-september">iPhone 18 Pro models and iPhone Fold - September</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="aUJZxCfMMXC3m2nKLVB2dV" name="iPhone Fold final design 1" alt="iPhone Fold design" src="https://cdn.mos.cms.futurecdn.net/aUJZxCfMMXC3m2nKLVB2dV-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Majin Bu on X)</span></figcaption></figure><p>On the whole, the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-max-rumors-and-leaks-everything-we-know-so-far">iPhone 18 Pro</a> and 18 Pro Max probably won't be a big divergence from the iPhone 17 versions. A <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-leaked-colors-include-a-stunning-new-dark-cherry-option">new color</a>, a better chip, possibly a revamped Camera Control button and a <a href="https://www.tomsguide.com/phones/iphones/its-about-time-leaked-iphone-18-pro-images-show-off-shrinking-dynamic-island">smaller Dynamic Island</a> are all on the table. Decent updates, but not terribly exciting.</p><p>The iPhone 18 is, we expect, a gap year until 2027's <a href="https://www.tomsguide.com/phones/iphones/iphone-20s-all-glass-design-sounds-like-a-sight-to-behold-and-prototypes-might-already-exist">20th anniversary iPhone,</a> which could truly shake up the iPhone design.</p><p>However, the bigger news is that Apple is expected to <a href="https://www.tomsguide.com/phones/iphones/i-was-worried-about-apples-rumored-iphone-18-release-plans-but-now-i-think-users-will-benefit">split the iPhone 18 release</a> with the Pro models this year and the iPhone 18, 18 Plus, and 18e launching in the new spring window next year.</p><p>If it launches, and <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-achieves-a-visually-crease-free-state-according-to-leaker-but-fears-over-the-hinge-could-lead-to-delays">there is debate</a> about that, the <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-heres-what-the-leaks-and-rumors-say-about-apples-alleged-upcoming-foldable-phone">iPhone Fold</a> (or Ultra) will be the headline stealer as Apple finally steps into the foldable phones market. </p><p>The allegedly crease-free foldable could feature a squat 7.7-inch inner display that is reminiscent of an iPad mini. Apple is reportedly developing <a href="https://www.tomsguide.com/phones/iphones/ios-27-7-biggest-rumored-upgrades-coming-to-your-iphone-this-fall">iOS 27</a> to be<a href="https://www.tomsguide.com/phones/iphones/apple-reportedly-begins-work-on-ios-27-and-its-built-for-the-iphone-fold"> tailored for the folding iPhone</a>. We'll most likely hear more about that at WWDC 2026, depending on how coy Apple wants to be.</p><h2 id="apple-watches-september">Apple Watches - September</h2><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="e7AFvye2JNG3HRAkQNzaGb" name="Apple Watch Series 11-12" alt="Apple Watch SE 3" src="https://cdn.mos.cms.futurecdn.net/e7AFvye2JNG3HRAkQNzaGb-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>Unlike the iPhone 18 family, there has been a dearth of rumors regarding the <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-series-12-everything-we-know-so-far">Apple Watch Series 12</a> and <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-ultra-4-all-the-design-health-and-battery-life-rumors-so-far">Apple Watch Ultra 4</a>. They typically launch in September alongside the iPhone.</p><p>Here's what we know so far. </p><p>The Series 12 could feature new <a href="https://www.tomsguide.com/wellness/smartwatches/skip-the-apple-watch-11-next-years-apple-watch-12-tipped-for-huge-sensor-upgrade">holistic sensor tech</a> on the bottom of the watch, including a new eight-sensor array. If true, this could indicate that new health metrics might be coming to the Series 12, or at the very least, more accurate ones. The big change might be an overhauled Health app featuring an AI-powered, personalized wellness concierge. </p><p>Otherwise, it should be largely the same as the Series 11, though it might feature Touch ID, which has been disputed.</p><p>The Apple Watch Ultra 4 may or may not launch this year, the rumors are unclear on this part. If not, we might see the Ultra 4 in 2027.</p><p>As for the design, rumors hint at a thinner case, fingerprint scanner and improved <a href="https://www.tomsguide.com/wellness/smartwatches/hypertension-tracking-is-now-live-on-the-apple-watch-heres-what-to-do-if-you-get-an-alert">Hypertension Alerts</a>. But that's about it for now.</p><h2 id="ipads-september-october">iPads - September/October</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="rJvELxUCVuBoNP9eiMkZ9j" name="ipad mini 7 vs ipad mini 6" alt="Apple iPad mini 7 vs iPad mini 6 lead image showing the two tablets side by side" src="https://cdn.mos.cms.futurecdn.net/rJvELxUCVuBoNP9eiMkZ9j-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>The iPad mini is one of the <a href="https://www.tomsguide.com/best-picks/best-tablet">best tablets</a> available today and the eighth iteration could launch this year. Apple hasn't had a consistent release schedule for its tiny iPads, but most rumors suggest the <a href="https://www.tomsguide.com/computing/ipads/ipad-mini-8-rumors-everything-we-know-so-far">iPad mini 8 </a>could launch around October, maybe late September.</p><p>It's rumored to get the A20 Pro, the same chip as the iPhone 18 Pro series. It could also be the first iPad mini to feature an OLED display.</p><p>As for the larger <a href="https://www.tomsguide.com/computing/ipads/ipad-12-just-got-teased-by-an-accessory-maker-and-theres-a-disappointing-bit-of-news">entry-level iPad 12</a>, it could launch this year with an <a href="https://www.tomsguide.com/computing/ipads/2026-ipad-models-could-get-performance-boost-new-leak-reveals-a19-and-m4-chips">A19 chipset</a>. It's looking like it will be a simple refresh with Apple Intelligence features and possibly Apple's N1 wireless chip. Design-wise I expect it to look the same as its predecessor. Outside of that, I only have speculation on possible increases in RAM and storage but with the <a href="https://www.tomsguide.com/computing/hardware/the-squeeze-is-real-i-spoke-to-ram-crisis-oracle-carmen-li-about-when-this-nightmare-ends-heres-what-she-told-me">memory crisis</a>, that may take a back seat.</p><h2 id="oled-macbook-pro-m6-and-other-macs-october">OLED MacBook Pro M6 and other Macs - October</h2><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>If they launch this year, I expect to see at least four Mac devices, most likely in October. </p><p>The most interesting one is the potential <a href="https://www.tomsguide.com/computing/macbooks/macbook-pro-m6-oled-rumors-everything-we-know-so-far">MacBook Pro M6</a> feature an OLED display.</p><ul><li>Mac Studio</li><li>Mac mini</li><li>iMac</li><li>MacBook Pro M6</li></ul><p>Beyond the MacBook, all of the other devices will likely just be chip upgrades going from their current versions to the M5 family. </p><p>The Pro model might get a new name the MacBook Ultra, which is meant to differentiate it from the <a href="https://www.tomsguide.com/computing/macbooks/apple-macbook-neo-review">MacBook Neo</a> acting as an even higher-end counterpart to the Pro. It should feature an OLED display and the new M6 chipset.</p><p>The design should be similar to previous Pro models. The big upgrades will be the display with a touchscreen and the chipset.</p><h2 id="smart-home-devices-with-a-catch">Smart Home devices with a catch</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:54.95%;"><img id="HRn5ggUhkSuhw7aFKMhEkM" name="Homepod-2.jpg" alt="Close up of the Homepod 2" src="https://cdn.mos.cms.futurecdn.net/HRn5ggUhkSuhw7aFKMhEkM-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1099" 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 has been rumored to be developing its own suite of smart home devices, including the overhauled HomePod. This could come in the form of a <a href="https://www.tomsguide.com/home/smart-home/new-apple-tv-and-homepod-mini-reportedly-launching-in-2025-with-apple-networking-chip">new HomePod mini</a>, a new <a href="https://www.tomsguide.com/home/smart-home/apple-homepod-3-everything-we-know-so-far">HomePod 3 </a> and the<a href="https://www.tomsguide.com/home/smart-home/apple-tipped-to-launch-ai-wall-tablet-to-control-your-home-in-march-2025-everything-we-know-so-far"> Home Hub</a>. </p><p>The long-awaited Apple TV 4K set-top box update would be part of this update, with new features meant to connect it to your smart home. We're expecting Apple to kit out the next Apple TV with an upgraded chip, <a href="https://www.tomsguide.com/entertainment/streaming-devices/new-apple-tv-4k-biggest-upgrades-just-leaked-ahead-of-launch">possibly an A17 Pro chip</a>, though that rumor is nearly a year old now, so a potentially more powerful chip could be in the cards. The device could also get the <a href="https://www.tomsguide.com/phones/iphones/apples-n1-chip-offers-faster-speeds-while-using-weaker-wi-fi-according-to-the-experts-at-ookla">N1 chip</a> for Wi-Fi and Bluetooth connectivity.</p><p>Here's the thing, though, this all depends on whether Apple has finally figured out Apple Intelligence and Siri. Using AI to control your smart home with your voice and other tools is supposed to be a main part of the experience. That promise could finally arrive with the <a href="https://www.tomsguide.com/ai/google-promises-siri-powered-by-gemini-is-coming-later-this-year">Gemini-powered version of Siri</a> that is supposed to launch this year.</p><p>Additionally, Apple may have a smart security camera and Face ID doorbell in the works. <a href="https://www.tomsguide.com/home/smart-home/apple-could-bring-face-id-to-smart-doorbells-what-we-know">Apple was reportedly</a> in the early stages of development of those at the end of 2024, but it's not clear where Apple is regarding that now.</p><p>If Apple finally reveals the new HomePod and other smart home devices, it likely won't happen until after Siri 2.0 actually launches this fall. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/smartwatches/i-walked-5-500-steps-with-the-apple-watch-se-3-vs-garmin-forerunner-70-and-this-smartwatch-won">I walked 5,500 steps with the Apple Watch SE 3 vs Garmin Forerunner 70 — and the results surprised me</a></li><li><a href="https://www.tomsguide.com/phones/iphones/apple-buried-a-genius-browsing-feature-in-your-iphone-settings-and-its-genuinely-useful">Apple fixed the single most frustrating thing about browsing on iPhone — you just have to turn it on</a></li><li><a href="https://www.tomsguide.com/wellness/sleep-tech/oura-ring-4-vs-apple-watch-10">Oura Ring vs Apple Watch: I wore both to bed for over a year, but there's only one I rely on for sleep tracking</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/15-apple-devices-expected-in-second-half-of-2026-iphone-fold-macbook-pro-m6-oled-and-a-lot-more</link>
                                                                            <description>
                            <![CDATA[ Apple is poised to release a ton of upgraded and new devices during the second half of this year from the long-awaited iPhone Fold to a touchscreen MacBook. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">M4FLFDEHaWKp7g8grCXM5i</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/UE8gefi6QF8B97JZxLZqm8-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 23 May 2026 09:45:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[MacBooks]]></category>
                                                    <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[Smart Home]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Laptops]]></category>
                                                    <category><![CDATA[Tablets]]></category>
                                                    <category><![CDATA[Home]]></category>
                                                                                                <author><![CDATA[ scott.younker@futurenet.com (Scott Younker) ]]></author>                    <dc:creator><![CDATA[ Scott Younker ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/RZsUpqcJ6Uj2q83oCUwNhQ-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Scott Younker is the West Coast Reporter at Tom’s Guide. He covers all the latest tech news, including phones, computing and more. He’s been involved in tech since 2011 covering everything from cameras and swimming pool equipment to the latest gaming consoles and smart TVs. He is on a seemingly never ending hunt to build the easiest to use home media system. &lt;/p&gt;&lt;p&gt;Before Tom’s Guide, Scott worked for publications like &lt;em&gt;Digital Trends, Outdoor Photographer, Dead Beats Panel&lt;/em&gt;, and in a brief detour, &lt;em&gt;America’s Funniest Home Videos&lt;/em&gt;. Yes, he has seen more pratfalls, silly pets and ridiculous home movie fails than is reasonably healthy. &lt;/p&gt;&lt;p&gt;When not writing about the latest devices or advances in chipsets, be sure to ask about Scott about disc golf and sustainability, or just if you’re being cheeky, ask about his noodle arm. If you truly want to get nerdy, bring up board games and his ongoing losing streak. &lt;/p&gt;&lt;p&gt;Scott joined Tom&#039;s Guide in 2024 as the West Coast Reporter. He graduated from the School of Journalism at the University of Oregon with a degree in magazine journalism and a minor in communications. While there he blogged or wrote for several magazines including the Fluxx, Ethos and the Oregon Commentator. He briefly wrote and managed a moderately successful blog focused on web comics. &lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/UE8gefi6QF8B97JZxLZqm8-1280-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-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>As the first half of 2026 winds down, it feels as though Apple has been relatively quiet while we wait for the big Fall product releases. <a href="https://www.tomsguide.com/phones/iphones/wwdc-2026">WWDC 2026</a> is right around the corner in June and as is often the case, it marks the shift between the barren Apple months and the fruitful ones. </p><p>With that in mind, based on rumors and leaks, I expect Apple to debut at least 15 new devices between now and the end of the year. </p><p>Some like the iPhone and Apple Watches are your typical annual updates (save the over-rumored <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-heres-what-the-leaks-and-rumors-say-about-apples-alleged-upcoming-foldable-phone">iPhone Fold</a>), and potential updates to the MacBook Pro lineup. Others, like Apple's long-awaited <a href="https://www.tomsguide.com/home/smart-home/apple-could-launch-7-new-smart-home-devices-this-year-but-theres-a-catch">smart home lineup,</a> all depend on whether Apple has finally figured out <a href="https://www.tomsguide.com/phones/iphones/apples-upgraded-siri-may-be-almost-two-years-late-but-apple-could-offer-something-no-other-chatbot-has">Siri 2.0</a>.</p><p>All of these devices could give us an idea if the recently reported <a href="https://www.tomsguide.com/phones/apples-shake-up-could-speed-up-development-of-new-products-and-thats-the-best-news-ive-heard-all-year">hardware shakeup</a> is ready to bear fruit.</p><p>So, here are the 15 Apple devices we could see this year in order of potential release date.</p><h2 id="iphone-18-pro-models-and-iphone-fold-september">iPhone 18 Pro models and iPhone Fold - September</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="aUJZxCfMMXC3m2nKLVB2dV" name="iPhone Fold final design 1" alt="iPhone Fold design" src="https://cdn.mos.cms.futurecdn.net/aUJZxCfMMXC3m2nKLVB2dV-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Majin Bu on X)</span></figcaption></figure><p>On the whole, the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-max-rumors-and-leaks-everything-we-know-so-far">iPhone 18 Pro</a> and 18 Pro Max probably won't be a big divergence from the iPhone 17 versions. A <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-leaked-colors-include-a-stunning-new-dark-cherry-option">new color</a>, a better chip, possibly a revamped Camera Control button and a <a href="https://www.tomsguide.com/phones/iphones/its-about-time-leaked-iphone-18-pro-images-show-off-shrinking-dynamic-island">smaller Dynamic Island</a> are all on the table. Decent updates, but not terribly exciting.</p><p>The iPhone 18 is, we expect, a gap year until 2027's <a href="https://www.tomsguide.com/phones/iphones/iphone-20s-all-glass-design-sounds-like-a-sight-to-behold-and-prototypes-might-already-exist">20th anniversary iPhone,</a> which could truly shake up the iPhone design.</p><p>However, the bigger news is that Apple is expected to <a href="https://www.tomsguide.com/phones/iphones/i-was-worried-about-apples-rumored-iphone-18-release-plans-but-now-i-think-users-will-benefit">split the iPhone 18 release</a> with the Pro models this year and the iPhone 18, 18 Plus, and 18e launching in the new spring window next year.</p><p>If it launches, and <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-achieves-a-visually-crease-free-state-according-to-leaker-but-fears-over-the-hinge-could-lead-to-delays">there is debate</a> about that, the <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-heres-what-the-leaks-and-rumors-say-about-apples-alleged-upcoming-foldable-phone">iPhone Fold</a> (or Ultra) will be the headline stealer as Apple finally steps into the foldable phones market. </p><p>The allegedly crease-free foldable could feature a squat 7.7-inch inner display that is reminiscent of an iPad mini. Apple is reportedly developing <a href="https://www.tomsguide.com/phones/iphones/ios-27-7-biggest-rumored-upgrades-coming-to-your-iphone-this-fall">iOS 27</a> to be<a href="https://www.tomsguide.com/phones/iphones/apple-reportedly-begins-work-on-ios-27-and-its-built-for-the-iphone-fold"> tailored for the folding iPhone</a>. We'll most likely hear more about that at WWDC 2026, depending on how coy Apple wants to be.</p><h2 id="apple-watches-september">Apple Watches - September</h2><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="e7AFvye2JNG3HRAkQNzaGb" name="Apple Watch Series 11-12" alt="Apple Watch SE 3" src="https://cdn.mos.cms.futurecdn.net/e7AFvye2JNG3HRAkQNzaGb-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>Unlike the iPhone 18 family, there has been a dearth of rumors regarding the <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-series-12-everything-we-know-so-far">Apple Watch Series 12</a> and <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-ultra-4-all-the-design-health-and-battery-life-rumors-so-far">Apple Watch Ultra 4</a>. They typically launch in September alongside the iPhone.</p><p>Here's what we know so far. </p><p>The Series 12 could feature new <a href="https://www.tomsguide.com/wellness/smartwatches/skip-the-apple-watch-11-next-years-apple-watch-12-tipped-for-huge-sensor-upgrade">holistic sensor tech</a> on the bottom of the watch, including a new eight-sensor array. If true, this could indicate that new health metrics might be coming to the Series 12, or at the very least, more accurate ones. The big change might be an overhauled Health app featuring an AI-powered, personalized wellness concierge. </p><p>Otherwise, it should be largely the same as the Series 11, though it might feature Touch ID, which has been disputed.</p><p>The Apple Watch Ultra 4 may or may not launch this year, the rumors are unclear on this part. If not, we might see the Ultra 4 in 2027.</p><p>As for the design, rumors hint at a thinner case, fingerprint scanner and improved <a href="https://www.tomsguide.com/wellness/smartwatches/hypertension-tracking-is-now-live-on-the-apple-watch-heres-what-to-do-if-you-get-an-alert">Hypertension Alerts</a>. But that's about it for now.</p><h2 id="ipads-september-october">iPads - September/October</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="rJvELxUCVuBoNP9eiMkZ9j" name="ipad mini 7 vs ipad mini 6" alt="Apple iPad mini 7 vs iPad mini 6 lead image showing the two tablets side by side" src="https://cdn.mos.cms.futurecdn.net/rJvELxUCVuBoNP9eiMkZ9j-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>The iPad mini is one of the <a href="https://www.tomsguide.com/best-picks/best-tablet">best tablets</a> available today and the eighth iteration could launch this year. Apple hasn't had a consistent release schedule for its tiny iPads, but most rumors suggest the <a href="https://www.tomsguide.com/computing/ipads/ipad-mini-8-rumors-everything-we-know-so-far">iPad mini 8 </a>could launch around October, maybe late September.</p><p>It's rumored to get the A20 Pro, the same chip as the iPhone 18 Pro series. It could also be the first iPad mini to feature an OLED display.</p><p>As for the larger <a href="https://www.tomsguide.com/computing/ipads/ipad-12-just-got-teased-by-an-accessory-maker-and-theres-a-disappointing-bit-of-news">entry-level iPad 12</a>, it could launch this year with an <a href="https://www.tomsguide.com/computing/ipads/2026-ipad-models-could-get-performance-boost-new-leak-reveals-a19-and-m4-chips">A19 chipset</a>. It's looking like it will be a simple refresh with Apple Intelligence features and possibly Apple's N1 wireless chip. Design-wise I expect it to look the same as its predecessor. Outside of that, I only have speculation on possible increases in RAM and storage but with the <a href="https://www.tomsguide.com/computing/hardware/the-squeeze-is-real-i-spoke-to-ram-crisis-oracle-carmen-li-about-when-this-nightmare-ends-heres-what-she-told-me">memory crisis</a>, that may take a back seat.</p><h2 id="oled-macbook-pro-m6-and-other-macs-october">OLED MacBook Pro M6 and other Macs - October</h2><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>If they launch this year, I expect to see at least four Mac devices, most likely in October. </p><p>The most interesting one is the potential <a href="https://www.tomsguide.com/computing/macbooks/macbook-pro-m6-oled-rumors-everything-we-know-so-far">MacBook Pro M6</a> feature an OLED display.</p><ul><li>Mac Studio</li><li>Mac mini</li><li>iMac</li><li>MacBook Pro M6</li></ul><p>Beyond the MacBook, all of the other devices will likely just be chip upgrades going from their current versions to the M5 family. </p><p>The Pro model might get a new name the MacBook Ultra, which is meant to differentiate it from the <a href="https://www.tomsguide.com/computing/macbooks/apple-macbook-neo-review">MacBook Neo</a> acting as an even higher-end counterpart to the Pro. It should feature an OLED display and the new M6 chipset.</p><p>The design should be similar to previous Pro models. The big upgrades will be the display with a touchscreen and the chipset.</p><h2 id="smart-home-devices-with-a-catch">Smart Home devices with a catch</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:54.95%;"><img id="HRn5ggUhkSuhw7aFKMhEkM" name="Homepod-2.jpg" alt="Close up of the Homepod 2" src="https://cdn.mos.cms.futurecdn.net/HRn5ggUhkSuhw7aFKMhEkM-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1099" 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 has been rumored to be developing its own suite of smart home devices, including the overhauled HomePod. This could come in the form of a <a href="https://www.tomsguide.com/home/smart-home/new-apple-tv-and-homepod-mini-reportedly-launching-in-2025-with-apple-networking-chip">new HomePod mini</a>, a new <a href="https://www.tomsguide.com/home/smart-home/apple-homepod-3-everything-we-know-so-far">HomePod 3 </a> and the<a href="https://www.tomsguide.com/home/smart-home/apple-tipped-to-launch-ai-wall-tablet-to-control-your-home-in-march-2025-everything-we-know-so-far"> Home Hub</a>. </p><p>The long-awaited Apple TV 4K set-top box update would be part of this update, with new features meant to connect it to your smart home. We're expecting Apple to kit out the next Apple TV with an upgraded chip, <a href="https://www.tomsguide.com/entertainment/streaming-devices/new-apple-tv-4k-biggest-upgrades-just-leaked-ahead-of-launch">possibly an A17 Pro chip</a>, though that rumor is nearly a year old now, so a potentially more powerful chip could be in the cards. The device could also get the <a href="https://www.tomsguide.com/phones/iphones/apples-n1-chip-offers-faster-speeds-while-using-weaker-wi-fi-according-to-the-experts-at-ookla">N1 chip</a> for Wi-Fi and Bluetooth connectivity.</p><p>Here's the thing, though, this all depends on whether Apple has finally figured out Apple Intelligence and Siri. Using AI to control your smart home with your voice and other tools is supposed to be a main part of the experience. That promise could finally arrive with the <a href="https://www.tomsguide.com/ai/google-promises-siri-powered-by-gemini-is-coming-later-this-year">Gemini-powered version of Siri</a> that is supposed to launch this year.</p><p>Additionally, Apple may have a smart security camera and Face ID doorbell in the works. <a href="https://www.tomsguide.com/home/smart-home/apple-could-bring-face-id-to-smart-doorbells-what-we-know">Apple was reportedly</a> in the early stages of development of those at the end of 2024, but it's not clear where Apple is regarding that now.</p><p>If Apple finally reveals the new HomePod and other smart home devices, it likely won't happen until after Siri 2.0 actually launches this fall. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/smartwatches/i-walked-5-500-steps-with-the-apple-watch-se-3-vs-garmin-forerunner-70-and-this-smartwatch-won">I walked 5,500 steps with the Apple Watch SE 3 vs Garmin Forerunner 70 — and the results surprised me</a></li><li><a href="https://www.tomsguide.com/phones/iphones/apple-buried-a-genius-browsing-feature-in-your-iphone-settings-and-its-genuinely-useful">Apple fixed the single most frustrating thing about browsing on iPhone — you just have to turn it on</a></li><li><a href="https://www.tomsguide.com/wellness/sleep-tech/oura-ring-4-vs-apple-watch-10">Oura Ring vs Apple Watch: I wore both to bed for over a year, but there's only one I rely on for sleep tracking</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple WWDC 2026 keynote announced for June 8 — and the invite could be the new Siri ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Apple has started sending out invites for the <a href="https://www.tomsguide.com/phones/iphones/wwdc-2026">WWDC 2026</a> keynote on June 8 and it could have some hints about the future of Siri. The image, seen above, is clearly Apple Park, but the glowing symbol and the taglines like "coming bright up" give a hint at a potential visual overhaul for Siri. </p><p>It's <a href="https://www.tomsguide.com/phones/iphones/apples-upgraded-siri-may-be-almost-two-years-late-but-apple-could-offer-something-no-other-chatbot-has">two years late,</a> but Siri 2.0 is finally supposed to arrive this year. Most rumors have hinted at Siri's potential capabilities, but this little teaser suggests that Siri could also get a visual overhaul.</p><p>Here's how Siri could be evolving.</p><h2 id="ios-27-and-gemini">iOS 27 and 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bVpMc9nkwKwB7TNGiDkmFK" name="iPhone iOS 27 preview v1" alt="iOS 27" src="https://cdn.mos.cms.futurecdn.net/bVpMc9nkwKwB7TNGiDkmFK-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Notably, <a href="https://www.tomsguide.com/ai/google-promises-siri-powered-by-gemini-is-coming-later-this-year">Apple and Google have already promised</a> that Gemini-powered Siri will debut this year with <a href="https://www.tomsguide.com/phones/iphones/ios-27-7-biggest-expected-upgrades-for-your-iphone">iOS 27</a>. Google could help turbocharge Siri by offering the same multimodal performance that can be found in other AI chatbots. </p><p>With Gemini Live already available on some of the <a href="https://www.tomsguide.com/us/best-android-phones,review-6051.html">best Android phones</a>, we already have an idea of how Siri could perform. For instance, the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-review">Galaxy S26</a> got advanced task automation to perform complex actions like <a href="https://www.tomsguide.com/phones/samsung-phones/i-just-asked-gemini-on-the-galaxy-s26-to-order-dunkin-donuts-for-me-and-24-minutes-later-it-got-delivered-to-my-door">placing a Dunkin’ Donuts order through DoorDash</a> via voice.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:970px;"><p class="vanilla-image-block" style="padding-top:56.29%;"><img id="khFPxsQnHBMwjXkGCXtWB8" name="Gemini" alt="Gemini" src="https://cdn.mos.cms.futurecdn.net/khFPxsQnHBMwjXkGCXtWB8-1920-80.webp" mos="" align="middle" fullscreen="" width="970" height="546" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>Since the rocky launch of Apple Intelligence in 2024, Apple has been scrambling to refine what already exists rather than introducing new features. Still, this is the system that's supposed to undergird Siri, so new features are likely to be announced that would presumably integrate with Apple's virtual assistant. </p><p>That could include <a href="https://www.tomsguide.com/phones/iphones/ios-27-reportedly-getting-ai-photo-editing-overhaul-heres-all-the-new-features">AI-based photo editing tools</a> and things like the <a href="https://www.tomsguide.com/ai/the-7-new-ai-features-coming-to-the-galaxy-s26-and-the-one-im-most-excited-about">Galaxy S26’s Now Nudge. </a></p><p>Bloomberg's Mark Gurman has previously said that Siri 2.0 will offer a more "chatbot-like experience" acting as more of an on-device agentic AI for your iPhone.</p><p>However, he's also noted that Apple is making<a href="https://www.tomsguide.com/phones/iphones/apples-upgraded-siri-may-be-almost-two-years-late-but-apple-could-offer-something-no-other-chatbot-has"> privacy a centerpiece of Siri</a>, which would stand out from AI rivals like OpenAI's ChatGPT.</p><h2 id="wwdc-2026-when-and-how-to-watch">WWDC 2026: When and how to watch</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="6LFM96aTdTCZjhN4jAmrBh" name="Apple-WWDC26-event-branding" alt="Apple WWDC 2026 branding" src="https://cdn.mos.cms.futurecdn.net/6LFM96aTdTCZjhN4jAmrBh-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: Apple)</span></figcaption></figure><p>Apple's latest iteration of its Worldwide Developers Conference runs from June 8 to 12, with the keynote starting on Monday, June 8. </p><p>Apple hasn't confirmed the exact start time, but the presentation usually starts around 10 a.m. PT / 1 p.m. ET. As usual, the event will take place at Apple Park in Cupertino, CA. </p><p>The live keynote has generally been streamed on the Apple website, the Apple Developer app and its <a href="https://www.youtube.com/@Apple/featured" target="_blank">YouTube </a>channel.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/motorola-phones/this-underrated-motorola-razr-fold-feature-makes-me-more-productive-google-apple-and-samsung-should-take-notice">This underrated Motorola Razr Fold feature makes me more productive — Google, Apple, and Samsung should take notice</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/i-walked-11-000-steps-with-the-apple-watch-11-and-garmin-forerunner-170-and-the-result-surprised-me">I walked 11,000 steps with the Apple Watch 11 and Garmin Forerunner 170 — and the results surprised me</a></li><li><a href="https://www.tomsguide.com/audio/airpods/apple-card-promotion-could-offer-free-airpods-pro-3-as-soon-as-next-week-heres-how-it-works">Apple Card promotion could offer free AirPods Pro 3 as soon as next week: here's how it works</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/apple-wwdc-2026-keynote-announced-for-june-8-and-the-invite-could-be-the-new-siri</link>
                                                                            <description>
                            <![CDATA[ Apple's invite for WWDC 2026 appears to tease a new Siri. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">5eQFowzy5iEC8697AoZhsk</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/cAiEoJvKNzk4HtGnfhTQKV-1280-80.png" type="image/png" length="0"></enclosure>
                                                                        <pubDate>Mon, 18 May 2026 20:53:10 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[MacBooks]]></category>
                                                    <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Computing Peripherals]]></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;/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/cAiEoJvKNzk4HtGnfhTQKV-1280-80.png">
                                                            <media:credit><![CDATA[Apple]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[WWDC 2026 shiny logo]]></media:description>                                                            <media:text><![CDATA[WWDC 2026 shiny logo]]></media:text>
                                <media:title type="plain"><![CDATA[WWDC 2026 shiny logo]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/cAiEoJvKNzk4HtGnfhTQKV-1280-80.png" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Apple has started sending out invites for the <a href="https://www.tomsguide.com/phones/iphones/wwdc-2026">WWDC 2026</a> keynote on June 8 and it could have some hints about the future of Siri. The image, seen above, is clearly Apple Park, but the glowing symbol and the taglines like "coming bright up" give a hint at a potential visual overhaul for Siri. </p><p>It's <a href="https://www.tomsguide.com/phones/iphones/apples-upgraded-siri-may-be-almost-two-years-late-but-apple-could-offer-something-no-other-chatbot-has">two years late,</a> but Siri 2.0 is finally supposed to arrive this year. Most rumors have hinted at Siri's potential capabilities, but this little teaser suggests that Siri could also get a visual overhaul.</p><p>Here's how Siri could be evolving.</p><h2 id="ios-27-and-gemini">iOS 27 and 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bVpMc9nkwKwB7TNGiDkmFK" name="iPhone iOS 27 preview v1" alt="iOS 27" src="https://cdn.mos.cms.futurecdn.net/bVpMc9nkwKwB7TNGiDkmFK-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Notably, <a href="https://www.tomsguide.com/ai/google-promises-siri-powered-by-gemini-is-coming-later-this-year">Apple and Google have already promised</a> that Gemini-powered Siri will debut this year with <a href="https://www.tomsguide.com/phones/iphones/ios-27-7-biggest-expected-upgrades-for-your-iphone">iOS 27</a>. Google could help turbocharge Siri by offering the same multimodal performance that can be found in other AI chatbots. </p><p>With Gemini Live already available on some of the <a href="https://www.tomsguide.com/us/best-android-phones,review-6051.html">best Android phones</a>, we already have an idea of how Siri could perform. For instance, the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-review">Galaxy S26</a> got advanced task automation to perform complex actions like <a href="https://www.tomsguide.com/phones/samsung-phones/i-just-asked-gemini-on-the-galaxy-s26-to-order-dunkin-donuts-for-me-and-24-minutes-later-it-got-delivered-to-my-door">placing a Dunkin’ Donuts order through DoorDash</a> via voice.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:970px;"><p class="vanilla-image-block" style="padding-top:56.29%;"><img id="khFPxsQnHBMwjXkGCXtWB8" name="Gemini" alt="Gemini" src="https://cdn.mos.cms.futurecdn.net/khFPxsQnHBMwjXkGCXtWB8-1920-80.webp" mos="" align="middle" fullscreen="" width="970" height="546" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>Since the rocky launch of Apple Intelligence in 2024, Apple has been scrambling to refine what already exists rather than introducing new features. Still, this is the system that's supposed to undergird Siri, so new features are likely to be announced that would presumably integrate with Apple's virtual assistant. </p><p>That could include <a href="https://www.tomsguide.com/phones/iphones/ios-27-reportedly-getting-ai-photo-editing-overhaul-heres-all-the-new-features">AI-based photo editing tools</a> and things like the <a href="https://www.tomsguide.com/ai/the-7-new-ai-features-coming-to-the-galaxy-s26-and-the-one-im-most-excited-about">Galaxy S26’s Now Nudge. </a></p><p>Bloomberg's Mark Gurman has previously said that Siri 2.0 will offer a more "chatbot-like experience" acting as more of an on-device agentic AI for your iPhone.</p><p>However, he's also noted that Apple is making<a href="https://www.tomsguide.com/phones/iphones/apples-upgraded-siri-may-be-almost-two-years-late-but-apple-could-offer-something-no-other-chatbot-has"> privacy a centerpiece of Siri</a>, which would stand out from AI rivals like OpenAI's ChatGPT.</p><h2 id="wwdc-2026-when-and-how-to-watch">WWDC 2026: When and how to watch</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="6LFM96aTdTCZjhN4jAmrBh" name="Apple-WWDC26-event-branding" alt="Apple WWDC 2026 branding" src="https://cdn.mos.cms.futurecdn.net/6LFM96aTdTCZjhN4jAmrBh-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: Apple)</span></figcaption></figure><p>Apple's latest iteration of its Worldwide Developers Conference runs from June 8 to 12, with the keynote starting on Monday, June 8. </p><p>Apple hasn't confirmed the exact start time, but the presentation usually starts around 10 a.m. PT / 1 p.m. ET. As usual, the event will take place at Apple Park in Cupertino, CA. </p><p>The live keynote has generally been streamed on the Apple website, the Apple Developer app and its <a href="https://www.youtube.com/@Apple/featured" target="_blank">YouTube </a>channel.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/motorola-phones/this-underrated-motorola-razr-fold-feature-makes-me-more-productive-google-apple-and-samsung-should-take-notice">This underrated Motorola Razr Fold feature makes me more productive — Google, Apple, and Samsung should take notice</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/i-walked-11-000-steps-with-the-apple-watch-11-and-garmin-forerunner-170-and-the-result-surprised-me">I walked 11,000 steps with the Apple Watch 11 and Garmin Forerunner 170 — and the results surprised me</a></li><li><a href="https://www.tomsguide.com/audio/airpods/apple-card-promotion-could-offer-free-airpods-pro-3-as-soon-as-next-week-heres-how-it-works">Apple Card promotion could offer free AirPods Pro 3 as soon as next week: here's how it works</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Ming-Chi Kuo: Apple giving Intel a ‘once-in-a-generation window’ to manufacture iPhone, iPad and Mac chips ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Six years after Apple dropped Intel in favor of its own M-series processors, the two tech giants are reportedly partnering again on new silicon. </p><p>Last week, <a href="https://www.wsj.com/tech/apple-intel-have-reached-preliminary-chip-making-agreement-69eb9370" target="_blank">The Wall Street Journal </a>that Apple and Intel had struck a preliminary deal to produce chips after a year of bargaining. That report did not include what devices those processors would fill.</p><p>But now a new <a href="https://x.com/mingchikuo/status/2054987772289810884?s=61&t=a-bloX1n-TZ50ofqhetO1A" target="_blank">report from supply chain analyst Ming-Chi Kuo </a>claims that Apple and Intel have already started initial production of processors for iPhones, iPads and some Macs. Per Kuo, roughly 80% of the chips are meant for iPhones. </p><p>Prior to 2020, Apple had <a href="https://www.tomsguide.com/computing/cpus/apples-m-series-chip-gamble-5-years-later-how-ditching-intel-revolutionized-computing-and-whats-next">a long history with Intel</a> having switched to the company's chips in 2006. Intel-based Macs only just<a href="https://www.tomsguide.com/computing/macos/apple-is-ending-support-for-all-intel-based-macs-next-year-heres-whats-getting-cut"> stopped receiving Apple support</a> last year with the release of macOS 26. When macOS 27 drops later this year, it will not support any Intel Macs.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-e4vmQO"></div>                            </div>                            <script src="https://kwizly.com/embed/e4vmQO.js" async></script><p>Kuo's report is a read and mostly covers how the Intel deal will impact Apple's partnership with <a href="https://www.tomsguide.com/computing/cpus/intel-and-tsmc-join-forces-on-chipmaking-venture-and-it-could-transform-intel-forever">TSMC</a> which makes all of Apple's CPUs currently. But there are some noteworthy bits about where the Intel chips could end up.</p><p>The Intel chips are based on the 18A nodes which are used in the company's <a href="https://www.tomsguide.com/computing/cpus/intel-panther-lake-cpus-promise-insane-gains-50-percent-faster-with-a-breakthrough-gpu">Panther Lake silicon</a>. This deal apparently is using the chips for Apple's "low-end/legacy" devices. </p><p>Kuo's phrasing likely means that Intel is building chips for older models that are still on sale. TSMC would still "retain 90% of supply share" for Apple's more high-end processors. </p><p>If the deal works out, I expect we'll see a split between higher-end TSMC Apple devices like the Pro model iPhones and MacBooks. Intel would feature in the more budget-friendly devices like the <a href="https://www.tomsguide.com/phones/iphones/iphone-17e-vs-iphone-16e-whats-the-difference">e-series iPhones </a>and the new <a href="https://www.tomsguide.com/computing/macbooks/apple-macbook-neo-review">MacBook Neo </a>which is already struggling to keep up with demand <a href="https://www.tomsguide.com/computing/macbooks/apple-just-doubled-macbook-neo-production-but-its-budget-laptop-could-still-face-a-price-hike-heres-why">due to a lack of chips</a>.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/ai/apple-may-be-building-an-ai-app-store-and-it-could-change-the-iphone-forever">Apple may be building an AI App Store — and it could change the iPhone forever</a></li><li><a href="https://www.tomsguide.com/computing/macos/the-mac-minis-ridiculously-placed-power-button-just-became-irrelevant-thanks-to-this-new-macos-26-5-feature-heres-how-to-activate-it">The Mac mini's ridiculously-placed power button just became irrelevant thanks to this new macOS 26.5 feature — here's how to activate it</a></li><li><a href="https://www.tomsguide.com/audio/earbuds/airpods-pro-3-just-got-put-on-notice-jbl-launches-new-premium-earbuds-that-give-apple-a-run-for-its-money">AirPods Pro 3 just got put on notice — JBL launches new premium earbuds that give Apple a run for its money</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/ming-chi-kuo-apple-giving-intel-a-once-in-a-generation-window-to-manufacture-iphone-ipad-and-mac-chips</link>
                                                                            <description>
                            <![CDATA[ Apple and Intel have reportedly started developing chips for iPhones, iPads and some MacBooks. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">rxPokjJVQtANnaddxJCdGT</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/LJh2jNCuqXCtCSM6MRQGVj-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 14 May 2026 21:11:03 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[MacBooks]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Computing Peripherals]]></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;/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/LJh2jNCuqXCtCSM6MRQGVj-1280-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[An Apple logo next to an Intel logo]]></media:description>                                                            <media:text><![CDATA[An Apple logo next to an Intel logo]]></media:text>
                                <media:title type="plain"><![CDATA[An Apple logo next to an Intel logo]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/LJh2jNCuqXCtCSM6MRQGVj-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Six years after Apple dropped Intel in favor of its own M-series processors, the two tech giants are reportedly partnering again on new silicon. </p><p>Last week, <a href="https://www.wsj.com/tech/apple-intel-have-reached-preliminary-chip-making-agreement-69eb9370" target="_blank">The Wall Street Journal </a>that Apple and Intel had struck a preliminary deal to produce chips after a year of bargaining. That report did not include what devices those processors would fill.</p><p>But now a new <a href="https://x.com/mingchikuo/status/2054987772289810884?s=61&t=a-bloX1n-TZ50ofqhetO1A" target="_blank">report from supply chain analyst Ming-Chi Kuo </a>claims that Apple and Intel have already started initial production of processors for iPhones, iPads and some Macs. Per Kuo, roughly 80% of the chips are meant for iPhones. </p><p>Prior to 2020, Apple had <a href="https://www.tomsguide.com/computing/cpus/apples-m-series-chip-gamble-5-years-later-how-ditching-intel-revolutionized-computing-and-whats-next">a long history with Intel</a> having switched to the company's chips in 2006. Intel-based Macs only just<a href="https://www.tomsguide.com/computing/macos/apple-is-ending-support-for-all-intel-based-macs-next-year-heres-whats-getting-cut"> stopped receiving Apple support</a> last year with the release of macOS 26. When macOS 27 drops later this year, it will not support any Intel Macs.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-e4vmQO"></div>                            </div>                            <script src="https://kwizly.com/embed/e4vmQO.js" async></script><p>Kuo's report is a read and mostly covers how the Intel deal will impact Apple's partnership with <a href="https://www.tomsguide.com/computing/cpus/intel-and-tsmc-join-forces-on-chipmaking-venture-and-it-could-transform-intel-forever">TSMC</a> which makes all of Apple's CPUs currently. But there are some noteworthy bits about where the Intel chips could end up.</p><p>The Intel chips are based on the 18A nodes which are used in the company's <a href="https://www.tomsguide.com/computing/cpus/intel-panther-lake-cpus-promise-insane-gains-50-percent-faster-with-a-breakthrough-gpu">Panther Lake silicon</a>. This deal apparently is using the chips for Apple's "low-end/legacy" devices. </p><p>Kuo's phrasing likely means that Intel is building chips for older models that are still on sale. TSMC would still "retain 90% of supply share" for Apple's more high-end processors. </p><p>If the deal works out, I expect we'll see a split between higher-end TSMC Apple devices like the Pro model iPhones and MacBooks. Intel would feature in the more budget-friendly devices like the <a href="https://www.tomsguide.com/phones/iphones/iphone-17e-vs-iphone-16e-whats-the-difference">e-series iPhones </a>and the new <a href="https://www.tomsguide.com/computing/macbooks/apple-macbook-neo-review">MacBook Neo </a>which is already struggling to keep up with demand <a href="https://www.tomsguide.com/computing/macbooks/apple-just-doubled-macbook-neo-production-but-its-budget-laptop-could-still-face-a-price-hike-heres-why">due to a lack of chips</a>.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/ai/apple-may-be-building-an-ai-app-store-and-it-could-change-the-iphone-forever">Apple may be building an AI App Store — and it could change the iPhone forever</a></li><li><a href="https://www.tomsguide.com/computing/macos/the-mac-minis-ridiculously-placed-power-button-just-became-irrelevant-thanks-to-this-new-macos-26-5-feature-heres-how-to-activate-it">The Mac mini's ridiculously-placed power button just became irrelevant thanks to this new macOS 26.5 feature — here's how to activate it</a></li><li><a href="https://www.tomsguide.com/audio/earbuds/airpods-pro-3-just-got-put-on-notice-jbl-launches-new-premium-earbuds-that-give-apple-a-run-for-its-money">AirPods Pro 3 just got put on notice — JBL launches new premium earbuds that give Apple a run for its money</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ iPad Air OLED tipped for long-overdue 2027 launch, but at what cost? ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The iPad Air is, to my mind, the perfect iPad for most people. It has just the right blend of price to performance to make it the Goldilocks device in Apple's tablet line-up. The <a href="https://www.tomsguide.com/computing/ipads/ipad-pro-m5-review">iPad Pro</a> is overkill, and the <a href="https://www.tomsguide.com/computing/ipads/ipad-11-2025-review">base iPad 11</a> lacks features for those wanting more than a content consumption device.</p><p>So when the <a href="https://www.tomsguide.com/computing/ipads/apple-ipad-air-m4-review-small-tweaks-to-the-gold-standard">iPad Air M4</a> arrived last month, I was primed to head down to my nearest Apple store and trade in my aging 2020 Air for the new model. But one thing has given me pause: the iPad Air still lacks an OLED screen. </p><p>According to a new report from <a href="https://www.etnews.com/20260415000292" target="_blank">ETNews</a> citing an industry source, Samsung Display (which manufactures panels for Apple's tablets) is set to begin mass-producing new displays for an iPad Air OLED expected to be announced in March 2027.</p><p>Moving to an OLED display would presumably bring with it a 120Hz ProMotion refresh rate. Apple finally brought that feature to the regular <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-17-review">iPhone 17</a> last September, so I'd be mighty glad to see the iPad Air get the same treatment.</p><p>Currently, if you want the best display on an iPad, you need to go for the iPad Pro for those deeper blacks, enhanced contrast and more vibrant colors. Anyone who uses an iPad for video or photo editing will likely see the value in opting for an OLED device. </p><p>It's no secret to me (or probably you either) why Apple is dragging its heels on granting the iPad Air an OLED upgrade. The company wants to keep the best features fenced off to <a href="https://www.tomsguide.com/computing/macbooks/why-does-the-neo-exist-in-the-first-place-framework-ceo-tears-down-the-macbook-neo-and-brilliantly-pinpoints-why-apple-made-a-usd599-laptop">persuade people to go for the Pro models</a>. But in a world where affordable Android tablets have been shipping with OLED screens for a couple of years now (case in point: <a href="https://www.tomsguide.com/tablets/android-tablets/honor-magicpad-2-review">Honor MagicPad 2</a>), Apple withholding it from the iPad Air feels like gatekeeping gone too far.</p><p>The unnamed source in the ETNews report claims the next iPad Air "will feature an OLED with lower specifications and manufacturing costs." Which presumably means it will continue to be distinct from the iPad Pro in terms of performance, storage or certain features.</p><h2 id="what-will-it-do-to-the-price">What will it do to 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="SvrvK7oxr6hfZcwAbith9Q" name="iPad Air M4 rear" alt="iPad Air M4 rear" src="https://cdn.mos.cms.futurecdn.net/SvrvK7oxr6hfZcwAbith9Q-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Apple is riding high on credibility when it comes to affordable tech right now, thanks to the <a href="https://www.tomsguide.com/computing/macbooks/apple-macbook-neo-review">excellent MacBook Neo</a>. But adding OLED to the iPad Air could easily lead to a price increase beyond the current $599/£599 MSRP.</p><p>The iPad Pro starts at $999 / £999, so I would hesitate to say an iPad Air OLED would cost north of $749, but with the current situation around RAM pricing, nothing is certain.</p><p>Would an iPad Air with an OLED screen tempt you to upgrade? Let me know in the comments.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Oq89MW"></div>                            </div>                            <script src="https://kwizly.com/embed/Oq89MW.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-7-deal-defies-ram-shortage-hikes-with-usd400-price-cut">Samsung Galaxy Z fold 7 deal just defied RAMageddon with $400 price cut</a></li><li><a href="https://www.tomsguide.com/phones/your-phone-battery-is-dying-faster-than-it-should-how-to-fix-it">The most common charging habit is actually killing your phone — here's the fix</a></li><li><a href="https://www.tomsguide.com/phones/iphones/ive-found-5-secret-iphone-17-deals-at-verizon-get-up-to-a-usd270-gift-card-now">I've found 5 secret iPhone 17 deals at Verizon — get up to a $270 gift card now</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/ipads/ipad-air-oled-tipped-for-long-overdue-2027-launch-but-at-what-cost</link>
                                                                            <description>
                            <![CDATA[ The iPad Air is the best iPad for most people, offering a great blend of price and performance, but it's still lacking one major upgrade. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">nN5tNVyqgeu2UV2Lxy4nKb</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/gjkALa9KdvR9XMRyuGjGbi-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 17 Apr 2026 12:38:06 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[Computing]]></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/gjkALa9KdvR9XMRyuGjGbi-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPad Air M4 ]]></media:description>                                                            <media:text><![CDATA[iPad Air M4 ]]></media:text>
                                <media:title type="plain"><![CDATA[iPad Air M4 ]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/gjkALa9KdvR9XMRyuGjGbi-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The iPad Air is, to my mind, the perfect iPad for most people. It has just the right blend of price to performance to make it the Goldilocks device in Apple's tablet line-up. The <a href="https://www.tomsguide.com/computing/ipads/ipad-pro-m5-review">iPad Pro</a> is overkill, and the <a href="https://www.tomsguide.com/computing/ipads/ipad-11-2025-review">base iPad 11</a> lacks features for those wanting more than a content consumption device.</p><p>So when the <a href="https://www.tomsguide.com/computing/ipads/apple-ipad-air-m4-review-small-tweaks-to-the-gold-standard">iPad Air M4</a> arrived last month, I was primed to head down to my nearest Apple store and trade in my aging 2020 Air for the new model. But one thing has given me pause: the iPad Air still lacks an OLED screen. </p><p>According to a new report from <a href="https://www.etnews.com/20260415000292" target="_blank">ETNews</a> citing an industry source, Samsung Display (which manufactures panels for Apple's tablets) is set to begin mass-producing new displays for an iPad Air OLED expected to be announced in March 2027.</p><p>Moving to an OLED display would presumably bring with it a 120Hz ProMotion refresh rate. Apple finally brought that feature to the regular <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-17-review">iPhone 17</a> last September, so I'd be mighty glad to see the iPad Air get the same treatment.</p><p>Currently, if you want the best display on an iPad, you need to go for the iPad Pro for those deeper blacks, enhanced contrast and more vibrant colors. Anyone who uses an iPad for video or photo editing will likely see the value in opting for an OLED device. </p><p>It's no secret to me (or probably you either) why Apple is dragging its heels on granting the iPad Air an OLED upgrade. The company wants to keep the best features fenced off to <a href="https://www.tomsguide.com/computing/macbooks/why-does-the-neo-exist-in-the-first-place-framework-ceo-tears-down-the-macbook-neo-and-brilliantly-pinpoints-why-apple-made-a-usd599-laptop">persuade people to go for the Pro models</a>. But in a world where affordable Android tablets have been shipping with OLED screens for a couple of years now (case in point: <a href="https://www.tomsguide.com/tablets/android-tablets/honor-magicpad-2-review">Honor MagicPad 2</a>), Apple withholding it from the iPad Air feels like gatekeeping gone too far.</p><p>The unnamed source in the ETNews report claims the next iPad Air "will feature an OLED with lower specifications and manufacturing costs." Which presumably means it will continue to be distinct from the iPad Pro in terms of performance, storage or certain features.</p><h2 id="what-will-it-do-to-the-price">What will it do to 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="SvrvK7oxr6hfZcwAbith9Q" name="iPad Air M4 rear" alt="iPad Air M4 rear" src="https://cdn.mos.cms.futurecdn.net/SvrvK7oxr6hfZcwAbith9Q-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Apple is riding high on credibility when it comes to affordable tech right now, thanks to the <a href="https://www.tomsguide.com/computing/macbooks/apple-macbook-neo-review">excellent MacBook Neo</a>. But adding OLED to the iPad Air could easily lead to a price increase beyond the current $599/£599 MSRP.</p><p>The iPad Pro starts at $999 / £999, so I would hesitate to say an iPad Air OLED would cost north of $749, but with the current situation around RAM pricing, nothing is certain.</p><p>Would an iPad Air with an OLED screen tempt you to upgrade? Let me know in the comments.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Oq89MW"></div>                            </div>                            <script src="https://kwizly.com/embed/Oq89MW.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-fold-7-deal-defies-ram-shortage-hikes-with-usd400-price-cut">Samsung Galaxy Z fold 7 deal just defied RAMageddon with $400 price cut</a></li><li><a href="https://www.tomsguide.com/phones/your-phone-battery-is-dying-faster-than-it-should-how-to-fix-it">The most common charging habit is actually killing your phone — here's the fix</a></li><li><a href="https://www.tomsguide.com/phones/iphones/ive-found-5-secret-iphone-17-deals-at-verizon-get-up-to-a-usd270-gift-card-now">I've found 5 secret iPhone 17 deals at Verizon — get up to a $270 gift card now</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I asked a professional illustrator what to buy to get started in digital art — 3 starter packs for 3 different budgets to celebrate World Art Day ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Today is World Art Day, and while I'm not remotely artistic, I do have very talented friends who are.</p><p>To celebrate and offer guidance to those looking to finally leap into creating digital art, I asked my friend Robert for his advice. Robert is a professional illustrator with over seven years of experience working for clients such as Apple, Red Bull, EA, Nike, and now he works on AAA video games.</p><p>Combined with my tech expertise, we came up with three product tiers for those looking to get started with digital art, and honestly, I'm kind of tempted to start drawing myself after checking out some of these products.</p><p>This guide starts small, but gets pretty expensive quickly, and Robert wanted me to make sure that I emphasize the best way to start creating digital art is with whatever tools you've got access to.</p><p>You don't need the best to make amazing artwork, but sometimes treating yourself makes it that little bit easier.  So celebrate World Art Day 2026 by treating your passions to a brand new way to draw and get creative, with expertise from a professional illustrator.</p><h3 class="article-body__section" id="section-a-great-place-to-start"><span>A great place to start</span></h3><p>Robert says, " A Wacom Android tablet gives you everything you need to start making digital art." And that's why he recommends the Wacom MovinkPad 11. It has similar technology to Wacom's most impressive drawing tablets and grants you access to Clip Studio Paint, an excellent platform to get started drawing digitally.</p><p>If you already own a computer, buying a drawing tablet without a display to create with popular apps like Photoshop is a great option too.</p><p>And finally, if you want a multipurpose product, you can't get better than a standard iPad, granting you access to the Apple ecosystem and Procreate, one of the best apps for digital art out there. Robert says Procreate excels because "it's simple and intuitive," although at this price point, an entry-level iPad is only 11 inches, and the standard Apple Pencil has no pressure sensitivity.</p><p>Oh, and of course, Rob says it's always a good idea to still sketch offline and get inspiration from the outside world, so grabbing some markers is always advised.</p>        <div class="featured_product_block featured_block_hero" data-id="5b70c0d0-eec0-48fc-8618-26d32c7b3c97">            <a href="https://www.amazon.com/Inspiroy-H640P-Graphics-Battery-Free-Sensitivity/dp/B075T6MTJX" data-model-name="Huion Inspiroy H640p Drawing Tablet" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.37%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/RkCj8EzJPZz5bFDbvn7v9K.jpg" alt="HUION, Huion Inspiroy H640p Drawing Tablet"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>HUION</div>                                        <div class="featured__title">Huion Inspiroy H640p Drawing Tablet</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="c4623361-8a59-42a1-8057-e1352f02812e">            <a href="https://www.amazon.com/Wacom-Wireless-Software-Included-CTL4100WLK0/dp/B079J2FSQ7" data-model-name="Wacom Intuos Small Bluetooth Graphics Drawing Tablet" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.37%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/d8GKks59emepxBdpRPpJBL.jpg" alt="Wacom, Wacom Intuos Small Bluetooth Graphics Drawing Tablet"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Wacom</div>                                        <div class="featured__title">Wacom Intuos Small Bluetooth Graphics Drawing Tablet</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="44fb057c-7b80-4b67-b051-3565fa991780">            <a href="https://www.amazon.com/Winsor-Newton-0290154-Promarker-Neutral/dp/B07RFYQS9P" data-model-name="Winsor & Newton Promarker Set, 6 Count, Neutral Tones" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.37%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/zKewc3woNRBw7qJWoLeZkL.jpg" alt="Winsor & Newton, Winsor & Newton Promarker Set, 6 Count, Neutral Tones"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Winsor & Newton</div>                                        <div class="featured__title">Winsor & Newton Promarker Set, 6 Count, Neutral Tones</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="c5ff428e-0946-4917-bcac-b1f99bece6f3">            <a href="https://www.amazon.com/Wacom-MovinkPad-11-Android-Battery-Free/dp/B0F76C5BXN" data-model-name="Wacom Movinkpad 11, Android Mobile Drawing Tablet" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/EQut3dpLLdLFer8SmpSkPM.jpg" alt="Wacom, Wacom Movinkpad 11, Android Mobile Drawing Tablet"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Wacom</div>                                        <div class="featured__title">Wacom Movinkpad 11, Android Mobile Drawing Tablet</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ace9073b-c171-4d16-bc14-3cb480b6ca76">            <a href="https://www.amazon.com/Apple-iPad-11-inch-Display-All-Day/dp/B0DZ75TN5F" data-model-name="Apple iPad 11-Inch: A16 Chip" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.37%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/bVUAsJXuY8fkPeZZVrdj6N.jpg" alt="Apple, Apple iPad 11-Inch: A16 Chip"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple iPad 11-Inch: A16 Chip</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="1139bef2-6485-46ed-8ea4-03469fda81ae">            <a href="https://www.amazon.com/Apple-MUWA3AM-A-Pencil-USB-C/dp/B0CL7J12YK" data-model-name="Apple Pencil (USB-C)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.37%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/qoRApUKPrKeeF38NVGGneN.jpg" alt="Apple, Apple Pencil (USB-C)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple Pencil (USB-C)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><h3 class="article-body__section" id="section-ready-to-spend-a-little-more"><span>Ready to spend a little more</span></h3><p>So you're already creating digital art, but you want to take the next step and treat yourself to some excellent products that will enhance your passion.</p><p>If you're looking for an iPad, the 13-inch Air is the best bang for buck because you get a larger display to draw on and compatibility with the Apple Pencil Pro (yes, it has pressure sensitivity).</p><p>I've also included the best drawing stand, because Rob often tells me about his sore shoulder, and one of the best ways to combat Repetitive Strain Injury (RSI) is to have good posture and a more comfortable drawing experience.</p><p>Some Pros actually opt for Wacom over the Apple ecosystem, and the MovinkPad Pro 14 has an OLED display with vivid colors that some will tell you is the best drawing experience on the go.</p><p>The Wacom Intuos Pro is the favorite of many digital artists, especially if you have access to a computer (hence my inclusion of the MacBook Neo), because you can have a way more comfortable posture when not drawing directly on a screen. Rob says he loves his Intuos Pro, especially when he's got body aches.</p>        <div class="featured_product_block featured_block_hero" data-id="5f77e59b-5266-48fc-b0f7-06a4e7072f22">            <a href="https://www.amazon.com/Apple-iPad-Air-13-inch-M4/dp/B0GQVLJGJH/" data-model-name="Apple iPad Air 13-Inch (M4)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/TVw8KXkPoqmLKK2tnWGtk3.jpg" alt="Apple, Apple iPad Air 13-Inch (M4)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple iPad Air 13-Inch (M4)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="42a70df3-bba2-48ea-9e04-60605e0421b0">            <a href="https://www.amazon.com/Apple-Pencil-Pro-Pixel-Perfect-Industry-Leading/dp/B0D3J71RM7" data-model-name="Apple Pencil Pro" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/cqPSKu8EWAeJXHb7RWuDR4.jpg" alt="Apple, Apple Pencil Pro"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple Pencil Pro</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="7f4f2d09-7210-4cb6-b316-cb3af76b5cbc">            <a href="https://www.amazon.com/SKETCHBOARD-PRO-Black-12-9-inch-3rd-6th/dp/B0CPTMM3JS" data-model-name="Sketchboard Pro" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/EwnZDJ76DCnighL8yxshC5.jpg" alt="SKETCHBOARD PRO, Sketchboard Pro"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>SKETCHBOARD PRO</div>                                        <div class="featured__title">Sketchboard Pro</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="732e38f8-84a6-460c-8752-51070d7059f6">            <a href="https://www.amazon.com/Wacom-MovinkPad-Pro-Android-Battery-Free/dp/B0FMHX9786" data-model-name="Wacom MovinkPad Pro 14" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/KM83Gk2Eqf8KtGadYcu8w5.jpg" alt="Wacom, Wacom MovinkPad Pro 14"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Wacom</div>                                        <div class="featured__title">Wacom MovinkPad Pro 14</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="51ed6b4d-28c6-49d9-94d7-8e332eec5c4d">            <a href="https://www.amazon.com/Wacom-Bluetooth-Professional-Graphic-Compatible/dp/B0DFZ24WP9" data-model-name="Wacom Intuos Pro" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/nvU5aBWLAMcAe7wHGVjdf6.jpg" alt="Wacom, Wacom Intuos Pro"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Wacom</div>                                        <div class="featured__title">Wacom Intuos Pro</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="1d60f398-10a3-4952-a1c9-274aa4f19b9c">            <a href="https://www.amazon.com/Apple-2026-MacBook-13-inch-Laptop/dp/B0GR6F79MT" data-model-name="MacBook Neo" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/GPrD6gEkBxTChLsyoy4Nb7.jpg" alt="Apple, MacBook Neo"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">MacBook Neo</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><h3 class="article-body__section" id="section-your-parents-believe-in-you-and-you-ve-got-money-to-spend"><span>Your parents believe in you (and you've got money to spend)</span></h3><p>The final tier of products are for those who (or already) draw professionally. In fact, some of these prices are so eye-watering, that unless you know you need a $3,500 Wacom display, you probably shouldn't even consider it.</p><p>Rob says the iPad Pro is one of the best displays for drawing, because it looks beautiful and colors pop from the screen. You can combine it with the Apple Pencil pro listed above to get barrel rotation and hover functionality.</p><p>He's also included the Tour Box which is excellent for streamlining artistic workflows, and can be combined with the best Wacom tablets on the market.</p><p>If you're serious about graphic design and digital art, the products listed below will serve for years to come, although an iPad Pro is maybe more realistic than spending a large mortgage payment on a 27 inch Cintiq Pro.</p>        <div class="featured_product_block featured_block_hero" data-id="74380cf7-0e68-455e-b280-eab1860b3dd3">            <a href="https://www.apple.com/shop/buy-ipad/ipad-pro" data-model-name="iPad Pro 13-Inch (m5)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/jbGhk3NAy7trgcm3RkSSnZ.jpg" alt="APPLE, iPad Pro 13-Inch (m5)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>APPLE</div>                                        <div class="featured__title">iPad Pro 13-Inch (m5)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="77eb0614-4a5e-4eed-8a75-4bad64560473">            <a href="https://www.amazon.com/Paperlike-Screen-Protector-iPad-2024/dp/B0FN91PWHS" data-model-name="Paperlike 3 Screen Protector" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/R4Lf2UK7h2uAdYGtkUkuka.jpg" alt="Paperlike, Paperlike 3 Screen Protector"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Paperlike</div>                                        <div class="featured__title">Paperlike 3 Screen Protector</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="32ac4fc9-b6eb-4ebe-b031-855d405425bd">            <a href="https://www.amazon.com/TourBox-Elite-Plus-Controller-Programmable/dp/B0DR2Q5NN7" data-model-name="Tour Box Elite Plus All-In-Creative Controller" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/ufaRDVzEbQ5kZAMpRenPbb.jpg" alt="TOUR BOX, Tour Box Elite Plus All-In-Creative Controller"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>TOUR BOX</div>                                        <div class="featured__title">Tour Box Elite Plus All-In-Creative Controller</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="06f1a6eb-6836-4ab5-a348-56eaa309b96d">            <a href="https://www.amazon.com/Wacom-Drawing-Battery-Free-Designers-Animation/dp/B0CJMJZTG2" data-model-name="Wacom Cintiq 16 Drawing Tablet" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/j7xq3bdjDLqFUN4W7T9DUc.jpg" alt="Wacom, Wacom Cintiq 16 Drawing Tablet"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Wacom</div>                                        <div class="featured__title">Wacom Cintiq 16 Drawing Tablet</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="da44d466-ea99-4714-a52a-d05907274ca3">            <a href="https://www.amazon.com/Wacom-Creative-Display-Pressure-DTH271K0A/dp/B0B43T9HPC" data-model-name="Wacom Cintiq Pro 27 Creative Pen Display" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/Ac5H4kmKt48zgNLctnakff.jpg" alt="Wacom, Wacom Cintiq Pro 27 Creative Pen Display"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Wacom</div>                                        <div class="featured__title">Wacom Cintiq Pro 27 Creative Pen Display</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="7c482343-acd4-44ae-b3c8-40ec5942e033">            <a href="https://www.amazon.com/Logitech-Programmable-Backlighting-Bluetooth-Rechargeable/dp/B0BKW3LB2B" data-model-name="Logitech Mx Keys S Wireless Keyboard" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/PHaNuvuwGuRDdrFiwc72Vg.jpg" alt="Logitech, Logitech Mx Keys S Wireless Keyboard"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Logitech</div>                                        <div class="featured__title">Logitech Mx Keys S Wireless Keyboard</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/i-asked-a-professional-illustrator-what-to-buy-to-get-started-in-digital-art-3-starter-packs-for-3-different-budgets-to-celebrate-world-art-day</link>
                                                                            <description>
                            <![CDATA[ I asked a professional illustrator what he'd buy to create digital art — here are the products he actually uses, at every budget. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">z9qMvEZT9YkUVdpqZQgghh</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/VhT6CEfLVAwSLXEuHGpPEa-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 15 Apr 2026 10:01:33 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[Tablets]]></category>
                                                                                                <author><![CDATA[ john-anthony.disotto@futurenet.com (John-Anthony Disotto) ]]></author>                    <dc:creator><![CDATA[ John-Anthony Disotto ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/apUjevMoC6MzjfVN7GBCoi-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;John-Anthony Disotto is the Collections Editor at Tom&#039;s Guide, curating advice on the best products to spend your hard-earned cash on. An award-winning journalist and longtime Apple expert, he previously covered AI at TechRadar and served as How To Editor at iMore.&lt;/p&gt;&lt;p&gt;He used to work for Apple as a technician focused on iOS and iPhone repairs at the Genius Bar and has used the Apple ecosystem for over a decade. In his spare time, John-Anthony can be found watching any sport under the sun, from football to darts, taking the term &#039;Lego house&#039; far too literally as he runs out of space to display any more plastic bricks, or chilling on the couch with his French bulldog, Kermit. &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/VhT6CEfLVAwSLXEuHGpPEa-1280-80.jpg">
                                                            <media:credit><![CDATA[Apple / Wacom / Tour Box / Edited by Gemini]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[World Art Day products recommended by a professional illustrator]]></media:description>                                                            <media:text><![CDATA[World Art Day products recommended by a professional illustrator]]></media:text>
                                <media:title type="plain"><![CDATA[World Art Day products recommended by a professional illustrator]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/VhT6CEfLVAwSLXEuHGpPEa-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Today is World Art Day, and while I'm not remotely artistic, I do have very talented friends who are.</p><p>To celebrate and offer guidance to those looking to finally leap into creating digital art, I asked my friend Robert for his advice. Robert is a professional illustrator with over seven years of experience working for clients such as Apple, Red Bull, EA, Nike, and now he works on AAA video games.</p><p>Combined with my tech expertise, we came up with three product tiers for those looking to get started with digital art, and honestly, I'm kind of tempted to start drawing myself after checking out some of these products.</p><p>This guide starts small, but gets pretty expensive quickly, and Robert wanted me to make sure that I emphasize the best way to start creating digital art is with whatever tools you've got access to.</p><p>You don't need the best to make amazing artwork, but sometimes treating yourself makes it that little bit easier.  So celebrate World Art Day 2026 by treating your passions to a brand new way to draw and get creative, with expertise from a professional illustrator.</p><h3 class="article-body__section" id="section-a-great-place-to-start"><span>A great place to start</span></h3><p>Robert says, " A Wacom Android tablet gives you everything you need to start making digital art." And that's why he recommends the Wacom MovinkPad 11. It has similar technology to Wacom's most impressive drawing tablets and grants you access to Clip Studio Paint, an excellent platform to get started drawing digitally.</p><p>If you already own a computer, buying a drawing tablet without a display to create with popular apps like Photoshop is a great option too.</p><p>And finally, if you want a multipurpose product, you can't get better than a standard iPad, granting you access to the Apple ecosystem and Procreate, one of the best apps for digital art out there. Robert says Procreate excels because "it's simple and intuitive," although at this price point, an entry-level iPad is only 11 inches, and the standard Apple Pencil has no pressure sensitivity.</p><p>Oh, and of course, Rob says it's always a good idea to still sketch offline and get inspiration from the outside world, so grabbing some markers is always advised.</p>        <div class="featured_product_block featured_block_hero" data-id="5b70c0d0-eec0-48fc-8618-26d32c7b3c97">            <a href="https://www.amazon.com/Inspiroy-H640P-Graphics-Battery-Free-Sensitivity/dp/B075T6MTJX" data-model-name="Huion Inspiroy H640p Drawing Tablet" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.37%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/RkCj8EzJPZz5bFDbvn7v9K.jpg" alt="HUION, Huion Inspiroy H640p Drawing Tablet"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>HUION</div>                                        <div class="featured__title">Huion Inspiroy H640p Drawing Tablet</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="c4623361-8a59-42a1-8057-e1352f02812e">            <a href="https://www.amazon.com/Wacom-Wireless-Software-Included-CTL4100WLK0/dp/B079J2FSQ7" data-model-name="Wacom Intuos Small Bluetooth Graphics Drawing Tablet" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.37%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/d8GKks59emepxBdpRPpJBL.jpg" alt="Wacom, Wacom Intuos Small Bluetooth Graphics Drawing Tablet"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Wacom</div>                                        <div class="featured__title">Wacom Intuos Small Bluetooth Graphics Drawing Tablet</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="44fb057c-7b80-4b67-b051-3565fa991780">            <a href="https://www.amazon.com/Winsor-Newton-0290154-Promarker-Neutral/dp/B07RFYQS9P" data-model-name="Winsor & Newton Promarker Set, 6 Count, Neutral Tones" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.37%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/zKewc3woNRBw7qJWoLeZkL.jpg" alt="Winsor & Newton, Winsor & Newton Promarker Set, 6 Count, Neutral Tones"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Winsor & Newton</div>                                        <div class="featured__title">Winsor & Newton Promarker Set, 6 Count, Neutral Tones</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="c5ff428e-0946-4917-bcac-b1f99bece6f3">            <a href="https://www.amazon.com/Wacom-MovinkPad-11-Android-Battery-Free/dp/B0F76C5BXN" data-model-name="Wacom Movinkpad 11, Android Mobile Drawing Tablet" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/EQut3dpLLdLFer8SmpSkPM.jpg" alt="Wacom, Wacom Movinkpad 11, Android Mobile Drawing Tablet"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Wacom</div>                                        <div class="featured__title">Wacom Movinkpad 11, Android Mobile Drawing Tablet</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ace9073b-c171-4d16-bc14-3cb480b6ca76">            <a href="https://www.amazon.com/Apple-iPad-11-inch-Display-All-Day/dp/B0DZ75TN5F" data-model-name="Apple iPad 11-Inch: A16 Chip" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.37%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/bVUAsJXuY8fkPeZZVrdj6N.jpg" alt="Apple, Apple iPad 11-Inch: A16 Chip"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple iPad 11-Inch: A16 Chip</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="1139bef2-6485-46ed-8ea4-03469fda81ae">            <a href="https://www.amazon.com/Apple-MUWA3AM-A-Pencil-USB-C/dp/B0CL7J12YK" data-model-name="Apple Pencil (USB-C)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.37%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/qoRApUKPrKeeF38NVGGneN.jpg" alt="Apple, Apple Pencil (USB-C)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple Pencil (USB-C)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><h3 class="article-body__section" id="section-ready-to-spend-a-little-more"><span>Ready to spend a little more</span></h3><p>So you're already creating digital art, but you want to take the next step and treat yourself to some excellent products that will enhance your passion.</p><p>If you're looking for an iPad, the 13-inch Air is the best bang for buck because you get a larger display to draw on and compatibility with the Apple Pencil Pro (yes, it has pressure sensitivity).</p><p>I've also included the best drawing stand, because Rob often tells me about his sore shoulder, and one of the best ways to combat Repetitive Strain Injury (RSI) is to have good posture and a more comfortable drawing experience.</p><p>Some Pros actually opt for Wacom over the Apple ecosystem, and the MovinkPad Pro 14 has an OLED display with vivid colors that some will tell you is the best drawing experience on the go.</p><p>The Wacom Intuos Pro is the favorite of many digital artists, especially if you have access to a computer (hence my inclusion of the MacBook Neo), because you can have a way more comfortable posture when not drawing directly on a screen. Rob says he loves his Intuos Pro, especially when he's got body aches.</p>        <div class="featured_product_block featured_block_hero" data-id="5f77e59b-5266-48fc-b0f7-06a4e7072f22">            <a href="https://www.amazon.com/Apple-iPad-Air-13-inch-M4/dp/B0GQVLJGJH/" data-model-name="Apple iPad Air 13-Inch (M4)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/TVw8KXkPoqmLKK2tnWGtk3.jpg" alt="Apple, Apple iPad Air 13-Inch (M4)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple iPad Air 13-Inch (M4)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="42a70df3-bba2-48ea-9e04-60605e0421b0">            <a href="https://www.amazon.com/Apple-Pencil-Pro-Pixel-Perfect-Industry-Leading/dp/B0D3J71RM7" data-model-name="Apple Pencil Pro" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/cqPSKu8EWAeJXHb7RWuDR4.jpg" alt="Apple, Apple Pencil Pro"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple Pencil Pro</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="7f4f2d09-7210-4cb6-b316-cb3af76b5cbc">            <a href="https://www.amazon.com/SKETCHBOARD-PRO-Black-12-9-inch-3rd-6th/dp/B0CPTMM3JS" data-model-name="Sketchboard Pro" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/EwnZDJ76DCnighL8yxshC5.jpg" alt="SKETCHBOARD PRO, Sketchboard Pro"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>SKETCHBOARD PRO</div>                                        <div class="featured__title">Sketchboard Pro</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="732e38f8-84a6-460c-8752-51070d7059f6">            <a href="https://www.amazon.com/Wacom-MovinkPad-Pro-Android-Battery-Free/dp/B0FMHX9786" data-model-name="Wacom MovinkPad Pro 14" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/KM83Gk2Eqf8KtGadYcu8w5.jpg" alt="Wacom, Wacom MovinkPad Pro 14"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Wacom</div>                                        <div class="featured__title">Wacom MovinkPad Pro 14</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="51ed6b4d-28c6-49d9-94d7-8e332eec5c4d">            <a href="https://www.amazon.com/Wacom-Bluetooth-Professional-Graphic-Compatible/dp/B0DFZ24WP9" data-model-name="Wacom Intuos Pro" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/nvU5aBWLAMcAe7wHGVjdf6.jpg" alt="Wacom, Wacom Intuos Pro"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Wacom</div>                                        <div class="featured__title">Wacom Intuos Pro</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="1d60f398-10a3-4952-a1c9-274aa4f19b9c">            <a href="https://www.amazon.com/Apple-2026-MacBook-13-inch-Laptop/dp/B0GR6F79MT" data-model-name="MacBook Neo" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/GPrD6gEkBxTChLsyoy4Nb7.jpg" alt="Apple, MacBook Neo"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">MacBook Neo</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><h3 class="article-body__section" id="section-your-parents-believe-in-you-and-you-ve-got-money-to-spend"><span>Your parents believe in you (and you've got money to spend)</span></h3><p>The final tier of products are for those who (or already) draw professionally. In fact, some of these prices are so eye-watering, that unless you know you need a $3,500 Wacom display, you probably shouldn't even consider it.</p><p>Rob says the iPad Pro is one of the best displays for drawing, because it looks beautiful and colors pop from the screen. You can combine it with the Apple Pencil pro listed above to get barrel rotation and hover functionality.</p><p>He's also included the Tour Box which is excellent for streamlining artistic workflows, and can be combined with the best Wacom tablets on the market.</p><p>If you're serious about graphic design and digital art, the products listed below will serve for years to come, although an iPad Pro is maybe more realistic than spending a large mortgage payment on a 27 inch Cintiq Pro.</p>        <div class="featured_product_block featured_block_hero" data-id="74380cf7-0e68-455e-b280-eab1860b3dd3">            <a href="https://www.apple.com/shop/buy-ipad/ipad-pro" data-model-name="iPad Pro 13-Inch (m5)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/jbGhk3NAy7trgcm3RkSSnZ.jpg" alt="APPLE, iPad Pro 13-Inch (m5)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>APPLE</div>                                        <div class="featured__title">iPad Pro 13-Inch (m5)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="77eb0614-4a5e-4eed-8a75-4bad64560473">            <a href="https://www.amazon.com/Paperlike-Screen-Protector-iPad-2024/dp/B0FN91PWHS" data-model-name="Paperlike 3 Screen Protector" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/R4Lf2UK7h2uAdYGtkUkuka.jpg" alt="Paperlike, Paperlike 3 Screen Protector"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Paperlike</div>                                        <div class="featured__title">Paperlike 3 Screen Protector</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="32ac4fc9-b6eb-4ebe-b031-855d405425bd">            <a href="https://www.amazon.com/TourBox-Elite-Plus-Controller-Programmable/dp/B0DR2Q5NN7" data-model-name="Tour Box Elite Plus All-In-Creative Controller" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/ufaRDVzEbQ5kZAMpRenPbb.jpg" alt="TOUR BOX, Tour Box Elite Plus All-In-Creative Controller"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>TOUR BOX</div>                                        <div class="featured__title">Tour Box Elite Plus All-In-Creative Controller</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="06f1a6eb-6836-4ab5-a348-56eaa309b96d">            <a href="https://www.amazon.com/Wacom-Drawing-Battery-Free-Designers-Animation/dp/B0CJMJZTG2" data-model-name="Wacom Cintiq 16 Drawing Tablet" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/j7xq3bdjDLqFUN4W7T9DUc.jpg" alt="Wacom, Wacom Cintiq 16 Drawing Tablet"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Wacom</div>                                        <div class="featured__title">Wacom Cintiq 16 Drawing Tablet</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="da44d466-ea99-4714-a52a-d05907274ca3">            <a href="https://www.amazon.com/Wacom-Creative-Display-Pressure-DTH271K0A/dp/B0B43T9HPC" data-model-name="Wacom Cintiq Pro 27 Creative Pen Display" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/Ac5H4kmKt48zgNLctnakff.jpg" alt="Wacom, Wacom Cintiq Pro 27 Creative Pen Display"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Wacom</div>                                        <div class="featured__title">Wacom Cintiq Pro 27 Creative Pen Display</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="7c482343-acd4-44ae-b3c8-40ec5942e033">            <a href="https://www.amazon.com/Logitech-Programmable-Backlighting-Bluetooth-Rechargeable/dp/B0BKW3LB2B" data-model-name="Logitech Mx Keys S Wireless Keyboard" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/PHaNuvuwGuRDdrFiwc72Vg.jpg" alt="Logitech, Logitech Mx Keys S Wireless Keyboard"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Logitech</div>                                        <div class="featured__title">Logitech Mx Keys S Wireless Keyboard</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Forget the new stuff — I'm celebrating Apple's 50th anniversary by making all my devices look gloriously retro ]]></title>
                                                                                                <dc:content><![CDATA[ <p>It's <a href="https://www.tomsguide.com/computing/the-50-moments-that-defined-apple">Apple's 50th anniversary</a> today, and that means I get to find awesome ways of celebrating the old by decorating the new.<br><br>2026 has ushered in a whole host of retro revivals, and there's something deeply satisfying about seeing the classic Apple aesthetic make a comeback. The rainbow logo, the beige plastics, the Macintosh silhouette — it all hits different when you realize half a century has passed since Steve Jobs and Steve Wozniak started building computers in a garage.</p><p>Right now, there's a wave of beautifully crafted retro-styled accessories for your iPhone, Mac, AirPods, and Apple Watch that pay tribute to Apple's design history while working perfectly with your modern devices. I'm talking classic Macintosh-shaped Mac docks, rainbow Apple logo skins, AirPods cases that look like the original iPod, and watch bands inspired by the candy-colored iMac G3.</p><p>I've rounded up my favorite retro Apple accessories available right now. Whether you're a longtime Apple fan who remembers the "Think Different" era, or you just love the vintage aesthetic, these are the products that'll make your setup stand out all year, not just for Apple's 50th anniversary.</p><h3 class="article-body__section" id="section-retro-iphone-accessories"><span>Retro iPhone Accessories</span></h3><p>There's something special about dressing your iPhone up in a design that nods back to where it all began. These cases all tap into the nostalgia you have for retro Apple products, such as the iconic Bondi Blue iMac G3.</p>        <div class="featured_product_block featured_block_hero" data-id="a3f886a3-de7d-4ee4-8d8b-39b0175fbb03">            <a href="https://www.amazon.com/Spigen-Classic-Covered-Control-Compatible/dp/B0FD29B5JT/" data-model-name="Spigen for iPhone Classic C1 Magfit Graphite" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/KERWmFnLK6KavFqx9uAQw6.jpg" alt="Spigen, Spigen for iPhone Classic C1 Magfit Graphite"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Spigen</div>                                        <div class="featured__title">Spigen for iPhone Classic C1 Magfit Graphite</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="c63047f6-4059-47bf-a278-0acfbc77996d">            <a href="https://www.amazon.com/Spigen-Classic-Covered-Control-Compatible/dp/B0FD27QLY6/" data-model-name="Spigen for iPhone Classic C1 Magfit Bondi Blue" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/7pA92VYzoRPrdxMiUqQwt7.jpg" alt="Spigen, Spigen for iPhone Classic C1 Magfit Bondi Blue"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Spigen</div>                                        <div class="featured__title">Spigen for iPhone Classic C1 Magfit Bondi Blue</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="eaa9fd89-9b35-4249-8c9b-65af88b86175">            <a href="https://www.amazon.com/Spigen-Classic-Covered-Control-Compatible/dp/B0FD1PCVRQ" data-model-name="Spigen for iPhone Classic C1 Magfit Ruby" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/YvztfUv6q9NDagjL2RLbo8.jpg" alt="Spigen, Spigen for iPhone Classic C1 Magfit Ruby"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Spigen</div>                                        <div class="featured__title">Spigen for iPhone Classic C1 Magfit Ruby</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="df808316-ce30-45eb-9f23-e3a263c079fd">            <a href="https://www.amazon.com/Spigen-Classic-Covered-Control-Compatible/dp/B0FD1ZFBJ8/" data-model-name="Spigen for iPhone Classic C1 Magfit Tangerine" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/W43Dau4yQ5u35renxQVxV9.jpg" alt="Spigen, Spigen for iPhone Classic C1 Magfit Tangerine"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Spigen</div>                                        <div class="featured__title">Spigen for iPhone Classic C1 Magfit Tangerine</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="748fa3f2-0bc0-4911-94a2-a9b3364ab3e3">            <a href="https://www.amazon.com/Spigen-Classic-Control-Compatible-Magsafe/dp/B0FH5XH64P" data-model-name="Spigen for iPhone Classic LE With MagSafe" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/KgJgv2K6hU48ZVPQtP9cKA.jpg" alt="Spigen, Spigen for iPhone Classic LE With MagSafe"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Spigen</div>                                        <div class="featured__title">Spigen for iPhone Classic LE With MagSafe</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="8a0211e7-140e-4e9d-ab26-5581bff5169a">            <a href="https://www.amazon.com/Spigen-Compatible-MagSafe-Cases-Pixelsnap-Hardshell/dp/B0G5BLTLML" data-model-name="Spigen for Magsafe Wallet, Classic LS" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/hoTyAM2zDkH3uUzwdRtE6B.jpg" alt="Spigen, Spigen for Magsafe Wallet, Classic LS"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Spigen</div>                                        <div class="featured__title">Spigen for Magsafe Wallet, Classic LS</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><h3 class="article-body__section" id="section-retro-apple-watch-accessories"><span>Retro Apple Watch Accessories</span></h3><p>If there's one retro Apple accessory that genuinely makes me smile every time I see it, it's the <a href="https://www.amazon.com/elago-Nightstand-Original-Design-Pending/dp/B01MYNE2BM">Elago W3 Nightstand Stand</a>. It turns your Apple Watch charger into a miniature classic Macintosh, and I just love the way it looks.</p>        <div class="featured_product_block featured_block_hero" data-id="ad9ee0dc-4520-4e5b-abe8-88e6e837ddec">            <a href="https://www.amazon.com/elago-Nightstand-Original-Design-Pending/dp/B01MYNE2BM" data-model-name="Elago W3 Apple Watch Stand" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/2zXzC7hAj5pfSeJHxzHYVE.jpg" alt="elago, Elago W3 Apple Watch Stand"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>elago</div>                                        <div class="featured__title">Elago W3 Apple Watch Stand</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="3de159ca-dbe5-4f60-ba33-1f5df9f7d2b9">            <a href="https://www.amazon.com/elago-Nightstand-Original-Design-Pending/dp/B01N412BQA" data-model-name="Elago W3 Apple Watch Stand" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/Zy9VKaL3Cdw9koXvjXESHF.jpg" alt="elago, Elago W3 Apple Watch Stand"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>elago</div>                                        <div class="featured__title">Elago W3 Apple Watch Stand</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="17f6f450-17bb-4bcd-8294-682fdb2028a8">            <a href="https://www.amazon.com/dp/B0F1WJ9BT1" data-model-name="Spigen for Apple Watch Charger" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/JgS7yg6c5vVCkRjbS2hkSG.jpg" alt="Spigen, Spigen for Apple Watch Charger"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Spigen</div>                                        <div class="featured__title">Spigen for Apple Watch Charger</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><h3 class="article-body__section" id="section-retro-airpods-accessories"><span>Retro AirPods Accessories</span></h3><p>Elago's <a href="https://www.amazon.com/elago-Classic-Monitor-Designed-Registered/dp/B07YPQVWWB">Classic Monitor case</a> transforms your AirPods into a tiny version of the iconic Macintosh monitor, but my personal favorite might actually be the <a href="https://www.amazon.com/elago-AirPods-Classic-Player-Pending/dp/B08B5VFDYP">Music Player case</a>, which turns your AirPods case into a miniature click-wheel iPod.</p>        <div class="featured_product_block featured_block_hero" data-id="486512d6-029f-46ae-aa87-82626320c316">            <a href="https://www.amazon.com/elago-Classic-Monitor-Designed-Registered/dp/B07YPQVWWB" data-model-name="Elago AW3 Silicone Case Compatible With AirPods 1 & 2" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/nbh6HQkoTsJucRhKnQF3QH.jpg" alt="elago, Elago AW3 Silicone Case Compatible With AirPods 1 & 2"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>elago</div>                                        <div class="featured__title">Elago AW3 Silicone Case Compatible With AirPods 1 & 2</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b4f2cc63-d99b-477d-8dde-80df395f0823">            <a href="https://www.amazon.com/elago-AirPods-Classic-Silicone-Standing/dp/B0888BDZS2" data-model-name="Elago AW3 Silicone Case Compatible With AirPods Pro" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/Deg5vaAtAnPHSRicRchLFJ.jpg" alt="elago, Elago AW3 Silicone Case Compatible With AirPods Pro"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>elago</div>                                        <div class="featured__title">Elago AW3 Silicone Case Compatible With AirPods Pro</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a0642988-7fb0-4216-9a00-d2a07abe44df">            <a href="https://www.amazon.com/Spigen-Compatible-Generation-Inspired-Macintosh/dp/B0FTTDVKB5" data-model-name="Spigen for Airpods Pro 3 Case" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/qKCb28kxwyxexXHGVNopNK.jpg" alt="Spigen, Spigen for Airpods Pro 3 Case"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Spigen</div>                                        <div class="featured__title">Spigen for Airpods Pro 3 Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="4a928734-b260-4cf1-bd8d-b7e8ac5034dd">            <a href="https://www.amazon.com/elago-AirPods-Classic-Player-Pending/dp/B08B5VFDYP" data-model-name="Elago AW6 Case Compatible With AirPods Pro" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/2j5arqvdFrnNq9KFrF4BHL.jpg" alt="elago, Elago AW6 Case Compatible With AirPods Pro"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>elago</div>                                        <div class="featured__title">Elago AW6 Case Compatible With AirPods Pro</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><h3 class="article-body__section" id="section-retro-mac-accessories"><span>Retro Mac Accessories</span></h3><p>DBrand's retro skin collection lets you wrap your MacBook in designs inspired by the original beige Macintosh plastic, while I just love the look of RayCue's retro dock that sits on your desk pretending to be a Mac from 40 years ago.</p>        <div class="featured_product_block featured_block_hero" data-id="56129e63-27f2-497c-9d24-64edfda82733">            <a href="http://dbrand.com/tomsguide" data-model-name="Space Black (1984) Skin" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/wpvW2rFLHTAhbz9AskcwYM.jpg" alt="DBRAND, Space Black (1984) Skin"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>DBRAND</div>                                        <div class="featured__title">Space Black (1984) Skin</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="60a5ddad-c11d-464c-9b26-cc281184a476">            <a href="http://dbrand.com/tomsguide" data-model-name="Classic (1984) Skin" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/heL7cMf5brwNKZ4iAkTgEN.jpg" alt="DBRAND, Classic (1984) Skin"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>DBRAND</div>                                        <div class="featured__title">Classic (1984) Skin</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="32756db5-9cdc-4a7f-ac69-771a6e891fa5">            <a href="http://dbrand.com/tomsguide" data-model-name="Silver (1984) Skin" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/KTfhQn9xaZtAtnU7JFrCxN.jpg" alt="DBRAND, Silver (1984) Skin"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>DBRAND</div>                                        <div class="featured__title">Silver (1984) Skin</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="bd26f536-6bf1-429d-90a1-06602c21ad60">            <a href="http://dbrand.com/tomsguide" data-model-name="Indigo (1984) Skin" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/uzBPyHEEBvFdDLUuLCi4iP.jpg" alt="DBRAND, Indigo (1984) Skin"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>DBRAND</div>                                        <div class="featured__title">Indigo (1984) Skin</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="98515202-99d8-411e-b1db-99017e35f4b7">            <a href="http://dbrand.com/tomsguide" data-model-name="Blush (1984) Skin" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/QujTUzdYRrqd5SipapXVTQ.jpg" alt="DBRAND, Blush (1984) Skin"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>DBRAND</div>                                        <div class="featured__title">Blush (1984) Skin</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="cf1e3ba6-c161-4a79-8845-b9f4d0c7821e">            <a href="http://dbrand.com/tomsguide" data-model-name="Citrus (1984) Skin" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/FmAYBD84ChzcGg5iThpDJR.jpg" alt="DBRAND, Citrus (1984) Skin"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>DBRAND</div>                                        <div class="featured__title">Citrus (1984) Skin</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="203ba21d-b258-4693-8135-5f3a14f4c03c">            <a href="https://www.amazon.com/Spigen-Designed-Desktop-Prevention-Ventilation/dp/B0DNGTLRXG/" data-model-name="Spigen for Mac Mini M4/M4 Pro - Classic C1 Tangerine" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/F6VPtfKzmGtSiRXFu3PWhS.jpg" alt="Spigen, Spigen for Mac Mini M4/M4 Pro - Classic C1 Tangerine"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Spigen</div>                                        <div class="featured__title">Spigen for Mac Mini M4/M4 Pro - Classic C1 Tangerine</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="f6cf8d7b-8e16-4704-8f0e-082a05fb89e2">            <a href="https://www.amazon.com/Spigen-Designed-Desktop-Prevention-Ventilation/dp/B0DNGQ7BXN" data-model-name="Spigen for Mac Mini M4/M4 Pro - Classic C1 Bondi Blue" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/fiCJDEPuCEieuLnjWhKqbT.jpg" alt="Spigen, Spigen for Mac Mini M4/M4 Pro - Classic C1 Bondi Blue"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Spigen</div>                                        <div class="featured__title">Spigen for Mac Mini M4/M4 Pro - Classic C1 Bondi Blue</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="0b1ed48a-e321-41e9-b10c-a22a849913d8">            <a href="https://www.amazon.com/Wokyis-Station-Display-Enclosure-Earphone/dp/B0FPB67QBV" data-model-name="Wokyis M5 Retro Dock Station for Mac Mini M4" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/YB5fDY3viLtx6n4Pk8DBdU.jpg" alt="WOKYIS, Wokyis M5 Retro Dock Station for Mac Mini M4"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>WOKYIS</div>                                        <div class="featured__title">Wokyis M5 Retro Dock Station for Mac Mini M4</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="9a4d4f61-ab94-4259-a484-23f65de6d121">            <a href="https://www.amazon.com/RayCue-Docking-Station-Monitor-Ethernet/dp/B0D9Y14M5J/" data-model-name="Raycue 128k SE Docking Station" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/yLzd4JezvdsG9rQzWbDwdV.jpg" alt="RayCue, Raycue 128k SE Docking Station"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>RayCue</div>                                        <div class="featured__title">Raycue 128k SE Docking Station</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><p>Every accessory on this list lets you celebrate the old, while upgrading the new, and I absolutely can't get enough of this nostalgic aesthetic. So pick up a retro AirPods case, slap a rainbow logo on your MacBook, and enjoy the best of both eras. After all, it's not every day a tech company turns 50 — and it's even rarer that its original aesthetic still looks this good.</p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/forget-the-new-stuff-im-celebrating-apples-50th-anniversary-by-making-all-my-devices-look-gloriously-retro</link>
                                                                            <description>
                            <![CDATA[ Apple's 50th anniversary has sparked a wave of retro-inspired accessories that make your modern devices look like vintage icons. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">pybporfYDQxVcgXMZRkhFJ</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/mSTGZCNwKPCQVqhJLuvv8W-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 01 Apr 2026 11:27:45 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[MacBooks]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Computing Peripherals]]></category>
                                                    <category><![CDATA[Tablets]]></category>
                                                    <category><![CDATA[Laptops]]></category>
                                                                                                <author><![CDATA[ john-anthony.disotto@futurenet.com (John-Anthony Disotto) ]]></author>                    <dc:creator><![CDATA[ John-Anthony Disotto ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/apUjevMoC6MzjfVN7GBCoi-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;John-Anthony Disotto is the Collections Editor at Tom&#039;s Guide, curating advice on the best products to spend your hard-earned cash on. An award-winning journalist and longtime Apple expert, he previously covered AI at TechRadar and served as How To Editor at iMore.&lt;/p&gt;&lt;p&gt;He used to work for Apple as a technician focused on iOS and iPhone repairs at the Genius Bar and has used the Apple ecosystem for over a decade. In his spare time, John-Anthony can be found watching any sport under the sun, from football to darts, taking the term &#039;Lego house&#039; far too literally as he runs out of space to display any more plastic bricks, or chilling on the couch with his French bulldog, Kermit. &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/mSTGZCNwKPCQVqhJLuvv8W-1280-80.jpg">
                                                            <media:credit><![CDATA[Elago / Spigen / Raycue / DBrand / Apple / Edited by Gemini]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Retro Apple accessories to celebrate 50th anniversary ]]></media:description>                                                            <media:text><![CDATA[Retro Apple accessories to celebrate 50th anniversary ]]></media:text>
                                <media:title type="plain"><![CDATA[Retro Apple accessories to celebrate 50th anniversary ]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/mSTGZCNwKPCQVqhJLuvv8W-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>It's <a href="https://www.tomsguide.com/computing/the-50-moments-that-defined-apple">Apple's 50th anniversary</a> today, and that means I get to find awesome ways of celebrating the old by decorating the new.<br><br>2026 has ushered in a whole host of retro revivals, and there's something deeply satisfying about seeing the classic Apple aesthetic make a comeback. The rainbow logo, the beige plastics, the Macintosh silhouette — it all hits different when you realize half a century has passed since Steve Jobs and Steve Wozniak started building computers in a garage.</p><p>Right now, there's a wave of beautifully crafted retro-styled accessories for your iPhone, Mac, AirPods, and Apple Watch that pay tribute to Apple's design history while working perfectly with your modern devices. I'm talking classic Macintosh-shaped Mac docks, rainbow Apple logo skins, AirPods cases that look like the original iPod, and watch bands inspired by the candy-colored iMac G3.</p><p>I've rounded up my favorite retro Apple accessories available right now. Whether you're a longtime Apple fan who remembers the "Think Different" era, or you just love the vintage aesthetic, these are the products that'll make your setup stand out all year, not just for Apple's 50th anniversary.</p><h3 class="article-body__section" id="section-retro-iphone-accessories"><span>Retro iPhone Accessories</span></h3><p>There's something special about dressing your iPhone up in a design that nods back to where it all began. These cases all tap into the nostalgia you have for retro Apple products, such as the iconic Bondi Blue iMac G3.</p>        <div class="featured_product_block featured_block_hero" data-id="a3f886a3-de7d-4ee4-8d8b-39b0175fbb03">            <a href="https://www.amazon.com/Spigen-Classic-Covered-Control-Compatible/dp/B0FD29B5JT/" data-model-name="Spigen for iPhone Classic C1 Magfit Graphite" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/KERWmFnLK6KavFqx9uAQw6.jpg" alt="Spigen, Spigen for iPhone Classic C1 Magfit Graphite"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Spigen</div>                                        <div class="featured__title">Spigen for iPhone Classic C1 Magfit Graphite</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="c63047f6-4059-47bf-a278-0acfbc77996d">            <a href="https://www.amazon.com/Spigen-Classic-Covered-Control-Compatible/dp/B0FD27QLY6/" data-model-name="Spigen for iPhone Classic C1 Magfit Bondi Blue" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/7pA92VYzoRPrdxMiUqQwt7.jpg" alt="Spigen, Spigen for iPhone Classic C1 Magfit Bondi Blue"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Spigen</div>                                        <div class="featured__title">Spigen for iPhone Classic C1 Magfit Bondi Blue</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="eaa9fd89-9b35-4249-8c9b-65af88b86175">            <a href="https://www.amazon.com/Spigen-Classic-Covered-Control-Compatible/dp/B0FD1PCVRQ" data-model-name="Spigen for iPhone Classic C1 Magfit Ruby" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/YvztfUv6q9NDagjL2RLbo8.jpg" alt="Spigen, Spigen for iPhone Classic C1 Magfit Ruby"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Spigen</div>                                        <div class="featured__title">Spigen for iPhone Classic C1 Magfit Ruby</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="df808316-ce30-45eb-9f23-e3a263c079fd">            <a href="https://www.amazon.com/Spigen-Classic-Covered-Control-Compatible/dp/B0FD1ZFBJ8/" data-model-name="Spigen for iPhone Classic C1 Magfit Tangerine" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/W43Dau4yQ5u35renxQVxV9.jpg" alt="Spigen, Spigen for iPhone Classic C1 Magfit Tangerine"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Spigen</div>                                        <div class="featured__title">Spigen for iPhone Classic C1 Magfit Tangerine</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="748fa3f2-0bc0-4911-94a2-a9b3364ab3e3">            <a href="https://www.amazon.com/Spigen-Classic-Control-Compatible-Magsafe/dp/B0FH5XH64P" data-model-name="Spigen for iPhone Classic LE With MagSafe" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/KgJgv2K6hU48ZVPQtP9cKA.jpg" alt="Spigen, Spigen for iPhone Classic LE With MagSafe"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Spigen</div>                                        <div class="featured__title">Spigen for iPhone Classic LE With MagSafe</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="8a0211e7-140e-4e9d-ab26-5581bff5169a">            <a href="https://www.amazon.com/Spigen-Compatible-MagSafe-Cases-Pixelsnap-Hardshell/dp/B0G5BLTLML" data-model-name="Spigen for Magsafe Wallet, Classic LS" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/hoTyAM2zDkH3uUzwdRtE6B.jpg" alt="Spigen, Spigen for Magsafe Wallet, Classic LS"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Spigen</div>                                        <div class="featured__title">Spigen for Magsafe Wallet, Classic LS</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><h3 class="article-body__section" id="section-retro-apple-watch-accessories"><span>Retro Apple Watch Accessories</span></h3><p>If there's one retro Apple accessory that genuinely makes me smile every time I see it, it's the <a href="https://www.amazon.com/elago-Nightstand-Original-Design-Pending/dp/B01MYNE2BM">Elago W3 Nightstand Stand</a>. It turns your Apple Watch charger into a miniature classic Macintosh, and I just love the way it looks.</p>        <div class="featured_product_block featured_block_hero" data-id="ad9ee0dc-4520-4e5b-abe8-88e6e837ddec">            <a href="https://www.amazon.com/elago-Nightstand-Original-Design-Pending/dp/B01MYNE2BM" data-model-name="Elago W3 Apple Watch Stand" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/2zXzC7hAj5pfSeJHxzHYVE.jpg" alt="elago, Elago W3 Apple Watch Stand"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>elago</div>                                        <div class="featured__title">Elago W3 Apple Watch Stand</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="3de159ca-dbe5-4f60-ba33-1f5df9f7d2b9">            <a href="https://www.amazon.com/elago-Nightstand-Original-Design-Pending/dp/B01N412BQA" data-model-name="Elago W3 Apple Watch Stand" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/Zy9VKaL3Cdw9koXvjXESHF.jpg" alt="elago, Elago W3 Apple Watch Stand"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>elago</div>                                        <div class="featured__title">Elago W3 Apple Watch Stand</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="17f6f450-17bb-4bcd-8294-682fdb2028a8">            <a href="https://www.amazon.com/dp/B0F1WJ9BT1" data-model-name="Spigen for Apple Watch Charger" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/JgS7yg6c5vVCkRjbS2hkSG.jpg" alt="Spigen, Spigen for Apple Watch Charger"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Spigen</div>                                        <div class="featured__title">Spigen for Apple Watch Charger</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><h3 class="article-body__section" id="section-retro-airpods-accessories"><span>Retro AirPods Accessories</span></h3><p>Elago's <a href="https://www.amazon.com/elago-Classic-Monitor-Designed-Registered/dp/B07YPQVWWB">Classic Monitor case</a> transforms your AirPods into a tiny version of the iconic Macintosh monitor, but my personal favorite might actually be the <a href="https://www.amazon.com/elago-AirPods-Classic-Player-Pending/dp/B08B5VFDYP">Music Player case</a>, which turns your AirPods case into a miniature click-wheel iPod.</p>        <div class="featured_product_block featured_block_hero" data-id="486512d6-029f-46ae-aa87-82626320c316">            <a href="https://www.amazon.com/elago-Classic-Monitor-Designed-Registered/dp/B07YPQVWWB" data-model-name="Elago AW3 Silicone Case Compatible With AirPods 1 & 2" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/nbh6HQkoTsJucRhKnQF3QH.jpg" alt="elago, Elago AW3 Silicone Case Compatible With AirPods 1 & 2"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>elago</div>                                        <div class="featured__title">Elago AW3 Silicone Case Compatible With AirPods 1 & 2</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b4f2cc63-d99b-477d-8dde-80df395f0823">            <a href="https://www.amazon.com/elago-AirPods-Classic-Silicone-Standing/dp/B0888BDZS2" data-model-name="Elago AW3 Silicone Case Compatible With AirPods Pro" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/Deg5vaAtAnPHSRicRchLFJ.jpg" alt="elago, Elago AW3 Silicone Case Compatible With AirPods Pro"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>elago</div>                                        <div class="featured__title">Elago AW3 Silicone Case Compatible With AirPods Pro</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a0642988-7fb0-4216-9a00-d2a07abe44df">            <a href="https://www.amazon.com/Spigen-Compatible-Generation-Inspired-Macintosh/dp/B0FTTDVKB5" data-model-name="Spigen for Airpods Pro 3 Case" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/qKCb28kxwyxexXHGVNopNK.jpg" alt="Spigen, Spigen for Airpods Pro 3 Case"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Spigen</div>                                        <div class="featured__title">Spigen for Airpods Pro 3 Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="4a928734-b260-4cf1-bd8d-b7e8ac5034dd">            <a href="https://www.amazon.com/elago-AirPods-Classic-Player-Pending/dp/B08B5VFDYP" data-model-name="Elago AW6 Case Compatible With AirPods Pro" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/2j5arqvdFrnNq9KFrF4BHL.jpg" alt="elago, Elago AW6 Case Compatible With AirPods Pro"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>elago</div>                                        <div class="featured__title">Elago AW6 Case Compatible With AirPods Pro</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><h3 class="article-body__section" id="section-retro-mac-accessories"><span>Retro Mac Accessories</span></h3><p>DBrand's retro skin collection lets you wrap your MacBook in designs inspired by the original beige Macintosh plastic, while I just love the look of RayCue's retro dock that sits on your desk pretending to be a Mac from 40 years ago.</p>        <div class="featured_product_block featured_block_hero" data-id="56129e63-27f2-497c-9d24-64edfda82733">            <a href="http://dbrand.com/tomsguide" data-model-name="Space Black (1984) Skin" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/wpvW2rFLHTAhbz9AskcwYM.jpg" alt="DBRAND, Space Black (1984) Skin"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>DBRAND</div>                                        <div class="featured__title">Space Black (1984) Skin</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="60a5ddad-c11d-464c-9b26-cc281184a476">            <a href="http://dbrand.com/tomsguide" data-model-name="Classic (1984) Skin" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/heL7cMf5brwNKZ4iAkTgEN.jpg" alt="DBRAND, Classic (1984) Skin"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>DBRAND</div>                                        <div class="featured__title">Classic (1984) Skin</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="32756db5-9cdc-4a7f-ac69-771a6e891fa5">            <a href="http://dbrand.com/tomsguide" data-model-name="Silver (1984) Skin" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/KTfhQn9xaZtAtnU7JFrCxN.jpg" alt="DBRAND, Silver (1984) Skin"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>DBRAND</div>                                        <div class="featured__title">Silver (1984) Skin</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="bd26f536-6bf1-429d-90a1-06602c21ad60">            <a href="http://dbrand.com/tomsguide" data-model-name="Indigo (1984) Skin" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/uzBPyHEEBvFdDLUuLCi4iP.jpg" alt="DBRAND, Indigo (1984) Skin"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>DBRAND</div>                                        <div class="featured__title">Indigo (1984) Skin</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="98515202-99d8-411e-b1db-99017e35f4b7">            <a href="http://dbrand.com/tomsguide" data-model-name="Blush (1984) Skin" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/QujTUzdYRrqd5SipapXVTQ.jpg" alt="DBRAND, Blush (1984) Skin"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>DBRAND</div>                                        <div class="featured__title">Blush (1984) Skin</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="cf1e3ba6-c161-4a79-8845-b9f4d0c7821e">            <a href="http://dbrand.com/tomsguide" data-model-name="Citrus (1984) Skin" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/FmAYBD84ChzcGg5iThpDJR.jpg" alt="DBRAND, Citrus (1984) Skin"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>DBRAND</div>                                        <div class="featured__title">Citrus (1984) Skin</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="203ba21d-b258-4693-8135-5f3a14f4c03c">            <a href="https://www.amazon.com/Spigen-Designed-Desktop-Prevention-Ventilation/dp/B0DNGTLRXG/" data-model-name="Spigen for Mac Mini M4/M4 Pro - Classic C1 Tangerine" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/F6VPtfKzmGtSiRXFu3PWhS.jpg" alt="Spigen, Spigen for Mac Mini M4/M4 Pro - Classic C1 Tangerine"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Spigen</div>                                        <div class="featured__title">Spigen for Mac Mini M4/M4 Pro - Classic C1 Tangerine</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="f6cf8d7b-8e16-4704-8f0e-082a05fb89e2">            <a href="https://www.amazon.com/Spigen-Designed-Desktop-Prevention-Ventilation/dp/B0DNGQ7BXN" data-model-name="Spigen for Mac Mini M4/M4 Pro - Classic C1 Bondi Blue" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/fiCJDEPuCEieuLnjWhKqbT.jpg" alt="Spigen, Spigen for Mac Mini M4/M4 Pro - Classic C1 Bondi Blue"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Spigen</div>                                        <div class="featured__title">Spigen for Mac Mini M4/M4 Pro - Classic C1 Bondi Blue</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="0b1ed48a-e321-41e9-b10c-a22a849913d8">            <a href="https://www.amazon.com/Wokyis-Station-Display-Enclosure-Earphone/dp/B0FPB67QBV" data-model-name="Wokyis M5 Retro Dock Station for Mac Mini M4" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/YB5fDY3viLtx6n4Pk8DBdU.jpg" alt="WOKYIS, Wokyis M5 Retro Dock Station for Mac Mini M4"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>WOKYIS</div>                                        <div class="featured__title">Wokyis M5 Retro Dock Station for Mac Mini M4</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="9a4d4f61-ab94-4259-a484-23f65de6d121">            <a href="https://www.amazon.com/RayCue-Docking-Station-Monitor-Ethernet/dp/B0D9Y14M5J/" data-model-name="Raycue 128k SE Docking Station" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.95%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/yLzd4JezvdsG9rQzWbDwdV.jpg" alt="RayCue, Raycue 128k SE Docking Station"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>RayCue</div>                                        <div class="featured__title">Raycue 128k SE Docking Station</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><p>Every accessory on this list lets you celebrate the old, while upgrading the new, and I absolutely can't get enough of this nostalgic aesthetic. So pick up a retro AirPods case, slap a rainbow logo on your MacBook, and enjoy the best of both eras. After all, it's not every day a tech company turns 50 — and it's even rarer that its original aesthetic still looks this good.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple turns 50: Why these deconstructed vintage iPhones are the ultimate way to celebrate ]]></title>
                                                                                                <dc:content><![CDATA[ <p>April 1st 2026, marks a massive milestone for Apple: The company's 50th birthday. From a garage in Los Altos to the most valuable company on the planet, Apple has spent half a century shaping how we live, work, and create.</p><p>One brand that wants to cherish the history of Apple's innovations over the years is Grid Studio, which is making some of the best Apple-themed display pieces I've ever seen.</p><p>Grid Studio takes old Apple products and repurposes them in beautiful frames that showcase the components of some of the world's most iconic tech devices. From the original iPhone to the famous MacBook Air Steve Jobs pulled out of an envelope, Grid Studio offers a unique way to celebrate the Cupertino company.</p><p>For Apple's 50th anniversary, I've pulled together my favorite Grid Studio Apple frames, so you can add some nostalgia to your home decor. Better yet, Grid is offering some pretty large discounts to commemorate such a momentous occasion, with some display pieces up to 40% off.</p><p>Think of this as the ultimate Apple birthday gift — for yourself. </p><h3 class="article-body__section" id="section-iphones-through-the-years"><span>iPhones through the years</span></h3>        <div class="featured_product_block featured_block_hero" data-id="45da4860-c33c-4787-8080-4b0370476cc5">            <a href="https://gridstudio.cc/products/iphone-1st-generation" data-model-name="iPhone 2G" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/B3UobgN68bLf2JhDCgSDsU.jpg" alt="GRID STUDIO, iPhone 2G"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>GRID STUDIO</div>                                        <div class="featured__title">iPhone 2G</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="45b05ade-c810-4741-a05e-3c431009efcd">            <a href="https://gridstudio.cc/products/grid%C2%AE-3gs-black-" data-model-name="iPhone 3GS" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/gDnZTPyBoSwoUpLmX5fCNX.jpg" alt="GRID STUDIO, iPhone 3GS"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>GRID STUDIO</div>                                        <div class="featured__title">iPhone 3GS</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="da19bb5d-038b-4c3a-bb04-4da77de96683">            <a href="https://gridstudio.cc/products/framed-iphone-4" data-model-name="iPhone 4" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/haVgUtKs4XrfzgFi8gFF4Z.jpg" alt="GRID STUDIO, iPhone 4"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>GRID STUDIO</div>                                        <div class="featured__title">iPhone 4</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="d82ab3f3-b5b2-4dba-b218-5fd9ef70d96d">            <a href="https://gridstudio.cc/products/grid%C2%AE4s" data-model-name="iPhone 4S" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/kW29DSLE7cJ39TW2UQwDMa.jpg" alt="GRID STUDIO, iPhone 4S"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>GRID STUDIO</div>                                        <div class="featured__title">iPhone 4S</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a9da87a5-e9c7-4ed9-8b72-48254782d8b4">            <a href="https://gridstudio.cc/products/grid%C2%AE-5" data-model-name="iPhone 5" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/LhZAXe5ZGh6rHbgHiHPvSb.jpg" alt="BRAND, Grid® 5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>GRID STUDIO</div>                                        <div class="featured__title">iPhone 5</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a074e2a3-7a32-44f7-a47a-dcfd08601298">            <a href="https://gridstudio.cc/products/iphone-5s" data-model-name="iPhone 5S" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/obaG4kbnBSBqDZANAMXSPc.jpg" alt="BRAND, Grid® 5s"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>GRID STUDIO</div>                                        <div class="featured__title">iPhone 5S</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="6a082e7f-1573-4ba2-9e41-9e2a310af7bd">            <a href="https://gridstudio.cc/products/grid%C2%AE-iphone-5c" data-model-name="iPhone 5C" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/bEMNCeLvJB6D6bxdwp3nKd.jpg" alt="GRID STUDIO, iPhone 5C"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>GRID STUDIO</div>                                        <div class="featured__title">iPhone 5C</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="863f9491-c5a9-4317-9a1a-78b48020635a">            <a href="https://gridstudio.cc/products/grid%C2%AE-6" data-model-name="iPhone 6" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/L7dnwXZkmzS2ZuhvnMADFe.jpg" alt="GRID STUDIO, iPhone 6"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>GRID STUDIO</div>                                        <div class="featured__title">iPhone 6</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="fca947cf-e886-4e71-9e0d-779807febc98">            <a href="https://gridstudio.cc/products/apple-iphone-x" data-model-name="iPhone X" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/7b3cmqtNGDKVjDDKYamXCf.jpg" alt="GRID STUDIO, iPhone X"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>GRID STUDIO</div>                                        <div class="featured__title">iPhone X</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><h3 class="article-body__section" id="section-ipads-macs-and-more"><span>iPads, Macs, and more</span></h3>        <div class="featured_product_block featured_block_hero" data-id="cc08b2e2-36ff-4237-88f4-a3523dbbc72b">            <a href="https://gridstudio.cc/products/grid%C2%AE-mini1" data-model-name="iPad Mini (1st Generation)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/rYGfdoNAicLpcb6X76J2Sh.jpg" alt="Grid Studio, iPad Mini (1st Generation)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Grid Studio</div>                                        <div class="featured__title">iPad Mini (1st Generation)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="f3024b3d-ad65-4f15-80c0-5167527d72cc">            <a href="https://gridstudio.cc/products/grid-macbook-air-1st-generation" data-model-name="MacBook Air (1st Generation)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/Wzf4LRUgjWk2PrSKGDBuHi.jpg" alt="GRID STUDIO, MacBook Air (1st Generation)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>GRID STUDIO</div>                                        <div class="featured__title">MacBook Air (1st Generation)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="c7ec4299-c658-40fc-89e3-bd18fb40429d">            <a href="https://gridstudio.cc/products/grid%C2%AE-ipod-touch" data-model-name="iPod Touch" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/qnrADL4ZfyUfT2pmoAJryi.jpg" alt="GRID STUDIO, iPod Touch"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>GRID STUDIO</div>                                        <div class="featured__title">iPod Touch</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="4af1281b-570d-40d3-bd76-2a45678bb3b1">            <a href="https://gridstudio.cc/products/apple-watch-series-0" data-model-name="Apple Watch (Series 0)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/ZGrnWQ9i6GA2g8V6fPNYwj.jpg" alt="GRID STUDIO, Apple Watch (Series 0)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>GRID STUDIO</div>                                        <div class="featured__title">Apple Watch (Series 0)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="d5c0d85b-9987-4827-bb51-d629d7e7add9">            <a href="https://gridstudio.cc/products/grid%C2%AE-m1-chip" data-model-name="M1 Chip" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/4tPffxho5YeVkSrGRhcAbk.jpg" alt="Grid Studio, M1 Chip"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Grid Studio</div>                                        <div class="featured__title">M1 Chip</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="e9eecaf0-ce94-40cf-8b44-68d982d36d6f">            <a href="https://gridstudio.cc/products/grid%C2%AE-ipod-classic-2nd-generation-" data-model-name="iPod Classic (2nd Generation)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/PMsYhZHErnFRDBeP8jR6bm.jpg" alt="GRID STUDIO, iPod Classic (2nd Generation)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>GRID STUDIO</div>                                        <div class="featured__title">iPod Classic (2nd Generation)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><h2 id="why-i-love-my-grid-studio-frame">Why I love my Grid Studio frame</h2><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="o2mcMxx5AxgBMmUewPHN2a" name="frame2" alt="iPhone 2G frame Grid Studio" src="https://cdn.mos.cms.futurecdn.net/o2mcMxx5AxgBMmUewPHN2a-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>Happy 50th, Apple. Here's to 50 more years of innovation. Whether you're treating yourself or buying a gift for the Apple fan in your life, Grid Studio makes excellent products that instantly upgrade your home decor.</p><p>I've owned an original iPad frame for over four years, and I love the way it looks in my office. I often look at the iPad and get nostalgic about a simpler time when teenage me saved up to buy one at launch.</p><p>The cool thing about Grid Studio frames is that they keep every element of the Apple product, which not only repurposes broken devices that would otherwise end up in landfill but also lets you see every component that, combined, made the device behind the glass.</p><p>For many of us now working in technology, the love for tech stemmed from Apple, and these Grid Studio frames are a thoughtful and tasteful way to celebrate the company without totally breaking the bank.</p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/apple-turns-50-why-these-deconstructed-vintage-iphones-are-the-ultimate-way-to-celebrate</link>
                                                                            <description>
                            <![CDATA[ It's Apple's 50th anniversary, so why not commemorate the occasion with one of these awesome nostalgic frames that capture the best of iPhone, iPad, and Mac? ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">LxCGFUCmbxP8CAXQxGzjV5</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/o2mcMxx5AxgBMmUewPHN2a-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 01 Apr 2026 08:47:44 +0000</pubDate>                                                                                                                                <updated>Wed, 01 Apr 2026 13:08:58 +0000</updated>
                                                                                                                                            <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[MacBooks]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Computing Peripherals]]></category>
                                                    <category><![CDATA[Tablets]]></category>
                                                    <category><![CDATA[Laptops]]></category>
                                                                                                <author><![CDATA[ john-anthony.disotto@futurenet.com (John-Anthony Disotto) ]]></author>                    <dc:creator><![CDATA[ John-Anthony Disotto ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/apUjevMoC6MzjfVN7GBCoi-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;John-Anthony Disotto is the Collections Editor at Tom&#039;s Guide, curating advice on the best products to spend your hard-earned cash on. An award-winning journalist and longtime Apple expert, he previously covered AI at TechRadar and served as How To Editor at iMore.&lt;/p&gt;&lt;p&gt;He used to work for Apple as a technician focused on iOS and iPhone repairs at the Genius Bar and has used the Apple ecosystem for over a decade. In his spare time, John-Anthony can be found watching any sport under the sun, from football to darts, taking the term &#039;Lego house&#039; far too literally as he runs out of space to display any more plastic bricks, or chilling on the couch with his French bulldog, Kermit. &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/o2mcMxx5AxgBMmUewPHN2a-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPhone 2G frame Grid Studio]]></media:description>                                                            <media:text><![CDATA[iPhone 2G frame Grid Studio]]></media:text>
                                <media:title type="plain"><![CDATA[iPhone 2G frame Grid Studio]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/o2mcMxx5AxgBMmUewPHN2a-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>April 1st 2026, marks a massive milestone for Apple: The company's 50th birthday. From a garage in Los Altos to the most valuable company on the planet, Apple has spent half a century shaping how we live, work, and create.</p><p>One brand that wants to cherish the history of Apple's innovations over the years is Grid Studio, which is making some of the best Apple-themed display pieces I've ever seen.</p><p>Grid Studio takes old Apple products and repurposes them in beautiful frames that showcase the components of some of the world's most iconic tech devices. From the original iPhone to the famous MacBook Air Steve Jobs pulled out of an envelope, Grid Studio offers a unique way to celebrate the Cupertino company.</p><p>For Apple's 50th anniversary, I've pulled together my favorite Grid Studio Apple frames, so you can add some nostalgia to your home decor. Better yet, Grid is offering some pretty large discounts to commemorate such a momentous occasion, with some display pieces up to 40% off.</p><p>Think of this as the ultimate Apple birthday gift — for yourself. </p><h3 class="article-body__section" id="section-iphones-through-the-years"><span>iPhones through the years</span></h3>        <div class="featured_product_block featured_block_hero" data-id="45da4860-c33c-4787-8080-4b0370476cc5">            <a href="https://gridstudio.cc/products/iphone-1st-generation" data-model-name="iPhone 2G" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/B3UobgN68bLf2JhDCgSDsU.jpg" alt="GRID STUDIO, iPhone 2G"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>GRID STUDIO</div>                                        <div class="featured__title">iPhone 2G</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="45b05ade-c810-4741-a05e-3c431009efcd">            <a href="https://gridstudio.cc/products/grid%C2%AE-3gs-black-" data-model-name="iPhone 3GS" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/gDnZTPyBoSwoUpLmX5fCNX.jpg" alt="GRID STUDIO, iPhone 3GS"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>GRID STUDIO</div>                                        <div class="featured__title">iPhone 3GS</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="da19bb5d-038b-4c3a-bb04-4da77de96683">            <a href="https://gridstudio.cc/products/framed-iphone-4" data-model-name="iPhone 4" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/haVgUtKs4XrfzgFi8gFF4Z.jpg" alt="GRID STUDIO, iPhone 4"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>GRID STUDIO</div>                                        <div class="featured__title">iPhone 4</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="d82ab3f3-b5b2-4dba-b218-5fd9ef70d96d">            <a href="https://gridstudio.cc/products/grid%C2%AE4s" data-model-name="iPhone 4S" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/kW29DSLE7cJ39TW2UQwDMa.jpg" alt="GRID STUDIO, iPhone 4S"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>GRID STUDIO</div>                                        <div class="featured__title">iPhone 4S</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a9da87a5-e9c7-4ed9-8b72-48254782d8b4">            <a href="https://gridstudio.cc/products/grid%C2%AE-5" data-model-name="iPhone 5" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/LhZAXe5ZGh6rHbgHiHPvSb.jpg" alt="BRAND, Grid® 5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>GRID STUDIO</div>                                        <div class="featured__title">iPhone 5</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a074e2a3-7a32-44f7-a47a-dcfd08601298">            <a href="https://gridstudio.cc/products/iphone-5s" data-model-name="iPhone 5S" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/obaG4kbnBSBqDZANAMXSPc.jpg" alt="BRAND, Grid® 5s"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>GRID STUDIO</div>                                        <div class="featured__title">iPhone 5S</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="6a082e7f-1573-4ba2-9e41-9e2a310af7bd">            <a href="https://gridstudio.cc/products/grid%C2%AE-iphone-5c" data-model-name="iPhone 5C" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/bEMNCeLvJB6D6bxdwp3nKd.jpg" alt="GRID STUDIO, iPhone 5C"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>GRID STUDIO</div>                                        <div class="featured__title">iPhone 5C</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="863f9491-c5a9-4317-9a1a-78b48020635a">            <a href="https://gridstudio.cc/products/grid%C2%AE-6" data-model-name="iPhone 6" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/L7dnwXZkmzS2ZuhvnMADFe.jpg" alt="GRID STUDIO, iPhone 6"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>GRID STUDIO</div>                                        <div class="featured__title">iPhone 6</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="fca947cf-e886-4e71-9e0d-779807febc98">            <a href="https://gridstudio.cc/products/apple-iphone-x" data-model-name="iPhone X" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/7b3cmqtNGDKVjDDKYamXCf.jpg" alt="GRID STUDIO, iPhone X"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>GRID STUDIO</div>                                        <div class="featured__title">iPhone X</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><h3 class="article-body__section" id="section-ipads-macs-and-more"><span>iPads, Macs, and more</span></h3>        <div class="featured_product_block featured_block_hero" data-id="cc08b2e2-36ff-4237-88f4-a3523dbbc72b">            <a href="https://gridstudio.cc/products/grid%C2%AE-mini1" data-model-name="iPad Mini (1st Generation)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/rYGfdoNAicLpcb6X76J2Sh.jpg" alt="Grid Studio, iPad Mini (1st Generation)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Grid Studio</div>                                        <div class="featured__title">iPad Mini (1st Generation)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="f3024b3d-ad65-4f15-80c0-5167527d72cc">            <a href="https://gridstudio.cc/products/grid-macbook-air-1st-generation" data-model-name="MacBook Air (1st Generation)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/Wzf4LRUgjWk2PrSKGDBuHi.jpg" alt="GRID STUDIO, MacBook Air (1st Generation)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>GRID STUDIO</div>                                        <div class="featured__title">MacBook Air (1st Generation)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="c7ec4299-c658-40fc-89e3-bd18fb40429d">            <a href="https://gridstudio.cc/products/grid%C2%AE-ipod-touch" data-model-name="iPod Touch" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/qnrADL4ZfyUfT2pmoAJryi.jpg" alt="GRID STUDIO, iPod Touch"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>GRID STUDIO</div>                                        <div class="featured__title">iPod Touch</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="4af1281b-570d-40d3-bd76-2a45678bb3b1">            <a href="https://gridstudio.cc/products/apple-watch-series-0" data-model-name="Apple Watch (Series 0)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/ZGrnWQ9i6GA2g8V6fPNYwj.jpg" alt="GRID STUDIO, Apple Watch (Series 0)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>GRID STUDIO</div>                                        <div class="featured__title">Apple Watch (Series 0)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="d5c0d85b-9987-4827-bb51-d629d7e7add9">            <a href="https://gridstudio.cc/products/grid%C2%AE-m1-chip" data-model-name="M1 Chip" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/4tPffxho5YeVkSrGRhcAbk.jpg" alt="Grid Studio, M1 Chip"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Grid Studio</div>                                        <div class="featured__title">M1 Chip</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="e9eecaf0-ce94-40cf-8b44-68d982d36d6f">            <a href="https://gridstudio.cc/products/grid%C2%AE-ipod-classic-2nd-generation-" data-model-name="iPod Classic (2nd Generation)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/PMsYhZHErnFRDBeP8jR6bm.jpg" alt="GRID STUDIO, iPod Classic (2nd Generation)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>GRID STUDIO</div>                                        <div class="featured__title">iPod Classic (2nd Generation)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><h2 id="why-i-love-my-grid-studio-frame">Why I love my Grid Studio frame</h2><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="o2mcMxx5AxgBMmUewPHN2a" name="frame2" alt="iPhone 2G frame Grid Studio" src="https://cdn.mos.cms.futurecdn.net/o2mcMxx5AxgBMmUewPHN2a-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>Happy 50th, Apple. Here's to 50 more years of innovation. Whether you're treating yourself or buying a gift for the Apple fan in your life, Grid Studio makes excellent products that instantly upgrade your home decor.</p><p>I've owned an original iPad frame for over four years, and I love the way it looks in my office. I often look at the iPad and get nostalgic about a simpler time when teenage me saved up to buy one at launch.</p><p>The cool thing about Grid Studio frames is that they keep every element of the Apple product, which not only repurposes broken devices that would otherwise end up in landfill but also lets you see every component that, combined, made the device behind the glass.</p><p>For many of us now working in technology, the love for tech stemmed from Apple, and these Grid Studio frames are a thoughtful and tasteful way to celebrate the company without totally breaking the bank.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple’s iPad Air Magic Keyboard Folio is way too expensive, so I tried these 8 cheaper alternatives to see which is best ]]></title>
                                                                                                <dc:content><![CDATA[ <p>If you want to turn your iPad Air into a productivity machine, you’re probably going to need a keyboard case. When I <a href="https://www.tomsguide.com/computing/ipads/apple-ipad-air-m4-review-small-tweaks-to-the-gold-standard">reviewed the iPad Air M4</a>, Apple sent along its Magic Keyboard Case for me to test too, and while it’s a great accessory — I was able to type nearly as fast as my regular keyboard — I couldn’t get over the fact that it costs $269, nearly half as much as the iPad Air itself. And, Apple’s keyboard lacks backlighting, making it much harder to use in darker conditions.</p><p>Fortunately, there are dozens of companies who make iPad Air keyboard cases that cost far less than Apple’s, so I rounded up eight models to see which is the best accessory for your tablet. On each, I used the Speed Typer iPad app, and timed myself three times to get an average score for both speed and accuracy. </p><p>I rated each on three criteria (design, price and typing speed) on a scale of 1 to 10 (10 being the best), to see which can really turn your iPad into a laptop replacement. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-W21B4e"></div>                            </div>                            <script src="https://kwizly.com/embed/W21B4e.js" async></script><h2 id="belkin-pro-keyboard-case-with-magnetic-stand">Belkin Pro Keyboard Case with Magnetic Stand</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/RnGyDmGk4A3LxPnY8n9wv3-1920-80.jpg" alt="Belkin iPad Air M4 Keyboard Case" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/dRiz6RcjECHpXESbjjYJvm-1920-80.jpg" alt="Belkin iPad Air M4 Keyboard Case" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/EYvmHF7Ht2YREHERSast99-1920-80.jpg" alt="Belkin iPad Air M4 Keyboard Case" /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>Like Logitech and Zagg, Belkin’s case was one of the more expensive models I tested (but still about $100 less than Apple’s). I liked its soft-touch cover and overall look and feel; at 1 pound 7 ounces, it fell in the middle of the pack weight-wise.</p><p>The Belkin case has five rows of keys, so you need to press the function button to access iPad-specific controls. There’s only one color for the backlighting, but you can adjust its brightness via a dedicated button to the left of the arrow keys. The backlighting was nice and even, though not as refined as Logitech’s. </p><p>On the typing test, I averaged an excellent 61 words per minute, with a 99 percent accuracy rate — the best among all the cases I tested, Apple included. However, one thing I thought was a plus — the extra large touchpad — proved to be a bit of a detriment, as my hands brushed against it, frequently causing the cursor to jump and open windows by accident. I had to restart the typing test several times because I would inadvertently open another window by mistake.</p><p><strong>Price: 1</strong><br><strong>Design: 7</strong><br><strong>Typing speed: 10</strong><br><strong>Total score: 18</strong></p><div data-widget-type="review" data-model-name="Belkin Pro Keyboard Case with Magnetic Stand for iPad Air 10.9" and iPad Pro 11""></div><h2 id="dancesoul-keyboard-case-for-ipad-air-11-inch">Dancesoul Keyboard Case for iPad Air 11 inch</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/aPjK8jUE7RoDn3uABcuYiF-1920-80.jpg" alt="Dancesoul iPad Air M4 Keyboard Case" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/GtG8LxV8L4e36DRinXpuYH-1920-80.jpg" alt="Dancesoul iPad Air M4 Keyboard Case" /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>This is one of dozens of no-name Chinese brands selling iPad accessories; while the Amazon listing says “Dancesoul,” the spacebar and enclosed materials are all branded Wiwu. Still, the price is right, the build quality is sturdy, and the exterior of the case has a nice soft-touch finish. Outwardly, this keyboard case most closely mimics Apple’s own case, right down to the oval-shaped hinge and embedded USB-C port.</p><p>I also like that there’s a dedicated sixth row of keys for iPad-specific controls. The case is somewhat heavy at 1.2 pounds, but that’s right in the middle. The keyboard backlighting can be switched between seven colors. However, it’s not the brightest. Instead of a dedicated on/off switch, like on some of the other cases I tested, this one turns on automatically when you open the lid. It’s a nice feature to have.</p><p>Sadly, I averaged just 50 words per minute, with a 96 percent accuracy rate, the lowest score among the cases I tested. </p><p><strong>Price: 7</strong><br><strong>Design: 5</strong><br><strong>Typing speed: 1</strong><br><strong>Total score: 13</strong></p><div data-widget-type="review" data-model-name="Dancesoul Keyboard Case for iPad Air 11 inch"></div><h2 id="esr-for-ipad-air-11-inch-case-with-keyboard">ESR for iPad Air 11 Inch Case with Keyboard</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/Hc3oa6k85MPgb5rTFfqniM-1920-80.jpg" alt="ESR iPad Air M4 Keyboard Case" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/YjPhWZmURjHZp4QuJs8kRP-1920-80.jpg" alt="ESR iPad Air M4 Keyboard Case" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/mjbtt9qgmgEjgXrsPHyn5R-1920-80.jpg" alt="ESR iPad Air M4 Keyboard Case" /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>ESR’s case has a unique, and really clever feature: the upper portion of its case can be removed from the keyboard section, and rotated to either portrait or landscape mode. The case also has a small slot to store a stylus, another nicety. The detachable section was very light, so it won’t offer the protection of a Zagg case, but won’t get in the way, either. </p><p>The exterior of the ESR case has a leather-like feel that’s very close to Apple’s own case, and the keyboard deck itself also has a nice soft-touch finish. At $112, this case fell in the middle of the ones I tested - it was neither the cheapest, nor the most expensive. </p><p>The backlit keyboard has five rows of keys; it took me a few minutes to get the feel for the keyboard, but I eventually averaged 61 words per minute with a 98 percent accuracy rate, which tied Belkin for the fastest overall score. </p><p><strong>Price: 6</strong><br><strong>Design: 9</strong><br><strong>Typing speed: 10</strong><br><strong>Total score: 25</strong></p><div data-widget-type="review" data-model-name="ESR for iPad Air 11 Inch Case with Keyboard"></div><h2 id="logitech-combo-touch">Logitech Combo touch</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/ki3JUVgbxCnFjMVKfk7yvU-1920-80.jpg" alt="Logitech iPad Air M4 Keyboard Case" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/DNDwHe4b5EasRPPNv4hDNX-1920-80.jpg" alt="Logitech iPad Air M4 Keyboard Case" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/vgwpB2aHwpcQgPkSqSqpWZ-1920-80.jpg" alt="Logitech iPad Air M4 Keyboard Case" /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>At $169, this is one of the most expensive options on the market (though still $100 less than Apple’s own case). Logitech’s case comes in two sections, an upper part that encases the iPad, and the keyboard. The two halves connect magnetically. It’s a neat idea — it’s easy to simply leave the keyboard behind — but it has one main drawback. In order to prop the iPad up, you have to extend a stand out at the back of the case, which takes up a lot more space than the other cases, which have stiff hinges. I couldn’t see myself using this easily on a plane, for instance. </p><p>Still, Logitech makes good use of all that room, adding a sixth row of iPad keys and the most spacious touchpad I’ve seen on a keyboard case. It’s even larger than the one on the official Apple case. However, I found that I was more prone to accidentally brushing part of my left hand against it, which made the cursor jump around. </p><p>It’s also the only keyboard that has an app - once installed, it updated the keyboard’s firmware. But, unlike Logitech’s gaming keyboards, there’s no customization options, so the app is kind of useless otherwise. </p><p>This keyboard has the nicest backlighting of the group — it’s bright and even — but the keys had the least amount of travel of the bunch. I averaged 56 words per minute and 98% accuracy, which was in the middle of the pack. </p><p><strong>Price: 1</strong><br><strong>Design: 8</strong><br><strong>Typing speed: 5</strong><br><strong>Total score: 15</strong></p><div data-widget-type="review" data-model-name="Logitech Combo Touch iPad Air (4th"></div><h2 id="runelk-keyboard">RuneLK keyboard</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/5s43ifekE7s4B6WUK4Foef-1920-80.jpg" alt="runeLK iPad Air M4 Keyboard Case" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/u66nxAj498HruPqrVcgHVh-1920-80.jpg" alt="runeLK iPad Air M4 Keyboard Case" /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>The RuneLK case looks like it came off the same assembly line as Belkin’s model; the two are nearly identical, save for a few minor things like branding and the font on the keys. It has a nice soft-touch exterior and a circular hinge that lets you tilt the iPad back about 130 degrees, similar to the other cases. Unlike others, it only has five rows of keys, so iPad functions, like adjusting the brightness, are part of the number row. </p><p>It only has one color backlighting — white — but there’s a dedicated key for adjusting the brightness, which I liked (other keyboards require you to press Function plus another button). The backlighting was nice and bright, too. </p><p>On the typing test, I averaged 56 words per minute with a 97 percent accuracy rate, which ranks in the middle of the pack. This case was also one of the heavier models at 1.7 pounds, but didn’t feel too weighty.</p><p><strong>Price: 7</strong><br><strong>Design: 7</strong><br><strong>Typing speed: 5</strong><br><strong>Total score: 19</strong></p><div data-widget-type="review" data-model-name="Runelk Keyboard Case for iPad Air 11-inch"></div><h2 id="tolpeiksoy-magnetic-keyboard-case-with-stylus-pen-for-ipad-air-11-inch">Tolpeiksoy Magnetic Keyboard Case with Stylus Pen for iPad Air 11-inch</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/MmY86gEdr8eijAoEAoxrcm-1920-80.jpg" alt="Tolpaiksoy iPad Air M4 Keyboard Case" /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>Of the keyboard cases I tested, this is the only one that also came with a stylus — though there’s no loop to connect it to the keyboard, a strange oversight. Still, that’s another $80 you won’t have to spend buying the Apple Pencil. And, the company also includes a membrane cover for the keyboard to keep it clean. However, this was also the heaviest case I tested, at 1 pound, 8.7 ounces.</p><p>This case has a nice faux-leather type finish on the outside, one of the more pleasing ones I felt. Instead of it being wake-to-open, it has an on/off switch, but there’s no dedicated row of iPad keys - they’re added as functions with the number row.</p><p>You can choose between seven colors for the backlighting, but I found it a bit distracting, owing mainly to the fact that the keys were white, so the light bled through; I found that red turned up the best. I only averaged 51 words per minute, with an accuracy rate of 96% — the second-lowest among the cases I tested. Curiously, I had the greatest variation in speeds, going from a low of 43 wpm to a high of 62 wpm. </p><p><strong>Price: 3</strong><br><strong>Design: 5</strong><br><strong>Typing speed: 2</strong><br><strong>Total score: 10</strong></p><div data-widget-type="review" data-model-name="Tolpeiksoy Magnetic Keyboard Case with Stylus Pen for iPad Air 11-inch"></div><h2 id="typecase-touch-keyboard-case-for-ipad-air">typecase Touch Keyboard Case for iPad Air </h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/ZsTVDqK6hsWDTZycaAcM84-1920-80.jpg" alt="Typecase iPad Air M4 Keyboard Case" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/YfgkmPYZoVsiUXXugtC7V6-1920-80.jpg" alt="Typecase iPad Air M4 Keyboard Case" /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>While all of the keyboard cases I tested let you use your iPad to type, they all require you to remove the iPad if you want to use it as a standalone tablet. Typecase’s unique swivel design lets you rotate the Air in the case and fold it flat against the keyboard, which is pretty clever. And, there's even a holder for a stylus, something you don't get with a lot of these cases.</p><p>However, the entire thing is plasticky — it was the cheapest-feeling of the group — and there’s a bit of flex in the keyboard itself. Considering its design, I was expecting this case to weigh the most of the group, but it was about average, tipping the scales at 1.3 pounds.</p><p>I like that the keyboard has a separate sixth row for iPad controls. The keyboard’s backlight color can be changed between 11 colors or just a plain white, and you can have it automatically cycle between the colors, as well as adjust the brightness. The backlighting was even and bright, one of the best from the group. Using the Speed Typer test, I averaged 58 words per minute with a 99 percent accuracy rate, which was one of my better performances of the group. </p><p><strong>Price: 10</strong><br><strong>Design: 6</strong><br><strong>Typing speed: 8 </strong><br><strong>Total score: 24</strong></p><div data-widget-type="review" data-model-name="Typecase Touch iPad Air Case"></div><h2 id="zagg-pro-keys-connect">Zagg Pro Keys Connect</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/Vb728oZSCzEPVZXn3zQe8j-1920-80.jpg" alt="Zagg iPad Air M4 Keyboard Case" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/AyN38mkUUUiimDeRCDTy8m-1920-80.jpg" alt="Zagg iPad Air M4 Keyboard Case" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/K2Ft7Q7qfYharBMKcSWbSo-1920-80.jpg" alt="Zagg iPad Air M4 Keyboard Case" /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>Zagg’s case was the heaviest of the bunch I tested, coming in at 1.7 pounds. However, that’s because Zagg’s case is rated for a 6.6-foot drop protection, so this could be the model for those who are clumsier.</p><p>Like the Logitech case, you can detach the keyboard. The two halves connect magnetically, but there’s one extra element to the Zagg case that makes it less convenient: you have to connect a USB-C plug into the iPad itself to power the case. Logitech makes things simpler by using the three metal contact points on the rear of the iPad itself.</p><p>Also like Logitech’s case, Zagg’s uses a rear kickstand to prop itself up, which takes up more desk space than the other models in this roundup. I do like, though, that there’s a small clip on the front where you can attach a stylus.</p><p>While the backlit keyboard and touchpad are very spacious, the keys themselves felt small and too smooth for my liking; my fingers often slipped, and as a result, I got a fairly middling score on the typing test, averaging 53 words per minute with a 96% accuracy rate. </p><p><strong>Price: 2</strong><br><strong>Design: 6</strong><br><strong>Typing speed: 5</strong><br><strong>Total score:  13</strong></p><div data-widget-type="review" data-model-name="Zagg Pro Keys Connect Tablet Keyboard Case"></div><h2 id="scorecard">Scorecard</h2><div ><table><thead><tr><th class="firstcol empty" ></th><th  ><p><strong>Price</strong></p></th><th  ><p><strong>Overall score</strong></p></th><th  ><p><strong>Typing speed</strong></p></th><th  ><p><strong>Accuracy</strong></p></th><th  ><p><strong>Weight</strong></p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>iPad Air Magic Keyboard Folio</strong></p></td><td  ><p>$269</p></td><td  ><p>n/a</p></td><td  ><p>58</p></td><td  ><p>99</p></td><td  ><p>1 pound 5.8 ounces</p></td></tr><tr><td class="firstcol " ><p><strong>Belkin Pro Keyboard Case </strong></p></td><td  ><p>$166</p></td><td  ><p>18</p></td><td  ><p>61</p></td><td  ><p>99</p></td><td  ><p>1 pound 7 ounces</p></td></tr><tr><td class="firstcol " ><p><strong>Dancesoul Keyboard Case</strong></p></td><td  ><p>$105</p></td><td  ><p>13</p></td><td  ><p>50</p></td><td  ><p>96</p></td><td  ><p>1 pound 5.2 ounces</p></td></tr><tr><td class="firstcol " ><p><strong>ESR for iPad Air 11 Inch Case with Keyboard</strong></p><p><br></p></td><td  ><p>$112</p></td><td  ><p>25</p></td><td  ><p>61</p></td><td  ><p>98</p></td><td  ><p>1 pound 12.8 ounces</p></td></tr><tr><td class="firstcol " ><p><strong>Logitech Combo touch</strong></p></td><td  ><p>$169</p></td><td  ><p>15</p></td><td  ><p>56</p></td><td  ><p>98</p></td><td  ><p>1 pound 1.5 ounces</p></td></tr><tr><td class="firstcol " ><p><strong>RuneLK keyboard</strong></p></td><td  ><p>$85</p></td><td  ><p>19</p></td><td  ><p>56</p></td><td  ><p>97</p></td><td  ><p>1 pound 6.3 ounces</p></td></tr><tr><td class="firstcol " ><p><strong>Tolpeiksoy Magnetic Keyboard Case</strong></p></td><td  ><p>$115</p></td><td  ><p>10</p></td><td  ><p>51</p></td><td  ><p>96</p></td><td  ><p>1 pound 8.7 ounces</p></td></tr><tr><td class="firstcol " ><p><strong>typecase Touch Keyboard Case</strong></p></td><td  ><p>$64</p></td><td  ><p>24</p></td><td  ><p>58</p></td><td  ><p>99</p></td><td  ><p>1 pound 6.5 ounces</p></td></tr><tr><td class="firstcol " ><p><strong>Zagg Pro Keys Connect </strong></p></td><td  ><p>$139</p></td><td  ><p>13</p></td><td  ><p>53</p></td><td  ><p>96</p></td><td  ><p>1 pound 10.3 ounces</p></td></tr></tbody></table></div><h2 id="bottom-line-2">Bottom line</h2><p>Overall, the ESR case was my favorite among the <a href="https://www.tomsguide.com/best-picks/best-ipad-cases">iPad Air cases</a> I tested, scoring 25 out of a possible 30 points. While it wasn’t the least expensive model, nor was it the priciest, and I liked the fact that it not only had a slot for a stylus, but also let me use the Air in both landscape and portrait mode. </p><p>If you’re looking for a budget model, the typecase tied the ESR for overall points; its design isn’t as refined, but it was still reasonably light, and let me swivel the tablet around a full 360 degrees. And, I notched my second-highest typing score. The fact that it costs less than $70 makes it even more appealing.</p><p>If you’re looking for durability, Zagg’s is the best option, though I wasn’t enamored with the design of its keys, nor how the iPad connected to the case itself. </p><p>While the iPad Air might not be the cheap productivity machine that is the MacBook Neo, you can still use it to get work done — and you don’t have to pay Apple’s prices to do so.</p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/ipads/apples-ipad-air-magic-keyboard-folio-is-way-too-expensive-so-i-tried-these-8-cheaper-alternatives-to-see-which-is-best</link>
                                                                            <description>
                            <![CDATA[ I tested eight keyboard cases for the iPad Air M4 to see which was the best alternative to Apple's Magic Keyboard Folio. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">9heYeNSwtT6RzFMYt7TpiB</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/w3URHX5aSzkFyeCHPyJoNZ-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 28 Mar 2026 09:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[Tablets]]></category>
                                                    <category><![CDATA[Computing Peripherals]]></category>
                                                                                                <author><![CDATA[ mike.prospero@futurenet.com (Mike Prospero) ]]></author>                    <dc:creator><![CDATA[ Mike Prospero ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/6ZM8mX4UwccqDJTh9gLPqV-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Michael A. Prospero is the U.S. Editor-in-Chief for Tom’s Guide. He oversees all evergreen content and oversees the Homes, Smart Home, and Fitness/Wearables categories for the site. In his spare time, he also tests out the latest drones, electric scooters, and smart home gadgets, such as video doorbells. Before his tenure at Tom&#039;s Guide, he was the Reviews Editor for Laptop Magazine, a reporter at Fast Company, the Times of Trenton, and, many eons back, an intern at George magazine. He received his undergraduate degree from Boston College, where he worked on the campus newspaper The Heights, and then attended the Columbia University school of Journalism. When he’s not testing out the latest running watch, electric scooter, or skiing or training for a marathon, he’s probably using the latest sous vide machine, smoker, or pizza oven, to the delight — or chagrin — of his family.&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/w3URHX5aSzkFyeCHPyJoNZ-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPad Air M4 Keyboard Cases]]></media:description>                                                            <media:text><![CDATA[iPad Air M4 Keyboard Cases]]></media:text>
                                <media:title type="plain"><![CDATA[iPad Air M4 Keyboard Cases]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/w3URHX5aSzkFyeCHPyJoNZ-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>If you want to turn your iPad Air into a productivity machine, you’re probably going to need a keyboard case. When I <a href="https://www.tomsguide.com/computing/ipads/apple-ipad-air-m4-review-small-tweaks-to-the-gold-standard">reviewed the iPad Air M4</a>, Apple sent along its Magic Keyboard Case for me to test too, and while it’s a great accessory — I was able to type nearly as fast as my regular keyboard — I couldn’t get over the fact that it costs $269, nearly half as much as the iPad Air itself. And, Apple’s keyboard lacks backlighting, making it much harder to use in darker conditions.</p><p>Fortunately, there are dozens of companies who make iPad Air keyboard cases that cost far less than Apple’s, so I rounded up eight models to see which is the best accessory for your tablet. On each, I used the Speed Typer iPad app, and timed myself three times to get an average score for both speed and accuracy. </p><p>I rated each on three criteria (design, price and typing speed) on a scale of 1 to 10 (10 being the best), to see which can really turn your iPad into a laptop replacement. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-W21B4e"></div>                            </div>                            <script src="https://kwizly.com/embed/W21B4e.js" async></script><h2 id="belkin-pro-keyboard-case-with-magnetic-stand">Belkin Pro Keyboard Case with Magnetic Stand</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/RnGyDmGk4A3LxPnY8n9wv3-1920-80.jpg" alt="Belkin iPad Air M4 Keyboard Case" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/dRiz6RcjECHpXESbjjYJvm-1920-80.jpg" alt="Belkin iPad Air M4 Keyboard Case" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/EYvmHF7Ht2YREHERSast99-1920-80.jpg" alt="Belkin iPad Air M4 Keyboard Case" /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>Like Logitech and Zagg, Belkin’s case was one of the more expensive models I tested (but still about $100 less than Apple’s). I liked its soft-touch cover and overall look and feel; at 1 pound 7 ounces, it fell in the middle of the pack weight-wise.</p><p>The Belkin case has five rows of keys, so you need to press the function button to access iPad-specific controls. There’s only one color for the backlighting, but you can adjust its brightness via a dedicated button to the left of the arrow keys. The backlighting was nice and even, though not as refined as Logitech’s. </p><p>On the typing test, I averaged an excellent 61 words per minute, with a 99 percent accuracy rate — the best among all the cases I tested, Apple included. However, one thing I thought was a plus — the extra large touchpad — proved to be a bit of a detriment, as my hands brushed against it, frequently causing the cursor to jump and open windows by accident. I had to restart the typing test several times because I would inadvertently open another window by mistake.</p><p><strong>Price: 1</strong><br><strong>Design: 7</strong><br><strong>Typing speed: 10</strong><br><strong>Total score: 18</strong></p><div data-widget-type="review" data-model-name="Belkin Pro Keyboard Case with Magnetic Stand for iPad Air 10.9" and iPad Pro 11""></div><h2 id="dancesoul-keyboard-case-for-ipad-air-11-inch">Dancesoul Keyboard Case for iPad Air 11 inch</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/aPjK8jUE7RoDn3uABcuYiF-1920-80.jpg" alt="Dancesoul iPad Air M4 Keyboard Case" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/GtG8LxV8L4e36DRinXpuYH-1920-80.jpg" alt="Dancesoul iPad Air M4 Keyboard Case" /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>This is one of dozens of no-name Chinese brands selling iPad accessories; while the Amazon listing says “Dancesoul,” the spacebar and enclosed materials are all branded Wiwu. Still, the price is right, the build quality is sturdy, and the exterior of the case has a nice soft-touch finish. Outwardly, this keyboard case most closely mimics Apple’s own case, right down to the oval-shaped hinge and embedded USB-C port.</p><p>I also like that there’s a dedicated sixth row of keys for iPad-specific controls. The case is somewhat heavy at 1.2 pounds, but that’s right in the middle. The keyboard backlighting can be switched between seven colors. However, it’s not the brightest. Instead of a dedicated on/off switch, like on some of the other cases I tested, this one turns on automatically when you open the lid. It’s a nice feature to have.</p><p>Sadly, I averaged just 50 words per minute, with a 96 percent accuracy rate, the lowest score among the cases I tested. </p><p><strong>Price: 7</strong><br><strong>Design: 5</strong><br><strong>Typing speed: 1</strong><br><strong>Total score: 13</strong></p><div data-widget-type="review" data-model-name="Dancesoul Keyboard Case for iPad Air 11 inch"></div><h2 id="esr-for-ipad-air-11-inch-case-with-keyboard">ESR for iPad Air 11 Inch Case with Keyboard</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/Hc3oa6k85MPgb5rTFfqniM-1920-80.jpg" alt="ESR iPad Air M4 Keyboard Case" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/YjPhWZmURjHZp4QuJs8kRP-1920-80.jpg" alt="ESR iPad Air M4 Keyboard Case" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/mjbtt9qgmgEjgXrsPHyn5R-1920-80.jpg" alt="ESR iPad Air M4 Keyboard Case" /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>ESR’s case has a unique, and really clever feature: the upper portion of its case can be removed from the keyboard section, and rotated to either portrait or landscape mode. The case also has a small slot to store a stylus, another nicety. The detachable section was very light, so it won’t offer the protection of a Zagg case, but won’t get in the way, either. </p><p>The exterior of the ESR case has a leather-like feel that’s very close to Apple’s own case, and the keyboard deck itself also has a nice soft-touch finish. At $112, this case fell in the middle of the ones I tested - it was neither the cheapest, nor the most expensive. </p><p>The backlit keyboard has five rows of keys; it took me a few minutes to get the feel for the keyboard, but I eventually averaged 61 words per minute with a 98 percent accuracy rate, which tied Belkin for the fastest overall score. </p><p><strong>Price: 6</strong><br><strong>Design: 9</strong><br><strong>Typing speed: 10</strong><br><strong>Total score: 25</strong></p><div data-widget-type="review" data-model-name="ESR for iPad Air 11 Inch Case with Keyboard"></div><h2 id="logitech-combo-touch">Logitech Combo touch</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/ki3JUVgbxCnFjMVKfk7yvU-1920-80.jpg" alt="Logitech iPad Air M4 Keyboard Case" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/DNDwHe4b5EasRPPNv4hDNX-1920-80.jpg" alt="Logitech iPad Air M4 Keyboard Case" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/vgwpB2aHwpcQgPkSqSqpWZ-1920-80.jpg" alt="Logitech iPad Air M4 Keyboard Case" /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>At $169, this is one of the most expensive options on the market (though still $100 less than Apple’s own case). Logitech’s case comes in two sections, an upper part that encases the iPad, and the keyboard. The two halves connect magnetically. It’s a neat idea — it’s easy to simply leave the keyboard behind — but it has one main drawback. In order to prop the iPad up, you have to extend a stand out at the back of the case, which takes up a lot more space than the other cases, which have stiff hinges. I couldn’t see myself using this easily on a plane, for instance. </p><p>Still, Logitech makes good use of all that room, adding a sixth row of iPad keys and the most spacious touchpad I’ve seen on a keyboard case. It’s even larger than the one on the official Apple case. However, I found that I was more prone to accidentally brushing part of my left hand against it, which made the cursor jump around. </p><p>It’s also the only keyboard that has an app - once installed, it updated the keyboard’s firmware. But, unlike Logitech’s gaming keyboards, there’s no customization options, so the app is kind of useless otherwise. </p><p>This keyboard has the nicest backlighting of the group — it’s bright and even — but the keys had the least amount of travel of the bunch. I averaged 56 words per minute and 98% accuracy, which was in the middle of the pack. </p><p><strong>Price: 1</strong><br><strong>Design: 8</strong><br><strong>Typing speed: 5</strong><br><strong>Total score: 15</strong></p><div data-widget-type="review" data-model-name="Logitech Combo Touch iPad Air (4th"></div><h2 id="runelk-keyboard">RuneLK keyboard</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/5s43ifekE7s4B6WUK4Foef-1920-80.jpg" alt="runeLK iPad Air M4 Keyboard Case" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/u66nxAj498HruPqrVcgHVh-1920-80.jpg" alt="runeLK iPad Air M4 Keyboard Case" /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>The RuneLK case looks like it came off the same assembly line as Belkin’s model; the two are nearly identical, save for a few minor things like branding and the font on the keys. It has a nice soft-touch exterior and a circular hinge that lets you tilt the iPad back about 130 degrees, similar to the other cases. Unlike others, it only has five rows of keys, so iPad functions, like adjusting the brightness, are part of the number row. </p><p>It only has one color backlighting — white — but there’s a dedicated key for adjusting the brightness, which I liked (other keyboards require you to press Function plus another button). The backlighting was nice and bright, too. </p><p>On the typing test, I averaged 56 words per minute with a 97 percent accuracy rate, which ranks in the middle of the pack. This case was also one of the heavier models at 1.7 pounds, but didn’t feel too weighty.</p><p><strong>Price: 7</strong><br><strong>Design: 7</strong><br><strong>Typing speed: 5</strong><br><strong>Total score: 19</strong></p><div data-widget-type="review" data-model-name="Runelk Keyboard Case for iPad Air 11-inch"></div><h2 id="tolpeiksoy-magnetic-keyboard-case-with-stylus-pen-for-ipad-air-11-inch">Tolpeiksoy Magnetic Keyboard Case with Stylus Pen for iPad Air 11-inch</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/MmY86gEdr8eijAoEAoxrcm-1920-80.jpg" alt="Tolpaiksoy iPad Air M4 Keyboard Case" /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>Of the keyboard cases I tested, this is the only one that also came with a stylus — though there’s no loop to connect it to the keyboard, a strange oversight. Still, that’s another $80 you won’t have to spend buying the Apple Pencil. And, the company also includes a membrane cover for the keyboard to keep it clean. However, this was also the heaviest case I tested, at 1 pound, 8.7 ounces.</p><p>This case has a nice faux-leather type finish on the outside, one of the more pleasing ones I felt. Instead of it being wake-to-open, it has an on/off switch, but there’s no dedicated row of iPad keys - they’re added as functions with the number row.</p><p>You can choose between seven colors for the backlighting, but I found it a bit distracting, owing mainly to the fact that the keys were white, so the light bled through; I found that red turned up the best. I only averaged 51 words per minute, with an accuracy rate of 96% — the second-lowest among the cases I tested. Curiously, I had the greatest variation in speeds, going from a low of 43 wpm to a high of 62 wpm. </p><p><strong>Price: 3</strong><br><strong>Design: 5</strong><br><strong>Typing speed: 2</strong><br><strong>Total score: 10</strong></p><div data-widget-type="review" data-model-name="Tolpeiksoy Magnetic Keyboard Case with Stylus Pen for iPad Air 11-inch"></div><h2 id="typecase-touch-keyboard-case-for-ipad-air">typecase Touch Keyboard Case for iPad Air </h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/ZsTVDqK6hsWDTZycaAcM84-1920-80.jpg" alt="Typecase iPad Air M4 Keyboard Case" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/YfgkmPYZoVsiUXXugtC7V6-1920-80.jpg" alt="Typecase iPad Air M4 Keyboard Case" /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>While all of the keyboard cases I tested let you use your iPad to type, they all require you to remove the iPad if you want to use it as a standalone tablet. Typecase’s unique swivel design lets you rotate the Air in the case and fold it flat against the keyboard, which is pretty clever. And, there's even a holder for a stylus, something you don't get with a lot of these cases.</p><p>However, the entire thing is plasticky — it was the cheapest-feeling of the group — and there’s a bit of flex in the keyboard itself. Considering its design, I was expecting this case to weigh the most of the group, but it was about average, tipping the scales at 1.3 pounds.</p><p>I like that the keyboard has a separate sixth row for iPad controls. The keyboard’s backlight color can be changed between 11 colors or just a plain white, and you can have it automatically cycle between the colors, as well as adjust the brightness. The backlighting was even and bright, one of the best from the group. Using the Speed Typer test, I averaged 58 words per minute with a 99 percent accuracy rate, which was one of my better performances of the group. </p><p><strong>Price: 10</strong><br><strong>Design: 6</strong><br><strong>Typing speed: 8 </strong><br><strong>Total score: 24</strong></p><div data-widget-type="review" data-model-name="Typecase Touch iPad Air Case"></div><h2 id="zagg-pro-keys-connect">Zagg Pro Keys Connect</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/Vb728oZSCzEPVZXn3zQe8j-1920-80.jpg" alt="Zagg iPad Air M4 Keyboard Case" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/AyN38mkUUUiimDeRCDTy8m-1920-80.jpg" alt="Zagg iPad Air M4 Keyboard Case" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/K2Ft7Q7qfYharBMKcSWbSo-1920-80.jpg" alt="Zagg iPad Air M4 Keyboard Case" /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>Zagg’s case was the heaviest of the bunch I tested, coming in at 1.7 pounds. However, that’s because Zagg’s case is rated for a 6.6-foot drop protection, so this could be the model for those who are clumsier.</p><p>Like the Logitech case, you can detach the keyboard. The two halves connect magnetically, but there’s one extra element to the Zagg case that makes it less convenient: you have to connect a USB-C plug into the iPad itself to power the case. Logitech makes things simpler by using the three metal contact points on the rear of the iPad itself.</p><p>Also like Logitech’s case, Zagg’s uses a rear kickstand to prop itself up, which takes up more desk space than the other models in this roundup. I do like, though, that there’s a small clip on the front where you can attach a stylus.</p><p>While the backlit keyboard and touchpad are very spacious, the keys themselves felt small and too smooth for my liking; my fingers often slipped, and as a result, I got a fairly middling score on the typing test, averaging 53 words per minute with a 96% accuracy rate. </p><p><strong>Price: 2</strong><br><strong>Design: 6</strong><br><strong>Typing speed: 5</strong><br><strong>Total score:  13</strong></p><div data-widget-type="review" data-model-name="Zagg Pro Keys Connect Tablet Keyboard Case"></div><h2 id="scorecard">Scorecard</h2><div ><table><thead><tr><th class="firstcol empty" ></th><th  ><p><strong>Price</strong></p></th><th  ><p><strong>Overall score</strong></p></th><th  ><p><strong>Typing speed</strong></p></th><th  ><p><strong>Accuracy</strong></p></th><th  ><p><strong>Weight</strong></p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>iPad Air Magic Keyboard Folio</strong></p></td><td  ><p>$269</p></td><td  ><p>n/a</p></td><td  ><p>58</p></td><td  ><p>99</p></td><td  ><p>1 pound 5.8 ounces</p></td></tr><tr><td class="firstcol " ><p><strong>Belkin Pro Keyboard Case </strong></p></td><td  ><p>$166</p></td><td  ><p>18</p></td><td  ><p>61</p></td><td  ><p>99</p></td><td  ><p>1 pound 7 ounces</p></td></tr><tr><td class="firstcol " ><p><strong>Dancesoul Keyboard Case</strong></p></td><td  ><p>$105</p></td><td  ><p>13</p></td><td  ><p>50</p></td><td  ><p>96</p></td><td  ><p>1 pound 5.2 ounces</p></td></tr><tr><td class="firstcol " ><p><strong>ESR for iPad Air 11 Inch Case with Keyboard</strong></p><p><br></p></td><td  ><p>$112</p></td><td  ><p>25</p></td><td  ><p>61</p></td><td  ><p>98</p></td><td  ><p>1 pound 12.8 ounces</p></td></tr><tr><td class="firstcol " ><p><strong>Logitech Combo touch</strong></p></td><td  ><p>$169</p></td><td  ><p>15</p></td><td  ><p>56</p></td><td  ><p>98</p></td><td  ><p>1 pound 1.5 ounces</p></td></tr><tr><td class="firstcol " ><p><strong>RuneLK keyboard</strong></p></td><td  ><p>$85</p></td><td  ><p>19</p></td><td  ><p>56</p></td><td  ><p>97</p></td><td  ><p>1 pound 6.3 ounces</p></td></tr><tr><td class="firstcol " ><p><strong>Tolpeiksoy Magnetic Keyboard Case</strong></p></td><td  ><p>$115</p></td><td  ><p>10</p></td><td  ><p>51</p></td><td  ><p>96</p></td><td  ><p>1 pound 8.7 ounces</p></td></tr><tr><td class="firstcol " ><p><strong>typecase Touch Keyboard Case</strong></p></td><td  ><p>$64</p></td><td  ><p>24</p></td><td  ><p>58</p></td><td  ><p>99</p></td><td  ><p>1 pound 6.5 ounces</p></td></tr><tr><td class="firstcol " ><p><strong>Zagg Pro Keys Connect </strong></p></td><td  ><p>$139</p></td><td  ><p>13</p></td><td  ><p>53</p></td><td  ><p>96</p></td><td  ><p>1 pound 10.3 ounces</p></td></tr></tbody></table></div><h2 id="bottom-line-2">Bottom line</h2><p>Overall, the ESR case was my favorite among the <a href="https://www.tomsguide.com/best-picks/best-ipad-cases">iPad Air cases</a> I tested, scoring 25 out of a possible 30 points. While it wasn’t the least expensive model, nor was it the priciest, and I liked the fact that it not only had a slot for a stylus, but also let me use the Air in both landscape and portrait mode. </p><p>If you’re looking for a budget model, the typecase tied the ESR for overall points; its design isn’t as refined, but it was still reasonably light, and let me swivel the tablet around a full 360 degrees. And, I notched my second-highest typing score. The fact that it costs less than $70 makes it even more appealing.</p><p>If you’re looking for durability, Zagg’s is the best option, though I wasn’t enamored with the design of its keys, nor how the iPad connected to the case itself. </p><p>While the iPad Air might not be the cheap productivity machine that is the MacBook Neo, you can still use it to get work done — and you don’t have to pay Apple’s prices to do so.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I’d given up on iPad gaming until I tried the Razer Kishi V3 Pro XL — now I don’t want to leave the house without it ]]></title>
                                                                                                <dc:content><![CDATA[ <p>I’ve owned an iPad since 2022, and I’ll be honest, I haven’t gotten much use out of it — until recently. I just tested the Razer Kishi V3 Pro XL that has turned my iPad into a gaming powerhouse and, honestly, has breathed new life into it. The Kishi V3 Pro XL is a powerful mobile gaming controller with fantastic TMR thumbsticks, four extra buttons, and clicky triggers, all packed into an ergonomic body.</p><p>Featuring full-sized triggers and thumbsticks as well as passthrough charging, this is the only controller you need if you’re a fan of on-the-go gaming. But is it perfect? Sadly not quite. The lack of rumble and haptics on Apple devices will make its premium price tag very difficult to stomach for iOS/iPadOS users.</p><p>To find out if this is the <a href="https://www.tomsguide.com/best-picks/best-mobile-game-controllers">best mobile game controller</a> for you, read my full Razer Kishi V3 Pro XL review.</p><h2 class="article-body__section" id="section-razer-kishi-v3-pro-xl-review-specs"><span>Razer Kishi V3 Pro XL review: Specs</span></h2><div ><table><thead><tr><th class="firstcol " ><p><strong>Specs</strong></p></th><th  ><p><strong>Razer Kishi V3 Pro XL</strong></p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p><a href="https://www.amazon.com/Kishi-Gaming-Controller-Android-Tablets-Smartphone/dp/B0DVKWZ5SX/" target="_blank" rel="nofollow">$199</a> / <a href="https://www.amazon.co.uk/Razer-Kishi-Pro-Plug-Play/dp/B0F2JD1HS2/" target="_blank" rel="nofollow">£164</a></p></td></tr><tr><td class="firstcol " ><p><strong>Connectivity</strong></p></td><td  ><p>USB-C</p></td></tr><tr><td class="firstcol " ><p><strong>Compatibility</strong></p></td><td  ><p>iPad Pro (11 and 13 inches), iPad Air (11 and 13 inches), iPad (10.9 inches), Android tablets (USB-C)</p></td></tr><tr><td class="firstcol " ><p><strong>Layout</strong></p></td><td  ><p>ABXY</p></td></tr><tr><td class="firstcol " ><p><strong>Triggers</strong></p></td><td  ><p>Analog</p></td></tr><tr><td class="firstcol " ><p><strong>Thumbsticks</strong></p></td><td  ><p>TMR</p></td></tr><tr><td class="firstcol " ><p><strong>Back buttons</strong></p></td><td  ><p>Yes, two</p></td></tr><tr><td class="firstcol " ><p><strong>Shoulder buttons</strong></p></td><td  ><p>Yes, two</p></td></tr><tr><td class="firstcol " ><p><strong>Rumble</strong></p></td><td  ><p>Yes, Razer Sensa HD Haptics</p></td></tr><tr><td class="firstcol " ><p><strong>Dimensions</strong></p></td><td  ><p>12.91 x 4.36 x 2.54 inches</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>10.97oz</p></td></tr><tr><td class="firstcol " ><p><strong>Color</strong></p></td><td  ><p>Black</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>Built-in, passthrough</p></td></tr></tbody></table></div><h2 class="article-body__section" id="section-razer-kishi-v3-pro-xl-review-cheat-sheet"><span>Razer Kishi V3 Pro XL review: Cheat sheet</span></h2><ul><li><strong>What is it? </strong>A gaming controller for iPads and USB-C tablets</li><li><strong>Who is it for? </strong>Anyone who enjoys gaming on the go and wants a comfortable controller</li><li><strong>How much does it cost? </strong>The Razer Kishi V3 Pro XL is available for <a href="https://www.amazon.com/Kishi-Gaming-Controller-Android-Tablets-Smartphone/dp/B0DVKWZ5SX/" target="_blank" rel="nofollow">$199</a> / <a href="https://www.amazon.co.uk/Razer-Kishi-Pro-Plug-Play/dp/B0F2JD1HS2/" target="_blank" rel="nofollow">£164</a></li><li><strong>What do we like? </strong>The ergonomic design, TMR thumbsticks, passthrough charging, and compatibility with many tablets</li><li><strong>What don’t we like? </strong>No rumble or haptics on iOS/iPadOS and the premium price tag</li></ul><h2 class="article-body__section" id="section-razer-kishi-v3-pro-xl-review-the-ups"><span>Razer Kishi V3 Pro XL review: The ups</span></h2><p>From its ergonomic design and passthrough charging, to its powerful TMR thumbsticks and clicky triggers, the Razer Kishi V3 Pro XL is an absolute must-have accessory for iPad owners.</p><h2 id="extremely-comfortable-and-ergonomic">Extremely comfortable and ergonomic</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="TS4ktBvZZjQXNF26espjKF" name="Razer_Kishi_V3_Pro_XL" alt="A Razer Kishi V3 Pro XL iPad gaming controller" src="https://cdn.mos.cms.futurecdn.net/TS4ktBvZZjQXNF26espjKF-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>I’ve tested and used my fair share of mobile and tablet gaming controllers. Some have been good; some have been bad; and a few have been peerless in the comfort department. The Razer Kishi V3 Pro XL falls into the third category as it’s one of the comfiest controllers I’ve used — despite its big footprint.</p><p>The Kishi V3 Pro XL’s plate where the tablet sits measures 12.91 x 4.36 x 2.54 inches when the controller is outstretched, enabling it to accommodate a 13-inch <a href="https://www.tomsguide.com/computing/ipads/ipad-pro-m5-review">iPad Pro</a>. Even so, it doesn’t feel unwieldy to handle. It weighs 10.97oz without a tablet inserted, and with my <a href="https://www.tomsguide.com/reviews/ipad-air-2022-review-a-new-standard-for-tablets">iPad Air </a>10.9-inch slotted in, the controller weighs 1.73lbs, and I haven’t found it too heavy to hold. Having used the controller for a six-hour straight gaming stint, my hands didn’t feel fatigued or like they were cramping from the controller’s design.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="uSKPWDfM53JcnQwdZ8yFSF" name="Razer_Kishi_V3_Pro_XL" alt="A Razer Kishi V3 Pro XL iPad gaming controller" src="https://cdn.mos.cms.futurecdn.net/uSKPWDfM53JcnQwdZ8yFSF-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>This is also partly due to the ergonomic, chunky grips which feel similar to the ones you’ll find on the likes of the <a href="https://www.tomsguide.com/reviews/xbox-elite-wireless-controller-series-2">Xbox Elite Wireless 2</a> ($179). In fact, the Kishi V3 Pro XL feels like what you’d get if you sliced a <a href="https://www.tomsguide.com/gaming/gaming-peripherals/razer-wolverine-v3-pro-review">Razer Wolverine V3 Pro</a> ($199) down the middle and slotted a tablet in between the two grips. That itself speaks volumes about the Kishi V3 Pro XL as the Wolverine V3 Pro is undoubtedly the <a href="https://www.tomsguide.com/best-picks/best-pc-game-controllers">best premium PC game controller</a> on the market.</p><p>I love the full-sized thumbsticks and triggers too which, again, feel like the ones on the Wolverine V3 Pro. I’m a big fan of offset thumbsticks as they feel more ergonomic to me (and something I always miss on my PlayStation DualSense). All in all, the Kishi V3 Pro XL is an excellent, ergonomic controller designed for all-day play.</p><h2 id="compatible-with-many-tablets">Compatible with many tablets</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="UpSxYsqUGCpSyuon69XsyF" name="Razer_Kishi_V3_Pro_XL" alt="A Razer Kishi V3 Pro XL iPad gaming controller" src="https://cdn.mos.cms.futurecdn.net/UpSxYsqUGCpSyuon69XsyF-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>If you already own an iPad or an Android tablet, the Razer Kishi V3 Pro XL is the right choice for you. It’s compatible with the <a href="https://www.tomsguide.com/computing/ipads/ipad-pro-m5-review">iPad Pro</a> (11 and 13 inches), the <a href="https://www.tomsguide.com/computing/ipads/apple-ipad-air-m4-review-small-tweaks-to-the-gold-standard">iPad Air</a> (11 and 13 inches), the standard <a href="https://www.tomsguide.com/computing/ipads/ipad-11-2025-review">iPad</a> (10.9 inches), and USB-C Android tablets. You can connect it to your PC too, thanks to the included cable, and use it as a regular gamepad.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="7UAFptaKLz9uAykeSRbcRF" name="Razer_Kishi_V3_Pro_XL" alt="A Razer Kishi V3 Pro XL iPad gaming controller" src="https://cdn.mos.cms.futurecdn.net/7UAFptaKLz9uAykeSRbcRF-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Included in the box are two sets of rubber bumpers for adjusting the controller to your device size, alongside two swappable thumbstick caps (one tall concave and one short convex). I found the rubber bumpers super easy to replace, and I’d recommend trying out the different sizes to ensure that your tablet fits snugly. </p><h2 id="powerful-tmr-sticks">Powerful TMR sticks</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="mszQMeigfTjp8k8kTqecLF" name="Razer_Kishi_V3_Pro_XL" alt="A Razer Kishi V3 Pro XL iPad gaming controller" src="https://cdn.mos.cms.futurecdn.net/mszQMeigfTjp8k8kTqecLF-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The Razer Kishi V3 Pro XL boasts outstanding gaming performance, thanks to its TMR thumbsticks, mouse-like analog triggers, high polling rate, and more. I tested the controller with my iPad 10.9-inch, as I mentioned earlier, and played my favorite <a href="https://www.tomsguide.com/reviews/ps5">PS5</a> games via the PS Remote Play app. First, its polling rate can be set to either 1,000Hz or 4,000Hz, adjustable via the Razer Nexus companion app. Having tested both, I didn’t experience any latency issues or input lag.</p><p>Next, the TMR thumbsticks. <a href="https://www.tomsguide.com/gaming/gaming-peripherals/so-long-hall-effect-im-only-using-controllers-with-tmr-sensors-from-now-on">Tunnel Magneto Resistance (TMR) sensors</a> are superior to Hall Effect ones (which are also great in their own right), as they use weak electromagnetic waves rather than strong ones. This means that smaller adjustments and minute movements are picked up by the sensors, and the boost to accuracy in racing and FPS titles is certainly noticeable.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="jLycYC6C2meQZmdLGF4y6G" name="Razer_Kishi_V3_Pro_XL" alt="A Razer Kishi V3 Pro XL iPad gaming controller" src="https://cdn.mos.cms.futurecdn.net/jLycYC6C2meQZmdLGF4y6G-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>I tested this out by playing Need for Speed Heat, and I instantly noticed the performance difference between playing the game on my DualSense versus the Kishi V3 Pro XL. Thanks to the latter’s TMR sticks, I was able to not only maintain a straight line while driving, I could also go right up to the rear bumper of the car ahead of me and overtake right before making contact. This gave me a bit of a competitive advantage. I found the thumbsticks very comfortable too (I used the short convex caps), and thanks to how responsive they were, I was able to easily navigate down the winding mountain roads and turn tight corners.</p><p>I also appreciated being able to make minute adjustments in FPS titles, such as <a href="https://www.tomsguide.com/reviews/cyberpunk-2077-phantom-liberty">Cyberpunk 2077</a>. With my sniper rifle pointed at a group of NPCs in the distance, I could move the right stick ever so slightly to choose the correct target, even though several of them were standing close together. It made me feel like I was in a James Bond movie, to be honest.</p><h2 id="mouse-like-triggers-and-face-buttons">Mouse-like triggers and face buttons</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="jPZ9k7GEx9KpVrfs87FLKF" name="Razer_Kishi_V3_Pro_XL" alt="A Razer Kishi V3 Pro XL iPad gaming controller" src="https://cdn.mos.cms.futurecdn.net/jPZ9k7GEx9KpVrfs87FLKF-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Another thing I absolutely adore on the Razer Kishi V3 Pro XL is how the triggers and face buttons feel. The controller features analog triggers so while they aren’t as customizable as Hall Effect ones on the likes of the <a href="https://www.tomsguide.com/gaming/gaming-peripherals/gamesir-g8-plus-review">GameSir G8 Plus</a> ($99), I’d be lying if I said they didn’t feel darn good to play with.</p><p>The triggers, along with the face buttons, two extra shoulder buttons and back buttons, feel mouse-like to press, similar to the ones on the Razer Wolverine V3 Pro. They’re extremely responsive and straight out of the box, they didn’t feel stiff at all. I jumped right into <a href="https://www.tomsguide.com/gaming/clair-obscur-expedition-33-review">Clair Obscur: Expedition 33</a> to try them out. Each button and trigger press was instantaneously registered, and I appreciated the tactile feedback I got as well. I also found it handy that I didn’t need to press the buttons or triggers too hard for my commands to register. I was able to execute perfectly timed parries and dodges in Expedition 33, which helped me win crucial boss battles.</p><p>Drifting and braking in Need for Speed Heat was a walk in the park thanks to the triggers as well. They’re full-size which means that there’s plenty of room for your fingers to sit atop the longer R2 and L2 triggers. Again, I didn’t find it fatiguing to hold down L2 in drift challenges. I also appreciate the addition of four extra clicky buttons (two on top, two around the back). I remapped the M1 button on the back as the nitro (N2O) button so all I had to do was use my right middle finger to toggle it when I needed a speed boost, which freed up my thumb to remain on the right thumbstick.</p><h2 id="user-friendly-companion-app">User-friendly companion app</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/pZb9hdVohkgYQgy2DomHsa-1920-80.jpg" alt="Razer Nexus app screenshots" /><figcaption><small role="credit">Razer / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/A423DrsTsiyrP2TtEpTeta-1920-80.jpg" alt="Razer Nexus app screenshots" /><figcaption><small role="credit">Razer / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/aUPj3vYUDQUPcHFB2gzwsa-1920-80.jpg" alt="Razer Nexus app screenshots" /><figcaption><small role="credit">Razer / Tom's Guide</small></figcaption></figure></figure><p>As I alluded to before, the Razer Kishi V3 Pro XL is accompanied by the <a href="https://www.razer.com/gb-en/mobile/razer-nexus/" target="_blank" rel="nofollow">Razer Nexus</a> app which is free to download on iOS, iPadOS and Android. Razer Nexus sports a clean user interface and is your one-stop shop for all the games installed on your device, and for launching apps like PS Remote Play, Steam Link, and even emulators. It’s easy to navigate and there are no intrusive pop-ups that deter from the experience.</p><p>Razer Nexus is also your hub for customizing the Kishi V3 Pro XL. Within the app — which can be quickly accessed by hitting the Nexus button located under the right thumbstick — you can customize the four extra buttons, remap the others, adjust the TMR sticks’ deadzone, swap between analog and digital triggers, and adjust the controller’s polling rate. Simple enough to do, and thanks to native compatibility, you can even adjust a few of these settings from the iPad’s Settings menu too.</p><h2 id="passthrough-charging">Passthrough charging</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="XZWKqA7YkxysAzJpmiUVmE" name="Razer_Kishi_V3_Pro_XL" alt="A Razer Kishi V3 Pro XL iPad gaming controller" src="https://cdn.mos.cms.futurecdn.net/XZWKqA7YkxysAzJpmiUVmE-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Last but certainly not least, the Razer Kishi V3 Pro XL features passthrough charging. It’s important to note that the controller doesn’t feature a built-in battery and is instead powered by your tablet, so passthrough charging is a must. This basically means that you can charge your iPad or Android tablet while it’s slotted into the Kishi V3 Pro XL. The USB-C port is located on the right grip.</p><p>Passthrough charging has quickly become a non-negotiable for me, and I hate it when a controller doesn’t feature it — the GameSir G8 Plus and the <a href="https://www.tomsguide.com/gaming/gaming-peripherals/the-scuf-nomad-mobile-controller-crushes-the-backbone-one-heres-why">Scuf Nomad</a> ($99), for instance. It’s also something we’ve seen on the <a href="https://www.tomsguide.com/gaming/gaming-peripherals/backbone-pro-phone-controller-review">Backbone Pro</a> ($169) and the <a href="https://www.tomsguide.com/gaming/gaming-peripherals/gamesir-x5-lite-review">GameSir X5 Lite</a> ($34) and, in all honesty, if Razer didn’t include passthrough charging at <em>this </em>price (more on that shortly) I would’ve been flabbergasted.</p><h2 class="article-body__section" id="section-razer-kishi-v3-pro-xl-review-the-downs"><span>Razer Kishi V3 Pro XL review: The downs</span></h2><p>Alas, the Razer Kishi V3 Pro XL isn’t perfect. There’s no rumble or haptics on Apple devices, and the price tag is a little difficult to stomach.</p><h2 id="no-rumble-or-haptics-on-apple-devices">No rumble or haptics on Apple devices</h2><p>One of the most disappointing things about the Razer Kishi V3 Pro XL, and perhaps a dealbreaker for some, is the fact that its rumble and haptics don’t work on iOS and iPadOS devices. You’d best believe it when I say that I let out the biggest sigh possible when I plugged in my iPad and there was no rumble in the games I played. Razer does state this on the <a href="https://www.razer.com/gb-en/mobile-controllers/razer-kishi-v3-pro-xl" target="_blank" rel="nofollow">official product page</a>, but in small print that might get missed by most people as it’s accompanied by bold letters stating “Next-Gen Tactile Feedback” and “RAZER SENSA HD HAPTICS” in all caps.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="QyhpnA2ockidh5epEn6CnE" name="Razer_Kishi_V3_Pro_XL" alt="A Razer Kishi V3 Pro XL iPad gaming controller" src="https://cdn.mos.cms.futurecdn.net/QyhpnA2ockidh5epEn6CnE-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>This is a limitation confined to iOS and iPadOS (as the rumble works with Android tablets), but Apple added rumble support on iPadOS 15, so Razer isn’t off the hook here.</p><p>Even if it were an issue stemming from iPadOS or the PS Remote Play app, it would’ve been nice to have the incompatibility warning a little more prominent. I’ve seen many people complain about the lack of haptics on iPadOS on<a href="https://www.reddit.com/r/RazerKishi/" target="_blank" rel="nofollow"> r/razerkishi</a> and <a href="https://www.reddit.com/r/razer/" target="_blank" rel="nofollow">r/razer</a> subreddits, and many have stated that they’ve ended up returning their Kishi V3 Pro XLs for this reason. I won’t lie, it’s certainly disappointing especially given that the controller is advertised as one designed for iPads.</p><p>But I’d also like to note that rumble and haptics aren’t found on that many mobile controllers. These are missing from the GameSir G8 Plus and the Backbone Pro, for instance, and are a limitation of iOS and iPadOS. I really can’t think of any other iPad controller that does feature haptics. This is a major pre-purchase consideration for you to chew over, and the only drawback of using the Kishi V3 Pro XL and other controllers with an iPhone or iPad. In the meantime, I’ve reached out to a Razer representative to get a clearer picture and understanding.</p><h2 id="costs-a-premium">Costs a premium</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="hf4gfMukUEwjmCcsHr8URF" name="Razer_Kishi_V3_Pro_XL" alt="A Razer Kishi V3 Pro XL iPad gaming controller" src="https://cdn.mos.cms.futurecdn.net/hf4gfMukUEwjmCcsHr8URF-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>While the Razer Kishi V3 Pro XL is an excellent iPad controller, there’s no sugarcoating the fact that it’s quite expensive. It retails for <a href="https://www.amazon.com/Kishi-Gaming-Controller-Android-Tablets-Smartphone/dp/B0DVKWZ5SX/" target="_blank" rel="nofollow">$199</a> / <a href="https://www.amazon.co.uk/Razer-Kishi-Pro-Plug-Play/dp/B0F2JD1HS2/" target="_blank" rel="nofollow">£164 at Amazon</a>, making it the most expensive mobile controller I’ve tested so far (at the time of writing). This makes the Kishi V3 Pro XL as expensive as the <a href="https://www.tomsguide.com/reviews/playstation-portal">PlayStation Portal</a> ($199). The standard, smaller Kishi V3 Pro model designed for smartphones is a little cheaper at $149, but is the $50 price difference justified, especially when rivals like the GameSir G8 Plus ($99) are available for far less?</p><p>But the Kishi V3 Pro XL doesn’t have many other competitors. Most other controllers compatible with the iPad take the shape and form of your regular gamepad, like the PlayStation DualSense (which works just fine with the iPad). The biggest difference is, of course, the fact that you need to prop your iPad up on a table to use a standard gamepad, which you don’t need to do with the Kishi V3 Pro XL. It is, then, perhaps justified that the controller costs so much, but the fact that rumble and haptics don’t work as intended leaves a sour taste in my mouth.</p><h2 class="article-body__section" id="section-razer-kishi-v3-pro-xl-review-verdict"><span>Razer Kishi V3 Pro XL review: Verdict</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="QX9RYmpW49JrwQhBYRFy9G" name="Razer_Kishi_V3_Pro_XL" alt="A Razer Kishi V3 Pro XL iPad gaming controller" src="https://cdn.mos.cms.futurecdn.net/QX9RYmpW49JrwQhBYRFy9G-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Razer knows how to make a good gaming peripheral, and the Kishi V3 Pro XL is one of the best iPad accessories you can buy today, especially if you’re a gamer. The controller is ergonomically designed with full-size thumbsticks and triggers, making it perfect for all-day gaming. Passthrough charging also means that you don’t have to worry about your tablet running out of charge mid-gaming.</p><p>I love the TMR thumbsticks and mouse-like analog triggers and extra buttons. They’re all highly responsive in FPS, racing and RPG titles, and they can be customized via the user-friendly app too. But is all of this worth nearly $200, especially when there’s no haptics or rumble on Apple devices? Kinda. The Kishi V3 Pro XL has carved out a niche for itself, and if it’s an ergonomic iPad mobile game controller you need, it’s really the only one to get.</p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/gaming-peripherals/razer-kishi-v3-pro-xl-ipad-controller-review</link>
                                                                            <description>
                            <![CDATA[ The Razer Kishi V3 Pro XL is an excellent iPad controller, featuring responsive TMR sticks, full-sized triggers, and passthrough charging. But it has flaws. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">DkPZ7tzsTcfVYU26aCP5Cb</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/QX9RYmpW49JrwQhBYRFy9G-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 27 Mar 2026 13:18:08 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Gaming Peripherals]]></category>
                                                    <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[Gaming]]></category>
                                                    <category><![CDATA[Computing Peripherals]]></category>
                                                    <category><![CDATA[Tablets]]></category>
                                                                                                <author><![CDATA[ nikita.achanta@futurenet.com (Nikita Achanta) ]]></author>                    <dc:creator><![CDATA[ Nikita Achanta ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/oXuvixDz99SbZp9z8Uoor3-320-70.png ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Nikita is a Senior Writer on the Reviews team at Tom&#039;s Guide. She is a lifelong gaming and photography enthusiast, especially interested in wildlife photography. Having worked as a Sub Editor and Writer for Canon EMEA, she’s a bit of a grammar nerd (and a supporter of the Oxford comma), and has also interviewed photographers from all over the world and working in different genres. A holder of two master’s degrees, the most recent one being in Magazine Journalism from Cardiff University, Nikita’s work has appeared in several publications such as Motor Sport Magazine, NME, Marriott Bonvoy, The Independent, and Metro. Her favorite tech includes the PS5, the DJI Air 3S, and the Fujifilm X-T50. She&#039;s also a licensed drone pilot and cameras expert so you&#039;ll find her testing those nearly every week.&lt;/p&gt;&lt;p&gt;In her downtime, Nikita can usually be found sinking hours into RPGs on her PS5, flying a drone, out on a walk with a camera in hand, at a concert, watching F1, or planning her next tattoo. You can follow her photography account on Instagram&lt;a href=&quot;https://www.instagram.com/photos.bynikita/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt; here&lt;/a&gt;.&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/QX9RYmpW49JrwQhBYRFy9G-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A Razer Kishi V3 Pro XL iPad gaming controller]]></media:description>                                                            <media:text><![CDATA[A Razer Kishi V3 Pro XL iPad gaming controller]]></media:text>
                                <media:title type="plain"><![CDATA[A Razer Kishi V3 Pro XL iPad gaming controller]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/QX9RYmpW49JrwQhBYRFy9G-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I’ve owned an iPad since 2022, and I’ll be honest, I haven’t gotten much use out of it — until recently. I just tested the Razer Kishi V3 Pro XL that has turned my iPad into a gaming powerhouse and, honestly, has breathed new life into it. The Kishi V3 Pro XL is a powerful mobile gaming controller with fantastic TMR thumbsticks, four extra buttons, and clicky triggers, all packed into an ergonomic body.</p><p>Featuring full-sized triggers and thumbsticks as well as passthrough charging, this is the only controller you need if you’re a fan of on-the-go gaming. But is it perfect? Sadly not quite. The lack of rumble and haptics on Apple devices will make its premium price tag very difficult to stomach for iOS/iPadOS users.</p><p>To find out if this is the <a href="https://www.tomsguide.com/best-picks/best-mobile-game-controllers">best mobile game controller</a> for you, read my full Razer Kishi V3 Pro XL review.</p><h2 class="article-body__section" id="section-razer-kishi-v3-pro-xl-review-specs"><span>Razer Kishi V3 Pro XL review: Specs</span></h2><div ><table><thead><tr><th class="firstcol " ><p><strong>Specs</strong></p></th><th  ><p><strong>Razer Kishi V3 Pro XL</strong></p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p><a href="https://www.amazon.com/Kishi-Gaming-Controller-Android-Tablets-Smartphone/dp/B0DVKWZ5SX/" target="_blank" rel="nofollow">$199</a> / <a href="https://www.amazon.co.uk/Razer-Kishi-Pro-Plug-Play/dp/B0F2JD1HS2/" target="_blank" rel="nofollow">£164</a></p></td></tr><tr><td class="firstcol " ><p><strong>Connectivity</strong></p></td><td  ><p>USB-C</p></td></tr><tr><td class="firstcol " ><p><strong>Compatibility</strong></p></td><td  ><p>iPad Pro (11 and 13 inches), iPad Air (11 and 13 inches), iPad (10.9 inches), Android tablets (USB-C)</p></td></tr><tr><td class="firstcol " ><p><strong>Layout</strong></p></td><td  ><p>ABXY</p></td></tr><tr><td class="firstcol " ><p><strong>Triggers</strong></p></td><td  ><p>Analog</p></td></tr><tr><td class="firstcol " ><p><strong>Thumbsticks</strong></p></td><td  ><p>TMR</p></td></tr><tr><td class="firstcol " ><p><strong>Back buttons</strong></p></td><td  ><p>Yes, two</p></td></tr><tr><td class="firstcol " ><p><strong>Shoulder buttons</strong></p></td><td  ><p>Yes, two</p></td></tr><tr><td class="firstcol " ><p><strong>Rumble</strong></p></td><td  ><p>Yes, Razer Sensa HD Haptics</p></td></tr><tr><td class="firstcol " ><p><strong>Dimensions</strong></p></td><td  ><p>12.91 x 4.36 x 2.54 inches</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>10.97oz</p></td></tr><tr><td class="firstcol " ><p><strong>Color</strong></p></td><td  ><p>Black</p></td></tr><tr><td class="firstcol " ><p><strong>Battery</strong></p></td><td  ><p>Built-in, passthrough</p></td></tr></tbody></table></div><h2 class="article-body__section" id="section-razer-kishi-v3-pro-xl-review-cheat-sheet"><span>Razer Kishi V3 Pro XL review: Cheat sheet</span></h2><ul><li><strong>What is it? </strong>A gaming controller for iPads and USB-C tablets</li><li><strong>Who is it for? </strong>Anyone who enjoys gaming on the go and wants a comfortable controller</li><li><strong>How much does it cost? </strong>The Razer Kishi V3 Pro XL is available for <a href="https://www.amazon.com/Kishi-Gaming-Controller-Android-Tablets-Smartphone/dp/B0DVKWZ5SX/" target="_blank" rel="nofollow">$199</a> / <a href="https://www.amazon.co.uk/Razer-Kishi-Pro-Plug-Play/dp/B0F2JD1HS2/" target="_blank" rel="nofollow">£164</a></li><li><strong>What do we like? </strong>The ergonomic design, TMR thumbsticks, passthrough charging, and compatibility with many tablets</li><li><strong>What don’t we like? </strong>No rumble or haptics on iOS/iPadOS and the premium price tag</li></ul><h2 class="article-body__section" id="section-razer-kishi-v3-pro-xl-review-the-ups"><span>Razer Kishi V3 Pro XL review: The ups</span></h2><p>From its ergonomic design and passthrough charging, to its powerful TMR thumbsticks and clicky triggers, the Razer Kishi V3 Pro XL is an absolute must-have accessory for iPad owners.</p><h2 id="extremely-comfortable-and-ergonomic">Extremely comfortable and ergonomic</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="TS4ktBvZZjQXNF26espjKF" name="Razer_Kishi_V3_Pro_XL" alt="A Razer Kishi V3 Pro XL iPad gaming controller" src="https://cdn.mos.cms.futurecdn.net/TS4ktBvZZjQXNF26espjKF-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>I’ve tested and used my fair share of mobile and tablet gaming controllers. Some have been good; some have been bad; and a few have been peerless in the comfort department. The Razer Kishi V3 Pro XL falls into the third category as it’s one of the comfiest controllers I’ve used — despite its big footprint.</p><p>The Kishi V3 Pro XL’s plate where the tablet sits measures 12.91 x 4.36 x 2.54 inches when the controller is outstretched, enabling it to accommodate a 13-inch <a href="https://www.tomsguide.com/computing/ipads/ipad-pro-m5-review">iPad Pro</a>. Even so, it doesn’t feel unwieldy to handle. It weighs 10.97oz without a tablet inserted, and with my <a href="https://www.tomsguide.com/reviews/ipad-air-2022-review-a-new-standard-for-tablets">iPad Air </a>10.9-inch slotted in, the controller weighs 1.73lbs, and I haven’t found it too heavy to hold. Having used the controller for a six-hour straight gaming stint, my hands didn’t feel fatigued or like they were cramping from the controller’s design.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="uSKPWDfM53JcnQwdZ8yFSF" name="Razer_Kishi_V3_Pro_XL" alt="A Razer Kishi V3 Pro XL iPad gaming controller" src="https://cdn.mos.cms.futurecdn.net/uSKPWDfM53JcnQwdZ8yFSF-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>This is also partly due to the ergonomic, chunky grips which feel similar to the ones you’ll find on the likes of the <a href="https://www.tomsguide.com/reviews/xbox-elite-wireless-controller-series-2">Xbox Elite Wireless 2</a> ($179). In fact, the Kishi V3 Pro XL feels like what you’d get if you sliced a <a href="https://www.tomsguide.com/gaming/gaming-peripherals/razer-wolverine-v3-pro-review">Razer Wolverine V3 Pro</a> ($199) down the middle and slotted a tablet in between the two grips. That itself speaks volumes about the Kishi V3 Pro XL as the Wolverine V3 Pro is undoubtedly the <a href="https://www.tomsguide.com/best-picks/best-pc-game-controllers">best premium PC game controller</a> on the market.</p><p>I love the full-sized thumbsticks and triggers too which, again, feel like the ones on the Wolverine V3 Pro. I’m a big fan of offset thumbsticks as they feel more ergonomic to me (and something I always miss on my PlayStation DualSense). All in all, the Kishi V3 Pro XL is an excellent, ergonomic controller designed for all-day play.</p><h2 id="compatible-with-many-tablets">Compatible with many tablets</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="UpSxYsqUGCpSyuon69XsyF" name="Razer_Kishi_V3_Pro_XL" alt="A Razer Kishi V3 Pro XL iPad gaming controller" src="https://cdn.mos.cms.futurecdn.net/UpSxYsqUGCpSyuon69XsyF-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>If you already own an iPad or an Android tablet, the Razer Kishi V3 Pro XL is the right choice for you. It’s compatible with the <a href="https://www.tomsguide.com/computing/ipads/ipad-pro-m5-review">iPad Pro</a> (11 and 13 inches), the <a href="https://www.tomsguide.com/computing/ipads/apple-ipad-air-m4-review-small-tweaks-to-the-gold-standard">iPad Air</a> (11 and 13 inches), the standard <a href="https://www.tomsguide.com/computing/ipads/ipad-11-2025-review">iPad</a> (10.9 inches), and USB-C Android tablets. You can connect it to your PC too, thanks to the included cable, and use it as a regular gamepad.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="7UAFptaKLz9uAykeSRbcRF" name="Razer_Kishi_V3_Pro_XL" alt="A Razer Kishi V3 Pro XL iPad gaming controller" src="https://cdn.mos.cms.futurecdn.net/7UAFptaKLz9uAykeSRbcRF-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Included in the box are two sets of rubber bumpers for adjusting the controller to your device size, alongside two swappable thumbstick caps (one tall concave and one short convex). I found the rubber bumpers super easy to replace, and I’d recommend trying out the different sizes to ensure that your tablet fits snugly. </p><h2 id="powerful-tmr-sticks">Powerful TMR sticks</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="mszQMeigfTjp8k8kTqecLF" name="Razer_Kishi_V3_Pro_XL" alt="A Razer Kishi V3 Pro XL iPad gaming controller" src="https://cdn.mos.cms.futurecdn.net/mszQMeigfTjp8k8kTqecLF-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The Razer Kishi V3 Pro XL boasts outstanding gaming performance, thanks to its TMR thumbsticks, mouse-like analog triggers, high polling rate, and more. I tested the controller with my iPad 10.9-inch, as I mentioned earlier, and played my favorite <a href="https://www.tomsguide.com/reviews/ps5">PS5</a> games via the PS Remote Play app. First, its polling rate can be set to either 1,000Hz or 4,000Hz, adjustable via the Razer Nexus companion app. Having tested both, I didn’t experience any latency issues or input lag.</p><p>Next, the TMR thumbsticks. <a href="https://www.tomsguide.com/gaming/gaming-peripherals/so-long-hall-effect-im-only-using-controllers-with-tmr-sensors-from-now-on">Tunnel Magneto Resistance (TMR) sensors</a> are superior to Hall Effect ones (which are also great in their own right), as they use weak electromagnetic waves rather than strong ones. This means that smaller adjustments and minute movements are picked up by the sensors, and the boost to accuracy in racing and FPS titles is certainly noticeable.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="jLycYC6C2meQZmdLGF4y6G" name="Razer_Kishi_V3_Pro_XL" alt="A Razer Kishi V3 Pro XL iPad gaming controller" src="https://cdn.mos.cms.futurecdn.net/jLycYC6C2meQZmdLGF4y6G-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>I tested this out by playing Need for Speed Heat, and I instantly noticed the performance difference between playing the game on my DualSense versus the Kishi V3 Pro XL. Thanks to the latter’s TMR sticks, I was able to not only maintain a straight line while driving, I could also go right up to the rear bumper of the car ahead of me and overtake right before making contact. This gave me a bit of a competitive advantage. I found the thumbsticks very comfortable too (I used the short convex caps), and thanks to how responsive they were, I was able to easily navigate down the winding mountain roads and turn tight corners.</p><p>I also appreciated being able to make minute adjustments in FPS titles, such as <a href="https://www.tomsguide.com/reviews/cyberpunk-2077-phantom-liberty">Cyberpunk 2077</a>. With my sniper rifle pointed at a group of NPCs in the distance, I could move the right stick ever so slightly to choose the correct target, even though several of them were standing close together. It made me feel like I was in a James Bond movie, to be honest.</p><h2 id="mouse-like-triggers-and-face-buttons">Mouse-like triggers and face buttons</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="jPZ9k7GEx9KpVrfs87FLKF" name="Razer_Kishi_V3_Pro_XL" alt="A Razer Kishi V3 Pro XL iPad gaming controller" src="https://cdn.mos.cms.futurecdn.net/jPZ9k7GEx9KpVrfs87FLKF-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Another thing I absolutely adore on the Razer Kishi V3 Pro XL is how the triggers and face buttons feel. The controller features analog triggers so while they aren’t as customizable as Hall Effect ones on the likes of the <a href="https://www.tomsguide.com/gaming/gaming-peripherals/gamesir-g8-plus-review">GameSir G8 Plus</a> ($99), I’d be lying if I said they didn’t feel darn good to play with.</p><p>The triggers, along with the face buttons, two extra shoulder buttons and back buttons, feel mouse-like to press, similar to the ones on the Razer Wolverine V3 Pro. They’re extremely responsive and straight out of the box, they didn’t feel stiff at all. I jumped right into <a href="https://www.tomsguide.com/gaming/clair-obscur-expedition-33-review">Clair Obscur: Expedition 33</a> to try them out. Each button and trigger press was instantaneously registered, and I appreciated the tactile feedback I got as well. I also found it handy that I didn’t need to press the buttons or triggers too hard for my commands to register. I was able to execute perfectly timed parries and dodges in Expedition 33, which helped me win crucial boss battles.</p><p>Drifting and braking in Need for Speed Heat was a walk in the park thanks to the triggers as well. They’re full-size which means that there’s plenty of room for your fingers to sit atop the longer R2 and L2 triggers. Again, I didn’t find it fatiguing to hold down L2 in drift challenges. I also appreciate the addition of four extra clicky buttons (two on top, two around the back). I remapped the M1 button on the back as the nitro (N2O) button so all I had to do was use my right middle finger to toggle it when I needed a speed boost, which freed up my thumb to remain on the right thumbstick.</p><h2 id="user-friendly-companion-app">User-friendly companion app</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/pZb9hdVohkgYQgy2DomHsa-1920-80.jpg" alt="Razer Nexus app screenshots" /><figcaption><small role="credit">Razer / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/A423DrsTsiyrP2TtEpTeta-1920-80.jpg" alt="Razer Nexus app screenshots" /><figcaption><small role="credit">Razer / Tom's Guide</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/aUPj3vYUDQUPcHFB2gzwsa-1920-80.jpg" alt="Razer Nexus app screenshots" /><figcaption><small role="credit">Razer / Tom's Guide</small></figcaption></figure></figure><p>As I alluded to before, the Razer Kishi V3 Pro XL is accompanied by the <a href="https://www.razer.com/gb-en/mobile/razer-nexus/" target="_blank" rel="nofollow">Razer Nexus</a> app which is free to download on iOS, iPadOS and Android. Razer Nexus sports a clean user interface and is your one-stop shop for all the games installed on your device, and for launching apps like PS Remote Play, Steam Link, and even emulators. It’s easy to navigate and there are no intrusive pop-ups that deter from the experience.</p><p>Razer Nexus is also your hub for customizing the Kishi V3 Pro XL. Within the app — which can be quickly accessed by hitting the Nexus button located under the right thumbstick — you can customize the four extra buttons, remap the others, adjust the TMR sticks’ deadzone, swap between analog and digital triggers, and adjust the controller’s polling rate. Simple enough to do, and thanks to native compatibility, you can even adjust a few of these settings from the iPad’s Settings menu too.</p><h2 id="passthrough-charging">Passthrough charging</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="XZWKqA7YkxysAzJpmiUVmE" name="Razer_Kishi_V3_Pro_XL" alt="A Razer Kishi V3 Pro XL iPad gaming controller" src="https://cdn.mos.cms.futurecdn.net/XZWKqA7YkxysAzJpmiUVmE-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Last but certainly not least, the Razer Kishi V3 Pro XL features passthrough charging. It’s important to note that the controller doesn’t feature a built-in battery and is instead powered by your tablet, so passthrough charging is a must. This basically means that you can charge your iPad or Android tablet while it’s slotted into the Kishi V3 Pro XL. The USB-C port is located on the right grip.</p><p>Passthrough charging has quickly become a non-negotiable for me, and I hate it when a controller doesn’t feature it — the GameSir G8 Plus and the <a href="https://www.tomsguide.com/gaming/gaming-peripherals/the-scuf-nomad-mobile-controller-crushes-the-backbone-one-heres-why">Scuf Nomad</a> ($99), for instance. It’s also something we’ve seen on the <a href="https://www.tomsguide.com/gaming/gaming-peripherals/backbone-pro-phone-controller-review">Backbone Pro</a> ($169) and the <a href="https://www.tomsguide.com/gaming/gaming-peripherals/gamesir-x5-lite-review">GameSir X5 Lite</a> ($34) and, in all honesty, if Razer didn’t include passthrough charging at <em>this </em>price (more on that shortly) I would’ve been flabbergasted.</p><h2 class="article-body__section" id="section-razer-kishi-v3-pro-xl-review-the-downs"><span>Razer Kishi V3 Pro XL review: The downs</span></h2><p>Alas, the Razer Kishi V3 Pro XL isn’t perfect. There’s no rumble or haptics on Apple devices, and the price tag is a little difficult to stomach.</p><h2 id="no-rumble-or-haptics-on-apple-devices">No rumble or haptics on Apple devices</h2><p>One of the most disappointing things about the Razer Kishi V3 Pro XL, and perhaps a dealbreaker for some, is the fact that its rumble and haptics don’t work on iOS and iPadOS devices. You’d best believe it when I say that I let out the biggest sigh possible when I plugged in my iPad and there was no rumble in the games I played. Razer does state this on the <a href="https://www.razer.com/gb-en/mobile-controllers/razer-kishi-v3-pro-xl" target="_blank" rel="nofollow">official product page</a>, but in small print that might get missed by most people as it’s accompanied by bold letters stating “Next-Gen Tactile Feedback” and “RAZER SENSA HD HAPTICS” in all caps.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="QyhpnA2ockidh5epEn6CnE" name="Razer_Kishi_V3_Pro_XL" alt="A Razer Kishi V3 Pro XL iPad gaming controller" src="https://cdn.mos.cms.futurecdn.net/QyhpnA2ockidh5epEn6CnE-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>This is a limitation confined to iOS and iPadOS (as the rumble works with Android tablets), but Apple added rumble support on iPadOS 15, so Razer isn’t off the hook here.</p><p>Even if it were an issue stemming from iPadOS or the PS Remote Play app, it would’ve been nice to have the incompatibility warning a little more prominent. I’ve seen many people complain about the lack of haptics on iPadOS on<a href="https://www.reddit.com/r/RazerKishi/" target="_blank" rel="nofollow"> r/razerkishi</a> and <a href="https://www.reddit.com/r/razer/" target="_blank" rel="nofollow">r/razer</a> subreddits, and many have stated that they’ve ended up returning their Kishi V3 Pro XLs for this reason. I won’t lie, it’s certainly disappointing especially given that the controller is advertised as one designed for iPads.</p><p>But I’d also like to note that rumble and haptics aren’t found on that many mobile controllers. These are missing from the GameSir G8 Plus and the Backbone Pro, for instance, and are a limitation of iOS and iPadOS. I really can’t think of any other iPad controller that does feature haptics. This is a major pre-purchase consideration for you to chew over, and the only drawback of using the Kishi V3 Pro XL and other controllers with an iPhone or iPad. In the meantime, I’ve reached out to a Razer representative to get a clearer picture and understanding.</p><h2 id="costs-a-premium">Costs a premium</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="hf4gfMukUEwjmCcsHr8URF" name="Razer_Kishi_V3_Pro_XL" alt="A Razer Kishi V3 Pro XL iPad gaming controller" src="https://cdn.mos.cms.futurecdn.net/hf4gfMukUEwjmCcsHr8URF-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>While the Razer Kishi V3 Pro XL is an excellent iPad controller, there’s no sugarcoating the fact that it’s quite expensive. It retails for <a href="https://www.amazon.com/Kishi-Gaming-Controller-Android-Tablets-Smartphone/dp/B0DVKWZ5SX/" target="_blank" rel="nofollow">$199</a> / <a href="https://www.amazon.co.uk/Razer-Kishi-Pro-Plug-Play/dp/B0F2JD1HS2/" target="_blank" rel="nofollow">£164 at Amazon</a>, making it the most expensive mobile controller I’ve tested so far (at the time of writing). This makes the Kishi V3 Pro XL as expensive as the <a href="https://www.tomsguide.com/reviews/playstation-portal">PlayStation Portal</a> ($199). The standard, smaller Kishi V3 Pro model designed for smartphones is a little cheaper at $149, but is the $50 price difference justified, especially when rivals like the GameSir G8 Plus ($99) are available for far less?</p><p>But the Kishi V3 Pro XL doesn’t have many other competitors. Most other controllers compatible with the iPad take the shape and form of your regular gamepad, like the PlayStation DualSense (which works just fine with the iPad). The biggest difference is, of course, the fact that you need to prop your iPad up on a table to use a standard gamepad, which you don’t need to do with the Kishi V3 Pro XL. It is, then, perhaps justified that the controller costs so much, but the fact that rumble and haptics don’t work as intended leaves a sour taste in my mouth.</p><h2 class="article-body__section" id="section-razer-kishi-v3-pro-xl-review-verdict"><span>Razer Kishi V3 Pro XL review: Verdict</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="QX9RYmpW49JrwQhBYRFy9G" name="Razer_Kishi_V3_Pro_XL" alt="A Razer Kishi V3 Pro XL iPad gaming controller" src="https://cdn.mos.cms.futurecdn.net/QX9RYmpW49JrwQhBYRFy9G-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Razer knows how to make a good gaming peripheral, and the Kishi V3 Pro XL is one of the best iPad accessories you can buy today, especially if you’re a gamer. The controller is ergonomically designed with full-size thumbsticks and triggers, making it perfect for all-day gaming. Passthrough charging also means that you don’t have to worry about your tablet running out of charge mid-gaming.</p><p>I love the TMR thumbsticks and mouse-like analog triggers and extra buttons. They’re all highly responsive in FPS, racing and RPG titles, and they can be customized via the user-friendly app too. But is all of this worth nearly $200, especially when there’s no haptics or rumble on Apple devices? Kinda. The Kishi V3 Pro XL has carved out a niche for itself, and if it’s an ergonomic iPad mobile game controller you need, it’s really the only one to get.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ iPad 12 just got teased by an accessory-maker — and there's a disappointing bit of news ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Apple announced a bunch of incredible new hardware at the start of the year, including the <a href="https://www.tomsguide.com/computing/ipads/apple-ipad-air-m4-review-small-tweaks-to-the-gold-standard">iPad Air M4</a> and the <a href="https://www.tomsguide.com/computing/macbooks/apple-macbook-neo-review">$599 MacBook Neo</a>. But there was one rumored device that never made an appearance — the <a href="https://www.tomsguide.com/computing/ipads/new-ipad-12-and-ipad-air-8-reportedly-coming-soon-and-expect-one-major-upgrade">entry-level iPad 12</a>. Those of you eagerly anticipating a new version of Apple's cheapest tablet are in luck; it sounds like it's still on the way.</p><p>We know that thanks to accessory-maker ESR Tech, which posted a listing for an iPad-12 compatible screen protector (via <a href="https://www.gsmarena.com/ipad_2026_with_a18_chip_is_real_as_revealed_by_accessory_makers_listing__-news-72113.php" target="_blank">GSMArena</a>). The <a href="https://uk.esrtech.com/products/classic-ipad-12th-gen-a18-paper-feel-glass-screen-protectors-2-pack)" target="_blank">listing</a> has since been removed, but it specifically referred to the tablet as the iPad 11" (A18) 2026, so it's absolutely clear which version of the device this screen protector was for. The <a href="https://www.tomsguide.com/computing/ipads/ipad-11-2025-review">iPad 11</a> was released last year and was powered by the A16 chipset, for reference.</p><p>The listing did confirm that the new model has the same dimensions as the iPad 11, so you'd be forgiven for not being able to tell the difference between the two. However, apparent confirmation that the tablet will feature an A18 chip is going to dampen all the rumors suggesting the iPad 12 <a href="https://www.tomsguide.com/computing/ipads/2026-ipad-models-could-get-performance-boost-new-leak-reveals-a19-and-m4-chips">would have an A19 chip</a>.</p><div><blockquote><p>Since the iPad 12 isn't a product that's high-profile enough to warrant a dedicated Apple event, it means the tablet could literally drop at any time.</p></blockquote></div><p>There's not a whole lot more the listing can tell us, but the fact that this page has gone up — even accidentally — might suggest that the iPad 12 launch isn't very far away. The only question is when? Mark Gurman at Bloomberg claims that the tablet is "<a href="https://www.tomsguide.com/computing/ipads/new-ipad-12-and-ipad-air-8-reportedly-coming-soon-and-expect-one-major-upgrade">coming soon</a>" and could launch alongside the <a href="https://www.tomsguide.com/computing/ipads/ipad-mini-8-rumors-everything-we-know-so-far">iPad mini 8</a>. Sadly, this vague release window doesn't tell us much about when to expect either device.</p><p>Since the iPad 12 isn't a product that's high-profile enough to warrant a dedicated Apple event, it means the tablet could literally drop at any time. We're just going to have to be patient and see what happens, and whether Apple will deliver either tablet before <a href="https://www.tomsguide.com/phones/iphones/siri-could-be-the-new-apple-intelligence-as-apple-plans-huge-overhaul-that-could-be-teased-at-wwdc">WWDC 2026</a> in June.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="WpFLKozcf4bymJDV8nbNV" name="iPad 11" alt="iPad 11" src="https://cdn.mos.cms.futurecdn.net/WpFLKozcf4bymJDV8nbNV-1920-80.jpg" mos="" align="middle" fullscreen="" width="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 / Tom's Guide)</span></figcaption></figure><p>There's not a whole lot we know about the iPad 12 right now, other than the fact that it might be the first entry-level iPad to support Apple Intelligence. That would mean an increased amount of RAM, since Apple's AI features require at least 8GB of memory to function.</p><p>We probably shouldn't expect a lot, though. Entry-level iPads are usually pretty barebones compared to the <a href="https://www.tomsguide.com/best-picks/best-ipad">best iPads</a>, including iPad Air and iPad Pro, offering far fewer opportunities for upgrades. Though, as the proud owner of an <a href="https://www.tomsguide.com/reviews/ipad-2022-10th-gen">iPad 10</a>, I would love it if Apple could add a glare-resistant screen and higher brightness in a future model. Trying to use my tablet in a bright place is nearly impossible.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-e4qdQW"></div>                            </div>                            <script src="https://kwizly.com/embed/e4qdQW.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/ai/i-am-not-a-fan-of-ai-apples-steve-wozniak-is-unimpressed-and-thinks-it-cant-replace-humans">'I am not a fan of AI' — Apple's Steve Wozniak is unimpressed and thinks it can't replace humans</a></li><li><a href="https://www.tomsguide.com/phones/iphones/future-iphones-could-pack-a-200mp-camera-heres-what-that-means-for-you">Future iPhones could pack a 200MP camera — here's what that means for you</a></li><li><a href="https://www.tomsguide.com/phones/this-apple-music-feature-is-my-favorite-upgrade-in-ios-26-4-heres-why">This Apple Music feature is my favorite upgrade in iOS 26.4 — here’s why</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/ipads/ipad-12-just-got-teased-by-an-accessory-maker-and-theres-a-disappointing-bit-of-news</link>
                                                                            <description>
                            <![CDATA[ The first iPad 12 accessory listing has shown up online, and that could mean we're pretty close to launch. Sadly there's one upgrade that may not be coming. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">4hzSwSeoPk6ooL39KMsaAm</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/EENuHfMvyDEDbNKeTXA4X-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 26 Mar 2026 12:24:08 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[Computing Peripherals]]></category>
                                                    <category><![CDATA[Tablets]]></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/EENuHfMvyDEDbNKeTXA4X-1280-80.jpg">
                                                            <media:credit><![CDATA[Future / Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Person holding the iPad 11 with the home screen on display outside in front of a bush]]></media:description>                                                            <media:text><![CDATA[Person holding the iPad 11 with the home screen on display outside in front of a bush]]></media:text>
                                <media:title type="plain"><![CDATA[Person holding the iPad 11 with the home screen on display outside in front of a bush]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/EENuHfMvyDEDbNKeTXA4X-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Apple announced a bunch of incredible new hardware at the start of the year, including the <a href="https://www.tomsguide.com/computing/ipads/apple-ipad-air-m4-review-small-tweaks-to-the-gold-standard">iPad Air M4</a> and the <a href="https://www.tomsguide.com/computing/macbooks/apple-macbook-neo-review">$599 MacBook Neo</a>. But there was one rumored device that never made an appearance — the <a href="https://www.tomsguide.com/computing/ipads/new-ipad-12-and-ipad-air-8-reportedly-coming-soon-and-expect-one-major-upgrade">entry-level iPad 12</a>. Those of you eagerly anticipating a new version of Apple's cheapest tablet are in luck; it sounds like it's still on the way.</p><p>We know that thanks to accessory-maker ESR Tech, which posted a listing for an iPad-12 compatible screen protector (via <a href="https://www.gsmarena.com/ipad_2026_with_a18_chip_is_real_as_revealed_by_accessory_makers_listing__-news-72113.php" target="_blank">GSMArena</a>). The <a href="https://uk.esrtech.com/products/classic-ipad-12th-gen-a18-paper-feel-glass-screen-protectors-2-pack)" target="_blank">listing</a> has since been removed, but it specifically referred to the tablet as the iPad 11" (A18) 2026, so it's absolutely clear which version of the device this screen protector was for. The <a href="https://www.tomsguide.com/computing/ipads/ipad-11-2025-review">iPad 11</a> was released last year and was powered by the A16 chipset, for reference.</p><p>The listing did confirm that the new model has the same dimensions as the iPad 11, so you'd be forgiven for not being able to tell the difference between the two. However, apparent confirmation that the tablet will feature an A18 chip is going to dampen all the rumors suggesting the iPad 12 <a href="https://www.tomsguide.com/computing/ipads/2026-ipad-models-could-get-performance-boost-new-leak-reveals-a19-and-m4-chips">would have an A19 chip</a>.</p><div><blockquote><p>Since the iPad 12 isn't a product that's high-profile enough to warrant a dedicated Apple event, it means the tablet could literally drop at any time.</p></blockquote></div><p>There's not a whole lot more the listing can tell us, but the fact that this page has gone up — even accidentally — might suggest that the iPad 12 launch isn't very far away. The only question is when? Mark Gurman at Bloomberg claims that the tablet is "<a href="https://www.tomsguide.com/computing/ipads/new-ipad-12-and-ipad-air-8-reportedly-coming-soon-and-expect-one-major-upgrade">coming soon</a>" and could launch alongside the <a href="https://www.tomsguide.com/computing/ipads/ipad-mini-8-rumors-everything-we-know-so-far">iPad mini 8</a>. Sadly, this vague release window doesn't tell us much about when to expect either device.</p><p>Since the iPad 12 isn't a product that's high-profile enough to warrant a dedicated Apple event, it means the tablet could literally drop at any time. We're just going to have to be patient and see what happens, and whether Apple will deliver either tablet before <a href="https://www.tomsguide.com/phones/iphones/siri-could-be-the-new-apple-intelligence-as-apple-plans-huge-overhaul-that-could-be-teased-at-wwdc">WWDC 2026</a> in June.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="WpFLKozcf4bymJDV8nbNV" name="iPad 11" alt="iPad 11" src="https://cdn.mos.cms.futurecdn.net/WpFLKozcf4bymJDV8nbNV-1920-80.jpg" mos="" align="middle" fullscreen="" width="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 / Tom's Guide)</span></figcaption></figure><p>There's not a whole lot we know about the iPad 12 right now, other than the fact that it might be the first entry-level iPad to support Apple Intelligence. That would mean an increased amount of RAM, since Apple's AI features require at least 8GB of memory to function.</p><p>We probably shouldn't expect a lot, though. Entry-level iPads are usually pretty barebones compared to the <a href="https://www.tomsguide.com/best-picks/best-ipad">best iPads</a>, including iPad Air and iPad Pro, offering far fewer opportunities for upgrades. Though, as the proud owner of an <a href="https://www.tomsguide.com/reviews/ipad-2022-10th-gen">iPad 10</a>, I would love it if Apple could add a glare-resistant screen and higher brightness in a future model. Trying to use my tablet in a bright place is nearly impossible.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-e4qdQW"></div>                            </div>                            <script src="https://kwizly.com/embed/e4qdQW.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/ai/i-am-not-a-fan-of-ai-apples-steve-wozniak-is-unimpressed-and-thinks-it-cant-replace-humans">'I am not a fan of AI' — Apple's Steve Wozniak is unimpressed and thinks it can't replace humans</a></li><li><a href="https://www.tomsguide.com/phones/iphones/future-iphones-could-pack-a-200mp-camera-heres-what-that-means-for-you">Future iPhones could pack a 200MP camera — here's what that means for you</a></li><li><a href="https://www.tomsguide.com/phones/this-apple-music-feature-is-my-favorite-upgrade-in-ios-26-4-heres-why">This Apple Music feature is my favorite upgrade in iOS 26.4 — here’s why</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ The new iPad Air M4 just got its first discount for Amazon's Big Spring Sale — and it earned 4.5 stars in our review ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Winter is finally over, which means it’s time for the <a href="https://www.tomsguide.com/live/news/amazon-big-spring-sale-up-to-40-percent-off-spring-apparel-walking-running-shoes-home-decor-tvs-and-appliances">Amazon Big Spring Sale</a> event. While the deals bonanza doesn’t officially kick off until March 25, Amazon is already slashing prices across the board, including on electronics. To that end, if you’ve had your eye on the new <a href="https://www.tomsguide.com/computing/ipads/apple-ipad-air-m4-review-small-tweaks-to-the-gold-standard">iPad Air M4</a>, you’re in luck, as Apple’s latest tablet has just received a nice discount.</p><p>Right now, the <a href="https://www.amazon.com/Apple-iPad-Air-11-inch-M4/dp/B0GQVPX1PJ?th=1" target="_blank" rel="nofollow">11-inch iPad Air M4 is $559</a> ($40 off), while the <a href="https://www.amazon.com/Apple-iPad-Air-13-inch-M4/dp/B0GQVDGCD2" target="_blank" rel="nofollow">13-inch iPad Air M4 is $735</a> ($64 off) at Amazon. Given how they normally cost $599 and $799 (respectively), you're saving a decent amount of cash. While a nominal upgrade over the <a href="https://www.tomsguide.com/tablets/ipads/ipad-air-m3-review">iPad Air M3</a>, anyone still using an old iPad might want to upgrade—especially if they use their iPad as a MacBook replacement. Here’s why you should consider getting the new iPad Air M4.</p><div class="product"><a data-dimension112="4f688ee1-8300-4c72-83d7-5edd18ff2625" data-action="Deal Block" data-label="11" iPad Air (WiFi/128GB)" data-dimension48="11" iPad Air (WiFi/128GB)" data-dimension25="$559" href="https://www.amazon.com/Apple-iPad-Air-11-inch-M4/dp/B0GQV9W97Q" 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/B0GQV9W97Q" target="_blank" rel="nofollow" data-dimension112="4f688ee1-8300-4c72-83d7-5edd18ff2625" data-action="Deal Block" data-label='11" iPad Air (WiFi/128GB)' data-dimension48='11" iPad Air (WiFi/128GB)' data-dimension25="$559">11" iPad Air (WiFi/128GB): was $599 now $559</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/B0GQV9W97Q" target="_blank" rel="nofollow" data-dimension112="4f688ee1-8300-4c72-83d7-5edd18ff2625" data-action="Deal Block" data-label="11" iPad Air (WiFi/128GB)" data-dimension48="11" iPad Air (WiFi/128GB)" data-dimension25="$559">View Deal</a></p></div><div class="product"><a data-dimension112="c71ebe81-e4f4-4aa2-808b-7f1efe2c1154" data-action="Deal Block" data-label="13" iPad Air (WiFi/128GB)" data-dimension48="13" iPad Air (WiFi/128GB)" data-dimension25="$735" href="https://www.amazon.com/Apple-iPad-Air-13-inch-M4/dp/B0GQVDGCD2" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1368px;"><p class="vanilla-image-block" style="padding-top:109.65%;"><img id="5LtYHnqoh7QQJRLor82SEG" name="iPad Air 13 2024 deal block.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/5LtYHnqoh7QQJRLor82SEG-1920-80.jpg" mos="" align="middle" fullscreen="" width="1368" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Apple-iPad-Air-13-inch-M4/dp/B0GQVDGCD2" target="_blank" rel="nofollow" data-dimension112="c71ebe81-e4f4-4aa2-808b-7f1efe2c1154" data-action="Deal Block" data-label='13" iPad Air (WiFi/128GB)' data-dimension48='13" iPad Air (WiFi/128GB)' data-dimension25="$735">13" iPad Air (WiFi/128GB): was $799 now $735</a></strong><br>This larger size iPad Air sports the same M4 processor, but it's coupled with a 13-inch LED (2732 x 2048) display. Otherwise, it packs the same 128GB of storage, 12MP rear camera, and 12MP front camera. You also get Wi-Fi 7 support, Bluetooth 6, and Thread. The larger display and more potent CPU should make this a great tablet for gaming. <a class="view-deal button" href="https://www.amazon.com/Apple-iPad-Air-13-inch-M4/dp/B0GQVDGCD2" target="_blank" rel="nofollow" data-dimension112="c71ebe81-e4f4-4aa2-808b-7f1efe2c1154" data-action="Deal Block" data-label="13" iPad Air (WiFi/128GB)" data-dimension48="13" iPad Air (WiFi/128GB)" data-dimension25="$735">View Deal</a></p></div><p>Apple didn’t rock the boat with the iPad Air M4. Aside from a spec bump to the <a href="https://www.tomsguide.com/computing/apple-desktops/apple-m4-chip">Apple M4 chip</a> and an upgraded wireless chip that allows Wi-Fi 7, you’re getting the same tablet as before. Again, those with the M3 model don’t need to rush out to get this new M4 variant. That said, this is still a fantastic tablet that hits the sweet spot of (relative) affordability and performance.</p><p>As before, this is a thin, lightweight tablet that’s easy to carry wherever you go. Measuring 0.24 inches thick and weighing just 1.05 pounds, you’ll barely even notice it in your backpack.</p><p>Then there are the still-sharp 12MP cameras, which are great for snapping photos and taking video calls. The 2360 x 1640 resolution on the Liquid Retina display is equally sharp, and in our testing, it nearly reached the advertised 500 nits of brightness, which is excellent. Speaking of testing, the 11-inch iPad Air M4 lasted for 9 hours and 44 minutes, meaning you can use it for a good chunk of the day without a recharge.</p><p>I expect this sale will last for most of the week. However, I can’t ensure there will be stock available, so if you’re in the market for a new iPad, you should take advantage of this deal while it lasts. I promise you won’t regret it.</p><div data-model-name="Apple 13" MacBook Air M4 (2025),Apple MacBook Pro 14-inch M5 (2025),Apple 15" MacBook Air M4 (2025),Apple MacBook Pro 16-inch M4 (2024),Apple Macbook Air (M1 2020)" data-widget-type="multimodelreview" data-widget-title="Today’s MacBook deals"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/ipads/amazon-just-slashed-usd40-off-both-ipad-air-m4-models-for-its-big-spring-sale-event-act-fast</link>
                                                                            <description>
                            <![CDATA[ The Amazon Big Spring Sale kicks off on March 25, but you don't have to wait, as you can save $40 (or more) off the new iPad Air M4 right now! ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">U3L9qk5pCbh2rV2NxusqE6</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/uNiCS2n5dnXuWbH873jdha-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 23 Mar 2026 18:49:11 +0000</pubDate>                                                                                                                                <updated>Mon, 23 Mar 2026 19:37:04 +0000</updated>
                                                                                                                                            <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[Computing Peripherals]]></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/uNiCS2n5dnXuWbH873jdha-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPad Air M4 Amazon Big Spring Sale]]></media:description>                                                            <media:text><![CDATA[iPad Air M4 Amazon Big Spring Sale]]></media:text>
                                <media:title type="plain"><![CDATA[iPad Air M4 Amazon Big Spring Sale]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/uNiCS2n5dnXuWbH873jdha-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Winter is finally over, which means it’s time for the <a href="https://www.tomsguide.com/live/news/amazon-big-spring-sale-up-to-40-percent-off-spring-apparel-walking-running-shoes-home-decor-tvs-and-appliances">Amazon Big Spring Sale</a> event. While the deals bonanza doesn’t officially kick off until March 25, Amazon is already slashing prices across the board, including on electronics. To that end, if you’ve had your eye on the new <a href="https://www.tomsguide.com/computing/ipads/apple-ipad-air-m4-review-small-tweaks-to-the-gold-standard">iPad Air M4</a>, you’re in luck, as Apple’s latest tablet has just received a nice discount.</p><p>Right now, the <a href="https://www.amazon.com/Apple-iPad-Air-11-inch-M4/dp/B0GQVPX1PJ?th=1" target="_blank" rel="nofollow">11-inch iPad Air M4 is $559</a> ($40 off), while the <a href="https://www.amazon.com/Apple-iPad-Air-13-inch-M4/dp/B0GQVDGCD2" target="_blank" rel="nofollow">13-inch iPad Air M4 is $735</a> ($64 off) at Amazon. Given how they normally cost $599 and $799 (respectively), you're saving a decent amount of cash. While a nominal upgrade over the <a href="https://www.tomsguide.com/tablets/ipads/ipad-air-m3-review">iPad Air M3</a>, anyone still using an old iPad might want to upgrade—especially if they use their iPad as a MacBook replacement. Here’s why you should consider getting the new iPad Air M4.</p><div class="product"><a data-dimension112="4f688ee1-8300-4c72-83d7-5edd18ff2625" data-action="Deal Block" data-label="11" iPad Air (WiFi/128GB)" data-dimension48="11" iPad Air (WiFi/128GB)" data-dimension25="$559" href="https://www.amazon.com/Apple-iPad-Air-11-inch-M4/dp/B0GQV9W97Q" 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/B0GQV9W97Q" target="_blank" rel="nofollow" data-dimension112="4f688ee1-8300-4c72-83d7-5edd18ff2625" data-action="Deal Block" data-label='11" iPad Air (WiFi/128GB)' data-dimension48='11" iPad Air (WiFi/128GB)' data-dimension25="$559">11" iPad Air (WiFi/128GB): was $599 now $559</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/B0GQV9W97Q" target="_blank" rel="nofollow" data-dimension112="4f688ee1-8300-4c72-83d7-5edd18ff2625" data-action="Deal Block" data-label="11" iPad Air (WiFi/128GB)" data-dimension48="11" iPad Air (WiFi/128GB)" data-dimension25="$559">View Deal</a></p></div><div class="product"><a data-dimension112="c71ebe81-e4f4-4aa2-808b-7f1efe2c1154" data-action="Deal Block" data-label="13" iPad Air (WiFi/128GB)" data-dimension48="13" iPad Air (WiFi/128GB)" data-dimension25="$735" href="https://www.amazon.com/Apple-iPad-Air-13-inch-M4/dp/B0GQVDGCD2" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1368px;"><p class="vanilla-image-block" style="padding-top:109.65%;"><img id="5LtYHnqoh7QQJRLor82SEG" name="iPad Air 13 2024 deal block.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/5LtYHnqoh7QQJRLor82SEG-1920-80.jpg" mos="" align="middle" fullscreen="" width="1368" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Apple-iPad-Air-13-inch-M4/dp/B0GQVDGCD2" target="_blank" rel="nofollow" data-dimension112="c71ebe81-e4f4-4aa2-808b-7f1efe2c1154" data-action="Deal Block" data-label='13" iPad Air (WiFi/128GB)' data-dimension48='13" iPad Air (WiFi/128GB)' data-dimension25="$735">13" iPad Air (WiFi/128GB): was $799 now $735</a></strong><br>This larger size iPad Air sports the same M4 processor, but it's coupled with a 13-inch LED (2732 x 2048) display. Otherwise, it packs the same 128GB of storage, 12MP rear camera, and 12MP front camera. You also get Wi-Fi 7 support, Bluetooth 6, and Thread. The larger display and more potent CPU should make this a great tablet for gaming. <a class="view-deal button" href="https://www.amazon.com/Apple-iPad-Air-13-inch-M4/dp/B0GQVDGCD2" target="_blank" rel="nofollow" data-dimension112="c71ebe81-e4f4-4aa2-808b-7f1efe2c1154" data-action="Deal Block" data-label="13" iPad Air (WiFi/128GB)" data-dimension48="13" iPad Air (WiFi/128GB)" data-dimension25="$735">View Deal</a></p></div><p>Apple didn’t rock the boat with the iPad Air M4. Aside from a spec bump to the <a href="https://www.tomsguide.com/computing/apple-desktops/apple-m4-chip">Apple M4 chip</a> and an upgraded wireless chip that allows Wi-Fi 7, you’re getting the same tablet as before. Again, those with the M3 model don’t need to rush out to get this new M4 variant. That said, this is still a fantastic tablet that hits the sweet spot of (relative) affordability and performance.</p><p>As before, this is a thin, lightweight tablet that’s easy to carry wherever you go. Measuring 0.24 inches thick and weighing just 1.05 pounds, you’ll barely even notice it in your backpack.</p><p>Then there are the still-sharp 12MP cameras, which are great for snapping photos and taking video calls. The 2360 x 1640 resolution on the Liquid Retina display is equally sharp, and in our testing, it nearly reached the advertised 500 nits of brightness, which is excellent. Speaking of testing, the 11-inch iPad Air M4 lasted for 9 hours and 44 minutes, meaning you can use it for a good chunk of the day without a recharge.</p><p>I expect this sale will last for most of the week. However, I can’t ensure there will be stock available, so if you’re in the market for a new iPad, you should take advantage of this deal while it lasts. I promise you won’t regret it.</p><div data-model-name="Apple 13" MacBook Air M4 (2025),Apple MacBook Pro 14-inch M5 (2025),Apple 15" MacBook Air M4 (2025),Apple MacBook Pro 16-inch M4 (2024),Apple Macbook Air (M1 2020)" data-widget-type="multimodelreview" data-widget-title="Today’s MacBook deals"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Forget the iPad Air M4 — iPad 11 just crashed to under $300 at Amazon right now ]]></title>
                                                                                                <dc:content><![CDATA[ <p>If you're in the market for a new iPad (or your first one) then there's a lot of different models to choose from. But while it can be tempting to go for as much power as you can, I don't think most people need the power of an iPad Pro or even an iPad Air for general use.</p><p>That's why I was <em>very</em> pleased to see the Apple iPad (11th gen) drop back down to under $300 at Amazon this week. The 11-inch, 128GB tablet is currently <a href="https://www.amazon.com/Apple-iPad-11-inch-Display-All-Day/dp/B0DZ7871B8" target="_blank" rel="nofollow">enjoying a 14% reduction that brings it down to just $299 while the deal lasts</a>.</p><div class="product"><a data-dimension112="e9e90c64-a2ba-4f4e-b8e9-f4bcf15814c8" data-action="Deal Block" data-label="11" iPad (11th Gen)" data-dimension48="11" iPad (11th Gen)" data-dimension25="$299" href="https://www.amazon.com/Apple-iPad-11-inch-Display-All-Day/dp/B0DZ7871B8" 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="bkpUUC6QZQWzqjtNLa4NNW" name="iPad 11 deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/bkpUUC6QZQWzqjtNLa4NNW-1920-80.jpg" mos="" align="middle" fullscreen="" width="1080" height="1080" 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/B0DZ7871B8" target="_blank" rel="nofollow" data-dimension112="e9e90c64-a2ba-4f4e-b8e9-f4bcf15814c8" data-action="Deal Block" data-label='11" iPad (11th Gen)' data-dimension48='11" iPad (11th Gen)' data-dimension25="$299">11" iPad (11th Gen): was $349 now $299</a></strong><br>Apple's latest iPad (11th Gen) can just about do it all thanks to its upgraded A16 chip, larger 128GB base storage and longer battery at over 11 hours (it even beats the iPad Air M3 and iPad mini 7). In our 4-star <a href="https://www.tomsguide.com/computing/ipads/ipad-11-2025-review">iPad 11 review</a>, I called it the Apple tablet for most, as it's a great device for watching shows.<a class="view-deal button" href="https://www.amazon.com/Apple-iPad-11-inch-Display-All-Day/dp/B0DZ7871B8" target="_blank" rel="nofollow" data-dimension112="e9e90c64-a2ba-4f4e-b8e9-f4bcf15814c8" data-action="Deal Block" data-label="11" iPad (11th Gen)" data-dimension48="11" iPad (11th Gen)" data-dimension25="$299">View Deal</a></p></div><p>Apple may have just turbocharged the iPad Air with the <a href="https://www.tomsguide.com/computing/ipads/apple-ipad-air-m4-review-small-tweaks-to-the-gold-standard">new iPad Air M4</a>, but as we pointed out in our <a href="https://www.tomsguide.com/computing/ipads/ipad-11-2025-review">iPad 11 review</a>, it's still very capable of doing all the things that most users need: streaming shows, playing some lightweight games, reading websites, and controlling smart home devices or hosting a video call.</p><p>Although it's the entry-level model, Apple made some welcome upgrades to this tablet when it introduced it last year. Storage now starts at 128GB and the A16 Bionic chip keeps the performance nice and speedy. It keeps the same refreshed design as the iPad 10, which means no more Home button and slimmer bezels, giving the 11-inch Liquid Retina (2360 x 1640) display even more prominence.</p><p>The screen is crisp and vivid and whether you want to watch movies or play some lightweight games with Apple Arcade, it's more than up to the task.</p><p>The other big area of improvement for this tablet was in the battery department. During our testing, which involves continuous web surfing over Wi-Fi with a device’s display set to 150 nits of brightness, the iPad 11 lasted 11 hours and 25 minutes. That not only tops its predecessor, but it also beats the <a href="https://www.tomsguide.com/tablets/ipads/ipad-air-m3-review">iPad Air M3</a> and<a href="https://www.tomsguide.com/tablets/ipads/ipad-mini-7-review"> iPad mini 7</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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="eDjraxiBKBUALpMGCWxXW" name="iPad 11" alt="iPad 11" src="https://cdn.mos.cms.futurecdn.net/eDjraxiBKBUALpMGCWxXW-1920-80.jpg" mos="" align="middle" fullscreen="" width="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 / Tom's Guide)</span></figcaption></figure><p>Are there some downsides? A couple: it would be nice if the screen got a little brighter and it's also a bummer the iPad 11 doesn't support the Apple Pencil Pro or the Apple Pencil Gen 2. Considering one of the best use-cases for a tablet is drawing and note-taking, it would have been nice to see them supported. Instead, you'll have to just stick with the <a href="https://www.tomsguide.com/hands-on/apple-pencil-usb-c-hands-on-is-this-pen-mightier">Apple Pencil (USB-C).</a></p><p>But considering this is the most affordable iPad you can buy, I can't be too harsh on its shortcomings. Especially since you can pick it up in a choice of bright colors: Silver, Blue, Pink, Yellow — just beware the blue color only has a 6% discount compared to the 14% on the other versions.</p><div data-model-name="Apple iPad Air (2024),OnePlus Pad,Amazon Fire 7 (2022),Samsung Galaxy Tab S9 Ultra,Apple iPad Pro M5,Microsoft Surface Pro 9" data-widget-type="multimodelreview" data-widget-title="Today’s tablet deals"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/ipads/ipad-11-just-crashed-to-under-usd300-at-amazon-and-its-the-ipad-id-recommend-to-most-people</link>
                                                                            <description>
                            <![CDATA[ The iPad 11 is the perfect choice for anyone looking for a capable iPad at a reasonable price, and it just got even cheaper at Amazon. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">BNZfHYarV6WzmcduWTkyed</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/nN78xhtWGkF25zbReDTnGY-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 17 Mar 2026 11:00:13 +0000</pubDate>                                                                                                                                <updated>Wed, 18 Mar 2026 16:22:23 +0000</updated>
                                                                                                                                            <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[Computing Peripherals]]></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/nN78xhtWGkF25zbReDTnGY-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPad 11 price drop]]></media:description>                                                            <media:text><![CDATA[iPad 11 price drop]]></media:text>
                                <media:title type="plain"><![CDATA[iPad 11 price drop]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/nN78xhtWGkF25zbReDTnGY-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>If you're in the market for a new iPad (or your first one) then there's a lot of different models to choose from. But while it can be tempting to go for as much power as you can, I don't think most people need the power of an iPad Pro or even an iPad Air for general use.</p><p>That's why I was <em>very</em> pleased to see the Apple iPad (11th gen) drop back down to under $300 at Amazon this week. The 11-inch, 128GB tablet is currently <a href="https://www.amazon.com/Apple-iPad-11-inch-Display-All-Day/dp/B0DZ7871B8" target="_blank" rel="nofollow">enjoying a 14% reduction that brings it down to just $299 while the deal lasts</a>.</p><div class="product"><a data-dimension112="e9e90c64-a2ba-4f4e-b8e9-f4bcf15814c8" data-action="Deal Block" data-label="11" iPad (11th Gen)" data-dimension48="11" iPad (11th Gen)" data-dimension25="$299" href="https://www.amazon.com/Apple-iPad-11-inch-Display-All-Day/dp/B0DZ7871B8" 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="bkpUUC6QZQWzqjtNLa4NNW" name="iPad 11 deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/bkpUUC6QZQWzqjtNLa4NNW-1920-80.jpg" mos="" align="middle" fullscreen="" width="1080" height="1080" 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/B0DZ7871B8" target="_blank" rel="nofollow" data-dimension112="e9e90c64-a2ba-4f4e-b8e9-f4bcf15814c8" data-action="Deal Block" data-label='11" iPad (11th Gen)' data-dimension48='11" iPad (11th Gen)' data-dimension25="$299">11" iPad (11th Gen): was $349 now $299</a></strong><br>Apple's latest iPad (11th Gen) can just about do it all thanks to its upgraded A16 chip, larger 128GB base storage and longer battery at over 11 hours (it even beats the iPad Air M3 and iPad mini 7). In our 4-star <a href="https://www.tomsguide.com/computing/ipads/ipad-11-2025-review">iPad 11 review</a>, I called it the Apple tablet for most, as it's a great device for watching shows.<a class="view-deal button" href="https://www.amazon.com/Apple-iPad-11-inch-Display-All-Day/dp/B0DZ7871B8" target="_blank" rel="nofollow" data-dimension112="e9e90c64-a2ba-4f4e-b8e9-f4bcf15814c8" data-action="Deal Block" data-label="11" iPad (11th Gen)" data-dimension48="11" iPad (11th Gen)" data-dimension25="$299">View Deal</a></p></div><p>Apple may have just turbocharged the iPad Air with the <a href="https://www.tomsguide.com/computing/ipads/apple-ipad-air-m4-review-small-tweaks-to-the-gold-standard">new iPad Air M4</a>, but as we pointed out in our <a href="https://www.tomsguide.com/computing/ipads/ipad-11-2025-review">iPad 11 review</a>, it's still very capable of doing all the things that most users need: streaming shows, playing some lightweight games, reading websites, and controlling smart home devices or hosting a video call.</p><p>Although it's the entry-level model, Apple made some welcome upgrades to this tablet when it introduced it last year. Storage now starts at 128GB and the A16 Bionic chip keeps the performance nice and speedy. It keeps the same refreshed design as the iPad 10, which means no more Home button and slimmer bezels, giving the 11-inch Liquid Retina (2360 x 1640) display even more prominence.</p><p>The screen is crisp and vivid and whether you want to watch movies or play some lightweight games with Apple Arcade, it's more than up to the task.</p><p>The other big area of improvement for this tablet was in the battery department. During our testing, which involves continuous web surfing over Wi-Fi with a device’s display set to 150 nits of brightness, the iPad 11 lasted 11 hours and 25 minutes. That not only tops its predecessor, but it also beats the <a href="https://www.tomsguide.com/tablets/ipads/ipad-air-m3-review">iPad Air M3</a> and<a href="https://www.tomsguide.com/tablets/ipads/ipad-mini-7-review"> iPad mini 7</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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="eDjraxiBKBUALpMGCWxXW" name="iPad 11" alt="iPad 11" src="https://cdn.mos.cms.futurecdn.net/eDjraxiBKBUALpMGCWxXW-1920-80.jpg" mos="" align="middle" fullscreen="" width="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 / Tom's Guide)</span></figcaption></figure><p>Are there some downsides? A couple: it would be nice if the screen got a little brighter and it's also a bummer the iPad 11 doesn't support the Apple Pencil Pro or the Apple Pencil Gen 2. Considering one of the best use-cases for a tablet is drawing and note-taking, it would have been nice to see them supported. Instead, you'll have to just stick with the <a href="https://www.tomsguide.com/hands-on/apple-pencil-usb-c-hands-on-is-this-pen-mightier">Apple Pencil (USB-C).</a></p><p>But considering this is the most affordable iPad you can buy, I can't be too harsh on its shortcomings. Especially since you can pick it up in a choice of bright colors: Silver, Blue, Pink, Yellow — just beware the blue color only has a 6% discount compared to the 14% on the other versions.</p><div data-model-name="Apple iPad Air (2024),OnePlus Pad,Amazon Fire 7 (2022),Samsung Galaxy Tab S9 Ultra,Apple iPad Pro M5,Microsoft Surface Pro 9" data-widget-type="multimodelreview" data-widget-title="Today’s tablet deals"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple just discontinued 15 products including one that's only six months old ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Whenever Apple announces new devices it means that some older ones get discontinued. Last week, Apple revealed a slew of new products including the intriguing <a href="https://www.tomsguide.com/computing/macbooks/i-just-went-hands-on-with-the-usd599-macbook-neo-its-game-over-for-chromebooks-and-cheap-windows-laptops">MacBook Neo</a>, budget-friendly <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-17e-review">iPhone 17e</a> and more powerful <a href="https://www.tomsguide.com/computing/macbooks/im-using-pizza-to-explain-apples-m5-pro-and-m5-max-and-now-im-convinced-laptops-are-about-to-change">MacBook Pro M5 Pro/Max</a> laptops.</p><p>As part of streamlining the devices it sells, the company <a href="https://www.macrumors.com/2026/03/06/apple-discontinued-these-15-products-this-week/" target="_blank">discontinued 15 existing devices</a>. Surprisingly, not every device is years old. The oldest was released in 2019, while the most recent only debuted six months ago.</p><p>Here's the list of 15 discontinued products:</p><ul><li><a href="https://www.tomsguide.com/phones/iphones/apple-iphone-16e-review">iPhone 16e</a> with A18 (2025)</li><li><a href="https://www.tomsguide.com/tablets/ipads/ipad-air-m3-review">11-inch iPad Air with M3</a> (2025)</li><li>13-inch iPad Air with M3 (2025)</li><li><a href="https://www.tomsguide.com/computing/laptops/macbook-air-m4-review">13-inch MacBook Air with M4 </a>(2025)</li><li>15-inch MacBook Air with M4 (2025)</li><li>13-inch MacBook Pro with M5 and 512GB storage (2025)</li><li>14-inch MacBook Pro with M4 Pro (2024)</li><li>16-inch MacBook Pro with M4 Pro (2024)</li><li>14-inch MacBook Pro with M4 Max (2024)</li><li>16-inch MacBook Pro with M4 Max (2024)</li><li>Mac Studio with M3 Ultra and 512GB memory (2025)</li><li>Studio Display with A13 Bionic (2022)</li><li>Pro Display XDR (2019)</li><li>Pro Stand for Pro Display XDR (2019)</li><li>Pro Display XDR VESA Mount Adapter (2019)</li></ul><p>For the most part, the Apple is just swapping one product for its updated version. The iPhone 16e gets the boot for the 17e. The M3 iPad Air has been replaced by the <a href="https://www.tomsguide.com/computing/ipads/apple-ipad-air-m4-review-small-tweaks-to-the-gold-standard">M4 version</a>,  the same for the M4 MacBook Air models which have been replaced with <a href="https://www.tomsguide.com/computing/macbooks/macbook-air-m5-review">M5 MacBook Airs.</a></p><p>The surprising discontinuation is the 512GB MacBook Pro M5, which was announced  in October 2025 for $1,599. Instead, the new base model features 1TB of internal storage, and costs $1,699.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-W5lBBe"></div>                            </div>                            <script src="https://kwizly.com/embed/W5lBBe.js" async></script><p>It's unclear if this related to the ongoing <a href="https://www.tomsguide.com/computing/ram-price-crisis-2026-everything-you-need-to-know">memory crisis </a>that is reducing storage and RAM options for many companies.</p><p>Finally, we have the two oldest devices: the original Studio Display from 2022 and the Pro Display XDR (released in 2019), which were replaced by the <a href="https://www.tomsguide.com/computing/monitors/apple-reveals-new-studio-display-xdr-with-120hz-refresh-rate-and-2-000-nits-of-brightness-starting-at-usd3-299">new Studio Display XDR</a> and an updated base version.</p><h2 id="what-does-discontinued-mean-for-your-devices">What does discontinued mean for your devices?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3193px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="UbMJMVGeKd2UvjMvkZZPX6" name="MacBook Air M4 2025-LIST1" alt="MacBook Air 13-inch M4 shown on tabletop" src="https://cdn.mos.cms.futurecdn.net/UbMJMVGeKd2UvjMvkZZPX6-1920-80.jpg" mos="" align="middle" fullscreen="" width="3193" height="1796" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Unlike Apple's vintage or obsolete devices, discontinuation just means the company no longer sells these products through official channels. However, they are still eligible for software updates, repairs and support for at least five to seven years after their initial release date. </p><p>Apple typically places devices on its vintage list around five years after the company stops selling them. At that point, they're unlikely to get software updates, and repairs will only be available as long as parts are available. So if you own any of these discontinued products, you still have some time before you need to consider an upgrade.</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/i-love-my-macbook-air-but-anyone-buying-the-m5-should-absolutely-add-one-one-of-these-must-have-accessories-to-their-shopping-basket">I love my MacBook Air, but anyone buying the M5 should absolutely add one of these must-have accessories to their shopping basket</a></li><li><a href="https://www.tomsguide.com/news/live/apple-march-event-2026-live">Apple March event — MacBook Neo reactions, iPhone 17e and all the new products</a></li><li><a href="https://www.tomsguide.com/phones/iphones/apple-buried-these-3-genuinely-useful-iphone-features-heres-how-to-find-them">Apple buried these 3 genuinely useful iPhone features — here's how to find them</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/apple-just-discontinued-15-products-including-one-thats-only-six-months-old</link>
                                                                            <description>
                            <![CDATA[ Apple just discontinued 15 devices including MacBooks, iPads and an iPhone. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">NpqTgktpC7jEPQzpadfQPd</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/woiZeAU4Z8uQiyybthk226-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 09 Mar 2026 17:25:14 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[MacBooks]]></category>
                                                    <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Computing Peripherals]]></category>
                                                    <category><![CDATA[Tablets]]></category>
                                                    <category><![CDATA[Laptops]]></category>
                                                    <category><![CDATA[Desktop Computers]]></category>
                                                                                                <author><![CDATA[ scott.younker@futurenet.com (Scott Younker) ]]></author>                    <dc:creator><![CDATA[ Scott Younker ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/RZsUpqcJ6Uj2q83oCUwNhQ-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Scott Younker is the West Coast Reporter at Tom’s Guide. He covers all the latest tech news, including phones, computing and more. He’s been involved in tech since 2011 covering everything from cameras and swimming pool equipment to the latest gaming consoles and smart TVs. He is on a seemingly never ending hunt to build the easiest to use home media system. &lt;/p&gt;&lt;p&gt;Before Tom’s Guide, Scott worked for publications like &lt;em&gt;Digital Trends, Outdoor Photographer, Dead Beats Panel&lt;/em&gt;, and in a brief detour, &lt;em&gt;America’s Funniest Home Videos&lt;/em&gt;. Yes, he has seen more pratfalls, silly pets and ridiculous home movie fails than is reasonably healthy. &lt;/p&gt;&lt;p&gt;When not writing about the latest devices or advances in chipsets, be sure to ask about Scott about disc golf and sustainability, or just if you’re being cheeky, ask about his noodle arm. If you truly want to get nerdy, bring up board games and his ongoing losing streak. &lt;/p&gt;&lt;p&gt;Scott joined Tom&#039;s Guide in 2024 as the West Coast Reporter. He graduated from the School of Journalism at the University of Oregon with a degree in magazine journalism and a minor in communications. While there he blogged or wrote for several magazines including the Fluxx, Ethos and the Oregon Commentator. He briefly wrote and managed a moderately successful blog focused on web comics. &lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/woiZeAU4Z8uQiyybthk226-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPhone 16e review.]]></media:description>                                                            <media:text><![CDATA[iPhone 16e review.]]></media:text>
                                <media:title type="plain"><![CDATA[iPhone 16e review.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/woiZeAU4Z8uQiyybthk226-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Whenever Apple announces new devices it means that some older ones get discontinued. Last week, Apple revealed a slew of new products including the intriguing <a href="https://www.tomsguide.com/computing/macbooks/i-just-went-hands-on-with-the-usd599-macbook-neo-its-game-over-for-chromebooks-and-cheap-windows-laptops">MacBook Neo</a>, budget-friendly <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-17e-review">iPhone 17e</a> and more powerful <a href="https://www.tomsguide.com/computing/macbooks/im-using-pizza-to-explain-apples-m5-pro-and-m5-max-and-now-im-convinced-laptops-are-about-to-change">MacBook Pro M5 Pro/Max</a> laptops.</p><p>As part of streamlining the devices it sells, the company <a href="https://www.macrumors.com/2026/03/06/apple-discontinued-these-15-products-this-week/" target="_blank">discontinued 15 existing devices</a>. Surprisingly, not every device is years old. The oldest was released in 2019, while the most recent only debuted six months ago.</p><p>Here's the list of 15 discontinued products:</p><ul><li><a href="https://www.tomsguide.com/phones/iphones/apple-iphone-16e-review">iPhone 16e</a> with A18 (2025)</li><li><a href="https://www.tomsguide.com/tablets/ipads/ipad-air-m3-review">11-inch iPad Air with M3</a> (2025)</li><li>13-inch iPad Air with M3 (2025)</li><li><a href="https://www.tomsguide.com/computing/laptops/macbook-air-m4-review">13-inch MacBook Air with M4 </a>(2025)</li><li>15-inch MacBook Air with M4 (2025)</li><li>13-inch MacBook Pro with M5 and 512GB storage (2025)</li><li>14-inch MacBook Pro with M4 Pro (2024)</li><li>16-inch MacBook Pro with M4 Pro (2024)</li><li>14-inch MacBook Pro with M4 Max (2024)</li><li>16-inch MacBook Pro with M4 Max (2024)</li><li>Mac Studio with M3 Ultra and 512GB memory (2025)</li><li>Studio Display with A13 Bionic (2022)</li><li>Pro Display XDR (2019)</li><li>Pro Stand for Pro Display XDR (2019)</li><li>Pro Display XDR VESA Mount Adapter (2019)</li></ul><p>For the most part, the Apple is just swapping one product for its updated version. The iPhone 16e gets the boot for the 17e. The M3 iPad Air has been replaced by the <a href="https://www.tomsguide.com/computing/ipads/apple-ipad-air-m4-review-small-tweaks-to-the-gold-standard">M4 version</a>,  the same for the M4 MacBook Air models which have been replaced with <a href="https://www.tomsguide.com/computing/macbooks/macbook-air-m5-review">M5 MacBook Airs.</a></p><p>The surprising discontinuation is the 512GB MacBook Pro M5, which was announced  in October 2025 for $1,599. Instead, the new base model features 1TB of internal storage, and costs $1,699.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-W5lBBe"></div>                            </div>                            <script src="https://kwizly.com/embed/W5lBBe.js" async></script><p>It's unclear if this related to the ongoing <a href="https://www.tomsguide.com/computing/ram-price-crisis-2026-everything-you-need-to-know">memory crisis </a>that is reducing storage and RAM options for many companies.</p><p>Finally, we have the two oldest devices: the original Studio Display from 2022 and the Pro Display XDR (released in 2019), which were replaced by the <a href="https://www.tomsguide.com/computing/monitors/apple-reveals-new-studio-display-xdr-with-120hz-refresh-rate-and-2-000-nits-of-brightness-starting-at-usd3-299">new Studio Display XDR</a> and an updated base version.</p><h2 id="what-does-discontinued-mean-for-your-devices">What does discontinued mean for your devices?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3193px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="UbMJMVGeKd2UvjMvkZZPX6" name="MacBook Air M4 2025-LIST1" alt="MacBook Air 13-inch M4 shown on tabletop" src="https://cdn.mos.cms.futurecdn.net/UbMJMVGeKd2UvjMvkZZPX6-1920-80.jpg" mos="" align="middle" fullscreen="" width="3193" height="1796" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Unlike Apple's vintage or obsolete devices, discontinuation just means the company no longer sells these products through official channels. However, they are still eligible for software updates, repairs and support for at least five to seven years after their initial release date. </p><p>Apple typically places devices on its vintage list around five years after the company stops selling them. At that point, they're unlikely to get software updates, and repairs will only be available as long as parts are available. So if you own any of these discontinued products, you still have some time before you need to consider an upgrade.</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/i-love-my-macbook-air-but-anyone-buying-the-m5-should-absolutely-add-one-one-of-these-must-have-accessories-to-their-shopping-basket">I love my MacBook Air, but anyone buying the M5 should absolutely add one of these must-have accessories to their shopping basket</a></li><li><a href="https://www.tomsguide.com/news/live/apple-march-event-2026-live">Apple March event — MacBook Neo reactions, iPhone 17e and all the new products</a></li><li><a href="https://www.tomsguide.com/phones/iphones/apple-buried-these-3-genuinely-useful-iphone-features-heres-how-to-find-them">Apple buried these 3 genuinely useful iPhone features — here's how to find them</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple iPad Air M4 review: Small tweaks to the gold standard ]]></title>
                                                                                                <dc:content><![CDATA[ <p>If it ain’t broke, why fix it? Like many other 2026 releases (see the iPhone 17e and Google Pixel 10a), this year’s update to the iPad Air is largely iterative. Apple has updated the processor to an M4 chip, and it has upgraded its wireless chip to Wi-Fi 7, but everything else is pretty much the same: same cameras, same design, same display, even the same battery life. </p><p>In fact, a lot of the iPad Air’s specs are nearly the same as the <a href="https://www.tomsguide.com/reviews/ipad-air-4-2020">iPad Air 4</a>, which came out six years ago. It has the same resolution display, has the same dimensions, the same rear camera, and weighs just as much. However, Apple has kept its starting price the same for all that time, and increased the starting storage capacity to 128GB (along with some other improvements).</p><p>All that being said, is this still the <a href="https://www.tomsguide.com/best-picks/best-tablet"><u>best tablet </u></a>for most people? I would say yes, but is this the best Apple device for $599? That’s another question entirely.</p><h3 class="article-body__section" id="section-what-s-new"><span>What’s new</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="gjkALa9KdvR9XMRyuGjGbi" name="iPad Air M4" alt="iPad Air M4" src="https://cdn.mos.cms.futurecdn.net/gjkALa9KdvR9XMRyuGjGbi-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Two things have changed between this year’s model and last. The 2026 iPad Air is now powered by Apple’s M4 processor. The tablet also has Apple’s new networking chips: The N1, which has Wi-Fi 7, Bluetooth 6, and Thread networking; and on models with cellular connectivity, the C1X, which delivers 5G (sub‑6 GHz) with 4x4 MIMO and Gigabit LTE with 4x4 MIMO.</p><p>Obviously, network connectivity will vary greatly on a number of factors, but on Verizon’s 5G network with four bars of service, I was able to download a 2.98GB video file in 1 minute and 25 seconds. </p><h3 class="article-body__section" id="section-how-much-does-it-cost"><span>How much does it cost?</span></h3><p>The iPad Air M4 is available for preorder, and goes on sale on March 11, 2026. The base model 11-inch iPad Air costs $599 and comes with 128GB of storage. The starting price for the 13-inch Air is $799, also with 128GB of storage. Both models can be configured with up to 1TB of disk space, and you can get them in one of four colors: space gray, blue, purple, and starlight. </p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>11-inch iPad Air (Wi-Fi)</strong></p></td><td  ><p><strong>13-inch iPad Air (Wi-Fi)</strong></p></td></tr><tr><td class="firstcol " ><p>128GB</p></td><td  ><p>$599</p></td><td  ><p>$799</p></td></tr><tr><td class="firstcol " ><p>256GB</p></td><td  ><p>$699</p></td><td  ><p>$899</p></td></tr><tr><td class="firstcol " ><p>512GB</p></td><td  ><p>$899</p></td><td  ><p>$1,099</p></td></tr><tr><td class="firstcol " ><p>1TB</p></td><td  ><p>$1,099</p></td><td  ><p>$1,299</p></td></tr></tbody></table></div><p>If you want cellular connectivity, add an extra $150 to each of these prices.</p><p>Apple sent us an 11-inch Air with 1TB of storage and cellular connectivity, which boosts the price to $1,249. At that point, I would advise springing for a laptop or an iPad Pro. </p><p>Then of course, there’s the accessories. An Apple Pencil will set you back $79, while the Apple Pencil Pro costs $129. The Magic Keyboard for the iPad Air costs $269. At least you get free engraving. </p><h3 class="article-body__section" id="section-what-i-like"><span>What I like</span></h3><h2 id="classic-if-aging-design">Classic — if aging — design</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/KYMShNfeuSD8aw38XHRbJ-1920-80.jpg" alt="iPad Air M4 held in landscape mode" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/P2onUe3S65XPF97vszhBNX-1920-80.jpg" alt="iPad Air M4 held in portrait mode" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/ZPRNm85fUhR2uRBvhfs4D7-1920-80.jpg" alt="iPad Air M4 being held to show its thinness" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/SvrvK7oxr6hfZcwAbith9Q-1920-80.jpg" alt="iPad Air M4 rear" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/uJyH22i8R98vCoLmqY6XUT-1920-80.jpg" alt="iPad Air M4 buttons" /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>I wouldn't go so far to say that the Air's design has calcified, but if you go back several generations, you'll see little has changed from year to year. The M4 Air has the same design as the <a href="https://www.tomsguide.com/reviews/ipad-air-4-2020">Air Apple released back in 2020</a>. To be sure, it's a great look — thin, light, and a nice slim bezel all the way around. </p><p>Despite the “Air” moniker, there’s not much difference in weight or thickness between this and the regular iPad. The Air measures 9.74 x 7.02 x 0.24 inches and weighs 1.02 pounds, while the 11-inch iPad measures 9.79 x 7.07 x 0.28 inches and weighs 1.05 pounds. Ironically, the 11-inch iPad Pro is the lightest and thinnest of the lot, at 0.98 pounds and 0.21 inches. It does have a larger footprint of 9.88 x 6.99 inches, though.</p><p>Still, this is a very comfortable tablet to hold for extended periods of time. </p><h2 id="beautiful-display">Beautiful 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="2DjYj7Z2JwEmzSkBiDfqkB" name="iPad Air M4" alt="iPad Air M4 being held in landscape mode" src="https://cdn.mos.cms.futurecdn.net/2DjYj7Z2JwEmzSkBiDfqkB-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Watching movies, TV shows, and YouTube clips on the Air’s display was a delight. Like last year’s version, the M4 iPad Air has a bright, crisp, and colorful Retina screen that made everything just pop. For example, when I watched “K Pop Demon Hunters” on Netflix, Rumi, Mira, and Zoey all looked, well, golden on the display.  </p><p>It’s exactly the same, with a resolution of 2360 x 1640, and a rated brightness of 500 nits. In our lab tests, we measured a top brightness of 489 nits (also nearly the same as last year), which is pretty close. </p><p>On our other display tests, the Air’s screen was able to display 116% of the sRGB color gamut, and 82.3% of the DCI-P3 gamut (more is better). It’s Delta-E score of 0.28 (where numbers closer to 0 are better) also show that the colors it displays are very close to accurate.</p><p>Interestingly, the Air’s results are nearly identical to those of the <a href="https://www.tomsguide.com/computing/ipads/ipad-pro-m5-review">iPad Pro M5</a>, which has an OLED display.  </p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>iPad Air M4 11-inch (2026)</strong></p></td><td  ><p><strong>iPad Air 11-inch M3 (2025)</strong></p></td><td  ><p><strong>iPad Air M1 (2022)</strong></p></td><td  ><p><strong>iPad Air 4 (2020)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Delta-E</strong></p></td><td  ><p>0.28</p></td><td  ><p>not tested</p></td><td  ><p>0.29</p></td><td  ><p>0.17</p></td></tr><tr><td class="firstcol " ><p><strong>sRGB</strong></p></td><td  ><p>116.2</p></td><td  ><p>not tested</p></td><td  ><p>111.8</p></td><td  ><p>102.9</p></td></tr><tr><td class="firstcol " ><p><strong>DCI-P3</strong></p></td><td  ><p>82.3</p></td><td  ><p>not tested</p></td><td  ><p>79.2%</p></td><td  ><p>72.9</p></td></tr><tr><td class="firstcol " ><p><strong>Brightness</strong></p></td><td  ><p>489</p></td><td  ><p>485</p></td><td  ><p>484</p></td><td  ><p>440</p></td></tr></tbody></table></div><h2 id="multitasking-prowess">Multitasking prowess</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="VAPJ4nF982yks7PoJofaRF" name="iPad Air M4" alt="iPad Air M4 with magic keyboard folio" src="https://cdn.mos.cms.futurecdn.net/VAPJ4nF982yks7PoJofaRF-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>It’s not quite a desktop experience, but it’s close. One of the new features of iPadOS 26 is the ability to have multiple apps open in resizable windows, which you can move about the screen. </p><p>While the 11-inch iPad Air I tested is a bit small for true multitasking, it was nice to be able to make multiple apps open side-by-side, and to be able to move and resize each window as I liked. </p><p>Now powered by an M4 chip, the iPad Air is modestly faster than last year’s <a href="https://www.tomsguide.com/tablets/ipads/ipad-air-m3-review">iPad Air M3</a>. On our benchmark tests, it scored appreciably faster, both in single- and multicore, as well as in frame rate tests. The most notable difference you’ll see is if you go back a couple of generations; the M4 iPad scored nearly two times higher than the M1 Air on our Geekbench test.</p><p>Are you going to notice the difference in everyday use? Probably not, unless you’re planning to do some pretty intense video editing, but if that’s your plan, the more powerful iPad Pro might be more your speed. </p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>iPad Air M4 11-inch (2026)</strong></p></td><td  ><p><strong>iPad Air 11-inch M3 (2025)</strong></p></td><td  ><p><strong>iPad Air M1 (2022)</strong></p></td><td  ><p><strong>iPad Air 4 (2020)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Geekbench 6 (single)</strong></p></td><td  ><p>3745</p></td><td  ><p>3042</p></td><td  ><p>1707  (Geekbench 5)</p></td><td  ><p>1591 (Geekbench 5)</p></td></tr><tr><td class="firstcol " ><p><strong>Geekbench 6 (multi)</strong></p></td><td  ><p>13342</p></td><td  ><p>11804</p></td><td  ><p>7,151 (Geekbench 5)</p></td><td  ><p>4,262</p><p>(Geekbench 5)</p></td></tr><tr><td class="firstcol " ><p><strong>Wild Life Extreme Unlimited</strong></p></td><td  ><p>40.3</p></td><td  ><p>34.80</p></td><td  ><p>28.67</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p><strong>Wild Life Unlimited</strong></p></td><td  ><p>189.3</p></td><td  ><p>156.83</p></td><td  ><p>107.6</p></td><td  ><p>53</p></td></tr></tbody></table></div><h2 id="good-cameras">Good cameras</h2><p>Both the front and rear cameras on the iPad Air have a resolution of 12MP, though the front-facing camera has a much wider field of view, so as to take advantage of Center Stage, which can automatically track and frame you during FaceTime calls. It’s a handy feature to have, especially if you’re trying to cram several people into the shot. The rear camera  lets you choose from a regular shot, square, or panorama. There’s no Portrait mode, however.  </p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/U8krbAjaGMTniCoQP58XfR-1920-80.jpg" alt="A photo taken with the iPad Air M4 front camera" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/sisekLuQU5CHZmrW6cNehV-1920-80.jpg" alt="a photo taken with the iPad Air M4's front camera on wide angle setting" /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>Photos from both cameras were pleasing, but not spectacular. The front camera did a good job of keeping my face properly exposed, even with a bright light source behind my head. The rear camera also adequately pulled up the details and colors of a shelf full of books, though, as with any photo, zooming in too far quickly resulted in a loss of definition. However, pictures from both cameras exhibited a good deal of graininess at full size.</p><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:75.00%;"><img id="HJ8VsNvUbCSUASkU5Kqn6c" name="iPad M4 rear camera" alt="a photo taken with the iPad M4's rear camera" src="https://cdn.mos.cms.futurecdn.net/HJ8VsNvUbCSUASkU5Kqn6c-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="3024" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><h3 class="article-body__section" id="section-what-i-didn-t-like"><span>What I didn't like</span></h3><h2 id="no-faceid">No FaceID</h2><p>You can unlock the iPad Air using TouchID on its power button, but just like last year, Apple has reserved FaceID for its iPad Pro models. It’s a small annoyance, but doesn’t feel like this is so much of a premium feature as to limit it to the company’s highest-end tablets.</p><h2 id="pricey-accessories">Pricey accessories</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="7xaBCkUaZ6h5SShfW5XoBK" name="iPad Air M4 with magic keyboard folio" alt="iPad Air M4 with magic keyboard folio" src="https://cdn.mos.cms.futurecdn.net/7xaBCkUaZ6h5SShfW5XoBK-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>I used the Magic Folio Keyboard to type parts of this review, and while it’s a little cramped compared to a laptop’s keyboard, the keys were plenty snappy and responsive, and within minutes I was typing at or near my regular rate. The touchpad was also very accurate, and I never had an instance where my cursor ended up where it shouldn’t have been. For the price, though, I wish the keys were backlit. And, $269 is a lot to ask, especially when you can find compatible third-party options for half as much.</p><h2 id="battery-life-is-exactly-the-same-and-less-than-its-predecessors">Battery life is exactly the same — and less than its predecessors</h2><p>I get that the Air delivers better performance per watt than the previous model, but I would have liked just a little more endurance. To be sure, its battery life of 9 hours and 44 minutes, as tested, is great for an 11-inch tablet, but a touch more wouldn’t hurt, especially considering the M1 and the iPad 4 were both able to break the 10-hour mark on our tests.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>iPad Air M4 11-inch (2026)</strong></p></td><td  ><p><strong>iPad Air 11-inch M3 (2025)</strong></p></td><td  ><p><strong>iPad Air M1 (2022)</strong></p></td><td  ><p><strong>iPad Air 4 (2020)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Battery life</strong></p></td><td  ><p>9:44:29</p></td><td  ><p>9:41:12</p></td><td  ><p>10:09</p></td><td  ><p>10:29</p></td></tr><tr><td class="firstcol " ><p><strong>Charge after 30 mins</strong></p></td><td  ><p>27%</p></td><td  ><p>24%</p></td><td  ><p>25%</p></td><td  ><p>25%</p></td></tr></tbody></table></div><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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Svsb9sq7KQttiyCVoX32qf" name="iPad Air M4 with keyboard folio" alt="iPad Air M4 with keyboard folio" src="https://cdn.mos.cms.futurecdn.net/Svsb9sq7KQttiyCVoX32qf-1920-80.jpg" mos="" align="middle" fullscreen="" width="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 M4 iPad Air is a modest upgrade over last year’s model, but when you make one of the <a href="https://www.tomsguide.com/best-picks/best-tablet">best tablets</a> there is, and there’s no real challenger, then maybe each new year doesn’t need to see a completely new reinvention. </p><p>If you have an older iPad — say, from the M1 generation or before — and you see its battery life taking a big hit, then you might want to consider an upgrade, though that model also supports iPadOS 26. The M4 Air also has a Center Stage camera, which the M1 series lacks.</p><p>The question I suspect many will have is whether they should buy the iPad Air or spring for the <a href="https://www.tomsguide.com/computing/macbooks/i-just-went-hands-on-with-the-usd599-macbook-neo-its-game-over-for-chromebooks-and-cheap-windows-laptops">Macbook Neo</a>, which is $250 less when you factor in the cost of the Air’s keyboard. While the Air has a touchscreen and is more portable, its value proposition when compared to Apple’s laptops is now a lot more questionable if you’re looking for an inexpensive productivity device. </p><p>Yes, the iPad Air is the best Apple tablet for the masses, but it may have just been superseded by the Neo as the best cheap Apple product for getting stuff done.</p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/ipads/apple-ipad-air-m4-review-small-tweaks-to-the-gold-standard</link>
                                                                            <description>
                            <![CDATA[ The Apple iPad Air M4 features an upgraded processor, Wi-Fi 7, and faster connection speeds, but the rest has been carried over from last year's model. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">JrVjmdvRr7HATqxzScmqcS</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/aVibVk9GjLFeDVWKA5PvYd-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 09 Mar 2026 13:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Tablets]]></category>
                                                                                                <author><![CDATA[ mike.prospero@futurenet.com (Mike Prospero) ]]></author>                    <dc:creator><![CDATA[ Mike Prospero ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/6ZM8mX4UwccqDJTh9gLPqV-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Michael A. Prospero is the U.S. Editor-in-Chief for Tom’s Guide. He oversees all evergreen content and oversees the Homes, Smart Home, and Fitness/Wearables categories for the site. In his spare time, he also tests out the latest drones, electric scooters, and smart home gadgets, such as video doorbells. Before his tenure at Tom&#039;s Guide, he was the Reviews Editor for Laptop Magazine, a reporter at Fast Company, the Times of Trenton, and, many eons back, an intern at George magazine. He received his undergraduate degree from Boston College, where he worked on the campus newspaper The Heights, and then attended the Columbia University school of Journalism. When he’s not testing out the latest running watch, electric scooter, or skiing or training for a marathon, he’s probably using the latest sous vide machine, smoker, or pizza oven, to the delight — or chagrin — of his family.&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/aVibVk9GjLFeDVWKA5PvYd-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPad Air M4 with magic keyboard folio]]></media:description>                                                            <media:text><![CDATA[iPad Air M4 with magic keyboard folio]]></media:text>
                                <media:title type="plain"><![CDATA[iPad Air M4 with magic keyboard folio]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/aVibVk9GjLFeDVWKA5PvYd-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>If it ain’t broke, why fix it? Like many other 2026 releases (see the iPhone 17e and Google Pixel 10a), this year’s update to the iPad Air is largely iterative. Apple has updated the processor to an M4 chip, and it has upgraded its wireless chip to Wi-Fi 7, but everything else is pretty much the same: same cameras, same design, same display, even the same battery life. </p><p>In fact, a lot of the iPad Air’s specs are nearly the same as the <a href="https://www.tomsguide.com/reviews/ipad-air-4-2020">iPad Air 4</a>, which came out six years ago. It has the same resolution display, has the same dimensions, the same rear camera, and weighs just as much. However, Apple has kept its starting price the same for all that time, and increased the starting storage capacity to 128GB (along with some other improvements).</p><p>All that being said, is this still the <a href="https://www.tomsguide.com/best-picks/best-tablet"><u>best tablet </u></a>for most people? I would say yes, but is this the best Apple device for $599? That’s another question entirely.</p><h3 class="article-body__section" id="section-what-s-new"><span>What’s new</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="gjkALa9KdvR9XMRyuGjGbi" name="iPad Air M4" alt="iPad Air M4" src="https://cdn.mos.cms.futurecdn.net/gjkALa9KdvR9XMRyuGjGbi-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Two things have changed between this year’s model and last. The 2026 iPad Air is now powered by Apple’s M4 processor. The tablet also has Apple’s new networking chips: The N1, which has Wi-Fi 7, Bluetooth 6, and Thread networking; and on models with cellular connectivity, the C1X, which delivers 5G (sub‑6 GHz) with 4x4 MIMO and Gigabit LTE with 4x4 MIMO.</p><p>Obviously, network connectivity will vary greatly on a number of factors, but on Verizon’s 5G network with four bars of service, I was able to download a 2.98GB video file in 1 minute and 25 seconds. </p><h3 class="article-body__section" id="section-how-much-does-it-cost"><span>How much does it cost?</span></h3><p>The iPad Air M4 is available for preorder, and goes on sale on March 11, 2026. The base model 11-inch iPad Air costs $599 and comes with 128GB of storage. The starting price for the 13-inch Air is $799, also with 128GB of storage. Both models can be configured with up to 1TB of disk space, and you can get them in one of four colors: space gray, blue, purple, and starlight. </p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>11-inch iPad Air (Wi-Fi)</strong></p></td><td  ><p><strong>13-inch iPad Air (Wi-Fi)</strong></p></td></tr><tr><td class="firstcol " ><p>128GB</p></td><td  ><p>$599</p></td><td  ><p>$799</p></td></tr><tr><td class="firstcol " ><p>256GB</p></td><td  ><p>$699</p></td><td  ><p>$899</p></td></tr><tr><td class="firstcol " ><p>512GB</p></td><td  ><p>$899</p></td><td  ><p>$1,099</p></td></tr><tr><td class="firstcol " ><p>1TB</p></td><td  ><p>$1,099</p></td><td  ><p>$1,299</p></td></tr></tbody></table></div><p>If you want cellular connectivity, add an extra $150 to each of these prices.</p><p>Apple sent us an 11-inch Air with 1TB of storage and cellular connectivity, which boosts the price to $1,249. At that point, I would advise springing for a laptop or an iPad Pro. </p><p>Then of course, there’s the accessories. An Apple Pencil will set you back $79, while the Apple Pencil Pro costs $129. The Magic Keyboard for the iPad Air costs $269. At least you get free engraving. </p><h3 class="article-body__section" id="section-what-i-like"><span>What I like</span></h3><h2 id="classic-if-aging-design">Classic — if aging — design</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/KYMShNfeuSD8aw38XHRbJ-1920-80.jpg" alt="iPad Air M4 held in landscape mode" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/P2onUe3S65XPF97vszhBNX-1920-80.jpg" alt="iPad Air M4 held in portrait mode" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/ZPRNm85fUhR2uRBvhfs4D7-1920-80.jpg" alt="iPad Air M4 being held to show its thinness" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/SvrvK7oxr6hfZcwAbith9Q-1920-80.jpg" alt="iPad Air M4 rear" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/uJyH22i8R98vCoLmqY6XUT-1920-80.jpg" alt="iPad Air M4 buttons" /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>I wouldn't go so far to say that the Air's design has calcified, but if you go back several generations, you'll see little has changed from year to year. The M4 Air has the same design as the <a href="https://www.tomsguide.com/reviews/ipad-air-4-2020">Air Apple released back in 2020</a>. To be sure, it's a great look — thin, light, and a nice slim bezel all the way around. </p><p>Despite the “Air” moniker, there’s not much difference in weight or thickness between this and the regular iPad. The Air measures 9.74 x 7.02 x 0.24 inches and weighs 1.02 pounds, while the 11-inch iPad measures 9.79 x 7.07 x 0.28 inches and weighs 1.05 pounds. Ironically, the 11-inch iPad Pro is the lightest and thinnest of the lot, at 0.98 pounds and 0.21 inches. It does have a larger footprint of 9.88 x 6.99 inches, though.</p><p>Still, this is a very comfortable tablet to hold for extended periods of time. </p><h2 id="beautiful-display">Beautiful 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="2DjYj7Z2JwEmzSkBiDfqkB" name="iPad Air M4" alt="iPad Air M4 being held in landscape mode" src="https://cdn.mos.cms.futurecdn.net/2DjYj7Z2JwEmzSkBiDfqkB-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Watching movies, TV shows, and YouTube clips on the Air’s display was a delight. Like last year’s version, the M4 iPad Air has a bright, crisp, and colorful Retina screen that made everything just pop. For example, when I watched “K Pop Demon Hunters” on Netflix, Rumi, Mira, and Zoey all looked, well, golden on the display.  </p><p>It’s exactly the same, with a resolution of 2360 x 1640, and a rated brightness of 500 nits. In our lab tests, we measured a top brightness of 489 nits (also nearly the same as last year), which is pretty close. </p><p>On our other display tests, the Air’s screen was able to display 116% of the sRGB color gamut, and 82.3% of the DCI-P3 gamut (more is better). It’s Delta-E score of 0.28 (where numbers closer to 0 are better) also show that the colors it displays are very close to accurate.</p><p>Interestingly, the Air’s results are nearly identical to those of the <a href="https://www.tomsguide.com/computing/ipads/ipad-pro-m5-review">iPad Pro M5</a>, which has an OLED display.  </p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>iPad Air M4 11-inch (2026)</strong></p></td><td  ><p><strong>iPad Air 11-inch M3 (2025)</strong></p></td><td  ><p><strong>iPad Air M1 (2022)</strong></p></td><td  ><p><strong>iPad Air 4 (2020)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Delta-E</strong></p></td><td  ><p>0.28</p></td><td  ><p>not tested</p></td><td  ><p>0.29</p></td><td  ><p>0.17</p></td></tr><tr><td class="firstcol " ><p><strong>sRGB</strong></p></td><td  ><p>116.2</p></td><td  ><p>not tested</p></td><td  ><p>111.8</p></td><td  ><p>102.9</p></td></tr><tr><td class="firstcol " ><p><strong>DCI-P3</strong></p></td><td  ><p>82.3</p></td><td  ><p>not tested</p></td><td  ><p>79.2%</p></td><td  ><p>72.9</p></td></tr><tr><td class="firstcol " ><p><strong>Brightness</strong></p></td><td  ><p>489</p></td><td  ><p>485</p></td><td  ><p>484</p></td><td  ><p>440</p></td></tr></tbody></table></div><h2 id="multitasking-prowess">Multitasking prowess</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="VAPJ4nF982yks7PoJofaRF" name="iPad Air M4" alt="iPad Air M4 with magic keyboard folio" src="https://cdn.mos.cms.futurecdn.net/VAPJ4nF982yks7PoJofaRF-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>It’s not quite a desktop experience, but it’s close. One of the new features of iPadOS 26 is the ability to have multiple apps open in resizable windows, which you can move about the screen. </p><p>While the 11-inch iPad Air I tested is a bit small for true multitasking, it was nice to be able to make multiple apps open side-by-side, and to be able to move and resize each window as I liked. </p><p>Now powered by an M4 chip, the iPad Air is modestly faster than last year’s <a href="https://www.tomsguide.com/tablets/ipads/ipad-air-m3-review">iPad Air M3</a>. On our benchmark tests, it scored appreciably faster, both in single- and multicore, as well as in frame rate tests. The most notable difference you’ll see is if you go back a couple of generations; the M4 iPad scored nearly two times higher than the M1 Air on our Geekbench test.</p><p>Are you going to notice the difference in everyday use? Probably not, unless you’re planning to do some pretty intense video editing, but if that’s your plan, the more powerful iPad Pro might be more your speed. </p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>iPad Air M4 11-inch (2026)</strong></p></td><td  ><p><strong>iPad Air 11-inch M3 (2025)</strong></p></td><td  ><p><strong>iPad Air M1 (2022)</strong></p></td><td  ><p><strong>iPad Air 4 (2020)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Geekbench 6 (single)</strong></p></td><td  ><p>3745</p></td><td  ><p>3042</p></td><td  ><p>1707  (Geekbench 5)</p></td><td  ><p>1591 (Geekbench 5)</p></td></tr><tr><td class="firstcol " ><p><strong>Geekbench 6 (multi)</strong></p></td><td  ><p>13342</p></td><td  ><p>11804</p></td><td  ><p>7,151 (Geekbench 5)</p></td><td  ><p>4,262</p><p>(Geekbench 5)</p></td></tr><tr><td class="firstcol " ><p><strong>Wild Life Extreme Unlimited</strong></p></td><td  ><p>40.3</p></td><td  ><p>34.80</p></td><td  ><p>28.67</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p><strong>Wild Life Unlimited</strong></p></td><td  ><p>189.3</p></td><td  ><p>156.83</p></td><td  ><p>107.6</p></td><td  ><p>53</p></td></tr></tbody></table></div><h2 id="good-cameras">Good cameras</h2><p>Both the front and rear cameras on the iPad Air have a resolution of 12MP, though the front-facing camera has a much wider field of view, so as to take advantage of Center Stage, which can automatically track and frame you during FaceTime calls. It’s a handy feature to have, especially if you’re trying to cram several people into the shot. The rear camera  lets you choose from a regular shot, square, or panorama. There’s no Portrait mode, however.  </p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/U8krbAjaGMTniCoQP58XfR-1920-80.jpg" alt="A photo taken with the iPad Air M4 front camera" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/sisekLuQU5CHZmrW6cNehV-1920-80.jpg" alt="a photo taken with the iPad Air M4's front camera on wide angle setting" /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>Photos from both cameras were pleasing, but not spectacular. The front camera did a good job of keeping my face properly exposed, even with a bright light source behind my head. The rear camera also adequately pulled up the details and colors of a shelf full of books, though, as with any photo, zooming in too far quickly resulted in a loss of definition. However, pictures from both cameras exhibited a good deal of graininess at full size.</p><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:75.00%;"><img id="HJ8VsNvUbCSUASkU5Kqn6c" name="iPad M4 rear camera" alt="a photo taken with the iPad M4's rear camera" src="https://cdn.mos.cms.futurecdn.net/HJ8VsNvUbCSUASkU5Kqn6c-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="3024" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><h3 class="article-body__section" id="section-what-i-didn-t-like"><span>What I didn't like</span></h3><h2 id="no-faceid">No FaceID</h2><p>You can unlock the iPad Air using TouchID on its power button, but just like last year, Apple has reserved FaceID for its iPad Pro models. It’s a small annoyance, but doesn’t feel like this is so much of a premium feature as to limit it to the company’s highest-end tablets.</p><h2 id="pricey-accessories">Pricey accessories</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="7xaBCkUaZ6h5SShfW5XoBK" name="iPad Air M4 with magic keyboard folio" alt="iPad Air M4 with magic keyboard folio" src="https://cdn.mos.cms.futurecdn.net/7xaBCkUaZ6h5SShfW5XoBK-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>I used the Magic Folio Keyboard to type parts of this review, and while it’s a little cramped compared to a laptop’s keyboard, the keys were plenty snappy and responsive, and within minutes I was typing at or near my regular rate. The touchpad was also very accurate, and I never had an instance where my cursor ended up where it shouldn’t have been. For the price, though, I wish the keys were backlit. And, $269 is a lot to ask, especially when you can find compatible third-party options for half as much.</p><h2 id="battery-life-is-exactly-the-same-and-less-than-its-predecessors">Battery life is exactly the same — and less than its predecessors</h2><p>I get that the Air delivers better performance per watt than the previous model, but I would have liked just a little more endurance. To be sure, its battery life of 9 hours and 44 minutes, as tested, is great for an 11-inch tablet, but a touch more wouldn’t hurt, especially considering the M1 and the iPad 4 were both able to break the 10-hour mark on our tests.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>iPad Air M4 11-inch (2026)</strong></p></td><td  ><p><strong>iPad Air 11-inch M3 (2025)</strong></p></td><td  ><p><strong>iPad Air M1 (2022)</strong></p></td><td  ><p><strong>iPad Air 4 (2020)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Battery life</strong></p></td><td  ><p>9:44:29</p></td><td  ><p>9:41:12</p></td><td  ><p>10:09</p></td><td  ><p>10:29</p></td></tr><tr><td class="firstcol " ><p><strong>Charge after 30 mins</strong></p></td><td  ><p>27%</p></td><td  ><p>24%</p></td><td  ><p>25%</p></td><td  ><p>25%</p></td></tr></tbody></table></div><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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Svsb9sq7KQttiyCVoX32qf" name="iPad Air M4 with keyboard folio" alt="iPad Air M4 with keyboard folio" src="https://cdn.mos.cms.futurecdn.net/Svsb9sq7KQttiyCVoX32qf-1920-80.jpg" mos="" align="middle" fullscreen="" width="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 M4 iPad Air is a modest upgrade over last year’s model, but when you make one of the <a href="https://www.tomsguide.com/best-picks/best-tablet">best tablets</a> there is, and there’s no real challenger, then maybe each new year doesn’t need to see a completely new reinvention. </p><p>If you have an older iPad — say, from the M1 generation or before — and you see its battery life taking a big hit, then you might want to consider an upgrade, though that model also supports iPadOS 26. The M4 Air also has a Center Stage camera, which the M1 series lacks.</p><p>The question I suspect many will have is whether they should buy the iPad Air or spring for the <a href="https://www.tomsguide.com/computing/macbooks/i-just-went-hands-on-with-the-usd599-macbook-neo-its-game-over-for-chromebooks-and-cheap-windows-laptops">Macbook Neo</a>, which is $250 less when you factor in the cost of the Air’s keyboard. While the Air has a touchscreen and is more portable, its value proposition when compared to Apple’s laptops is now a lot more questionable if you’re looking for an inexpensive productivity device. </p><p>Yes, the iPad Air is the best Apple tablet for the masses, but it may have just been superseded by the Neo as the best cheap Apple product for getting stuff done.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ iPad Air M4 first benchmarks have leaked online — here's how much faster it is ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The<a href="https://www.tomsguide.com/computing/ipads/ipad-air-m4-the-3-biggest-upgrades-for-apples-new-tablet"> iPad Air M4</a> might not have been released yet, but it looks like the first set of performance benchmark results have already appeared online. Or at least, Geekbench has published two sets of results that list an iPad identifier of iPad 16,11, We can't actually verify the legitimacy of the results until we get a chance to test the tablet for ourselves.</p><p><a href="https://www.macrumors.com/2026/03/03/first-m4-ipad-air-benchmarks-surface/" target="_blank">MacRumors</a> spotted the results, and both sets list the identifier that seems to correspond to the 13-inch iPad Air M4 with Wi-Fi and Cellular connectivity. According to the results, the first test saw the tablet score 3,483 in a single-core test and 12,885 in the multi-core test. The second test recorded 3,714 and 12,296, respectively.</p><div><blockquote><p>If these M4 scores are the real deal, then we're looking at a pretty reasonable improvement in performance.</p></blockquote></div><p>For reference, testing for our <a href="https://www.tomsguide.com/tablets/ipads/ipad-air-m3-review">iPad Air M3</a> saw the tablet hit 3,042 in single-core Geekbench testing and 11,804 in the multi-core test. So if these M4 scores are the real deal, then we're looking at a pretty reasonable improvement in performance. </p><p>That is a 14.5% and 9.1% in crease for the first set of results, and 22% and 4.1% increase for the second set. Which is a fairly impressive improvement for single-core benchmarking, even if the multi-core scores haven't risen quite as much. </p><p>It's always worth remembering that even if these are legitimate iPad Air M4 benchmark tests, there's no telling how things might change once the tablets actually go on sale. Once we reach March 11 and the Air M4 goes on sale, we're likely to see a lot more benchmark test results hit the web.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="fi2qDmfRotYEXS7DWjckUS" name="iPad Air M4 2" alt="iPad Air M4" src="https://cdn.mos.cms.futurecdn.net/fi2qDmfRotYEXS7DWjckUS-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>That should give us a better idea of how much better the iPad Air M4's performance actually is compared to its predecessor. Not to mention the fact that we can test plenty of other things like battery life, graphical performance and even display quality. Only then can we decide whether it's worthy for inclusion on our list of the <a href="https://www.tomsguide.com/best-picks/best-tablet">best tablets</a>. It's looking good so far, I'll admit.</p><p>Stay tuned to Tom's Guide for our full iPad Air M4 review in the coming weeks, but in the meantime, make sure to check out our <a href="https://www.tomsguide.com/news/live/apple-march-event-2026-live">Apple March event live blog</a> for a rundown of all the biggest announcements of the week.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OaxP5W"></div>                            </div>                            <script src="https://kwizly.com/embed/OaxP5W.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/computing/macbooks/whoops-apple-accidentally-revealed-the-cheap-macbook-early-meet-macbook-neo">MacBook Neo just revealed early — meet the new cheap MacBook</a></li><li><a href="https://www.tomsguide.com/computing/ipads/macbook-pro-m5-pro-max-vs-macbook-pro-m4-pro-max-the-biggest-upgrades">MacBook Pro M5 Pro/Max vs MacBook Pro M4 Pro/Max: The biggest upgrades</a></li><li><a href="https://www.tomsguide.com/computing/ipads/ipad-air-m4-preorders-im-a-deals-expert-and-this-is-when-i-expect-the-first-deals">iPad Air M4 preorders: I'm a deals expert and this is when I expect the first deals</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/ipads/ipad-air-m4-first-benchmarks-have-leaked-online-heres-how-much-faster-it-is</link>
                                                                            <description>
                            <![CDATA[ iPad Air M4 benchmarking results have appeared online, and it looks like there could be a notable performance boost this year. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">RH6hVdisN8hfcHWMEbCJoY</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/3a6TGjpXp4zK6HB8kXoBag-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 04 Mar 2026 11:57:13 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Tablets]]></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/3a6TGjpXp4zK6HB8kXoBag-1280-80.jpg">
                                                            <media:credit><![CDATA[Apple]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPad Air M4 lede]]></media:description>                                                            <media:text><![CDATA[iPad Air M4 lede]]></media:text>
                                <media:title type="plain"><![CDATA[iPad Air M4 lede]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/3a6TGjpXp4zK6HB8kXoBag-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The<a href="https://www.tomsguide.com/computing/ipads/ipad-air-m4-the-3-biggest-upgrades-for-apples-new-tablet"> iPad Air M4</a> might not have been released yet, but it looks like the first set of performance benchmark results have already appeared online. Or at least, Geekbench has published two sets of results that list an iPad identifier of iPad 16,11, We can't actually verify the legitimacy of the results until we get a chance to test the tablet for ourselves.</p><p><a href="https://www.macrumors.com/2026/03/03/first-m4-ipad-air-benchmarks-surface/" target="_blank">MacRumors</a> spotted the results, and both sets list the identifier that seems to correspond to the 13-inch iPad Air M4 with Wi-Fi and Cellular connectivity. According to the results, the first test saw the tablet score 3,483 in a single-core test and 12,885 in the multi-core test. The second test recorded 3,714 and 12,296, respectively.</p><div><blockquote><p>If these M4 scores are the real deal, then we're looking at a pretty reasonable improvement in performance.</p></blockquote></div><p>For reference, testing for our <a href="https://www.tomsguide.com/tablets/ipads/ipad-air-m3-review">iPad Air M3</a> saw the tablet hit 3,042 in single-core Geekbench testing and 11,804 in the multi-core test. So if these M4 scores are the real deal, then we're looking at a pretty reasonable improvement in performance. </p><p>That is a 14.5% and 9.1% in crease for the first set of results, and 22% and 4.1% increase for the second set. Which is a fairly impressive improvement for single-core benchmarking, even if the multi-core scores haven't risen quite as much. </p><p>It's always worth remembering that even if these are legitimate iPad Air M4 benchmark tests, there's no telling how things might change once the tablets actually go on sale. Once we reach March 11 and the Air M4 goes on sale, we're likely to see a lot more benchmark test results hit the web.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="fi2qDmfRotYEXS7DWjckUS" name="iPad Air M4 2" alt="iPad Air M4" src="https://cdn.mos.cms.futurecdn.net/fi2qDmfRotYEXS7DWjckUS-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>That should give us a better idea of how much better the iPad Air M4's performance actually is compared to its predecessor. Not to mention the fact that we can test plenty of other things like battery life, graphical performance and even display quality. Only then can we decide whether it's worthy for inclusion on our list of the <a href="https://www.tomsguide.com/best-picks/best-tablet">best tablets</a>. It's looking good so far, I'll admit.</p><p>Stay tuned to Tom's Guide for our full iPad Air M4 review in the coming weeks, but in the meantime, make sure to check out our <a href="https://www.tomsguide.com/news/live/apple-march-event-2026-live">Apple March event live blog</a> for a rundown of all the biggest announcements of the week.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OaxP5W"></div>                            </div>                            <script src="https://kwizly.com/embed/OaxP5W.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/computing/macbooks/whoops-apple-accidentally-revealed-the-cheap-macbook-early-meet-macbook-neo">MacBook Neo just revealed early — meet the new cheap MacBook</a></li><li><a href="https://www.tomsguide.com/computing/ipads/macbook-pro-m5-pro-max-vs-macbook-pro-m4-pro-max-the-biggest-upgrades">MacBook Pro M5 Pro/Max vs MacBook Pro M4 Pro/Max: The biggest upgrades</a></li><li><a href="https://www.tomsguide.com/computing/ipads/ipad-air-m4-preorders-im-a-deals-expert-and-this-is-when-i-expect-the-first-deals">iPad Air M4 preorders: I'm a deals expert and this is when I expect the first deals</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ MacBook Pro M5 Pro/Max vs MacBook Pro M4 Pro/Max: The biggest upgrades ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Apple is holding a series of product reveals this week, but one that many have had their eye on is the reveal of fresh MacBook Pro models featuring the new M5 Pro and M5 Max chips.</p><p>While <a href="https://www.tomsguide.com/computing/macbooks/a-touchscreen-macbook-is-reportedly-on-the-way-but-it-might-not-be-what-you-want">touchscreen Macs are reportedly on their way</a>, this announcement is an update of what the <a href="https://www.tomsguide.com/computing/macbooks/macbook-pro-m5-review">14-inch MacBook Pro M5</a> model kicked off last year. We get a similar chassis, but a much more powerful chip, along with other refinements.</p><p>Should you upgrade from an M4 Pro or Max model? Here's what we know to help you decide.</p><h2 id="macbook-pro-m4-pro-max-vs-macbook-pro-m5-pro-max-specs">MacBook Pro M4 Pro/Max vs MacBook Pro M5 Pro/Max: Specs</h2><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>MacBook Pro M5 Pro/Max</strong></p></td><td  ><p><strong>MacBook Pro M4 Pro/Max</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Starting price</strong></p></td><td  ><p>From $2199 (M5 Pro, 14 inch)</p></td><td  ><p>From $1999 (M4 Pro, 14 inch)</p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>14.2 inch Liquid Retina XDR display with 3024x1964 resolution.</p><p>16.2 inch Liquid Retina XDR display with 3456x2234 resolution.</p></td><td  ><p>14.2 inch Liquid Retina XDR display with 3024x1964 resolution.</p><p>16.2 inch Liquid Retina XDR display with 3456x2234 resolution.</p></td></tr><tr><td class="firstcol " ><p><strong>Chipset</strong></p></td><td  ><p>M4 Pro or M4 Max</p></td><td  ><p>M4 Pro or M4 Max</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>16GB, 24GB, 36 GB, 48GB, 64GB and 128GB options</p></td><td  ><p>24GB, 36GB, 48GB options</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>1TB, 2TB, 4TB or 8TB options</p></td><td  ><p>512GB, 1TB, 2TB, 4TB options</p></td></tr><tr><td class="firstcol " ><p><strong>Ports</strong></p></td><td  ><p>SDXC card slot, HDMI port, 3.5mm headphone jack, MagSafe 3 port</p></td><td  ><p>SDXC card slot, HDMI port, 3.5mm headphone jack, MagSafe 3 port</p></td></tr><tr><td class="firstcol " ><p><strong>Front camera</strong></p></td><td  ><p>12MP Center Stage Camera</p></td><td  ><p>12MP Center Stage Camera</p></td></tr><tr><td class="firstcol " ><p><strong>Size</strong></p></td><td  ><p>8.71x12.31x0.61 inches (14 inch)</p><p>9.77x14.01x0.66 inches (16 inch)</p></td><td  ><p>8.71x12.31x0.61 inches (14 inch)</p><p>9.77x14.01x0.66 inches (16 inch)</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>3.4 lbs (14 inch), 4.7 lbs (16 inch)</p></td><td  ><p>3.4 lbs (14 inch), 4.7 lbs (16 inch)</p></td></tr><tr><td class="firstcol " ><p><strong>Colors</strong></p></td><td  ><p>Space Black, Silver</p></td><td  ><p>Space Black, Silver</p></td></tr></tbody></table></div><h2 id="macbook-pro-m5-pro-max-vs-macbook-pro-m4-pro-max-price">MacBook Pro M5 Pro/Max vs MacBook Pro M4 Pro/Max: 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="tZL2itbTcURRWD5kLtnr4h" name="MacBook Pro M5 Pro" alt="MacBook Pro M5 Pro" src="https://cdn.mos.cms.futurecdn.net/tZL2itbTcURRWD5kLtnr4h-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>The MacBook Pro M5 Pro starts at $2199. Meanwhile, the 16-inch M5 Pro now starts at $2,699. In short, both models cost $200 more than their respective predecessors' starting prices.</p><p>The base M5 model isn't available for the 16-inch form factor, so that one starts at $2699 with the M5 Pro, 24GB of RAM and 1TB of storage. Apple is no longer selling the M4 Pro/Max models of these laptops.</p><p>Apple is justifying these hikes by doubling the base storage. You can no longer get a Pro MacBook with 512GB; everything now starts at 1TB for the Pro and 2TB for the Max. If you were already planning to upgrade your storage on the M4, the price jump is essentially a wash, but it raises the barrier to entry.</p><h2 id="macbook-pro-m5-pro-max-vs-macbook-pro-m4-pro-max-design-and-display">MacBook Pro M5 Pro/Max vs MacBook Pro M4 Pro/Max: Design and 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bqpjmxpSXPM92gcmxEjC8T" name="MacBook Pro M5 Pro edit 3" alt="MacBook Pro M5 Pro" src="https://cdn.mos.cms.futurecdn.net/bqpjmxpSXPM92gcmxEjC8T-1920-80.jpg" mos="" align="middle" fullscreen="" width="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 year's model certainly looks familiar because it carries the same design that debuted in 2021 with the M1 Pro models of the MacBook Pro.</p><p>It might be getting a little long in the tooth, but Apple seems committed to the current design at least until touchscreen Macs arrive.</p><p>That means you get a 14-inch or 16-inch model, with both packing the Liquid Retina XDR display for high resolution and high contrast, as well as ProMotion for adaptive refresh rates up to 120Hz, which is ideal for gaming or smoother scrolling.</p><p>As with the base 14-inch MacBook Pro M5, you can upgrade to a nano-texture glass display, which does an excellent job of reducing screen glare. Just be aware that this upgrade costs an extra $150.</p><h2 id="macbook-pro-m5-pro-max-vs-macbook-pro-m4-pro-max-performance">MacBook Pro M5 Pro/Max vs MacBook Pro M4 Pro/Max: Performance</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="K4HS4b59bmNnxL7DT6U3Tj" name="MacBook Pro M5 Pro and Max chips" alt="MacBook Pro M5 Pro" src="https://cdn.mos.cms.futurecdn.net/K4HS4b59bmNnxL7DT6U3Tj-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>The new laptops feature the equally new M5 Pro and M5 Max chips. Apple says these chips leverage the company's new Fusion Architecture to scale the capabilities of Apple silicon, while preserving performance, power efficiency, and unified memory architecture.</p><p>As for real-world numbers, the M5 Pro has 20 percent increased graphical performance over the M4 Pro model, according to Apple. The company also says the improved CPU boosts performance by 30 percent.</p><p>Thanks to the new Fusion Architecture that connects two dies on a single SoC (system on a chip), the CPU is an 18-core beast with 6 'super cores' from the M5 and 12 performance cores. The 16-core Neural Engine is faster for AI features, too, and there are Thunderbolt 5 ports for connectivity, along with support for Wi-Fi 7 and Bluetooth 6.</p><p>Speaking of new chips, the M5 Pro and M5 Max now have the Apple N1 chip, bringing Wi-Fi 7 and Bluetooth 6.0 to Apple’s most powerful laptops. Thunderbolt 5 is also now standard on all Pro and Max models, which is a major win for anyone using high-speed external storage or multiple 6K displays.</p><h2 id="macbook-pro-m5-pro-max-vs-macbook-pro-m4-pro-max-outlook">MacBook Pro M5 Pro/Max vs MacBook Pro M4 Pro/Max: Outlook</h2><p>The MacBook Pro lineup might just be the best it has ever been right now, but you likely don't need to rush out and upgrade from an M4 Pro or Max model unless you're, well, really running up against the considerable headroom both provide.</p><p>For just about anything else, you probably won't notice major differences day to day. But if you're buying a MacBook Pro today and need it to handle heavy workloads, be sure you're opting for the new model.</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-march-event-2026-live">Apple March event LIVE: iPhone 17e, iPad Air M4 and every big announcement</a></li><li><a href="https://www.tomsguide.com/computing/macbooks/iphone-17e-announced-with-a19-chip-double-the-storage-and-magsafe-price-release-date-and-all-the-upgrades">iPhone 17e announced with A19 chip, double the storage and MagSafe — price, release date and all the upgrades</a></li><li><a href="https://www.tomsguide.com/computing/macbooks/cheap-macbook-a18-pro-everything-we-know-so-far">Apple's cheap MacBook: Rumored specs, price, release date</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/ipads/macbook-pro-m5-pro-max-vs-macbook-pro-m4-pro-max-the-biggest-upgrades</link>
                                                                            <description>
                            <![CDATA[ The MacBook Pro M5 Pro is here, but is it a big step up from the prior generation? We compare the two to see the big differences. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">oMksXp7fHk7QVTpJKnMV7Z</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/MUrsAUgxed9VPvmBwGVaf9-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 04 Mar 2026 06:15:00 +0000</pubDate>                                                                                                                                <updated>Wed, 04 Mar 2026 15:33:22 +0000</updated>
                                                                                                                                            <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Tablets]]></category>
                                                                                                                    <dc:creator><![CDATA[ Lloyd Coombes ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/xcWocVTwa9yiwXRs559XNA-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Lloyd Coombes is a freelance tech and fitness writer. He&#039;s an expert in all things Apple as well as in computer and gaming tech, with previous works published on TechRadar, Tom&#039;s Guide, Live Science and more. You&#039;ll find him regularly testing the latest MacBook or iPhone, but he spends most of his time writing about video games as Gaming Editor for the Daily Star. He also covers board games and virtual reality, just to round out the nerdy pursuits.&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/MUrsAUgxed9VPvmBwGVaf9-1280-80.jpg">
                                                            <media:credit><![CDATA[Apple/Tom’s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[MacBook Pro M5 vs MacBook Pro M4]]></media:description>                                                            <media:text><![CDATA[MacBook Pro M5 vs MacBook Pro M4]]></media:text>
                                <media:title type="plain"><![CDATA[MacBook Pro M5 vs MacBook Pro M4]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/MUrsAUgxed9VPvmBwGVaf9-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Apple is holding a series of product reveals this week, but one that many have had their eye on is the reveal of fresh MacBook Pro models featuring the new M5 Pro and M5 Max chips.</p><p>While <a href="https://www.tomsguide.com/computing/macbooks/a-touchscreen-macbook-is-reportedly-on-the-way-but-it-might-not-be-what-you-want">touchscreen Macs are reportedly on their way</a>, this announcement is an update of what the <a href="https://www.tomsguide.com/computing/macbooks/macbook-pro-m5-review">14-inch MacBook Pro M5</a> model kicked off last year. We get a similar chassis, but a much more powerful chip, along with other refinements.</p><p>Should you upgrade from an M4 Pro or Max model? Here's what we know to help you decide.</p><h2 id="macbook-pro-m4-pro-max-vs-macbook-pro-m5-pro-max-specs">MacBook Pro M4 Pro/Max vs MacBook Pro M5 Pro/Max: Specs</h2><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>MacBook Pro M5 Pro/Max</strong></p></td><td  ><p><strong>MacBook Pro M4 Pro/Max</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Starting price</strong></p></td><td  ><p>From $2199 (M5 Pro, 14 inch)</p></td><td  ><p>From $1999 (M4 Pro, 14 inch)</p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>14.2 inch Liquid Retina XDR display with 3024x1964 resolution.</p><p>16.2 inch Liquid Retina XDR display with 3456x2234 resolution.</p></td><td  ><p>14.2 inch Liquid Retina XDR display with 3024x1964 resolution.</p><p>16.2 inch Liquid Retina XDR display with 3456x2234 resolution.</p></td></tr><tr><td class="firstcol " ><p><strong>Chipset</strong></p></td><td  ><p>M4 Pro or M4 Max</p></td><td  ><p>M4 Pro or M4 Max</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>16GB, 24GB, 36 GB, 48GB, 64GB and 128GB options</p></td><td  ><p>24GB, 36GB, 48GB options</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>1TB, 2TB, 4TB or 8TB options</p></td><td  ><p>512GB, 1TB, 2TB, 4TB options</p></td></tr><tr><td class="firstcol " ><p><strong>Ports</strong></p></td><td  ><p>SDXC card slot, HDMI port, 3.5mm headphone jack, MagSafe 3 port</p></td><td  ><p>SDXC card slot, HDMI port, 3.5mm headphone jack, MagSafe 3 port</p></td></tr><tr><td class="firstcol " ><p><strong>Front camera</strong></p></td><td  ><p>12MP Center Stage Camera</p></td><td  ><p>12MP Center Stage Camera</p></td></tr><tr><td class="firstcol " ><p><strong>Size</strong></p></td><td  ><p>8.71x12.31x0.61 inches (14 inch)</p><p>9.77x14.01x0.66 inches (16 inch)</p></td><td  ><p>8.71x12.31x0.61 inches (14 inch)</p><p>9.77x14.01x0.66 inches (16 inch)</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>3.4 lbs (14 inch), 4.7 lbs (16 inch)</p></td><td  ><p>3.4 lbs (14 inch), 4.7 lbs (16 inch)</p></td></tr><tr><td class="firstcol " ><p><strong>Colors</strong></p></td><td  ><p>Space Black, Silver</p></td><td  ><p>Space Black, Silver</p></td></tr></tbody></table></div><h2 id="macbook-pro-m5-pro-max-vs-macbook-pro-m4-pro-max-price">MacBook Pro M5 Pro/Max vs MacBook Pro M4 Pro/Max: 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="tZL2itbTcURRWD5kLtnr4h" name="MacBook Pro M5 Pro" alt="MacBook Pro M5 Pro" src="https://cdn.mos.cms.futurecdn.net/tZL2itbTcURRWD5kLtnr4h-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>The MacBook Pro M5 Pro starts at $2199. Meanwhile, the 16-inch M5 Pro now starts at $2,699. In short, both models cost $200 more than their respective predecessors' starting prices.</p><p>The base M5 model isn't available for the 16-inch form factor, so that one starts at $2699 with the M5 Pro, 24GB of RAM and 1TB of storage. Apple is no longer selling the M4 Pro/Max models of these laptops.</p><p>Apple is justifying these hikes by doubling the base storage. You can no longer get a Pro MacBook with 512GB; everything now starts at 1TB for the Pro and 2TB for the Max. If you were already planning to upgrade your storage on the M4, the price jump is essentially a wash, but it raises the barrier to entry.</p><h2 id="macbook-pro-m5-pro-max-vs-macbook-pro-m4-pro-max-design-and-display">MacBook Pro M5 Pro/Max vs MacBook Pro M4 Pro/Max: Design and 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bqpjmxpSXPM92gcmxEjC8T" name="MacBook Pro M5 Pro edit 3" alt="MacBook Pro M5 Pro" src="https://cdn.mos.cms.futurecdn.net/bqpjmxpSXPM92gcmxEjC8T-1920-80.jpg" mos="" align="middle" fullscreen="" width="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 year's model certainly looks familiar because it carries the same design that debuted in 2021 with the M1 Pro models of the MacBook Pro.</p><p>It might be getting a little long in the tooth, but Apple seems committed to the current design at least until touchscreen Macs arrive.</p><p>That means you get a 14-inch or 16-inch model, with both packing the Liquid Retina XDR display for high resolution and high contrast, as well as ProMotion for adaptive refresh rates up to 120Hz, which is ideal for gaming or smoother scrolling.</p><p>As with the base 14-inch MacBook Pro M5, you can upgrade to a nano-texture glass display, which does an excellent job of reducing screen glare. Just be aware that this upgrade costs an extra $150.</p><h2 id="macbook-pro-m5-pro-max-vs-macbook-pro-m4-pro-max-performance">MacBook Pro M5 Pro/Max vs MacBook Pro M4 Pro/Max: Performance</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="K4HS4b59bmNnxL7DT6U3Tj" name="MacBook Pro M5 Pro and Max chips" alt="MacBook Pro M5 Pro" src="https://cdn.mos.cms.futurecdn.net/K4HS4b59bmNnxL7DT6U3Tj-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>The new laptops feature the equally new M5 Pro and M5 Max chips. Apple says these chips leverage the company's new Fusion Architecture to scale the capabilities of Apple silicon, while preserving performance, power efficiency, and unified memory architecture.</p><p>As for real-world numbers, the M5 Pro has 20 percent increased graphical performance over the M4 Pro model, according to Apple. The company also says the improved CPU boosts performance by 30 percent.</p><p>Thanks to the new Fusion Architecture that connects two dies on a single SoC (system on a chip), the CPU is an 18-core beast with 6 'super cores' from the M5 and 12 performance cores. The 16-core Neural Engine is faster for AI features, too, and there are Thunderbolt 5 ports for connectivity, along with support for Wi-Fi 7 and Bluetooth 6.</p><p>Speaking of new chips, the M5 Pro and M5 Max now have the Apple N1 chip, bringing Wi-Fi 7 and Bluetooth 6.0 to Apple’s most powerful laptops. Thunderbolt 5 is also now standard on all Pro and Max models, which is a major win for anyone using high-speed external storage or multiple 6K displays.</p><h2 id="macbook-pro-m5-pro-max-vs-macbook-pro-m4-pro-max-outlook">MacBook Pro M5 Pro/Max vs MacBook Pro M4 Pro/Max: Outlook</h2><p>The MacBook Pro lineup might just be the best it has ever been right now, but you likely don't need to rush out and upgrade from an M4 Pro or Max model unless you're, well, really running up against the considerable headroom both provide.</p><p>For just about anything else, you probably won't notice major differences day to day. But if you're buying a MacBook Pro today and need it to handle heavy workloads, be sure you're opting for the new model.</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-march-event-2026-live">Apple March event LIVE: iPhone 17e, iPad Air M4 and every big announcement</a></li><li><a href="https://www.tomsguide.com/computing/macbooks/iphone-17e-announced-with-a19-chip-double-the-storage-and-magsafe-price-release-date-and-all-the-upgrades">iPhone 17e announced with A19 chip, double the storage and MagSafe — price, release date and all the upgrades</a></li><li><a href="https://www.tomsguide.com/computing/macbooks/cheap-macbook-a18-pro-everything-we-know-so-far">Apple's cheap MacBook: Rumored specs, price, release date</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ iPad Air M4: The 3 biggest upgrades for Apple's new tablet ]]></title>
                                                                                                <dc:content><![CDATA[ <p><a href="https://www.tomsguide.com/news/live/apple-march-event-2026-live">Apple's March event</a> is off to a big start, as the company just announced the all-new <a href="https://www.tomsguide.com/computing/ipads/ipad-air-m4-announced-with-more-power-and-wi-fi-7-price-release-date-and-full-specs">iPad Air M4</a>. Clearly, the star of the show here is the speedy performance from the M4 chip, but that's not the only upgrade coming to Apple's popular tablet.</p><p>The iPad Air M4 upgrade is set to deliver faster CPU and GPU speeds, so expect greater performance for editing, gaming and creative work. With the <a href="https://www.tomsguide.com/tablets/ipads/ipad-air-m3-review">iPad Air M3</a> already being one of the <a href="https://www.tomsguide.com/best-picks/best-tablet">best tablets</a> around, this takes Apple's popular tablet a step further — all for the same $599 starting price.</p><p>As expected, the new iPad Air isn't a major revamp, as it's more of a spec bump. So, what else is new? As it turns out, there are a few more changes that make Apple's latest Air model even better value than its predecessor. Here are the biggest upgrades you can expect.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OaxjjW"></div>                            </div>                            <script src="https://kwizly.com/embed/OaxjjW.js" async></script><h2 id="m4-delivers-even-faster-performance">M4 delivers even faster performance</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="3a6TGjpXp4zK6HB8kXoBag" name="iPad Air M4 lede" alt="iPad Air M4 lede" src="https://cdn.mos.cms.futurecdn.net/3a6TGjpXp4zK6HB8kXoBag-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Let's start with the main attraction: M4. We've seen this chip in action in the <a href="https://www.tomsguide.com/tablets/ipads/ipad-pro-2024">iPad Pro M4</a>, and we've been blown away by the performance it offers, especially for the price. </p><p>Now, the M4 comes to the iPad Air, with Apple claiming a 30% speed boost over the iPad Air M3. This means you're getting the might of the M4-equipped MacBook Air in the form of a tablet, and also for a much more affordable price of $599.</p><p>The M4 chip in the new iPad comes with an 8-core CPU (with three performance cores and five efficiency cores), a 9-core GPU and a 16-core Neural Engine. That's actually the same as the M3, although that comes with four performance and efficiency cores. </p><p>We'll have to test the iPad Air M4 once we get our hands on it, but here's a look at the performance gains we can expect over the iPad Air M3, comparing it to our Geekbench benchmarks on the iPad Pro M4 and <a href="https://www.tomsguide.com/computing/laptops/macbook-air-m4-review">MacBook Air M4</a>: </p><div ><table><caption>Geekbench results</caption><thead><tr><th class="firstcol empty" ></th><th  ><p>Geekbench 6 single-core</p></th><th  ><p>Geekbench 6 multi-core</p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>M4 iPad Pro 11-inch</strong></p></td><td  ><p>3700</p></td><td  ><p>14523</p></td></tr><tr><td class="firstcol " ><p><strong>M4 MacBook Air 13-inch</strong></p></td><td  ><p>3751</p></td><td  ><p>14947</p></td></tr><tr><td class="firstcol " ><p><strong>M3 iPad Air 11-inch</strong></p></td><td  ><p>3042</p></td><td  ><p>11804</p></td></tr></tbody></table></div><p>Now, the <a href="https://www.tomsguide.com/computing/macbooks/macbook-air-13-inch-m3-review">MacBook Air M3</a> understandably offers slightly better performance than its iPad counterpart (3,082 single-core / 12,087 multi-core), so there's a tiny difference between tablet and laptop. But either way, there's a significant bump in speeds. In fact, you can think of the iPad Air M4 as a more affordable version of the iPad Pro M4 (just without an OLED option).</p><p>From video editing and gaming to browsing the web, the iPad Air M4 is already looking to be quite the upgrade. Plus, M4 delivers higher memory bandwidth at 120GB/s, so it's faster at reading and writing data from RAM. Speaking of...</p><h2 id="more-memory">More memory!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="fi2qDmfRotYEXS7DWjckUS" name="iPad Air M4 2" alt="iPad Air M4" src="https://cdn.mos.cms.futurecdn.net/fi2qDmfRotYEXS7DWjckUS-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Despite the <a href="https://www.tomsguide.com/computing/ram-price-crisis-2026-everything-you-need-to-know">RAM crisis</a>, Apple managed to deliver even more unified memory into the latest iPad Air M4. More RAM means improved multitasking, better performance in demanding creative work or 3D modelling (and gaming, of course) and more apps staying open in the background without needing to reload.</p><p>Apple's next tablet is fitted with 12GB of memory, a 50% jump over the M3 iPad Air's 8GB. In fact, that's the same as the base <a href="https://www.tomsguide.com/computing/ipads/ipad-pro-m5-review">iPad Pro M5</a>, and with that being the most powerful tablet on the market, that only shows just how much the new iPad Air is catching up.</p><p>With the increase in RAM, expect multitasking to run even more smoothly. This will come in handy with <a href="https://www.tomsguide.com/computing/ipads/apple-ipados-26-review">iPadOS 26</a>'s windowing system, which lets you work with multiple app windows at once. </p><p>So, an overall faster experience to keep up with M4's performance!</p><h2 id="wi-fi-7-arrives">Wi-Fi 7 arrives</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="xaB9hj5ThSSQ7p4myaRgqi" name="N1 chip.JPEG" alt="Apple N1 Chip" src="https://cdn.mos.cms.futurecdn.net/xaB9hj5ThSSQ7p4myaRgqi-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Ookla)</span></figcaption></figure><p>Apple has its own wireless networking chip <em>and </em>cellular modem now, with the N1 and C1X, respectively. We got a look at the N1 silicon in the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-17-review">iPhone 17</a> series, along with the C1X 5G modem in the <a href="https://www.tomsguide.com/phones/iphones/iphone-air-review">iPhone Air</a>. Now, it arrives on the iPad Air M4.</p><p>With N1, Apple's tablets finally get <a href="https://www.tomsguide.com/reference/wi-fi-7-explained">Wi-Fi 7</a> connectivity, bringing faster and more efficient speeds, along with significantly lower latency. That makes it better for Apple's own AirDrop, and casting your own personal hotspot, too. We've heard <a href="https://www.tomsguide.com/phones/iphones/apples-n1-chip-offers-faster-speeds-while-using-weaker-wi-fi-according-to-the-experts-at-ookla">Apple's N1 delivers faster speeds on weaker Wi-Fi</a>, so that's a bonus if you're using the iPad Air M4 while you're out and about!</p><p>For those who opt for the cellular option, the C1X modem comes with Apple's 5G. As the Cupertino tech giant claims, the successor to C1 brings a 50% boost in cellular data performance, along with a 30% drop in energy usage. </p><p>So, this M4 tablet brings faster connectivity over the iPad Air M3's Wi-Fi 6E and Qualcomm SDX70M 5G modem.</p><h2 id="worth-the-upgrade">Worth the upgrade?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="QGwG2wtHQrmpKsV2TwzPtM" name="iPad Air M4" alt="iPad Air M4" src="https://cdn.mos.cms.futurecdn.net/QGwG2wtHQrmpKsV2TwzPtM-1920-80.jpg" mos="" align="middle" fullscreen="" width="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 edited with Gemini)</span></figcaption></figure><p>The iPad Air M4 may not be a huge change over its predecessor, but in terms of performance, it already looks to knock it out of the park. We'll have to put the new iPad Air through its paces in our testing lab, but we already have an idea of what to expect: Faster performance, more RAM for smoother multitasking and even greater connectivity capabilities.</p><p>Is it worth an upgrade over the iPad Air M3? You'll pay less using Apple's trade-in program, but depending on what you use it for, you may not see any immediate improvements that make it worth the extra spending.</p><p>But that's entirely dependent on what you use an iPad Air for. For intensive creative work, heavy multitasking and the like, you'll likely get more use out of the upgraded M4 iPad Air. And for those who have older models, you'll see an even bigger difference. </p><p>Stay tuned for our full review on the iPad Air M4, and in the meantime, our <a href="https://www.tomsguide.com/computing/ipads/ipad-air-m4-vs-ipad-air-m3-whats-different">iPad Air M4 vs iPad Air M3</a> will fill you in on all the differences. </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/iphone-17e-announced-with-a19-chip-double-the-storage-and-magsafe-price-release-date-and-all-the-upgrades">iPhone 17e announced with A19 chip, double the storage and MagSafe — price, release date and all the upgrades</a></li><li><a href="https://www.tomsguide.com/computing/macbooks/a-touchscreen-macbook-is-reportedly-on-the-way-but-it-might-not-be-what-you-want">A touchscreen MacBook is reportedly on the way — but it might not be what you want</a></li><li><a href="https://www.tomsguide.com/computing/macbooks/a18-pro-macbook-vs-m1-macbook-air">New Low-Cost MacBook vs MacBook Air M1: Why Apple's new laptop could be the one to buy</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/ipads/ipad-air-m4-the-3-biggest-upgrades-for-apples-new-tablet</link>
                                                                            <description>
                            <![CDATA[ Apple just unveiled its new iPad Air M4, featuring a big boost in performance, but that's not the only major upgrade the tablet boasts. Here are all the biggest upgrades to expect. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">LAwwfgU93W56ykGHpYz3WN</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/875hwZiEPN9EK6YPWZSGhb-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 03 Mar 2026 08:15:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[Tablets]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                                                                                    <dc:creator><![CDATA[ Darragh Murphy ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/5QiaTSWf9FcVB7STxcdo4M-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Darragh is Tom’s Guide’s Computing Editor and is fascinated by all things bizarre in tech. This usually leads to assorted coverage varying from washing machines designed for earbuds to the wild world of laptops. Whether it&#039;s connecting Scar from The Lion King to two-factor authentication or turning his love for laptops into a fabricated rap battle from 8 Mile, he believes there’s always a quirky spin to be made.&lt;br&gt;&lt;br&gt;Darragh has previously been an Editor for Laptop Mag and a News Editor for Time Out Dubai, where he also headed the gaming and tech section. His work can be seen in Mashable, Android Police, Shortlist Dubai, Proton, theBit.nz, ReviewsFire and more. &lt;br&gt;&lt;br&gt;While laptops are his bread and butter, he’s also reviewed smartphones, monitors, speakers, docking stations and VPNs. He’s covered IFA, MWC Barcelona, the Consumer Electronics Show (&lt;a href=&quot;https://www.tomsguide.com/uk/tag/ces&quot; target=&quot;_blank&quot;&gt;CES&lt;/a&gt;) and more.&lt;br&gt;&lt;br&gt;When he&#039;s not checking out the latest devices and all things computing, he can be found going for dreaded long runs, watching terrible shark movies, and trying to find time to game.&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/875hwZiEPN9EK6YPWZSGhb-1280-80.jpg">
                                                            <media:credit><![CDATA[Apple]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPad Air M4 on white Magic keyboard on table]]></media:description>                                                            <media:text><![CDATA[iPad Air M4 on white Magic keyboard on table]]></media:text>
                                <media:title type="plain"><![CDATA[iPad Air M4 on white Magic keyboard on table]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/875hwZiEPN9EK6YPWZSGhb-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p><a href="https://www.tomsguide.com/news/live/apple-march-event-2026-live">Apple's March event</a> is off to a big start, as the company just announced the all-new <a href="https://www.tomsguide.com/computing/ipads/ipad-air-m4-announced-with-more-power-and-wi-fi-7-price-release-date-and-full-specs">iPad Air M4</a>. Clearly, the star of the show here is the speedy performance from the M4 chip, but that's not the only upgrade coming to Apple's popular tablet.</p><p>The iPad Air M4 upgrade is set to deliver faster CPU and GPU speeds, so expect greater performance for editing, gaming and creative work. With the <a href="https://www.tomsguide.com/tablets/ipads/ipad-air-m3-review">iPad Air M3</a> already being one of the <a href="https://www.tomsguide.com/best-picks/best-tablet">best tablets</a> around, this takes Apple's popular tablet a step further — all for the same $599 starting price.</p><p>As expected, the new iPad Air isn't a major revamp, as it's more of a spec bump. So, what else is new? As it turns out, there are a few more changes that make Apple's latest Air model even better value than its predecessor. Here are the biggest upgrades you can expect.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OaxjjW"></div>                            </div>                            <script src="https://kwizly.com/embed/OaxjjW.js" async></script><h2 id="m4-delivers-even-faster-performance">M4 delivers even faster performance</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="3a6TGjpXp4zK6HB8kXoBag" name="iPad Air M4 lede" alt="iPad Air M4 lede" src="https://cdn.mos.cms.futurecdn.net/3a6TGjpXp4zK6HB8kXoBag-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Let's start with the main attraction: M4. We've seen this chip in action in the <a href="https://www.tomsguide.com/tablets/ipads/ipad-pro-2024">iPad Pro M4</a>, and we've been blown away by the performance it offers, especially for the price. </p><p>Now, the M4 comes to the iPad Air, with Apple claiming a 30% speed boost over the iPad Air M3. This means you're getting the might of the M4-equipped MacBook Air in the form of a tablet, and also for a much more affordable price of $599.</p><p>The M4 chip in the new iPad comes with an 8-core CPU (with three performance cores and five efficiency cores), a 9-core GPU and a 16-core Neural Engine. That's actually the same as the M3, although that comes with four performance and efficiency cores. </p><p>We'll have to test the iPad Air M4 once we get our hands on it, but here's a look at the performance gains we can expect over the iPad Air M3, comparing it to our Geekbench benchmarks on the iPad Pro M4 and <a href="https://www.tomsguide.com/computing/laptops/macbook-air-m4-review">MacBook Air M4</a>: </p><div ><table><caption>Geekbench results</caption><thead><tr><th class="firstcol empty" ></th><th  ><p>Geekbench 6 single-core</p></th><th  ><p>Geekbench 6 multi-core</p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>M4 iPad Pro 11-inch</strong></p></td><td  ><p>3700</p></td><td  ><p>14523</p></td></tr><tr><td class="firstcol " ><p><strong>M4 MacBook Air 13-inch</strong></p></td><td  ><p>3751</p></td><td  ><p>14947</p></td></tr><tr><td class="firstcol " ><p><strong>M3 iPad Air 11-inch</strong></p></td><td  ><p>3042</p></td><td  ><p>11804</p></td></tr></tbody></table></div><p>Now, the <a href="https://www.tomsguide.com/computing/macbooks/macbook-air-13-inch-m3-review">MacBook Air M3</a> understandably offers slightly better performance than its iPad counterpart (3,082 single-core / 12,087 multi-core), so there's a tiny difference between tablet and laptop. But either way, there's a significant bump in speeds. In fact, you can think of the iPad Air M4 as a more affordable version of the iPad Pro M4 (just without an OLED option).</p><p>From video editing and gaming to browsing the web, the iPad Air M4 is already looking to be quite the upgrade. Plus, M4 delivers higher memory bandwidth at 120GB/s, so it's faster at reading and writing data from RAM. Speaking of...</p><h2 id="more-memory">More memory!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="fi2qDmfRotYEXS7DWjckUS" name="iPad Air M4 2" alt="iPad Air M4" src="https://cdn.mos.cms.futurecdn.net/fi2qDmfRotYEXS7DWjckUS-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Despite the <a href="https://www.tomsguide.com/computing/ram-price-crisis-2026-everything-you-need-to-know">RAM crisis</a>, Apple managed to deliver even more unified memory into the latest iPad Air M4. More RAM means improved multitasking, better performance in demanding creative work or 3D modelling (and gaming, of course) and more apps staying open in the background without needing to reload.</p><p>Apple's next tablet is fitted with 12GB of memory, a 50% jump over the M3 iPad Air's 8GB. In fact, that's the same as the base <a href="https://www.tomsguide.com/computing/ipads/ipad-pro-m5-review">iPad Pro M5</a>, and with that being the most powerful tablet on the market, that only shows just how much the new iPad Air is catching up.</p><p>With the increase in RAM, expect multitasking to run even more smoothly. This will come in handy with <a href="https://www.tomsguide.com/computing/ipads/apple-ipados-26-review">iPadOS 26</a>'s windowing system, which lets you work with multiple app windows at once. </p><p>So, an overall faster experience to keep up with M4's performance!</p><h2 id="wi-fi-7-arrives">Wi-Fi 7 arrives</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="xaB9hj5ThSSQ7p4myaRgqi" name="N1 chip.JPEG" alt="Apple N1 Chip" src="https://cdn.mos.cms.futurecdn.net/xaB9hj5ThSSQ7p4myaRgqi-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Ookla)</span></figcaption></figure><p>Apple has its own wireless networking chip <em>and </em>cellular modem now, with the N1 and C1X, respectively. We got a look at the N1 silicon in the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-17-review">iPhone 17</a> series, along with the C1X 5G modem in the <a href="https://www.tomsguide.com/phones/iphones/iphone-air-review">iPhone Air</a>. Now, it arrives on the iPad Air M4.</p><p>With N1, Apple's tablets finally get <a href="https://www.tomsguide.com/reference/wi-fi-7-explained">Wi-Fi 7</a> connectivity, bringing faster and more efficient speeds, along with significantly lower latency. That makes it better for Apple's own AirDrop, and casting your own personal hotspot, too. We've heard <a href="https://www.tomsguide.com/phones/iphones/apples-n1-chip-offers-faster-speeds-while-using-weaker-wi-fi-according-to-the-experts-at-ookla">Apple's N1 delivers faster speeds on weaker Wi-Fi</a>, so that's a bonus if you're using the iPad Air M4 while you're out and about!</p><p>For those who opt for the cellular option, the C1X modem comes with Apple's 5G. As the Cupertino tech giant claims, the successor to C1 brings a 50% boost in cellular data performance, along with a 30% drop in energy usage. </p><p>So, this M4 tablet brings faster connectivity over the iPad Air M3's Wi-Fi 6E and Qualcomm SDX70M 5G modem.</p><h2 id="worth-the-upgrade">Worth the upgrade?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="QGwG2wtHQrmpKsV2TwzPtM" name="iPad Air M4" alt="iPad Air M4" src="https://cdn.mos.cms.futurecdn.net/QGwG2wtHQrmpKsV2TwzPtM-1920-80.jpg" mos="" align="middle" fullscreen="" width="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 edited with Gemini)</span></figcaption></figure><p>The iPad Air M4 may not be a huge change over its predecessor, but in terms of performance, it already looks to knock it out of the park. We'll have to put the new iPad Air through its paces in our testing lab, but we already have an idea of what to expect: Faster performance, more RAM for smoother multitasking and even greater connectivity capabilities.</p><p>Is it worth an upgrade over the iPad Air M3? You'll pay less using Apple's trade-in program, but depending on what you use it for, you may not see any immediate improvements that make it worth the extra spending.</p><p>But that's entirely dependent on what you use an iPad Air for. For intensive creative work, heavy multitasking and the like, you'll likely get more use out of the upgraded M4 iPad Air. And for those who have older models, you'll see an even bigger difference. </p><p>Stay tuned for our full review on the iPad Air M4, and in the meantime, our <a href="https://www.tomsguide.com/computing/ipads/ipad-air-m4-vs-ipad-air-m3-whats-different">iPad Air M4 vs iPad Air M3</a> will fill you in on all the differences. </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/iphone-17e-announced-with-a19-chip-double-the-storage-and-magsafe-price-release-date-and-all-the-upgrades">iPhone 17e announced with A19 chip, double the storage and MagSafe — price, release date and all the upgrades</a></li><li><a href="https://www.tomsguide.com/computing/macbooks/a-touchscreen-macbook-is-reportedly-on-the-way-but-it-might-not-be-what-you-want">A touchscreen MacBook is reportedly on the way — but it might not be what you want</a></li><li><a href="https://www.tomsguide.com/computing/macbooks/a18-pro-macbook-vs-m1-macbook-air">New Low-Cost MacBook vs MacBook Air M1: Why Apple's new laptop could be the one to buy</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Where to buy iPad Air M4: I'm a deals expert and here's how to save $50 now ]]></title>
                                                                                                <dc:content><![CDATA[ <p>There's a new iPad in town. Apple has refreshed its tablet lineup with the addition of the <a href="https://www.tomsguide.com/computing/ipads/apple-ipad-air-m4-review-small-tweaks-to-the-gold-standard">iPad Air M4</a>. Available in 11-inch ($599) and 13-inch ($799) sizes, iPad Air M4 went on sale March 11. </p><p>In terms of upgrades, the biggest change is the addition of the new M4 chipset, which Apple claims is 30% faster than its predecessor. All of the new tablets also support Wi-Fi 7, Bluetooth 6, and Thread. Otherwise, there are no other significant changes between the iPad Air M4 and its predecessor.</p><p>If you're looking for iPad Air M4 deals, <a href="https://www.amazon.com/Apple-iPad-Air-11-inch-M4/dp/B0GQV9W97Q" target="_blank" rel="nofollow">Amazon has the 11-inch iPad Air M4 on sale for $559</a>. That's $40 off and the first sale I've seen on Apple's new flagship. Meanwhile, you can also get the <a href="https://www.amazon.com/Apple-iPad-Air-13-inch-M4/dp/B0GQVDGCD2" target="_blank" rel="nofollow">13-inch iPad Air M4 on sale for $749 at Amazon</a>. That's a full $50 off. </p><p>Alternatively, <a href="https://www.bestbuy.com/site/apple-ipad/latest-ipad-and-offers/pcmcat1741033630393.c?id=pcmcat1741033630393" target="_blank" rel="nofollow">Best Buy is offering the new iPads from $249 with a qualifying trade-in</a>. Make sure to follow our <a href="https://www.tomsguide.com/news/ipad-deals">iPad deals</a> coverage as retailers discount the current-gen tablets to make room for the newer ones. </p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links</span></h3><ul><li><strong>11" iPad Air (M4): </strong><a href="https://www.amazon.com/Apple-iPad-Air-11-inch-M4/dp/B0GQV9W97Q" target="_blank" rel="nofollow"><strong>was $599 now $559 @ Amazon</strong></a><strong></strong></li><li><strong>13" iPad Air (M4): </strong><a href="https://www.amazon.com/Apple-iPad-Air-13-inch-M4/dp/B0GQVDGCD2" target="_blank" rel="nofollow"><strong>was $799 now $749 @ Amazon</strong></a><strong></strong></li><li><strong>iPad Air 2026: </strong><a href="https://www.bestbuy.com/site/apple-ipad/latest-ipad-and-offers/pcmcat1741033630393.c?id=pcmcat1741033630393" target="_blank" rel="nofollow"><strong>preorder from $249 w/ trade-in @ Best Buy</strong></a><strong></strong></li></ul><h3 class="article-body__section" id="section-ipad-air-m4-deals"><span>iPad Air M4 deals</span></h3><div class="product"><a data-dimension112="20053cae-6396-4c8a-89c8-748dd1f5e99f" data-action="Deal Block" data-label="11" iPad Air (WiFi/128GB)" data-dimension48="11" iPad Air (WiFi/128GB)" data-dimension25="$559" href="https://www.amazon.com/Apple-iPad-Air-11-inch-M4/dp/B0GQV9W97Q" 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/B0GQV9W97Q" target="_blank" rel="nofollow" data-dimension112="20053cae-6396-4c8a-89c8-748dd1f5e99f" data-action="Deal Block" data-label='11" iPad Air (WiFi/128GB)' data-dimension48='11" iPad Air (WiFi/128GB)' data-dimension25="$559">11" iPad Air (WiFi/128GB): was $599 now $559</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/B0GQV9W97Q" target="_blank" rel="nofollow" data-dimension112="20053cae-6396-4c8a-89c8-748dd1f5e99f" data-action="Deal Block" data-label="11" iPad Air (WiFi/128GB)" data-dimension48="11" iPad Air (WiFi/128GB)" data-dimension25="$559">View Deal</a></p></div><div class="product"><a data-dimension112="15b0eccb-8349-4cf4-8d24-af91ac6f5c74" data-action="Deal Block" data-label="13" iPad Air (WiFi/128GB)" data-dimension48="13" iPad Air (WiFi/128GB)" data-dimension25="$749" href="https://www.amazon.com/Apple-iPad-Air-13-inch-M4/dp/B0GQVDGCD2" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1368px;"><p class="vanilla-image-block" style="padding-top:109.65%;"><img id="5LtYHnqoh7QQJRLor82SEG" name="iPad Air 13 2024 deal block.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/5LtYHnqoh7QQJRLor82SEG-1920-80.jpg" mos="" align="middle" fullscreen="" width="1368" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Apple-iPad-Air-13-inch-M4/dp/B0GQVDGCD2" target="_blank" rel="nofollow" data-dimension112="15b0eccb-8349-4cf4-8d24-af91ac6f5c74" data-action="Deal Block" data-label='13" iPad Air (WiFi/128GB)' data-dimension48='13" iPad Air (WiFi/128GB)' data-dimension25="$749">13" iPad Air (WiFi/128GB): was $799 now $749</a></strong><br>This larger size iPad Air sports the same M4 processor, but it's coupled with a 13-inch LED (2732 x 2048) display. Otherwise, it packs the same 128GB of storage, 12MP rear camera, and 12MP front camera. You also get Wi-Fi 7 support, Bluetooth 6, and Thread. The larger display and more potent CPU should make this a great tablet for gaming. <a class="view-deal button" href="https://www.amazon.com/Apple-iPad-Air-13-inch-M4/dp/B0GQVDGCD2" target="_blank" rel="nofollow" data-dimension112="15b0eccb-8349-4cf4-8d24-af91ac6f5c74" data-action="Deal Block" data-label="13" iPad Air (WiFi/128GB)" data-dimension48="13" iPad Air (WiFi/128GB)" data-dimension25="$749">View Deal</a></p></div><div class="product"><a data-dimension112="314c45c5-0b58-4955-b525-93a7a15c90b0" data-action="Deal Block" data-label="iPad Air (M4)" data-dimension48="iPad Air (M4)" data-dimension25="$249" href="https://www.bestbuy.com/site/apple-ipad/latest-ipad-and-offers/pcmcat1741033630393.c?id=pcmcat1741033630393" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:800px;"><p class="vanilla-image-block" style="padding-top:75.00%;"><img id="Aze3cYwcHH9zfekingtW5d" name="best_buy_logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/Aze3cYwcHH9zfekingtW5d-1920-80.jpg" mos="" align="middle" fullscreen="" width="800" height="600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Best Buy is offering the new iPad Air (M4) from $249 with a qualifying trade-in. (You can get up to $350 off with an 11-inch iPad Air M3 trade-in). <a class="view-deal button" href="https://www.bestbuy.com/site/apple-ipad/latest-ipad-and-offers/pcmcat1741033630393.c?id=pcmcat1741033630393" target="_blank" rel="nofollow" data-dimension112="314c45c5-0b58-4955-b525-93a7a15c90b0" data-action="Deal Block" data-label="iPad Air (M4)" data-dimension48="iPad Air (M4)" data-dimension25="$249">View Deal</a></p></div><h3 class="article-body__section" id="section-what-s-new-in-ipad-air-m4"><span>What's new in iPad Air M4</span></h3><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>iPad Air M4 (11-inch)</strong></p></td><td  ><p><strong>iPad Air M4 (13-inch)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Size</strong></p></td><td  ><p>9.74 x 7.02 x 0.24 inches</p></td><td  ><p>11.04 x 8.46 x 0.24 inches</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>1.02</p></td><td  ><p>1.36</p></td></tr><tr><td class="firstcol " ><p><strong>Resolution</strong></p></td><td  ><p>2360 x 1640</p></td><td  ><p>2732 x 2048</p></td></tr><tr><td class="firstcol " ><p><strong>Brightness</strong></p></td><td  ><p>500 nits</p></td><td  ><p>600 nits</p></td></tr><tr><td class="firstcol " ><p><strong>Rear</strong> <strong>camera</strong></p></td><td  ><p>12MP (f/1.8)</p></td><td  ><p>12MP (f/1.8)</p></td></tr><tr><td class="firstcol " ><p><strong>Front camera</strong></p></td><td  ><p>12MP (f/2)</p></td><td  ><p>12MP (f/2)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery size</strong></p></td><td  ><p>28.93 Wh</p></td><td  ><p>36.59 Wh</p></td></tr><tr><td class="firstcol " ><p><strong>Battery life (rated)</strong></p></td><td  ><p>Up to 10 hours</p></td><td  ><p>Up to 10 hours</p></td></tr><tr><td class="firstcol " ><p><strong>Wi-Fi</strong></p></td><td  ><p>Wi-Fi 7</p></td><td  ><p>Wi-Fi 7</p></td></tr><tr><td class="firstcol " ><p><strong>Wireless</strong></p></td><td  ><p>Bluetooth 6, Thread, Apple N1 </p></td><td  ><p>Bluetooth 6, Thread, Apple N1 </p></td></tr><tr><td class="firstcol " ><p><strong>Storage/Price</strong></p></td><td  ><p>128GB ($599)<br>256GB ($699)<br>512GB ($899)<br>1TB ($1,099)</p></td><td  ><p>128GB ($799)<br>256GB ($899)<br>512GB ($1,099)<br>1TB ($1,299)</p></td></tr></tbody></table></div><h3 class="article-body__section" id="section-what-about-ipad-air-m3-deals"><span>What about iPad Air M3 deals?</span></h3><p>If you're looking for deals on the outgoing iPad Air M3, you're not alone. However, I currently recommend opting for the M4 models as they're priced similarly to the older M3 models. Unless you want the WiFi/5G models. At the time of this writing, <a href="https://www.amazon.com/Apple-11-inch-Intelligence-Display-Cellular/dp/B0DZ72D5KP" target="_blank" rel="nofollow">Amazon has the 11-inch iPad Air M3 (WiFi/5G) on sale for $599</a>. That's just $10 shy of its all-time price low. Meanwhile, the <a href="https://www.amazon.com/Apple-13-inch-Intelligence-Display-Cellular/dp/B0DZ75JPWG" target="_blank" rel="nofollow">13-inch iPad Air M3 (WiFi/5G) is on sale for $799 at Amazon</a>. This is an all-time price low for this tablet. </p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/ipads/ipad-air-m4-preorders-im-a-deals-expert-and-this-is-when-i-expect-the-first-deals</link>
                                                                            <description>
                            <![CDATA[ The iPad Air M4 is now available for purchase. Here's what's new in Apple's 2026 iPads as well as where you can buy them. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">VgrCdZMgP8SNLuHmjMYcVY</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/QGwG2wtHQrmpKsV2TwzPtM-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 02 Mar 2026 17:43:46 +0000</pubDate>                                                                                                                                <updated>Wed, 11 Mar 2026 17:55:09 +0000</updated>
                                                                                                                                            <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Tablets]]></category>
                                                                                                <author><![CDATA[ louis.ramirez@futurenet.com (Louis Ramirez) ]]></author>                    <dc:creator><![CDATA[ Louis Ramirez ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/oYF2xVwCb4pTGhAJi8Yqr5-320-70.jpeg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;As deals editor-in-chief at Tom’s Guide, Louis refuses to pay full price for anything. He has over 10 years of experience finding the best deals and coupons to bring readers. Louis price checks&amp;nbsp;against multiple retailers and searches high and low for sales on 4K TVs, Apple devices, streaming services, mattresses, kitchen appliances, and more.&amp;nbsp;He&#039;s also always looking for the the best coupon codes to turn good deals into stellar buys.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;He has covered major retail events like Amazon Prime Day, Black Friday, and Cyber Monday for more than a decade and knows how to spot an epic deal from a fake discount. He&#039;s also great at helping people negotiate better prices on everything from gym memberships to their home internet service. Louis&#039; work has also helped readers find PS5 restock, baby formula, Clorox wipes, and everything in between. For his next major purchase, Louis is hoping to find a killer deal on an M3-based Mac.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;A born-and-bred New Yorker, Louis is always in search of the perfect cup of coffee. On his free time, he enjoys swimming, running, and any workout that pushes his Apple Watch to the max. He&#039;s also a big fan of international films, horror movies, and K-dramas. His work has appeared on Gizmodo, CNET, Digital Trends, Dealnews, and Time Out New York.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/QGwG2wtHQrmpKsV2TwzPtM-1280-80.jpg">
                                                            <media:credit><![CDATA[Apple edited with Gemini]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPad Air M4]]></media:description>                                                            <media:text><![CDATA[iPad Air M4]]></media:text>
                                <media:title type="plain"><![CDATA[iPad Air M4]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/QGwG2wtHQrmpKsV2TwzPtM-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>There's a new iPad in town. Apple has refreshed its tablet lineup with the addition of the <a href="https://www.tomsguide.com/computing/ipads/apple-ipad-air-m4-review-small-tweaks-to-the-gold-standard">iPad Air M4</a>. Available in 11-inch ($599) and 13-inch ($799) sizes, iPad Air M4 went on sale March 11. </p><p>In terms of upgrades, the biggest change is the addition of the new M4 chipset, which Apple claims is 30% faster than its predecessor. All of the new tablets also support Wi-Fi 7, Bluetooth 6, and Thread. Otherwise, there are no other significant changes between the iPad Air M4 and its predecessor.</p><p>If you're looking for iPad Air M4 deals, <a href="https://www.amazon.com/Apple-iPad-Air-11-inch-M4/dp/B0GQV9W97Q" target="_blank" rel="nofollow">Amazon has the 11-inch iPad Air M4 on sale for $559</a>. That's $40 off and the first sale I've seen on Apple's new flagship. Meanwhile, you can also get the <a href="https://www.amazon.com/Apple-iPad-Air-13-inch-M4/dp/B0GQVDGCD2" target="_blank" rel="nofollow">13-inch iPad Air M4 on sale for $749 at Amazon</a>. That's a full $50 off. </p><p>Alternatively, <a href="https://www.bestbuy.com/site/apple-ipad/latest-ipad-and-offers/pcmcat1741033630393.c?id=pcmcat1741033630393" target="_blank" rel="nofollow">Best Buy is offering the new iPads from $249 with a qualifying trade-in</a>. Make sure to follow our <a href="https://www.tomsguide.com/news/ipad-deals">iPad deals</a> coverage as retailers discount the current-gen tablets to make room for the newer ones. </p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links</span></h3><ul><li><strong>11" iPad Air (M4): </strong><a href="https://www.amazon.com/Apple-iPad-Air-11-inch-M4/dp/B0GQV9W97Q" target="_blank" rel="nofollow"><strong>was $599 now $559 @ Amazon</strong></a><strong></strong></li><li><strong>13" iPad Air (M4): </strong><a href="https://www.amazon.com/Apple-iPad-Air-13-inch-M4/dp/B0GQVDGCD2" target="_blank" rel="nofollow"><strong>was $799 now $749 @ Amazon</strong></a><strong></strong></li><li><strong>iPad Air 2026: </strong><a href="https://www.bestbuy.com/site/apple-ipad/latest-ipad-and-offers/pcmcat1741033630393.c?id=pcmcat1741033630393" target="_blank" rel="nofollow"><strong>preorder from $249 w/ trade-in @ Best Buy</strong></a><strong></strong></li></ul><h3 class="article-body__section" id="section-ipad-air-m4-deals"><span>iPad Air M4 deals</span></h3><div class="product"><a data-dimension112="20053cae-6396-4c8a-89c8-748dd1f5e99f" data-action="Deal Block" data-label="11" iPad Air (WiFi/128GB)" data-dimension48="11" iPad Air (WiFi/128GB)" data-dimension25="$559" href="https://www.amazon.com/Apple-iPad-Air-11-inch-M4/dp/B0GQV9W97Q" 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/B0GQV9W97Q" target="_blank" rel="nofollow" data-dimension112="20053cae-6396-4c8a-89c8-748dd1f5e99f" data-action="Deal Block" data-label='11" iPad Air (WiFi/128GB)' data-dimension48='11" iPad Air (WiFi/128GB)' data-dimension25="$559">11" iPad Air (WiFi/128GB): was $599 now $559</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/B0GQV9W97Q" target="_blank" rel="nofollow" data-dimension112="20053cae-6396-4c8a-89c8-748dd1f5e99f" data-action="Deal Block" data-label="11" iPad Air (WiFi/128GB)" data-dimension48="11" iPad Air (WiFi/128GB)" data-dimension25="$559">View Deal</a></p></div><div class="product"><a data-dimension112="15b0eccb-8349-4cf4-8d24-af91ac6f5c74" data-action="Deal Block" data-label="13" iPad Air (WiFi/128GB)" data-dimension48="13" iPad Air (WiFi/128GB)" data-dimension25="$749" href="https://www.amazon.com/Apple-iPad-Air-13-inch-M4/dp/B0GQVDGCD2" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1368px;"><p class="vanilla-image-block" style="padding-top:109.65%;"><img id="5LtYHnqoh7QQJRLor82SEG" name="iPad Air 13 2024 deal block.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/5LtYHnqoh7QQJRLor82SEG-1920-80.jpg" mos="" align="middle" fullscreen="" width="1368" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Apple-iPad-Air-13-inch-M4/dp/B0GQVDGCD2" target="_blank" rel="nofollow" data-dimension112="15b0eccb-8349-4cf4-8d24-af91ac6f5c74" data-action="Deal Block" data-label='13" iPad Air (WiFi/128GB)' data-dimension48='13" iPad Air (WiFi/128GB)' data-dimension25="$749">13" iPad Air (WiFi/128GB): was $799 now $749</a></strong><br>This larger size iPad Air sports the same M4 processor, but it's coupled with a 13-inch LED (2732 x 2048) display. Otherwise, it packs the same 128GB of storage, 12MP rear camera, and 12MP front camera. You also get Wi-Fi 7 support, Bluetooth 6, and Thread. The larger display and more potent CPU should make this a great tablet for gaming. <a class="view-deal button" href="https://www.amazon.com/Apple-iPad-Air-13-inch-M4/dp/B0GQVDGCD2" target="_blank" rel="nofollow" data-dimension112="15b0eccb-8349-4cf4-8d24-af91ac6f5c74" data-action="Deal Block" data-label="13" iPad Air (WiFi/128GB)" data-dimension48="13" iPad Air (WiFi/128GB)" data-dimension25="$749">View Deal</a></p></div><div class="product"><a data-dimension112="314c45c5-0b58-4955-b525-93a7a15c90b0" data-action="Deal Block" data-label="iPad Air (M4)" data-dimension48="iPad Air (M4)" data-dimension25="$249" href="https://www.bestbuy.com/site/apple-ipad/latest-ipad-and-offers/pcmcat1741033630393.c?id=pcmcat1741033630393" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:800px;"><p class="vanilla-image-block" style="padding-top:75.00%;"><img id="Aze3cYwcHH9zfekingtW5d" name="best_buy_logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/Aze3cYwcHH9zfekingtW5d-1920-80.jpg" mos="" align="middle" fullscreen="" width="800" height="600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Best Buy is offering the new iPad Air (M4) from $249 with a qualifying trade-in. (You can get up to $350 off with an 11-inch iPad Air M3 trade-in). <a class="view-deal button" href="https://www.bestbuy.com/site/apple-ipad/latest-ipad-and-offers/pcmcat1741033630393.c?id=pcmcat1741033630393" target="_blank" rel="nofollow" data-dimension112="314c45c5-0b58-4955-b525-93a7a15c90b0" data-action="Deal Block" data-label="iPad Air (M4)" data-dimension48="iPad Air (M4)" data-dimension25="$249">View Deal</a></p></div><h3 class="article-body__section" id="section-what-s-new-in-ipad-air-m4"><span>What's new in iPad Air M4</span></h3><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>iPad Air M4 (11-inch)</strong></p></td><td  ><p><strong>iPad Air M4 (13-inch)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Size</strong></p></td><td  ><p>9.74 x 7.02 x 0.24 inches</p></td><td  ><p>11.04 x 8.46 x 0.24 inches</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>1.02</p></td><td  ><p>1.36</p></td></tr><tr><td class="firstcol " ><p><strong>Resolution</strong></p></td><td  ><p>2360 x 1640</p></td><td  ><p>2732 x 2048</p></td></tr><tr><td class="firstcol " ><p><strong>Brightness</strong></p></td><td  ><p>500 nits</p></td><td  ><p>600 nits</p></td></tr><tr><td class="firstcol " ><p><strong>Rear</strong> <strong>camera</strong></p></td><td  ><p>12MP (f/1.8)</p></td><td  ><p>12MP (f/1.8)</p></td></tr><tr><td class="firstcol " ><p><strong>Front camera</strong></p></td><td  ><p>12MP (f/2)</p></td><td  ><p>12MP (f/2)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery size</strong></p></td><td  ><p>28.93 Wh</p></td><td  ><p>36.59 Wh</p></td></tr><tr><td class="firstcol " ><p><strong>Battery life (rated)</strong></p></td><td  ><p>Up to 10 hours</p></td><td  ><p>Up to 10 hours</p></td></tr><tr><td class="firstcol " ><p><strong>Wi-Fi</strong></p></td><td  ><p>Wi-Fi 7</p></td><td  ><p>Wi-Fi 7</p></td></tr><tr><td class="firstcol " ><p><strong>Wireless</strong></p></td><td  ><p>Bluetooth 6, Thread, Apple N1 </p></td><td  ><p>Bluetooth 6, Thread, Apple N1 </p></td></tr><tr><td class="firstcol " ><p><strong>Storage/Price</strong></p></td><td  ><p>128GB ($599)<br>256GB ($699)<br>512GB ($899)<br>1TB ($1,099)</p></td><td  ><p>128GB ($799)<br>256GB ($899)<br>512GB ($1,099)<br>1TB ($1,299)</p></td></tr></tbody></table></div><h3 class="article-body__section" id="section-what-about-ipad-air-m3-deals"><span>What about iPad Air M3 deals?</span></h3><p>If you're looking for deals on the outgoing iPad Air M3, you're not alone. However, I currently recommend opting for the M4 models as they're priced similarly to the older M3 models. Unless you want the WiFi/5G models. At the time of this writing, <a href="https://www.amazon.com/Apple-11-inch-Intelligence-Display-Cellular/dp/B0DZ72D5KP" target="_blank" rel="nofollow">Amazon has the 11-inch iPad Air M3 (WiFi/5G) on sale for $599</a>. That's just $10 shy of its all-time price low. Meanwhile, the <a href="https://www.amazon.com/Apple-13-inch-Intelligence-Display-Cellular/dp/B0DZ75JPWG" target="_blank" rel="nofollow">13-inch iPad Air M3 (WiFi/5G) is on sale for $799 at Amazon</a>. This is an all-time price low for this tablet. </p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ iPad Air M4 vs iPad Air M3: What's different? ]]></title>
                                                                                                <dc:content><![CDATA[ <p>As insiders were predicting, Apple has refreshed the iPad Air, 12 months after its last update. Meet the <a href="https://www.tomsguide.com/computing/ipads/ipad-air-m4-announced-with-more-power-and-wi-fi-7-price-release-date-and-full-specs">iPad Air M4</a>.</p><p>The company’s mid-range tablet sees an upgrade to the <a href="https://www.tomsguide.com/computing/apple-desktops/apple-m4-chip">M4 processor</a> (with the M5 still reserved for the <a href="https://www.tomsguide.com/computing/ipads/ipad-pro-m5-review">top-of-the-line iPad Pro</a>) and gains an extra 4GB of RAM, while keeping prices static for another year.</p><p>The <a href="https://www.tomsguide.com/tablets/ipads/ipad-air-m3-review">iPad Air M3</a> has been immediately retired, but retailers will be looking to clear stock, and there’s always the second-hand market for bargain hunters. Is it worth paying extra for the new version? And if you have the M3 iPad Air, should you be looking to upgrade? Here are the key differences.</p><h2 id="ipad-air-m4-vs-ipad-air-m3-specs">iPad Air M4 vs iPad Air M3: Specs</h2><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>iPad Air M4</strong></p></td><td  ><p><strong>iPad Air M3</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Starting price</strong></p></td><td  ><p>$599 (11-inch), $799 (13-inch)</p></td><td  ><p>$599 (11-inch), $799 (13-inch)</p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>11-inch Liquid Retina display (2360 x 1640) | 13-inch Liquid Retina display (2732 x 2048)</p></td><td  ><p>11-inch Liquid Retina display (2360 x 1640) | 13-inch Liquid Retina display (2732 x 2048)</p></td></tr><tr><td class="firstcol " ><p><strong>Chipset</strong></p></td><td  ><p>Apple M4 chip</p></td><td  ><p>Apple M3 chip</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>12GB</p></td><td  ><p>8GB</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>128GB, 256GB, 512GB, 1TB</p></td><td  ><p>128GB, 256GB, 512GB, 1TB</p></td></tr><tr><td class="firstcol " ><p><strong>Rear camera</strong></p></td><td  ><p>12MP</p></td><td  ><p>12MP</p></td></tr><tr><td class="firstcol " ><p><strong>Front camera</strong></p></td><td  ><p>12MP</p></td><td  ><p>12MP</p></td></tr><tr><td class="firstcol " ><p><strong>Size</strong></p></td><td  ><p>9.74 x 7.02 x 0.24 inches (11-inch) | 11.04 x 8.46 x 0.24 inches (13-inch)</p></td><td  ><p>9.74 x 7.02 x 0.24 inches (11-inch) | 11.04 x 8.46 x 0.24 inches (13-inch)</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>1.02 pounds (11-inch) | 1.36 pounds (13-inch)</p></td><td  ><p>1.01 pounds (11-inch) | 1.35 pounds (13-inch)</p></td></tr><tr><td class="firstcol " ><p><strong>Colors</strong></p></td><td  ><p>Blue, Purple, Starlight, Space Gray</p></td><td  ><p>Blue, Purple, Starlight, Space Gray</p></td></tr></tbody></table></div><h2 id="ipad-air-m4-vs-ipad-air-m3-price">iPad Air M4 vs iPad Air M3: 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="RJhc3anzHjVh6vUJnPsyCN" name="iPad Air M3" alt="iPad Air M3" src="https://cdn.mos.cms.futurecdn.net/RJhc3anzHjVh6vUJnPsyCN-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Despite the bump in specs, Apple has kept the price of the iPad Air M4 the same for another year. That means that the 11-inch model starts at $599, rising to $1,249 for a model with cellular connectivity and 1TB of storage. The 13-inch version, meanwhile, ranges from $799 to $1,449 for a fully souped-up model.</p><p>Of course, with the M3 model now old news, you may be able to get one for a lower price either through retailers clearing out old stock or through the second-hand market.</p><h2 id="ipad-air-m4-vs-ipad-air-m3-design-and-display">iPad Air M4 vs iPad Air M3: Design and 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:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="pq3SzhJnbfqfHw6vCJL5xL" name="iPad Air M4 (2)" alt="iPad Air M4" src="https://cdn.mos.cms.futurecdn.net/pq3SzhJnbfqfHw6vCJL5xL-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: Apple)</span></figcaption></figure><p>The new iPad Air M4 looks pretty much identical to the M3 model, which in turn was pretty much indistinguishable from the M2 version. </p><p>It’s still available in 11- and 13-inch sizes, with the same dimensions: 9.74 x 7.02 x 0.24 inches for the 11-inch model, and 11.04 x 8.46 x 0.24 inches for the 13-inch version. Apple lists the weight as 0.1 pound heavier for both versions, so a negligible change there, too. </p><p>The screen technology is also the same LED used on the previous model, with <a href="https://www.tomsguide.com/news/ipad-mini-and-ipad-air-oled-roadmap-revealed">plans to match the OLED on the iPad Pro not expected to materialize until next year</a>. It’s 60Hz, too, with no ProMotion 120Hz upgrade, unfortunately.</p><p>So it’s a draw between the two tablets in terms of design and display. All the significant changes are on the inside.</p><h2 id="ipad-air-m4-vs-ipad-air-m3-performance">iPad Air M4 vs iPad Air M3: Performance</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3962px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="MYJ89pdGuPUTn7GPd2q9M7" name="iPad Air M3 review-1" alt="iPad Air M3" src="https://cdn.mos.cms.futurecdn.net/MYJ89pdGuPUTn7GPd2q9M7-1920-80.jpg" mos="" align="middle" fullscreen="" width="3962" height="2229" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The headline change is, of course, the introduction of Apple’s M4 chipset. Apple claims this will be a 30% boost in performance on the M3 iPad Air, or 2.3 times faster than the M1 model.</p><p>While we’ll be running benchmarks when we get our own review unit, we’ve seen how the M4 performs in tablet form before, thanks to the <a href="https://www.tomsguide.com/tablets/ipads/ipad-pro-2024">2024 iPad Pro</a>. Here’s a recap:</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>M3 (in iPad Air M3)</strong></p></td><td  ><p><strong>M4 (in 2024 iPad Pro)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Geekbench (single core / dual core)</strong></p></td><td  ><p>3,042 / 11,804</p></td><td  ><p>3,700 / 14,523</p></td></tr><tr><td class="firstcol " ><p><strong>3DMark WildLife</strong></p></td><td  ><p>5,806 / 34.8 fps</p></td><td  ><p>8,529 / 51 fps</p></td></tr></tbody></table></div><p>The Apple M4 chip is also more efficient than its predecessor, which means you may see some advancement on the 9 hours and 41 minutes that the 11-inch iPad Air M3 achieved in our battery life test. That said, Apple only promises “all-day battery life” in the press release.</p><p>A bigger surprise is the upgrade in RAM. While the M3 iPad Air had 8GB — the minimum required for Apple Intelligence — the souped-up M4 version comes with 12GB RAM. Apple also says the memory bandwidth has increased to 120GB/s ensuring that AI models run faster than before.</p><p>Beyond the M4 and memory upgrades, the new iPad Air has a few other improvements hidden away inside. First introduced with the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-17-review">iPhone 17</a> family last September, the new iPad Air contains the N1 chip for Wi-Fi 7, Bluetooth 6, and — if you spring for the cellular model — a C1X 5G modem.</p><p>Taking these one at a time, <a href="https://www.tomsguide.com/reference/wi-fi-7-explained">Wi-Fi 7</a> means better performance on supported routers, with higher speeds and lower latency. Apple’s own implementation <a href="https://www.tomsguide.com/phones/iphones/apples-n1-chip-offers-faster-speeds-while-using-weaker-wi-fi-according-to-the-experts-at-ookla">seems to be more effective when using weaker Wi-Fi connections, too</a>. <a href="https://www.tomsguide.com/audio/bluetooth-speakers/bluetooth-60-just-revealed-heres-what-that-means-for-you">Bluetooth 6</a> spells more reliable connections, lower latency and more efficient power use.</p><p>Apple’s own 5G modem technology will be introduced to cellular models of the iPad Air for the first time, too. The C1X 5G modem already features in the <a href="https://www.tomsguide.com/phones/iphones/iphone-air-review">iPhone Air</a>, and according to Apple, it was two times faster than the original C1 that debuted in the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-16e-review">iPhone 16e</a>. In tablet terms, Apple says it’s up to 50% faster with 30% less energy usage than the Qualcomm SDX70M modem found in the iPad Air M3.</p><h2 id="ipad-air-m4-vs-ipad-air-m3-outlook">iPad Air M4 vs iPad Air M3: Outlook</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4491px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ZZ2jcZM2HuFqpun5zrVJvL" name="iPad Air M4 (1)" alt="iPad Air M4" src="https://cdn.mos.cms.futurecdn.net/ZZ2jcZM2HuFqpun5zrVJvL-1920-80.jpg" mos="" align="middle" fullscreen="" width="4491" height="2526" 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 looked at the two iPad Air models side by side, you’d be unlikely to see much of a difference. But on the inside, the iPad Air M4 is clearly a faster and more efficient performer, thanks not just to the M4 chipset, but to 4GB extra RAM and improved wireless technologies.</p><p>Does that mean you should upgrade from an M3 version? Maybe if you’re a power user, but otherwise probably not. </p><p>That said, unless money is particularly tight, it would be a mistake to opt for the older iPad Air over the newer model if you’re looking to upgrade from an older model or are completely new to Apple’s tablets.</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-march-event-2026-live"><strong>Apple March event LIVE: iPhone 17e, iPad Air M4 and every big announcement</strong></a></li><li><a href="https://www.tomsguide.com/computing/macbooks/iphone-17e-announced-with-a19-chip-double-the-storage-and-magsafe-price-release-date-and-all-the-upgrades"><strong>iPhone 17e announced with A19 chip, double the storage and MagSafe — price, release date and all the upgrades</strong></a></li><li><strong></strong><a href="https://www.tomsguide.com/computing/macbooks/cheap-macbook-a18-pro-everything-we-know-so-far"><strong>Apple's cheap MacBook: Rumored specs, price, release date</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/ipads/ipad-air-m4-vs-ipad-air-m3-whats-different</link>
                                                                            <description>
                            <![CDATA[ Apple has just announced the new iPad Air M4. Here are the biggest differences between the new tablet and the iPad Air M3. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">kVCJfccVXPMvwYrXwoXiZc</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/tfPDgVbhbSCtLfE9UPeK5G-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 02 Mar 2026 16:04:16 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Tablets]]></category>
                                                                                                                    <dc:creator><![CDATA[ Alan Martin ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/xMmhmPSssqZHHFWveDgSs7-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/tfPDgVbhbSCtLfE9UPeK5G-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide / Apple]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPad Air M4 press image next to iPad Air M3]]></media:description>                                                            <media:text><![CDATA[iPad Air M4 press image next to iPad Air M3]]></media:text>
                                <media:title type="plain"><![CDATA[iPad Air M4 press image next to iPad Air M3]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/tfPDgVbhbSCtLfE9UPeK5G-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>As insiders were predicting, Apple has refreshed the iPad Air, 12 months after its last update. Meet the <a href="https://www.tomsguide.com/computing/ipads/ipad-air-m4-announced-with-more-power-and-wi-fi-7-price-release-date-and-full-specs">iPad Air M4</a>.</p><p>The company’s mid-range tablet sees an upgrade to the <a href="https://www.tomsguide.com/computing/apple-desktops/apple-m4-chip">M4 processor</a> (with the M5 still reserved for the <a href="https://www.tomsguide.com/computing/ipads/ipad-pro-m5-review">top-of-the-line iPad Pro</a>) and gains an extra 4GB of RAM, while keeping prices static for another year.</p><p>The <a href="https://www.tomsguide.com/tablets/ipads/ipad-air-m3-review">iPad Air M3</a> has been immediately retired, but retailers will be looking to clear stock, and there’s always the second-hand market for bargain hunters. Is it worth paying extra for the new version? And if you have the M3 iPad Air, should you be looking to upgrade? Here are the key differences.</p><h2 id="ipad-air-m4-vs-ipad-air-m3-specs">iPad Air M4 vs iPad Air M3: Specs</h2><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>iPad Air M4</strong></p></td><td  ><p><strong>iPad Air M3</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Starting price</strong></p></td><td  ><p>$599 (11-inch), $799 (13-inch)</p></td><td  ><p>$599 (11-inch), $799 (13-inch)</p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>11-inch Liquid Retina display (2360 x 1640) | 13-inch Liquid Retina display (2732 x 2048)</p></td><td  ><p>11-inch Liquid Retina display (2360 x 1640) | 13-inch Liquid Retina display (2732 x 2048)</p></td></tr><tr><td class="firstcol " ><p><strong>Chipset</strong></p></td><td  ><p>Apple M4 chip</p></td><td  ><p>Apple M3 chip</p></td></tr><tr><td class="firstcol " ><p><strong>RAM</strong></p></td><td  ><p>12GB</p></td><td  ><p>8GB</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>128GB, 256GB, 512GB, 1TB</p></td><td  ><p>128GB, 256GB, 512GB, 1TB</p></td></tr><tr><td class="firstcol " ><p><strong>Rear camera</strong></p></td><td  ><p>12MP</p></td><td  ><p>12MP</p></td></tr><tr><td class="firstcol " ><p><strong>Front camera</strong></p></td><td  ><p>12MP</p></td><td  ><p>12MP</p></td></tr><tr><td class="firstcol " ><p><strong>Size</strong></p></td><td  ><p>9.74 x 7.02 x 0.24 inches (11-inch) | 11.04 x 8.46 x 0.24 inches (13-inch)</p></td><td  ><p>9.74 x 7.02 x 0.24 inches (11-inch) | 11.04 x 8.46 x 0.24 inches (13-inch)</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>1.02 pounds (11-inch) | 1.36 pounds (13-inch)</p></td><td  ><p>1.01 pounds (11-inch) | 1.35 pounds (13-inch)</p></td></tr><tr><td class="firstcol " ><p><strong>Colors</strong></p></td><td  ><p>Blue, Purple, Starlight, Space Gray</p></td><td  ><p>Blue, Purple, Starlight, Space Gray</p></td></tr></tbody></table></div><h2 id="ipad-air-m4-vs-ipad-air-m3-price">iPad Air M4 vs iPad Air M3: 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="RJhc3anzHjVh6vUJnPsyCN" name="iPad Air M3" alt="iPad Air M3" src="https://cdn.mos.cms.futurecdn.net/RJhc3anzHjVh6vUJnPsyCN-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Despite the bump in specs, Apple has kept the price of the iPad Air M4 the same for another year. That means that the 11-inch model starts at $599, rising to $1,249 for a model with cellular connectivity and 1TB of storage. The 13-inch version, meanwhile, ranges from $799 to $1,449 for a fully souped-up model.</p><p>Of course, with the M3 model now old news, you may be able to get one for a lower price either through retailers clearing out old stock or through the second-hand market.</p><h2 id="ipad-air-m4-vs-ipad-air-m3-design-and-display">iPad Air M4 vs iPad Air M3: Design and 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:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="pq3SzhJnbfqfHw6vCJL5xL" name="iPad Air M4 (2)" alt="iPad Air M4" src="https://cdn.mos.cms.futurecdn.net/pq3SzhJnbfqfHw6vCJL5xL-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: Apple)</span></figcaption></figure><p>The new iPad Air M4 looks pretty much identical to the M3 model, which in turn was pretty much indistinguishable from the M2 version. </p><p>It’s still available in 11- and 13-inch sizes, with the same dimensions: 9.74 x 7.02 x 0.24 inches for the 11-inch model, and 11.04 x 8.46 x 0.24 inches for the 13-inch version. Apple lists the weight as 0.1 pound heavier for both versions, so a negligible change there, too. </p><p>The screen technology is also the same LED used on the previous model, with <a href="https://www.tomsguide.com/news/ipad-mini-and-ipad-air-oled-roadmap-revealed">plans to match the OLED on the iPad Pro not expected to materialize until next year</a>. It’s 60Hz, too, with no ProMotion 120Hz upgrade, unfortunately.</p><p>So it’s a draw between the two tablets in terms of design and display. All the significant changes are on the inside.</p><h2 id="ipad-air-m4-vs-ipad-air-m3-performance">iPad Air M4 vs iPad Air M3: Performance</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3962px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="MYJ89pdGuPUTn7GPd2q9M7" name="iPad Air M3 review-1" alt="iPad Air M3" src="https://cdn.mos.cms.futurecdn.net/MYJ89pdGuPUTn7GPd2q9M7-1920-80.jpg" mos="" align="middle" fullscreen="" width="3962" height="2229" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The headline change is, of course, the introduction of Apple’s M4 chipset. Apple claims this will be a 30% boost in performance on the M3 iPad Air, or 2.3 times faster than the M1 model.</p><p>While we’ll be running benchmarks when we get our own review unit, we’ve seen how the M4 performs in tablet form before, thanks to the <a href="https://www.tomsguide.com/tablets/ipads/ipad-pro-2024">2024 iPad Pro</a>. Here’s a recap:</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>M3 (in iPad Air M3)</strong></p></td><td  ><p><strong>M4 (in 2024 iPad Pro)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Geekbench (single core / dual core)</strong></p></td><td  ><p>3,042 / 11,804</p></td><td  ><p>3,700 / 14,523</p></td></tr><tr><td class="firstcol " ><p><strong>3DMark WildLife</strong></p></td><td  ><p>5,806 / 34.8 fps</p></td><td  ><p>8,529 / 51 fps</p></td></tr></tbody></table></div><p>The Apple M4 chip is also more efficient than its predecessor, which means you may see some advancement on the 9 hours and 41 minutes that the 11-inch iPad Air M3 achieved in our battery life test. That said, Apple only promises “all-day battery life” in the press release.</p><p>A bigger surprise is the upgrade in RAM. While the M3 iPad Air had 8GB — the minimum required for Apple Intelligence — the souped-up M4 version comes with 12GB RAM. Apple also says the memory bandwidth has increased to 120GB/s ensuring that AI models run faster than before.</p><p>Beyond the M4 and memory upgrades, the new iPad Air has a few other improvements hidden away inside. First introduced with the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-17-review">iPhone 17</a> family last September, the new iPad Air contains the N1 chip for Wi-Fi 7, Bluetooth 6, and — if you spring for the cellular model — a C1X 5G modem.</p><p>Taking these one at a time, <a href="https://www.tomsguide.com/reference/wi-fi-7-explained">Wi-Fi 7</a> means better performance on supported routers, with higher speeds and lower latency. Apple’s own implementation <a href="https://www.tomsguide.com/phones/iphones/apples-n1-chip-offers-faster-speeds-while-using-weaker-wi-fi-according-to-the-experts-at-ookla">seems to be more effective when using weaker Wi-Fi connections, too</a>. <a href="https://www.tomsguide.com/audio/bluetooth-speakers/bluetooth-60-just-revealed-heres-what-that-means-for-you">Bluetooth 6</a> spells more reliable connections, lower latency and more efficient power use.</p><p>Apple’s own 5G modem technology will be introduced to cellular models of the iPad Air for the first time, too. The C1X 5G modem already features in the <a href="https://www.tomsguide.com/phones/iphones/iphone-air-review">iPhone Air</a>, and according to Apple, it was two times faster than the original C1 that debuted in the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-16e-review">iPhone 16e</a>. In tablet terms, Apple says it’s up to 50% faster with 30% less energy usage than the Qualcomm SDX70M modem found in the iPad Air M3.</p><h2 id="ipad-air-m4-vs-ipad-air-m3-outlook">iPad Air M4 vs iPad Air M3: Outlook</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4491px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ZZ2jcZM2HuFqpun5zrVJvL" name="iPad Air M4 (1)" alt="iPad Air M4" src="https://cdn.mos.cms.futurecdn.net/ZZ2jcZM2HuFqpun5zrVJvL-1920-80.jpg" mos="" align="middle" fullscreen="" width="4491" height="2526" 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 looked at the two iPad Air models side by side, you’d be unlikely to see much of a difference. But on the inside, the iPad Air M4 is clearly a faster and more efficient performer, thanks not just to the M4 chipset, but to 4GB extra RAM and improved wireless technologies.</p><p>Does that mean you should upgrade from an M3 version? Maybe if you’re a power user, but otherwise probably not. </p><p>That said, unless money is particularly tight, it would be a mistake to opt for the older iPad Air over the newer model if you’re looking to upgrade from an older model or are completely new to Apple’s tablets.</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-march-event-2026-live"><strong>Apple March event LIVE: iPhone 17e, iPad Air M4 and every big announcement</strong></a></li><li><a href="https://www.tomsguide.com/computing/macbooks/iphone-17e-announced-with-a19-chip-double-the-storage-and-magsafe-price-release-date-and-all-the-upgrades"><strong>iPhone 17e announced with A19 chip, double the storage and MagSafe — price, release date and all the upgrades</strong></a></li><li><strong></strong><a href="https://www.tomsguide.com/computing/macbooks/cheap-macbook-a18-pro-everything-we-know-so-far"><strong>Apple's cheap MacBook: Rumored specs, price, release date</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ iPad Air M4 announced with more power and Wi-Fi 7 — price, release date and full specs ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Among all the other new Apple products announced today, the company has launched the Apple iPad Air powered by the company's M4 processor. Like the previous generation, the Air will be offered in two sizes — 11 and 13 inches — and while little appears to have changed since the previous version (other than the processor), it still looks to be a strong complement to Apple's tablet lineup, and could maintain its place at the top of our list of the <a href="https://www.tomsguide.com/best-picks/best-tablet">best tablets</a>. </p><p>Here's all the specs and pricing for the 2026 Apple iPad Air</p><h3 class="article-body__section" id="section-price-and-availability"><span>Price and availability</span></h3><p>The iPad Air M4 will start at $599 for the 11-inch model, and $799 for the 13-inch version. The base model for each will come with 128GB of storage. Thankfully, that's the same pricing as the M3 Air, so <a href="https://www.tomsguide.com/computing/ram-price-crisis-2026-everything-you-need-to-know">RAMageddon</a> hasn't come to Apple's tablets yet.</p><p>Both models will be available in four colors: space gray, blue, purple, and starlight (a very pale gold). </p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>iPad Air 11-inch</strong></p></td><td  ><p><strong>iPad Air 13-inch</strong></p></td></tr><tr><td class="firstcol " ><p><strong>128GB</strong></p></td><td  ><p>$599</p></td><td  ><p>$799</p></td></tr><tr><td class="firstcol " ><p><strong>256GB</strong></p></td><td  ><p>$699</p></td><td  ><p>$899</p></td></tr><tr><td class="firstcol " ><p><strong>512GB</strong></p></td><td  ><p>$899</p></td><td  ><p>$1,099</p></td></tr><tr><td class="firstcol " ><p><strong>1TB</strong></p></td><td  ><p>$1,099</p></td><td  ><p>$1,299</p></td></tr></tbody></table></div><p>Preorders for both models will open at 9:15 am on March 4, and devices will go on sale on March 11. </p><h3 class="article-body__section" id="section-ipad-air-m4-specs"><span>iPad Air M4 specs</span></h3><p>Apart from the updated processor, the M4 iPad Air will be nearly identical to the M3 version. Here's a quick look at the specs. </p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>iPad Air M4 (11-inch)</strong></p></td><td  ><p><strong>iPad Air M3 (11-inch)</strong></p></td><td  ><p><strong>iPad Air M4 (13-inch)</strong></p></td><td  ><p><strong>iPad Air M3 (13-inch)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Size</strong></p></td><td  ><p>9.74 x 7.02 x 0.24 inches</p></td><td  ><p>9.74 x 7.02 x 0.24 inches</p></td><td  ><p>11.04 x 8.46 x 0.24 inches</p></td><td  ><p>11.04 x 8.46 x 0.24 inches</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>1.02</p></td><td  ><p>1.05</p></td><td  ><p>1.36</p></td><td  ><p>1.36</p></td></tr><tr><td class="firstcol " ><p><strong>Resolution</strong></p></td><td  ><p>2360 x 1640</p></td><td  ><p>2360 x 1640</p></td><td  ><p>2732 x 2048</p></td><td  ><p>2732 x 2048</p></td></tr><tr><td class="firstcol " ><p><strong>Brightness</strong></p></td><td  ><p>500 nits</p></td><td  ><p>500 nits</p></td><td  ><p>600 nits</p></td><td  ><p>600 nits</p></td></tr><tr><td class="firstcol " ><p><strong>Rear</strong> <strong>camera</strong></p></td><td  ><p>12MP (f/1.8)</p></td><td  ><p>12MP (f/1.8)</p></td><td  ><p>12MP (f/1.8)</p></td><td  ><p>12MP (f/1.8)</p></td></tr><tr><td class="firstcol " ><p><strong>Front camera</strong></p></td><td  ><p>12MP (f/2)</p></td><td  ><p>12MP (f/2)</p></td><td  ><p>12MP (f/2)</p></td><td  ><p>12MP (f/2)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery size</strong></p></td><td  ><p>28.93 Wh</p></td><td  ><p>28.93 Wh</p></td><td  ><p>36.59 Wh</p></td><td  ><p>36.59 Wh</p></td></tr><tr><td class="firstcol " ><p><strong>Battery life (rated)</strong></p></td><td  ><p>Up to 10 hours</p></td><td  ><p>Up to 10 hours</p></td><td  ><p>Up to 10 hours</p></td><td  ><p>Up to 10 hours</p></td></tr><tr><td class="firstcol " ><p><strong>Wi-Fi</strong></p></td><td  ><p>Wi-Fi 7</p></td><td  ><p>Wi-Fi 6E</p></td><td  ><p>Wi-Fi 7</p></td><td  ><p>Wi-Fi 6E</p></td></tr><tr><td class="firstcol " ><p><strong>Wireless</strong></p></td><td  ><p>Bluetooth 6, Thread, Apple N1 </p></td><td  ><p>Bluetooth 5.3</p></td><td  ><p>Bluetooth 6, Thread, Apple N1 </p></td><td  ><p>Bluetooth 5.3</p></td></tr></tbody></table></div><p>Apart from the processor, the other major difference is that the M4 iPads will have Wi-Fi 7, as well as Bluetooth 6 and Thread, thanks to Apple's N1 chip, which the company introduced with the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-17-review">iPhone 17</a>. </p><h3 class="article-body__section" id="section-outlook"><span>Outlook</span></h3><p>From what it looks like, the only major change from the iPad Air M3 and the iPad Air M4 is that you'll get better performance owing to the more powerful processor, with no tradeoff in battery life. While it's not exactly apples-to-apples (although it is in some respects), when you compare <a href="https://www.tomsguide.com/features/apple-macbook-hierarchy-m3-vs-m2-vs-m1-benchmarks#section-macbook-hierarchy-general-performance">our benchmark tests of all of Apple's M4 Macbooks</a>, you do see some incremental improvements between the M4 and M3 generations. </p><p>Stay tuned for our full benchmarks of Apple's newest and lightest iPad.</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-march-event-2026-live"><strong>Apple March event LIVE: iPhone 17e, iPad Air M4 and every big announcement</strong></a></li><li><a href="https://www.tomsguide.com/computing/macbooks/iphone-17e-announced-with-a19-chip-double-the-storage-and-magsafe-price-release-date-and-all-the-upgrades"><strong>iPhone 17e announced with A19 chip, double the storage and MagSafe — price, release date and all the upgrades</strong></a></li><li><strong></strong><a href="https://www.tomsguide.com/computing/macbooks/cheap-macbook-a18-pro-everything-we-know-so-far"><strong>Apple's cheap MacBook: Rumored specs, price, release date</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/ipads/ipad-air-m4-announced-with-more-power-and-wi-fi-7-price-release-date-and-full-specs</link>
                                                                            <description>
                            <![CDATA[ Apple just announced the iPad Air M4. Here's a look at its price and specs compared to the iPad Air M3. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">wTU2ASkA2aKUKYJkZyTVBV</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/3a6TGjpXp4zK6HB8kXoBag-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 02 Mar 2026 15:01:30 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[Tablets]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                                                                <author><![CDATA[ mike.prospero@futurenet.com (Mike Prospero) ]]></author>                    <dc:creator><![CDATA[ Mike Prospero ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/6ZM8mX4UwccqDJTh9gLPqV-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Michael A. Prospero is the U.S. Editor-in-Chief for Tom’s Guide. He oversees all evergreen content and oversees the Homes, Smart Home, and Fitness/Wearables categories for the site. In his spare time, he also tests out the latest drones, electric scooters, and smart home gadgets, such as video doorbells. Before his tenure at Tom&#039;s Guide, he was the Reviews Editor for Laptop Magazine, a reporter at Fast Company, the Times of Trenton, and, many eons back, an intern at George magazine. He received his undergraduate degree from Boston College, where he worked on the campus newspaper The Heights, and then attended the Columbia University school of Journalism. When he’s not testing out the latest running watch, electric scooter, or skiing or training for a marathon, he’s probably using the latest sous vide machine, smoker, or pizza oven, to the delight — or chagrin — of his family.&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/3a6TGjpXp4zK6HB8kXoBag-1280-80.jpg">
                                                            <media:credit><![CDATA[Apple]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPad Air M4 lede]]></media:description>                                                            <media:text><![CDATA[iPad Air M4 lede]]></media:text>
                                <media:title type="plain"><![CDATA[iPad Air M4 lede]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/3a6TGjpXp4zK6HB8kXoBag-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Among all the other new Apple products announced today, the company has launched the Apple iPad Air powered by the company's M4 processor. Like the previous generation, the Air will be offered in two sizes — 11 and 13 inches — and while little appears to have changed since the previous version (other than the processor), it still looks to be a strong complement to Apple's tablet lineup, and could maintain its place at the top of our list of the <a href="https://www.tomsguide.com/best-picks/best-tablet">best tablets</a>. </p><p>Here's all the specs and pricing for the 2026 Apple iPad Air</p><h3 class="article-body__section" id="section-price-and-availability"><span>Price and availability</span></h3><p>The iPad Air M4 will start at $599 for the 11-inch model, and $799 for the 13-inch version. The base model for each will come with 128GB of storage. Thankfully, that's the same pricing as the M3 Air, so <a href="https://www.tomsguide.com/computing/ram-price-crisis-2026-everything-you-need-to-know">RAMageddon</a> hasn't come to Apple's tablets yet.</p><p>Both models will be available in four colors: space gray, blue, purple, and starlight (a very pale gold). </p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>iPad Air 11-inch</strong></p></td><td  ><p><strong>iPad Air 13-inch</strong></p></td></tr><tr><td class="firstcol " ><p><strong>128GB</strong></p></td><td  ><p>$599</p></td><td  ><p>$799</p></td></tr><tr><td class="firstcol " ><p><strong>256GB</strong></p></td><td  ><p>$699</p></td><td  ><p>$899</p></td></tr><tr><td class="firstcol " ><p><strong>512GB</strong></p></td><td  ><p>$899</p></td><td  ><p>$1,099</p></td></tr><tr><td class="firstcol " ><p><strong>1TB</strong></p></td><td  ><p>$1,099</p></td><td  ><p>$1,299</p></td></tr></tbody></table></div><p>Preorders for both models will open at 9:15 am on March 4, and devices will go on sale on March 11. </p><h3 class="article-body__section" id="section-ipad-air-m4-specs"><span>iPad Air M4 specs</span></h3><p>Apart from the updated processor, the M4 iPad Air will be nearly identical to the M3 version. Here's a quick look at the specs. </p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>iPad Air M4 (11-inch)</strong></p></td><td  ><p><strong>iPad Air M3 (11-inch)</strong></p></td><td  ><p><strong>iPad Air M4 (13-inch)</strong></p></td><td  ><p><strong>iPad Air M3 (13-inch)</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Size</strong></p></td><td  ><p>9.74 x 7.02 x 0.24 inches</p></td><td  ><p>9.74 x 7.02 x 0.24 inches</p></td><td  ><p>11.04 x 8.46 x 0.24 inches</p></td><td  ><p>11.04 x 8.46 x 0.24 inches</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>1.02</p></td><td  ><p>1.05</p></td><td  ><p>1.36</p></td><td  ><p>1.36</p></td></tr><tr><td class="firstcol " ><p><strong>Resolution</strong></p></td><td  ><p>2360 x 1640</p></td><td  ><p>2360 x 1640</p></td><td  ><p>2732 x 2048</p></td><td  ><p>2732 x 2048</p></td></tr><tr><td class="firstcol " ><p><strong>Brightness</strong></p></td><td  ><p>500 nits</p></td><td  ><p>500 nits</p></td><td  ><p>600 nits</p></td><td  ><p>600 nits</p></td></tr><tr><td class="firstcol " ><p><strong>Rear</strong> <strong>camera</strong></p></td><td  ><p>12MP (f/1.8)</p></td><td  ><p>12MP (f/1.8)</p></td><td  ><p>12MP (f/1.8)</p></td><td  ><p>12MP (f/1.8)</p></td></tr><tr><td class="firstcol " ><p><strong>Front camera</strong></p></td><td  ><p>12MP (f/2)</p></td><td  ><p>12MP (f/2)</p></td><td  ><p>12MP (f/2)</p></td><td  ><p>12MP (f/2)</p></td></tr><tr><td class="firstcol " ><p><strong>Battery size</strong></p></td><td  ><p>28.93 Wh</p></td><td  ><p>28.93 Wh</p></td><td  ><p>36.59 Wh</p></td><td  ><p>36.59 Wh</p></td></tr><tr><td class="firstcol " ><p><strong>Battery life (rated)</strong></p></td><td  ><p>Up to 10 hours</p></td><td  ><p>Up to 10 hours</p></td><td  ><p>Up to 10 hours</p></td><td  ><p>Up to 10 hours</p></td></tr><tr><td class="firstcol " ><p><strong>Wi-Fi</strong></p></td><td  ><p>Wi-Fi 7</p></td><td  ><p>Wi-Fi 6E</p></td><td  ><p>Wi-Fi 7</p></td><td  ><p>Wi-Fi 6E</p></td></tr><tr><td class="firstcol " ><p><strong>Wireless</strong></p></td><td  ><p>Bluetooth 6, Thread, Apple N1 </p></td><td  ><p>Bluetooth 5.3</p></td><td  ><p>Bluetooth 6, Thread, Apple N1 </p></td><td  ><p>Bluetooth 5.3</p></td></tr></tbody></table></div><p>Apart from the processor, the other major difference is that the M4 iPads will have Wi-Fi 7, as well as Bluetooth 6 and Thread, thanks to Apple's N1 chip, which the company introduced with the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-17-review">iPhone 17</a>. </p><h3 class="article-body__section" id="section-outlook"><span>Outlook</span></h3><p>From what it looks like, the only major change from the iPad Air M3 and the iPad Air M4 is that you'll get better performance owing to the more powerful processor, with no tradeoff in battery life. While it's not exactly apples-to-apples (although it is in some respects), when you compare <a href="https://www.tomsguide.com/features/apple-macbook-hierarchy-m3-vs-m2-vs-m1-benchmarks#section-macbook-hierarchy-general-performance">our benchmark tests of all of Apple's M4 Macbooks</a>, you do see some incremental improvements between the M4 and M3 generations. </p><p>Stay tuned for our full benchmarks of Apple's newest and lightest iPad.</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-march-event-2026-live"><strong>Apple March event LIVE: iPhone 17e, iPad Air M4 and every big announcement</strong></a></li><li><a href="https://www.tomsguide.com/computing/macbooks/iphone-17e-announced-with-a19-chip-double-the-storage-and-magsafe-price-release-date-and-all-the-upgrades"><strong>iPhone 17e announced with A19 chip, double the storage and MagSafe — price, release date and all the upgrades</strong></a></li><li><strong></strong><a href="https://www.tomsguide.com/computing/macbooks/cheap-macbook-a18-pro-everything-we-know-so-far"><strong>Apple's cheap MacBook: Rumored specs, price, release date</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple's Tim Cook teases 'big week ahead' starting Monday — cheap MacBook, new iPhone 17e and everything else we expect to see ]]></title>
                                                                                                <dc:content><![CDATA[ <p><a href="https://x.com/tim_cook/status/2027020842396475410?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E2027020842396475410%7Ctwgr%5E443471ec6e73ff09823cd98d01e72c8a0a14538e%7Ctwcon%5Es1_&ref_url=https%3A%2F%2F9to5mac.com%2F2026%2F02%2F26%2Fnew-apple-product-launch-starts-monday-tim-cook-confirms%2F" target="_blank">Apple CEO Tim Cook has confirmed</a> that the company will reveal new products starting on "Monday morning," March 2. This will kick off what is expected to be a three-day bonanza of product announcements. </p><p>This includes a press "experience" on Wednesday where Tom's Guide will be in attendance to try out whatever new devices Apple announces.</p><h2 id="a-little-teaser">A little teaser</h2><p>Cook's teaser is a short video where an incomplete Apple logo is shaped with a squeeze and flick on a silver aluminum background. </p><div class="see-more see-more--clipped"><figure><blockquote class="twitter-tweet hawk-ignore" data-lang="en" cite="https://twitter.com/cantworkitout/status/2027020842396475410"><p lang="en" dir="ltr">A big week ahead. It all starts Monday morning! #AppleLaunch pic.twitter.com/PQ9gM2Gl2r<a href="https://twitter.com/cantworkitout/status/2027020842396475410">February 26, 2026</a></p></blockquote></figure><div class="see-more__filter"></div></div><p>"A big week ahead. It all starts Monday morning! <a href="https://twitter.com/hashtag/AppleLaunch?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E2027020842396475410%7Ctwgr%5E443471ec6e73ff09823cd98d01e72c8a0a14538e%7Ctwcon%5Es1_&ref_url=https%3A%2F%2F9to5mac.com%2F2026%2F02%2F26%2Fnew-apple-product-launch-starts-monday-tim-cook-confirms%2F&src=hashtag_click" target="_blank" rel="nofollow">#AppleLaunch," </a>the text reads. It's clear that Apple plans to announce new hardware even if the message is a bit cryptic </p><p>Outside of the press experience in New York City, London and Shanghai, we don't expect a big Apple keynote. Instead, the company will likely drop several press releases and product videos.</p><h2 id="what-we-expect-to-see-from-apple">What we expect to see from Apple</h2><p>Over the three days, we believe Apple will announce "at least five products" thanks to reporting from Bloomberg's Mark Gurman and previous rumors. </p><p>On the for sure side of things, we expect to see the <a href="https://www.tomsguide.com/phones/iphones/iphone-17e-vs-iphone-16e-the-rumored-upgrades-you-need-to-know-about" target="_blank">iPhone 17e</a>, a new iPad Air M4, and a refreshed entry-level iPad. The biggest announcement should be the rumored <a href="https://www.tomsguide.com/computing/macbooks/apples-rumored-new-macbook-sounds-like-a-nightmare-for-budget-windows-laptops-heres-why">low-cost MacBook</a> that could launch in yellow and green. </p><h2 id="cheap-macbook">Cheap 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:6233px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="9GgvDGFfeZvtVVYXn9nfAj" name="Apple-Silicon-M5-feature-v2" alt="MacBook with glowing keyboard" src="https://cdn.mos.cms.futurecdn.net/9GgvDGFfeZvtVVYXn9nfAj-1920-80.jpg" mos="" align="middle" fullscreen="" width="6233" height="3506" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Getty)</span></figcaption></figure><p>The most interesting may be the rumored<a href="https://www.tomsguide.com/computing/macbooks/apples-rumored-new-macbook-sounds-like-a-nightmare-for-budget-windows-laptops-heres-why"> low-cost MacBook</a> that could launch in yellow and green. The cheap MacBook is meant to take on entry-level Windows laptops for students and general users.</p><p>It's been rumored that it will cost either $599 or $699 with 8GB RAM, 256GB SSD, and a 12-inch display. It could also feature an A18 Pro chip, the same as in the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-16-pro-review">iPhone 16 Pro</a> models.</p><p>If Apple is sticking an A18 chip in the cheap MacBook, it could <a href="https://www.tomsguide.com/computing/macbooks/a18-pro-macbook-vs-m1-macbook-air">handily outperform the MacBook M1</a>, which is currently the least expensive MacBook that you can buy. This means better performance, graphics and power efficiency.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-e4qbgW"></div>                            </div>                            <script src="https://kwizly.com/embed/e4qbgW.js" async></script><h2 id="ipad-air-and-ipad">iPad Air and iPad</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="x9Q9my5jAPw2ni3Z4bkjRW" name="iPad Air M3-01" alt="iPad Air M3" src="https://cdn.mos.cms.futurecdn.net/x9Q9my5jAPw2ni3Z4bkjRW-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>An<a href="https://www.tomsguide.com/computing/ipads/new-ipad-12-and-ipad-air-8-reportedly-coming-soon-and-expect-one-major-upgrade"> iPad Air powered by the M4 chip </a>is the third "likely" device we could see next week. Like the low-cost iPhone e-series, the only big change here will be chips, including potentially Apple's custom <a href="https://www.tomsguide.com/phones/iphones/iphone-17-could-come-packing-apples-home-made-wi-fi-chip-what-that-means-for-you"><u>N1 wireless chips.</u></a></p><p>Alongside the iPad Air, we should see a new entry-level iPad 12, which could feature an A19 chip, though some reports have suggested it could come with an A18 one instead. Either would be an upgrade over the A16 in the current<a href="https://www.tomsguide.com/computing/ipads/ipad-11-2025-review#section-ipad-11-specs"> iPad 11</a>.</p><p>Both devices are only really seeing chip upgrades. So iPad 12 should feature an 11-inch Liquid Retina display, with at least 128GB starting. The iPad 11 had a test battery life of 11 hours and 25 minutes. The more efficient A19 or A18 could increase that life.</p><p>Similarly, the iPad Air M3 has an 11-inch Liquid Retina display and a 10-hour battery life. Again, the more efficient M4 should improve that number.</p><h2 id="other-devices">Other devices</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="STqvPLhTaGcUufjS9tmxsW" name="Mac Studio 2025" alt="Mac Studio M4 Max" src="https://cdn.mos.cms.futurecdn.net/STqvPLhTaGcUufjS9tmxsW-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>That's four devices, what about number 5? Apple has been rumored to launch a refreshed Mac Studio and a new Apple Studio Display this spring. According to Gurman, the Studio Displays are ready to ship now, with the Studio Displays close behind. So, either or both of those products could make an appearance.</p><p>Tom's Guide will be on hand to experience the launches and give you first impressions of whatever Apple announces.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/audio/earbuds/samsung-galaxy-buds-4-pro-vs-apple-airpods-pro-3">Samsung Galaxy Buds 4 Pro vs Apple AirPods Pro 3: Which flagship earbuds win?</a></li><li><a href="https://www.tomsguide.com/sales-events/11-apple-deals-you-can-grab-before-apples-march-event-ipads-airpods-and-macbooks">13 Apple deals you can grab before Apple’s March event — iPads, AirPods and MacBooks</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/i-wear-an-apple-watch-every-day-and-this-is-the-free-app-i-use-all-of-the-time">I wear an Apple Watch every day, and this is the free app I use all of the time</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/apples-tim-cook-teases-big-week-ahead-starting-next-monday-cheap-macbook-new-iphones-and-everything-else-we-expect-to-see</link>
                                                                            <description>
                            <![CDATA[ Tim Cook posted on social media confirming the next big Apple hardware event, where we expect a slew of devices to debut. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">x6gTYzexpTGjdruqFtAAS4</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/RtA5XkKb3fhgY4Y5ZxnxzB-1280-80.png" type="image/png" length="0"></enclosure>
                                                                        <pubDate>Thu, 26 Feb 2026 18:15:39 +0000</pubDate>                                                                                                                                <updated>Thu, 26 Feb 2026 18:57:41 +0000</updated>
                                                                                                                                            <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[MacBooks]]></category>
                                                    <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[Phones]]></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;/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/RtA5XkKb3fhgY4Y5ZxnxzB-1280-80.png">
                                                            <media:credit><![CDATA[Apple / Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Apple event 2026 on an iphone with a multi-colored background]]></media:description>                                                            <media:text><![CDATA[Apple event 2026 on an iphone with a multi-colored background]]></media:text>
                                <media:title type="plain"><![CDATA[Apple event 2026 on an iphone with a multi-colored background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/RtA5XkKb3fhgY4Y5ZxnxzB-1280-80.png" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p><a href="https://x.com/tim_cook/status/2027020842396475410?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E2027020842396475410%7Ctwgr%5E443471ec6e73ff09823cd98d01e72c8a0a14538e%7Ctwcon%5Es1_&ref_url=https%3A%2F%2F9to5mac.com%2F2026%2F02%2F26%2Fnew-apple-product-launch-starts-monday-tim-cook-confirms%2F" target="_blank">Apple CEO Tim Cook has confirmed</a> that the company will reveal new products starting on "Monday morning," March 2. This will kick off what is expected to be a three-day bonanza of product announcements. </p><p>This includes a press "experience" on Wednesday where Tom's Guide will be in attendance to try out whatever new devices Apple announces.</p><h2 id="a-little-teaser">A little teaser</h2><p>Cook's teaser is a short video where an incomplete Apple logo is shaped with a squeeze and flick on a silver aluminum background. </p><div class="see-more see-more--clipped"><figure><blockquote class="twitter-tweet hawk-ignore" data-lang="en" cite="https://twitter.com/cantworkitout/status/2027020842396475410"><p lang="en" dir="ltr">A big week ahead. It all starts Monday morning! #AppleLaunch pic.twitter.com/PQ9gM2Gl2r<a href="https://twitter.com/cantworkitout/status/2027020842396475410">February 26, 2026</a></p></blockquote></figure><div class="see-more__filter"></div></div><p>"A big week ahead. It all starts Monday morning! <a href="https://twitter.com/hashtag/AppleLaunch?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E2027020842396475410%7Ctwgr%5E443471ec6e73ff09823cd98d01e72c8a0a14538e%7Ctwcon%5Es1_&ref_url=https%3A%2F%2F9to5mac.com%2F2026%2F02%2F26%2Fnew-apple-product-launch-starts-monday-tim-cook-confirms%2F&src=hashtag_click" target="_blank" rel="nofollow">#AppleLaunch," </a>the text reads. It's clear that Apple plans to announce new hardware even if the message is a bit cryptic </p><p>Outside of the press experience in New York City, London and Shanghai, we don't expect a big Apple keynote. Instead, the company will likely drop several press releases and product videos.</p><h2 id="what-we-expect-to-see-from-apple">What we expect to see from Apple</h2><p>Over the three days, we believe Apple will announce "at least five products" thanks to reporting from Bloomberg's Mark Gurman and previous rumors. </p><p>On the for sure side of things, we expect to see the <a href="https://www.tomsguide.com/phones/iphones/iphone-17e-vs-iphone-16e-the-rumored-upgrades-you-need-to-know-about" target="_blank">iPhone 17e</a>, a new iPad Air M4, and a refreshed entry-level iPad. The biggest announcement should be the rumored <a href="https://www.tomsguide.com/computing/macbooks/apples-rumored-new-macbook-sounds-like-a-nightmare-for-budget-windows-laptops-heres-why">low-cost MacBook</a> that could launch in yellow and green. </p><h2 id="cheap-macbook">Cheap 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:6233px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="9GgvDGFfeZvtVVYXn9nfAj" name="Apple-Silicon-M5-feature-v2" alt="MacBook with glowing keyboard" src="https://cdn.mos.cms.futurecdn.net/9GgvDGFfeZvtVVYXn9nfAj-1920-80.jpg" mos="" align="middle" fullscreen="" width="6233" height="3506" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Getty)</span></figcaption></figure><p>The most interesting may be the rumored<a href="https://www.tomsguide.com/computing/macbooks/apples-rumored-new-macbook-sounds-like-a-nightmare-for-budget-windows-laptops-heres-why"> low-cost MacBook</a> that could launch in yellow and green. The cheap MacBook is meant to take on entry-level Windows laptops for students and general users.</p><p>It's been rumored that it will cost either $599 or $699 with 8GB RAM, 256GB SSD, and a 12-inch display. It could also feature an A18 Pro chip, the same as in the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-16-pro-review">iPhone 16 Pro</a> models.</p><p>If Apple is sticking an A18 chip in the cheap MacBook, it could <a href="https://www.tomsguide.com/computing/macbooks/a18-pro-macbook-vs-m1-macbook-air">handily outperform the MacBook M1</a>, which is currently the least expensive MacBook that you can buy. This means better performance, graphics and power efficiency.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-e4qbgW"></div>                            </div>                            <script src="https://kwizly.com/embed/e4qbgW.js" async></script><h2 id="ipad-air-and-ipad">iPad Air and iPad</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="x9Q9my5jAPw2ni3Z4bkjRW" name="iPad Air M3-01" alt="iPad Air M3" src="https://cdn.mos.cms.futurecdn.net/x9Q9my5jAPw2ni3Z4bkjRW-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>An<a href="https://www.tomsguide.com/computing/ipads/new-ipad-12-and-ipad-air-8-reportedly-coming-soon-and-expect-one-major-upgrade"> iPad Air powered by the M4 chip </a>is the third "likely" device we could see next week. Like the low-cost iPhone e-series, the only big change here will be chips, including potentially Apple's custom <a href="https://www.tomsguide.com/phones/iphones/iphone-17-could-come-packing-apples-home-made-wi-fi-chip-what-that-means-for-you"><u>N1 wireless chips.</u></a></p><p>Alongside the iPad Air, we should see a new entry-level iPad 12, which could feature an A19 chip, though some reports have suggested it could come with an A18 one instead. Either would be an upgrade over the A16 in the current<a href="https://www.tomsguide.com/computing/ipads/ipad-11-2025-review#section-ipad-11-specs"> iPad 11</a>.</p><p>Both devices are only really seeing chip upgrades. So iPad 12 should feature an 11-inch Liquid Retina display, with at least 128GB starting. The iPad 11 had a test battery life of 11 hours and 25 minutes. The more efficient A19 or A18 could increase that life.</p><p>Similarly, the iPad Air M3 has an 11-inch Liquid Retina display and a 10-hour battery life. Again, the more efficient M4 should improve that number.</p><h2 id="other-devices">Other devices</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="STqvPLhTaGcUufjS9tmxsW" name="Mac Studio 2025" alt="Mac Studio M4 Max" src="https://cdn.mos.cms.futurecdn.net/STqvPLhTaGcUufjS9tmxsW-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>That's four devices, what about number 5? Apple has been rumored to launch a refreshed Mac Studio and a new Apple Studio Display this spring. According to Gurman, the Studio Displays are ready to ship now, with the Studio Displays close behind. So, either or both of those products could make an appearance.</p><p>Tom's Guide will be on hand to experience the launches and give you first impressions of whatever Apple announces.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/audio/earbuds/samsung-galaxy-buds-4-pro-vs-apple-airpods-pro-3">Samsung Galaxy Buds 4 Pro vs Apple AirPods Pro 3: Which flagship earbuds win?</a></li><li><a href="https://www.tomsguide.com/sales-events/11-apple-deals-you-can-grab-before-apples-march-event-ipads-airpods-and-macbooks">13 Apple deals you can grab before Apple’s March event — iPads, AirPods and MacBooks</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/i-wear-an-apple-watch-every-day-and-this-is-the-free-app-i-use-all-of-the-time">I wear an Apple Watch every day, and this is the free app I use all of the time</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Bummer! New report claims Apple won’t redesign the iPad Pro for years ]]></title>
                                                                                                <dc:content><![CDATA[ <p>It might be years before the iPad Pro gets a significant redesign. That’s according to Weibo-based leaker <a href="https://weibo.com/u/5143897135" target="_blank">Instant Digital</a> (via <a href="https://appleinsider.com/articles/26/02/16/ipad-pro-rumored-to-not-get-major-design-changes-for-many-years" target="_blank">Apple Insider</a>), who claims that the high cost of the iPad Pro’s OLED panel, along with slow sales after the last redesign, have made Apple decide to hold off on another design change for the foreseeable future.</p><p>While we might not see a new iPad Pro design, that doesn’t mean Apple will stop releasing future iterations of its premium tablet. The report says we’ll still get chip updates even if the slate’s design remains unchanged. If that’s the case, the new spec bump is likely to be an M6-powered iPad Pro.</p><h2 id="what-the-future-holds">What the future holds</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="gg3FL9fcAZKMxSt47aMixC" name="iPad Pro M5--05" alt="iPad Pro M5" src="https://cdn.mos.cms.futurecdn.net/gg3FL9fcAZKMxSt47aMixC-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>For those keeping track, the iPad Pro last received a major update in 2024, where Apple delivered the <a href="https://www.tomsguide.com/tablets/ipads/new-ipad-pro-2024-boasts-first-ever-tandem-oled-display-heres-why-its-a-breakthrough">first iPad with an OLED panel</a>. The <a href="https://www.tomsguide.com/tablets/ipads/ipad-pro-2024">iPad Pro M4</a> featured an <a href="https://www.tomsguide.com/computing/apple-desktops/apple-m4-chip">M4 chip</a>, and it got a follow-up with the <a href="https://www.tomsguide.com/computing/ipads/ipad-pro-m5-review">iPad Pro M5</a> the following year. Other than the processor, it received no major redesign. If this recent report is correct, it seems this is what we can expect from future iPad Pros.</p><p>Besides a spec bump, the iPad Pro can still receive software updates via iPadOS. As we’ve seen with <a href="https://www.tomsguide.com/computing/ipads/apple-ipados-26-review">iPadOS 26</a>, Apple’s premium tablet is now more MacBook-like, thanks to a new UI and folder options meant to help you be more productive. Likewise with <a href="https://www.tomsguide.com/computing/creative-software/i-just-tried-apple-creator-studio-and-im-never-going-back-to-adobe">Apple Creator Studio</a>, the iPad Pro is also getting many new creator-friendly features. In short, future iPad Pros might look like the existing 2025 model, but they could function very differently.</p><h2 id="outlook-2">Outlook</h2><p>As someone who reviews iPads for a living, hearing this news is a bummer. That said, this is still very much a rumor. Given that, I’ll reserve hope for new design elements, such as even thinner bezels and better cooling. But even if that doesn’t happen, I can’t complain too much since the current iPad Pro design is so great.</p><p>Again, take this alleged leak with a healthy dose of skepticism. If we hear any updates on this story, we’ll let you know, so stay tuned for more!</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-X1g7aW"></div>                            </div>                            <script src="https://kwizly.com/embed/X1g7aW.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/apple-event-announced-in-new-york-for-march-4-iphone-17e-first-cheap-macbook-and-more">Apple event announced in New York for March 4</a></li><li><a href="https://www.tomsguide.com/best-picks/best-ipad">These are the best iPads you can buy in 2026</a></li><li><a href="https://www.tomsguide.com/ai/i-made-a-digital-twin-of-myself-in-chatgpt-and-it-changed-how-i-work-every-day">I made a digital twin of myself in ChatGPT</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/ipads/bummer-new-report-claims-apple-wont-redesign-the-ipad-pro-for-years</link>
                                                                            <description>
                            <![CDATA[ If a recent alleged leak is true, we might not see a new iPad Pro design for a long time. Here's what we've heard. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">dY4UFrCCSm4M6aLsxPrNG7</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/fTLBUGYWebi9ZYA6AY93K7-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 17 Feb 2026 15:41:21 +0000</pubDate>                                                                                                                                                                                                                                <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/fTLBUGYWebi9ZYA6AY93K7-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPad Pro M5]]></media:description>                                                            <media:text><![CDATA[iPad Pro M5]]></media:text>
                                <media:title type="plain"><![CDATA[iPad Pro M5]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/fTLBUGYWebi9ZYA6AY93K7-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>It might be years before the iPad Pro gets a significant redesign. That’s according to Weibo-based leaker <a href="https://weibo.com/u/5143897135" target="_blank">Instant Digital</a> (via <a href="https://appleinsider.com/articles/26/02/16/ipad-pro-rumored-to-not-get-major-design-changes-for-many-years" target="_blank">Apple Insider</a>), who claims that the high cost of the iPad Pro’s OLED panel, along with slow sales after the last redesign, have made Apple decide to hold off on another design change for the foreseeable future.</p><p>While we might not see a new iPad Pro design, that doesn’t mean Apple will stop releasing future iterations of its premium tablet. The report says we’ll still get chip updates even if the slate’s design remains unchanged. If that’s the case, the new spec bump is likely to be an M6-powered iPad Pro.</p><h2 id="what-the-future-holds">What the future holds</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="gg3FL9fcAZKMxSt47aMixC" name="iPad Pro M5--05" alt="iPad Pro M5" src="https://cdn.mos.cms.futurecdn.net/gg3FL9fcAZKMxSt47aMixC-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>For those keeping track, the iPad Pro last received a major update in 2024, where Apple delivered the <a href="https://www.tomsguide.com/tablets/ipads/new-ipad-pro-2024-boasts-first-ever-tandem-oled-display-heres-why-its-a-breakthrough">first iPad with an OLED panel</a>. The <a href="https://www.tomsguide.com/tablets/ipads/ipad-pro-2024">iPad Pro M4</a> featured an <a href="https://www.tomsguide.com/computing/apple-desktops/apple-m4-chip">M4 chip</a>, and it got a follow-up with the <a href="https://www.tomsguide.com/computing/ipads/ipad-pro-m5-review">iPad Pro M5</a> the following year. Other than the processor, it received no major redesign. If this recent report is correct, it seems this is what we can expect from future iPad Pros.</p><p>Besides a spec bump, the iPad Pro can still receive software updates via iPadOS. As we’ve seen with <a href="https://www.tomsguide.com/computing/ipads/apple-ipados-26-review">iPadOS 26</a>, Apple’s premium tablet is now more MacBook-like, thanks to a new UI and folder options meant to help you be more productive. Likewise with <a href="https://www.tomsguide.com/computing/creative-software/i-just-tried-apple-creator-studio-and-im-never-going-back-to-adobe">Apple Creator Studio</a>, the iPad Pro is also getting many new creator-friendly features. In short, future iPad Pros might look like the existing 2025 model, but they could function very differently.</p><h2 id="outlook-2">Outlook</h2><p>As someone who reviews iPads for a living, hearing this news is a bummer. That said, this is still very much a rumor. Given that, I’ll reserve hope for new design elements, such as even thinner bezels and better cooling. But even if that doesn’t happen, I can’t complain too much since the current iPad Pro design is so great.</p><p>Again, take this alleged leak with a healthy dose of skepticism. If we hear any updates on this story, we’ll let you know, so stay tuned for more!</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-X1g7aW"></div>                            </div>                            <script src="https://kwizly.com/embed/X1g7aW.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/apple-event-announced-in-new-york-for-march-4-iphone-17e-first-cheap-macbook-and-more">Apple event announced in New York for March 4</a></li><li><a href="https://www.tomsguide.com/best-picks/best-ipad">These are the best iPads you can buy in 2026</a></li><li><a href="https://www.tomsguide.com/ai/i-made-a-digital-twin-of-myself-in-chatgpt-and-it-changed-how-i-work-every-day">I made a digital twin of myself in ChatGPT</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple March 4 event — all the new products we expect ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Apple just announced that another Apple event will be happening on March 4, and it'll no doubt be where Apple lifts the lid on all the products we've been hearing <a href="https://www.tomsguide.com/tech/apple-in-2026">rumors about over the past few weeks.</a> Including the likes of the <a href="https://www.tomsguide.com/phones/iphones/iphone-17e-rumors-everything-weve-heard-so-far">iPhone 17e</a>, <a href="https://www.tomsguide.com/tech/apple-in-2026">a bunch of new MacBook </a>models, new iPads and possibly even some new Mac displays.</p><p>As is typical for Apple, the company hasn't given us any official information on what to expect. All we have to go on is an invitation for the event, featuring a stylized version of Apple's logo. Apple has also confirmed the "special Apple experience" will be happening in New York, suggesting this won't be your typical Apple event.</p><p>Here's what to expect at the March 4 Apple event.</p><h2 id="apple-march-4-event-expected-products">Apple March 4 Event: Expected Products</h2><ul><li><strong>iPhone 17e:</strong> Apple's cheapest iPhone, expected to offer a strong flagship experience for slightly less than an iPhone 17</li><li><strong>Cheaper MacBook: </strong>The lower-cost MacBook will reportedly cost around $599 with performance duties coming from an A18 chipset.</li><li><strong>M5 MacBook Air:</strong> An updated MacBook Air with the same design, and powered by Apple's M5 chipset</li><li><strong>M5 Pro & M5 Max MacBook Pros: </strong>Another minor refresh, with Apple's existing MacBook Pros arriving with the new M5 Pro and M5 Max chips</li><li><strong>iPad 12: </strong>Apple's cheapest iPad is set for a small upgrade, with a new A18 or A19 chipset depending on who you ask</li><li><strong>iPad Air 8: </strong>Another small iPad refresh, this time bringing the M4 chipset in to take on performance duties</li></ul><h2 id="iphone-17e">iPhone 17e</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="8wk2TyTMYm4r34Wq7ykqS7" name="iPhone 17e render" alt="iPhone 17e concept render by AorS Mobile" src="https://cdn.mos.cms.futurecdn.net/8wk2TyTMYm4r34Wq7ykqS7-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: AorS Mobile / YouTube)</span></figcaption></figure><p>Apple's "cheap" iPhone was initially rumored to arrive before the end of February, but it's far more likely Apple will unveil everything during the March 4 event instead. The main thing to remember about the phone is that it's expected to look more or less the same as the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-16e-review">iPhone 16e</a> — which itself looks like an <a href="https://www.tomsguide.com/reviews/iphone-14">iPhone 14</a>. </p><p>The changes sound like they're on the inside, with reports suggesting that the phone will come with the same A19 chipset as <a href="https://www.tomsguide.com/phones/iphones/iphone-17e-leaks-just-revealed-key-upgrades-to-expect-and-also-whats-not-changing">the iPhone 17 alongside the new C1X modem and N1 wireless chip</a>. These are all expected to offer better performance and energy efficiency, which likely means superior battery life. MagSafe is also expected to debut, offering a major boost to the phone's wireless charging capabilities with reported speeds of 25W.</p><p>Pricing is expected to stay the same as the iPhone 16e, though, so be prepared to pay up at last $599.</p><h2 id="a-cheap-a18-macbook">A cheap A18 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:6211px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="bEaTYcqYJJjsNnAC8resGm" name="ICT170.trending_5things.fo_rs91795_macbook_iphone7.jpg" alt="Two people standing around a MacBook. The person on the right of the image is holding an iPhone in their left hand" src="https://cdn.mos.cms.futurecdn.net/bEaTYcqYJJjsNnAC8resGm-1920-80.jpg" mos="" align="middle" fullscreen="" width="6211" height="3493" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>"Cheap" isn't exactly something we'd associate with the MacBook range,  but rumors insist Apple is working on a <a href="https://www.tomsguide.com/computing/macbooks/cheap-macbook-a18-pro-everything-we-know-so-far">lower cost MacBook model</a> powered by the A18 Pro chipset. That's the same chip as the iPhone 16 Pro, and will reportedly help to keep the starting price as low as $599. </p><p>Other rumored specs include a 12.9-inch display, while the ability to run Apple intelligence suggests we may see as much as 16GB of RAM included. There's still a lot we don't actually know, but we suspect the laptop will be rather stripped down compared to typical Mac hardware. </p><p>Though, it should still be a good daily-use machine for people who don't need super-process-heavy software that would be better suited with an M5-powered machine.</p><h2 id="more-m5-macbooks">More M5 MacBooks</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='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><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ePjL2O"></div>                            </div>                            <script src="https://kwizly.com/embed/ePjL2O.js" async></script><p>The A18 MacBook probably won't be alone, and this event is the perfect time for Apple to do its usual early-year Mac refresh. That means seeing the <a href="https://www.tomsguide.com/computing/macbooks/m5-macbook-air-reportedly-coming-spring-2026-plus-the-missing-macbook-pros-and-a-new-mac-mini">MacBook Air M5</a> the M4 chip for a shiny new chip, while a bunch of new <a href="https://www.tomsguide.com/computing/macbooks/m5-pro-and-m5-max-macbook-pros-look-set-to-launch-in-march-and-apples-next-mac-launches-are-easy-to-call">MacBook Pros will arrive sporting the still-unannounced M5 Pro and M5 Max chipsets</a>. For those of you who need more power and performance than the regular M5 can actually offer.</p><p>We're not expecting any major design refreshes this year, so expect this update to be all about internals and performance. However, we've also heard reports that Apple could unveil a new <a href="https://www.tomsguide.com/computing/macbooks/apple-leaks-its-own-macbook-pro-reveal-m5-max-and-m5-ultra-chips-found-in-latest-beta">Mac Studio with M5 Max and M5 Ultra chips</a>, alongside a Studio Display 2, at some point in the near future. But there have been reports from Mark Gurman that these may launch shortly after the new MacBook line-up.</p><h2 id="new-ipads">New iPads</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="EENuHfMvyDEDbNKeTXA4X" name="iPad 11" alt="Person holding the iPad 11 with the home screen on display outside in front of a bush" src="https://cdn.mos.cms.futurecdn.net/EENuHfMvyDEDbNKeTXA4X-1920-80.jpg" mos="" align="middle" fullscreen="" width="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 / Tom's Guide)</span></figcaption></figure><p>Also rumored to be on the agenda are the next wave of iPads, notably the <a href="https://www.tomsguide.com/computing/ipads/new-ipad-12-and-ipad-air-8-reportedly-coming-soon-and-expect-one-major-upgrade">iPad 12 and the M4 iPad Air</a>. Speculation suggests that the iPad 12 will finally see Apple Intelligence come to the low-cost tablet, though rumors seem undecided about whether it will be powered by the A19 chipset or the older A18.</p><p>The M4 iPad Air will likely, unsurprisingly, come with the M4 chipset, and possibly the new N1 wireless chip too. That means better connectivity and improved performance — alongside whatever other upgrades Apple throws into the mix.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-X1gN1W"></div>                            </div>                            <script src="https://kwizly.com/embed/X1gN1W.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/computing/laptops/move-over-macbook-the-new-dell-xps-14-is-now-the-longest-lasting-laptop-weve-ever-tested">Move over, MacBook Pro M5: The new Dell XPS 14 is one of the longest-lasting laptops we’ve ever tested</a></li><li><a href="https://www.tomsguide.com/phones/iphones/as-a-former-phone-engineer-i-have-some-serious-concerns-about-apple-potentially-introducing-variable-apertures-into-the-iphone-18-pro">As a former phone engineer, I have some serious concerns about Apple potentially introducing variable apertures into the iPhone 18 Pro</a></li><li><a href="https://www.tomsguide.com/phones/i-used-to-think-magsafe-battery-packs-were-a-waste-until-i-finally-caved-in-and-tried-one-out-heres-what-happened">I used to think MagSafe battery packs were a waste until I finally caved in and tried one out — here’s what happened</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/apple-event-announced-in-new-york-for-march-4-iphone-17e-first-cheap-macbook-and-more</link>
                                                                            <description>
                            <![CDATA[ From iPhone 17e to MacBook Air M5, here's what we expect to see at the "Special Apple Experience" on March 4. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">BF7DYEZhXbD2EsAGwdF38Z</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/RtA5XkKb3fhgY4Y5ZxnxzB-1280-80.png" type="image/png" length="0"></enclosure>
                                                                        <pubDate>Mon, 16 Feb 2026 14:27:54 +0000</pubDate>                                                                                                                                <updated>Tue, 17 Feb 2026 22:20:49 +0000</updated>
                                                                                                                                            <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[MacBooks]]></category>
                                                    <category><![CDATA[Phones]]></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/png" url="https://cdn.mos.cms.futurecdn.net/RtA5XkKb3fhgY4Y5ZxnxzB-1280-80.png">
                                                            <media:credit><![CDATA[Apple / Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Apple event 2026 on an iphone with a multi-colored background]]></media:description>                                                            <media:text><![CDATA[Apple event 2026 on an iphone with a multi-colored background]]></media:text>
                                <media:title type="plain"><![CDATA[Apple event 2026 on an iphone with a multi-colored background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/RtA5XkKb3fhgY4Y5ZxnxzB-1280-80.png" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Apple just announced that another Apple event will be happening on March 4, and it'll no doubt be where Apple lifts the lid on all the products we've been hearing <a href="https://www.tomsguide.com/tech/apple-in-2026">rumors about over the past few weeks.</a> Including the likes of the <a href="https://www.tomsguide.com/phones/iphones/iphone-17e-rumors-everything-weve-heard-so-far">iPhone 17e</a>, <a href="https://www.tomsguide.com/tech/apple-in-2026">a bunch of new MacBook </a>models, new iPads and possibly even some new Mac displays.</p><p>As is typical for Apple, the company hasn't given us any official information on what to expect. All we have to go on is an invitation for the event, featuring a stylized version of Apple's logo. Apple has also confirmed the "special Apple experience" will be happening in New York, suggesting this won't be your typical Apple event.</p><p>Here's what to expect at the March 4 Apple event.</p><h2 id="apple-march-4-event-expected-products">Apple March 4 Event: Expected Products</h2><ul><li><strong>iPhone 17e:</strong> Apple's cheapest iPhone, expected to offer a strong flagship experience for slightly less than an iPhone 17</li><li><strong>Cheaper MacBook: </strong>The lower-cost MacBook will reportedly cost around $599 with performance duties coming from an A18 chipset.</li><li><strong>M5 MacBook Air:</strong> An updated MacBook Air with the same design, and powered by Apple's M5 chipset</li><li><strong>M5 Pro & M5 Max MacBook Pros: </strong>Another minor refresh, with Apple's existing MacBook Pros arriving with the new M5 Pro and M5 Max chips</li><li><strong>iPad 12: </strong>Apple's cheapest iPad is set for a small upgrade, with a new A18 or A19 chipset depending on who you ask</li><li><strong>iPad Air 8: </strong>Another small iPad refresh, this time bringing the M4 chipset in to take on performance duties</li></ul><h2 id="iphone-17e">iPhone 17e</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="8wk2TyTMYm4r34Wq7ykqS7" name="iPhone 17e render" alt="iPhone 17e concept render by AorS Mobile" src="https://cdn.mos.cms.futurecdn.net/8wk2TyTMYm4r34Wq7ykqS7-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: AorS Mobile / YouTube)</span></figcaption></figure><p>Apple's "cheap" iPhone was initially rumored to arrive before the end of February, but it's far more likely Apple will unveil everything during the March 4 event instead. The main thing to remember about the phone is that it's expected to look more or less the same as the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-16e-review">iPhone 16e</a> — which itself looks like an <a href="https://www.tomsguide.com/reviews/iphone-14">iPhone 14</a>. </p><p>The changes sound like they're on the inside, with reports suggesting that the phone will come with the same A19 chipset as <a href="https://www.tomsguide.com/phones/iphones/iphone-17e-leaks-just-revealed-key-upgrades-to-expect-and-also-whats-not-changing">the iPhone 17 alongside the new C1X modem and N1 wireless chip</a>. These are all expected to offer better performance and energy efficiency, which likely means superior battery life. MagSafe is also expected to debut, offering a major boost to the phone's wireless charging capabilities with reported speeds of 25W.</p><p>Pricing is expected to stay the same as the iPhone 16e, though, so be prepared to pay up at last $599.</p><h2 id="a-cheap-a18-macbook">A cheap A18 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:6211px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="bEaTYcqYJJjsNnAC8resGm" name="ICT170.trending_5things.fo_rs91795_macbook_iphone7.jpg" alt="Two people standing around a MacBook. The person on the right of the image is holding an iPhone in their left hand" src="https://cdn.mos.cms.futurecdn.net/bEaTYcqYJJjsNnAC8resGm-1920-80.jpg" mos="" align="middle" fullscreen="" width="6211" height="3493" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>"Cheap" isn't exactly something we'd associate with the MacBook range,  but rumors insist Apple is working on a <a href="https://www.tomsguide.com/computing/macbooks/cheap-macbook-a18-pro-everything-we-know-so-far">lower cost MacBook model</a> powered by the A18 Pro chipset. That's the same chip as the iPhone 16 Pro, and will reportedly help to keep the starting price as low as $599. </p><p>Other rumored specs include a 12.9-inch display, while the ability to run Apple intelligence suggests we may see as much as 16GB of RAM included. There's still a lot we don't actually know, but we suspect the laptop will be rather stripped down compared to typical Mac hardware. </p><p>Though, it should still be a good daily-use machine for people who don't need super-process-heavy software that would be better suited with an M5-powered machine.</p><h2 id="more-m5-macbooks">More M5 MacBooks</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='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><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ePjL2O"></div>                            </div>                            <script src="https://kwizly.com/embed/ePjL2O.js" async></script><p>The A18 MacBook probably won't be alone, and this event is the perfect time for Apple to do its usual early-year Mac refresh. That means seeing the <a href="https://www.tomsguide.com/computing/macbooks/m5-macbook-air-reportedly-coming-spring-2026-plus-the-missing-macbook-pros-and-a-new-mac-mini">MacBook Air M5</a> the M4 chip for a shiny new chip, while a bunch of new <a href="https://www.tomsguide.com/computing/macbooks/m5-pro-and-m5-max-macbook-pros-look-set-to-launch-in-march-and-apples-next-mac-launches-are-easy-to-call">MacBook Pros will arrive sporting the still-unannounced M5 Pro and M5 Max chipsets</a>. For those of you who need more power and performance than the regular M5 can actually offer.</p><p>We're not expecting any major design refreshes this year, so expect this update to be all about internals and performance. However, we've also heard reports that Apple could unveil a new <a href="https://www.tomsguide.com/computing/macbooks/apple-leaks-its-own-macbook-pro-reveal-m5-max-and-m5-ultra-chips-found-in-latest-beta">Mac Studio with M5 Max and M5 Ultra chips</a>, alongside a Studio Display 2, at some point in the near future. But there have been reports from Mark Gurman that these may launch shortly after the new MacBook line-up.</p><h2 id="new-ipads">New iPads</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="EENuHfMvyDEDbNKeTXA4X" name="iPad 11" alt="Person holding the iPad 11 with the home screen on display outside in front of a bush" src="https://cdn.mos.cms.futurecdn.net/EENuHfMvyDEDbNKeTXA4X-1920-80.jpg" mos="" align="middle" fullscreen="" width="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 / Tom's Guide)</span></figcaption></figure><p>Also rumored to be on the agenda are the next wave of iPads, notably the <a href="https://www.tomsguide.com/computing/ipads/new-ipad-12-and-ipad-air-8-reportedly-coming-soon-and-expect-one-major-upgrade">iPad 12 and the M4 iPad Air</a>. Speculation suggests that the iPad 12 will finally see Apple Intelligence come to the low-cost tablet, though rumors seem undecided about whether it will be powered by the A19 chipset or the older A18.</p><p>The M4 iPad Air will likely, unsurprisingly, come with the M4 chipset, and possibly the new N1 wireless chip too. That means better connectivity and improved performance — alongside whatever other upgrades Apple throws into the mix.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-X1gN1W"></div>                            </div>                            <script src="https://kwizly.com/embed/X1gN1W.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/computing/laptops/move-over-macbook-the-new-dell-xps-14-is-now-the-longest-lasting-laptop-weve-ever-tested">Move over, MacBook Pro M5: The new Dell XPS 14 is one of the longest-lasting laptops we’ve ever tested</a></li><li><a href="https://www.tomsguide.com/phones/iphones/as-a-former-phone-engineer-i-have-some-serious-concerns-about-apple-potentially-introducing-variable-apertures-into-the-iphone-18-pro">As a former phone engineer, I have some serious concerns about Apple potentially introducing variable apertures into the iPhone 18 Pro</a></li><li><a href="https://www.tomsguide.com/phones/i-used-to-think-magsafe-battery-packs-were-a-waste-until-i-finally-caved-in-and-tried-one-out-heres-what-happened">I used to think MagSafe battery packs were a waste until I finally caved in and tried one out — here’s what happened</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ The discount on the Apple device of my dreams is here, and I can't buy it — but maybe you can ]]></title>
                                                                                                <dc:content><![CDATA[ <p>While I'm a happy iPhone user, and my MacBook is as steadfast a work companion as I could ask for, my old iPad is probably my favorite Apple device to use. The mix of portability, a perfectly-sized, attractive display and compatibility with all my favorite apps means it's never far from my side. But it's over six years old now, and could probably use an upgrade.</p><p>I've had my eye on the iPad Pro M5 since it launched, but the high price has put me off running down to the nearest Apple Store, with my old tablet ready to trade in. But luckily for me, the <a href="https://www.amazon.com/Apple-iPad-Pro-11-inch-Landscape/dp/B0FWCXJVHN" target="_blank" rel="nofollow">256GB 11-inch iPad Pro M5 is down to $899 at Amazon</a>. The price has been this low before, but it fluctuates from week to week, so if you're doing some <a href="https://www.tomsguide.com/sales-events/presidents-day-sales-2026-all-the-best-deals-id-buy">Presidents' Day deals</a> shopping this is definitely one to consider.</p><p>The deal is only available on the Space Black version of the iPad Pro, which to be honest, I prefer to the Silver option anyway. Unfortunately, the current <a href="https://www.amazon.co.uk/Apple-iPad-Pro-11-inch-256GB/dp/B0FWD63ZW8" target="_blank" rel="nofollow">Amazon U.K. version of this deal</a> is only 5% off rather than 10%, which makes me rather jealous. I guess that's what we Brits get for not having presidents to honor with a public holiday.</p><div class="product"><a data-dimension112="f69de746-437c-4b63-b7d6-e23e79046e31" data-action="Deal Block" data-label="iPad Pro (M5, 11-inch, 256GB, Space Black)" data-dimension48="iPad Pro (M5, 11-inch, 256GB, Space Black)" data-dimension25="$899" href="https://www.amazon.com/Apple-iPad-Pro-11-inch-Landscape/dp/B0FWCXJVHN" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1308px;"><p class="vanilla-image-block" style="padding-top:114.68%;"><img id="kVGdyTH2y4y4yS5Mwos2bg" name="iPad Pro M5 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/kVGdyTH2y4y4yS5Mwos2bg-1920-80.jpg" mos="" align="middle" fullscreen="" width="1308" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Apple-iPad-Pro-11-inch-Landscape/dp/B0FWCXJVHN" target="_blank" rel="nofollow" data-dimension112="f69de746-437c-4b63-b7d6-e23e79046e31" data-action="Deal Block" data-label="iPad Pro (M5, 11-inch, 256GB, Space Black)" data-dimension48="iPad Pro (M5, 11-inch, 256GB, Space Black)" data-dimension25="$899">iPad Pro (M5, 11-inch, 256GB, Space Black): was $999 now $899</a></strong><br>Assuming you don't want the larger 13-inch display, this is the pinnacle of Apple's tablets to date. It'll handle streaming your content in beautiful detail and color, demanding games and even pro workflows with the greatest of ease, all while being slim and light enough to take anywhere.<a class="view-deal button" href="https://www.amazon.com/Apple-iPad-Pro-11-inch-Landscape/dp/B0FWCXJVHN" target="_blank" rel="nofollow" data-dimension112="f69de746-437c-4b63-b7d6-e23e79046e31" data-action="Deal Block" data-label="iPad Pro (M5, 11-inch, 256GB, Space Black)" data-dimension48="iPad Pro (M5, 11-inch, 256GB, Space Black)" data-dimension25="$899">View Deal</a></p></div><p>Apple launched the <a href="https://www.tomsguide.com/computing/ipads/ipad-pro-m5-review">iPad Pro M5</a> late last year, and it immediately dazzled us once we began testing. Powered by the same M5 chip found in the latest <a href="https://www.tomsguide.com/computing/macbooks/macbook-pro-m5-review">MacBook Pro</a>, it's got more than enough power to handle typical tablet tasks like video streaming or gaming, and runs rings around the competition in benchmark testing. And when paired with a keyboard accessory like Apple's Magic Keyboard, it could be a viable laptop replacement depending on the kind of work you do.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="gg3FL9fcAZKMxSt47aMixC" name="iPad Pro M5--05" alt="iPad Pro M5" src="https://cdn.mos.cms.futurecdn.net/gg3FL9fcAZKMxSt47aMixC-1920-80.jpg" mos="" align="middle" fullscreen="" width="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 Tandem OLED display, which uses two layers of OLED pixels on top of one another, means this is the brightest tablet we've ever had in the TG lab, great for making on-screen content pop, even outdoors. And wherever you take the tablet, the WiFi 7 and Bluetooth 6 compatibility mean you get the best possible connection. You can even pay extra to add 5G connectivity for truly mobile computing, but I wouldn't recommend that in this case because the discount isn't as deep. Also, while the 5G iPad Pro M5 is available in Silver at Amazon, it's only offering refurbished units in the (in my opinion cooler-looking) Space Black colorway.</p><p>With our main complaint in our review being the price, you can see why now's the time to strike and buy yourself the ultimate in Apple tablet tech. Assuming you live on the correct side of the Atlantic.</p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/ipads/the-discount-on-the-apple-device-of-my-dreams-is-here-and-i-cant-buy-it-but-maybe-you-can</link>
                                                                            <description>
                            <![CDATA[ I've been wanting an iPad Pro deal like this for a long time, but since I can't buy it, I'll share it with you instead. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">kqYB8WuybCk8Ew5nZkmSbg</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/TiGh3iRKiwqajVwS6bbcVo-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 13 Feb 2026 12:09:51 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Tablets]]></category>
                                                                                                <author><![CDATA[ richard.priday@futurenet.com (Richard Priday) ]]></author>                    <dc:creator><![CDATA[ Richard Priday ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/H8H8NuPiz5fYjKkGVnSDjV-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Richard is a writer based in London, covering news, reviews, how-tos and buying guides for mobile devices like smartphones, tablets and laptops, as well as other topics like gaming and audio.&lt;/p&gt;
&lt;p&gt;He has an impractically large collection of devices, gathered over his five years in tech journalism. Using this broad stock of gadgets, he can compare and contrast a new product&#039;s features with similar devices&#039;, and figure out if something&#039;s a new class leader, or if a different gadget can do what it does better.&lt;/p&gt;
&lt;p&gt;While he enjoys writing about the latest iPhones and Samsung Galaxys, he&#039;s also an advocate of buying cheaper, refurbished and second-hand devices. He hopes that he can help gadget buyers to cut through the hype around new products, and upgrade to something that suits their needs and budget every time, whether it&#039;s brand new or pre-owned.&lt;/p&gt;
&lt;p&gt;Richard has an M.A. in Magazine Journalism from the University of Sheffield&#039;s world-renowned Department of Journalism Studies, and has also written for WIRED U.K., The Register and Creative Bloq. Aside from mobile devices, he also has a great appreciation for specialty coffee, and is never seen in the office without his Aeropress close at hand.&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/TiGh3iRKiwqajVwS6bbcVo-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[The iPad Pro M5 with a Tom&#039;s Guide Presidents&#039; Day Deals badge]]></media:description>                                                            <media:text><![CDATA[The iPad Pro M5 with a Tom&#039;s Guide Presidents&#039; Day Deals badge]]></media:text>
                                <media:title type="plain"><![CDATA[The iPad Pro M5 with a Tom&#039;s Guide Presidents&#039; Day Deals badge]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/TiGh3iRKiwqajVwS6bbcVo-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>While I'm a happy iPhone user, and my MacBook is as steadfast a work companion as I could ask for, my old iPad is probably my favorite Apple device to use. The mix of portability, a perfectly-sized, attractive display and compatibility with all my favorite apps means it's never far from my side. But it's over six years old now, and could probably use an upgrade.</p><p>I've had my eye on the iPad Pro M5 since it launched, but the high price has put me off running down to the nearest Apple Store, with my old tablet ready to trade in. But luckily for me, the <a href="https://www.amazon.com/Apple-iPad-Pro-11-inch-Landscape/dp/B0FWCXJVHN" target="_blank" rel="nofollow">256GB 11-inch iPad Pro M5 is down to $899 at Amazon</a>. The price has been this low before, but it fluctuates from week to week, so if you're doing some <a href="https://www.tomsguide.com/sales-events/presidents-day-sales-2026-all-the-best-deals-id-buy">Presidents' Day deals</a> shopping this is definitely one to consider.</p><p>The deal is only available on the Space Black version of the iPad Pro, which to be honest, I prefer to the Silver option anyway. Unfortunately, the current <a href="https://www.amazon.co.uk/Apple-iPad-Pro-11-inch-256GB/dp/B0FWD63ZW8" target="_blank" rel="nofollow">Amazon U.K. version of this deal</a> is only 5% off rather than 10%, which makes me rather jealous. I guess that's what we Brits get for not having presidents to honor with a public holiday.</p><div class="product"><a data-dimension112="f69de746-437c-4b63-b7d6-e23e79046e31" data-action="Deal Block" data-label="iPad Pro (M5, 11-inch, 256GB, Space Black)" data-dimension48="iPad Pro (M5, 11-inch, 256GB, Space Black)" data-dimension25="$899" href="https://www.amazon.com/Apple-iPad-Pro-11-inch-Landscape/dp/B0FWCXJVHN" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1308px;"><p class="vanilla-image-block" style="padding-top:114.68%;"><img id="kVGdyTH2y4y4yS5Mwos2bg" name="iPad Pro M5 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/kVGdyTH2y4y4yS5Mwos2bg-1920-80.jpg" mos="" align="middle" fullscreen="" width="1308" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Apple-iPad-Pro-11-inch-Landscape/dp/B0FWCXJVHN" target="_blank" rel="nofollow" data-dimension112="f69de746-437c-4b63-b7d6-e23e79046e31" data-action="Deal Block" data-label="iPad Pro (M5, 11-inch, 256GB, Space Black)" data-dimension48="iPad Pro (M5, 11-inch, 256GB, Space Black)" data-dimension25="$899">iPad Pro (M5, 11-inch, 256GB, Space Black): was $999 now $899</a></strong><br>Assuming you don't want the larger 13-inch display, this is the pinnacle of Apple's tablets to date. It'll handle streaming your content in beautiful detail and color, demanding games and even pro workflows with the greatest of ease, all while being slim and light enough to take anywhere.<a class="view-deal button" href="https://www.amazon.com/Apple-iPad-Pro-11-inch-Landscape/dp/B0FWCXJVHN" target="_blank" rel="nofollow" data-dimension112="f69de746-437c-4b63-b7d6-e23e79046e31" data-action="Deal Block" data-label="iPad Pro (M5, 11-inch, 256GB, Space Black)" data-dimension48="iPad Pro (M5, 11-inch, 256GB, Space Black)" data-dimension25="$899">View Deal</a></p></div><p>Apple launched the <a href="https://www.tomsguide.com/computing/ipads/ipad-pro-m5-review">iPad Pro M5</a> late last year, and it immediately dazzled us once we began testing. Powered by the same M5 chip found in the latest <a href="https://www.tomsguide.com/computing/macbooks/macbook-pro-m5-review">MacBook Pro</a>, it's got more than enough power to handle typical tablet tasks like video streaming or gaming, and runs rings around the competition in benchmark testing. And when paired with a keyboard accessory like Apple's Magic Keyboard, it could be a viable laptop replacement depending on the kind of work you do.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="gg3FL9fcAZKMxSt47aMixC" name="iPad Pro M5--05" alt="iPad Pro M5" src="https://cdn.mos.cms.futurecdn.net/gg3FL9fcAZKMxSt47aMixC-1920-80.jpg" mos="" align="middle" fullscreen="" width="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 Tandem OLED display, which uses two layers of OLED pixels on top of one another, means this is the brightest tablet we've ever had in the TG lab, great for making on-screen content pop, even outdoors. And wherever you take the tablet, the WiFi 7 and Bluetooth 6 compatibility mean you get the best possible connection. You can even pay extra to add 5G connectivity for truly mobile computing, but I wouldn't recommend that in this case because the discount isn't as deep. Also, while the 5G iPad Pro M5 is available in Silver at Amazon, it's only offering refurbished units in the (in my opinion cooler-looking) Space Black colorway.</p><p>With our main complaint in our review being the price, you can see why now's the time to strike and buy yourself the ultimate in Apple tablet tech. Assuming you live on the correct side of the Atlantic.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 11 new Apple products tipped for 2026 — iPhone 17e, cheap MacBook, iOS 26.4 with new Siri and more ]]></title>
                                                                                                <dc:content><![CDATA[ <p>As the rest of the tech world seemingly falls apart thanks to the ongoing<a href="https://www.tomsguide.com/computing/ram-prices-are-exploding-heres-why-and-everything-you-need-to-know-about-surviving-ramageddon"> RAM crisis</a>, Apple is slated to have a busy start to 2026 with a slew new devices expected to launch in the next six months.</p><p>From the refreshed iPhone 17e to new iPads, we expect to see a variety of devices, including a new budget-friendly MacBook to take on Chromebooks and cheaper Windows notebooks. <a href="https://www.bloomberg.com/news/newsletters/2026-02-08/apple-readies-iphone-17e-new-siri-entry-level-ipad-ipad-air-and-macbook-pro-mldr3hpk" target="_blank">Bloomberg's Mark Gurman confirmed</a> a number of new devices in his PowerOn newsletter, many of which we've covered. Here's what Apple should release soon — and what's on the horizon.</p><h3 class="article-body__section" id="section-iphones-iphone-17e"><span>iPhones: iPhone 17e</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="fnMMEGMUGdVyvdqHpueo36" name="iPhone 16e review" alt="iPhone 16e review." src="https://cdn.mos.cms.futurecdn.net/fnMMEGMUGdVyvdqHpueo36-1920-80.jpg" mos="" align="middle" fullscreen="" width="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's e-series is going to be an annual spring release with the second version launching this year in the <a href="https://www.tomsguide.com/phones/iphones/iphone-17e-rumors-everything-weve-heard-so-far">iPhone 17e</a>. Most of the changes with this model will reportedly be internal with new chips and the addition of MagSafe charging. </p><p>It should get <a href="https://www.tomsguide.com/phones/iphones/apples-budget-friendly-iphone-17e-just-tipped-to-get-three-big-upgrades">the A19 chip</a> from the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-17-review">iPhone 17</a> plus the Apple-developed C1 modem and <a href="https://www.tomsguide.com/phones/iphones/iphone-17-could-come-packing-apples-home-made-wi-fi-chip-what-that-means-for-you">N1 wireless chip.</a> This means the iPhone 17e should support Wi-Fi 7, Bluetooth 6, and Thread - the smart home low-power mesh.</p><p>Unfortunately, the<a href="https://www.tomsguide.com/phones/iphones/iphone-17e-may-be-just-as-expensive-as-the-iphone-16e-and-thats-a-huge-disappointment"> iPhone 17e may retain the $599 of the 16e</a>, which makes it not quite as budget-friendly as you'd like a downgraded iPhone to be.</p><p>As my colleague Tom Pritchard noted, "It may be a cheap iPhone, but we've seen cheaper, and I'm wondering whether buying a used flagship iPhone is a better use of your money."</p><p>Later this fall, we expect to see the iPhone 18 Pro, <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-rumors-everything-we-know-so-far">18 Pro Max</a> and the <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-heres-what-the-leaks-and-rumors-say-about-apples-alleged-upcoming-foldable-phone">iPhone Fold </a>launch in September. </p><h3 class="article-body__section" id="section-ipads-entry-level-air-mini"><span>iPads: Entry-level, Air, Mini</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="3Fe49xAgnSFQ8UybNLkjRD" name="iPad Air M3-09-LIST" alt="iPad Air M3 on top of a pile of books stacked at an angle on a yellow office table next to a houseplant" src="https://cdn.mos.cms.futurecdn.net/3Fe49xAgnSFQ8UybNLkjRD-1920-80.jpg" mos="" align="middle" fullscreen="" width="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 claims that at least three refreshed iPad models are coming this year, including a new base model, iPad Air and an updated iPad mini.</p><p>Like the 17e, the biggest upgrades will all be internal. All three are expected to get the new in-house <a href="https://www.tomsguide.com/computing/ipads/2026-ipad-models-could-get-performance-boost-new-leak-reveals-a19-and-m4-chips">Apple wireless and modem chips</a>. Additionally, they should get faster processors. Gurman claimed they would get the A18 chip, but an <a href="https://www.tomsguide.com/computing/ipads/2026-ipad-models-could-get-performance-boost-new-leak-reveals-a19-and-m4-chips">earlier report</a> based on leaked internal documents indicated that the iPads would get the <a href="https://www.tomsguide.com/computing/macbooks/forget-iphone-17-pro-that-a19-pro-chip-needs-to-be-in-a-macbook-like-yesterday">newer A19 chipset</a> or <a href="https://www.tomsguide.com/computing/apple-desktops/apple-m4-chip">the M4 chip</a>.</p><p>The base model will get the A19, while the iPad Air will get the M4 set. </p><p>Finally, at the end of 2025, it was rumored that the <a href="https://www.tomsguide.com/computing/ipads/ipad-mini-8-rumors-everything-we-know-so-far">iPad mini 8</a> will get an<a href="https://www.tomsguide.com/computing/ipads/ipad-mini-8-oled-now-tipped-to-feature-apples-a20-pro-chip-heres-what-that-means"> OLED upgrade,</a> and it might feature the <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-tipped-for-a20-pro-chip-apples-first-2nm-processor-to-power-new-foldable-phone">A20 Pro </a>CPU that will feature in the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-countdown-starts-now-5-rumored-upgrades-apple-could-be-giving-its-pro-models">iPhone 18 Pro </a>later this year. The upgraded iPad mini isn't expected to launch until later this year after the iPhone 18 Pro launch.</p><h3 class="article-body__section" id="section-macbooks-budget-m5-air-and-new-pro-models"><span>MacBooks: Budget, M5 Air, and new Pro models</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3329px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="aU4pys8HozWWA8BGnegVU6" name="MacBook Air M4 2025-2" alt="Person holding the MacBook Air 13-inch M4 outside above grass in a shaded garden" src="https://cdn.mos.cms.futurecdn.net/aU4pys8HozWWA8BGnegVU6-1920-80.jpg" mos="" align="middle" fullscreen="" width="3329" height="1873" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Apple launched its MacBook Pro M5 in October last year but was missing the M5 Pro and M5 Max/Ultra models. The most current rumors have set the high-end <a href="https://www.tomsguide.com/computing/macbooks/m5-pro-and-m5-max-macbook-pros-look-set-to-launch-in-march-and-apples-next-mac-launches-are-easy-to-call">Pro models to launch</a> as early as the week of March 2. We expect the <a href="https://www.tomsguide.com/computing/macbooks/m5-macbook-air-reportedly-coming-spring-2026-plus-the-missing-macbook-pros-and-a-new-mac-mini">MacBook Air M5 to launch</a> around this time as well. </p><p>The more interesting potential release is the rumored <a href="https://www.tomsguide.com/computing/macbooks/cheap-macbook-a18-pro-everything-we-know-so-far">cheap MacBook </a>meant to take on low-cost Windows laptops and Google Chromebooks. Rumors have slated this budget MacBook to cost around $599, likely as a way for Apple to kneecap the refurbished market for deals like the <a href="https://goto.walmart.com/c/1943169/568844/9383?subId1=tomsguide-us-6564757818058362988&sharedId=tomsguide-us&u=https%3A%2F%2Fwww.walmart.com%2Fip%2FApple-MacBook-Air-13-3-inch-Laptop-Silver-M1-Chip-Built-for-Apple-Intelligence-8GB-RAM-256GB-storage%2F715596133" target="_blank" rel="sponsored">M1 MacBook Air from Walmart</a>.</p><p>The laptop should have a 12-inch to 13-inch display and run on the A18 Pro chipset, though that is speculation. I haven't seen a release date in the rumor mill, but I would put a couple bucks on it launching alongside the iPhone 17e, creating a "budget ecosystem" for Apple. Possibly, it could debut as part of a week of MacBooks with the Pro models.</p><p>Finally, on the computing front, Apple could finally release an updated Studio Display and Mac Studio desktops. Allegedly, new Mac minis, likely with the M5 chip, are on the docket as well. It's not clear when these devices will launch. Plus, an <a href="https://www.tomsguide.com/computing/macbooks/macbook-pro-m6-oled-rumors-everything-we-know-so-far">OLED MacBook Pro M6</a> is rumored to launch at some point this year, likely in October, its usual window.</p><h3 class="article-body__section" id="section-ios-26-4-siri-2-0-ios-27"><span>iOS 26.4: Siri 2.0, iOS 27</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3000px;"><p class="vanilla-image-block" style="padding-top:50.03%;"><img id="kXY7uTKX6EYEPwD7nBp2G4" name="Apple 2026 E Siri AI" alt="Siri" src="https://cdn.mos.cms.futurecdn.net/kXY7uTKX6EYEPwD7nBp2G4-1920-80.jpg" mos="" align="middle" fullscreen="" width="3000" height="1501" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide/Apple)</span></figcaption></figure><p>One of our complaints about the 16e was the high price point and the lack of actual Apple Intelligence, thanks to Apple's struggles with AI and creating a <a href="https://www.tomsguide.com/phones/iphones/siri-2-0-could-be-with-us-in-just-two-weeks-heres-what-we-have-to-look-forward-to">true Siri 2.0</a>.</p><p>That version should finally <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">launch with iOS 26.4</a>, likely in March, which will include upgrades to Siri. The real upgrade probably won't launch until WWDC 2026 in June when we'll learn more about<a href="https://www.tomsguide.com/phones/iphones/ios-27-could-lose-apples-rumored-new-ai-fitness-feature-but-we-could-still-see-parts-of-it-launch-this-year"> iOS 27</a> and the <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 Gemini partnership</a> to bolster Apple Intelligence.</p><p>All in all, it's a busy season for the tech giant, and Tom's Guide will be there to cover all the new devices and help you decide if it's time to upgrade.</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/new-snapdragon-x2-elite-benchmarks-surface-and-apple-and-intel-should-be-worried">New Snapdragon X2 Elite benchmarks surface — and Apple and Intel should be worried</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/5-apple-watch-settings-you-should-change-right-now-for-more-accurate-heart-rate-tracking">5 Apple Watch settings you should change right now for more accurate heart rate tracking</a></li><li><a href="https://www.tomsguide.com/us/best-apple-iphone,review-6348.html">Best iPhones: Which iPhone should you buy?</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/phones/iphones/11-new-apple-products-tipped-for-2026-iphone-17e-cheap-macbook-ios-26-4-with-new-siri-and-more</link>
                                                                            <description>
                            <![CDATA[ Apple is going to have a busy next few months releasing a slew products from new budget iPhones to iPads and laptops. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">uz3etoGwaRR3WbAzBxqVLo</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/e9faAuPSUG9agPg5T6xypE-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 09 Feb 2026 19:29:17 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[MacBooks]]></category>
                                                    <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Tablets]]></category>
                                                    <category><![CDATA[Laptops]]></category>
                                                    <category><![CDATA[Desktop Computers]]></category>
                                                                                                <author><![CDATA[ scott.younker@futurenet.com (Scott Younker) ]]></author>                    <dc:creator><![CDATA[ Scott Younker ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/RZsUpqcJ6Uj2q83oCUwNhQ-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Scott Younker is the West Coast Reporter at Tom’s Guide. He covers all the latest tech news, including phones, computing and more. He’s been involved in tech since 2011 covering everything from cameras and swimming pool equipment to the latest gaming consoles and smart TVs. He is on a seemingly never ending hunt to build the easiest to use home media system. &lt;/p&gt;&lt;p&gt;Before Tom’s Guide, Scott worked for publications like &lt;em&gt;Digital Trends, Outdoor Photographer, Dead Beats Panel&lt;/em&gt;, and in a brief detour, &lt;em&gt;America’s Funniest Home Videos&lt;/em&gt;. Yes, he has seen more pratfalls, silly pets and ridiculous home movie fails than is reasonably healthy. &lt;/p&gt;&lt;p&gt;When not writing about the latest devices or advances in chipsets, be sure to ask about Scott about disc golf and sustainability, or just if you’re being cheeky, ask about his noodle arm. If you truly want to get nerdy, bring up board games and his ongoing losing streak. &lt;/p&gt;&lt;p&gt;Scott joined Tom&#039;s Guide in 2024 as the West Coast Reporter. He graduated from the School of Journalism at the University of Oregon with a degree in magazine journalism and a minor in communications. While there he blogged or wrote for several magazines including the Fluxx, Ethos and the Oregon Commentator. He briefly wrote and managed a moderately successful blog focused on web comics. &lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/e9faAuPSUG9agPg5T6xypE-1280-80.jpg">
                                                            <media:credit><![CDATA[Getty Images]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Tim Cook at an Apple Event]]></media:description>                                                            <media:text><![CDATA[Tim Cook at an Apple Event]]></media:text>
                                <media:title type="plain"><![CDATA[Tim Cook at an Apple Event]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/e9faAuPSUG9agPg5T6xypE-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>As the rest of the tech world seemingly falls apart thanks to the ongoing<a href="https://www.tomsguide.com/computing/ram-prices-are-exploding-heres-why-and-everything-you-need-to-know-about-surviving-ramageddon"> RAM crisis</a>, Apple is slated to have a busy start to 2026 with a slew new devices expected to launch in the next six months.</p><p>From the refreshed iPhone 17e to new iPads, we expect to see a variety of devices, including a new budget-friendly MacBook to take on Chromebooks and cheaper Windows notebooks. <a href="https://www.bloomberg.com/news/newsletters/2026-02-08/apple-readies-iphone-17e-new-siri-entry-level-ipad-ipad-air-and-macbook-pro-mldr3hpk" target="_blank">Bloomberg's Mark Gurman confirmed</a> a number of new devices in his PowerOn newsletter, many of which we've covered. Here's what Apple should release soon — and what's on the horizon.</p><h3 class="article-body__section" id="section-iphones-iphone-17e"><span>iPhones: iPhone 17e</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="fnMMEGMUGdVyvdqHpueo36" name="iPhone 16e review" alt="iPhone 16e review." src="https://cdn.mos.cms.futurecdn.net/fnMMEGMUGdVyvdqHpueo36-1920-80.jpg" mos="" align="middle" fullscreen="" width="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's e-series is going to be an annual spring release with the second version launching this year in the <a href="https://www.tomsguide.com/phones/iphones/iphone-17e-rumors-everything-weve-heard-so-far">iPhone 17e</a>. Most of the changes with this model will reportedly be internal with new chips and the addition of MagSafe charging. </p><p>It should get <a href="https://www.tomsguide.com/phones/iphones/apples-budget-friendly-iphone-17e-just-tipped-to-get-three-big-upgrades">the A19 chip</a> from the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-17-review">iPhone 17</a> plus the Apple-developed C1 modem and <a href="https://www.tomsguide.com/phones/iphones/iphone-17-could-come-packing-apples-home-made-wi-fi-chip-what-that-means-for-you">N1 wireless chip.</a> This means the iPhone 17e should support Wi-Fi 7, Bluetooth 6, and Thread - the smart home low-power mesh.</p><p>Unfortunately, the<a href="https://www.tomsguide.com/phones/iphones/iphone-17e-may-be-just-as-expensive-as-the-iphone-16e-and-thats-a-huge-disappointment"> iPhone 17e may retain the $599 of the 16e</a>, which makes it not quite as budget-friendly as you'd like a downgraded iPhone to be.</p><p>As my colleague Tom Pritchard noted, "It may be a cheap iPhone, but we've seen cheaper, and I'm wondering whether buying a used flagship iPhone is a better use of your money."</p><p>Later this fall, we expect to see the iPhone 18 Pro, <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-rumors-everything-we-know-so-far">18 Pro Max</a> and the <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-heres-what-the-leaks-and-rumors-say-about-apples-alleged-upcoming-foldable-phone">iPhone Fold </a>launch in September. </p><h3 class="article-body__section" id="section-ipads-entry-level-air-mini"><span>iPads: Entry-level, Air, Mini</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="3Fe49xAgnSFQ8UybNLkjRD" name="iPad Air M3-09-LIST" alt="iPad Air M3 on top of a pile of books stacked at an angle on a yellow office table next to a houseplant" src="https://cdn.mos.cms.futurecdn.net/3Fe49xAgnSFQ8UybNLkjRD-1920-80.jpg" mos="" align="middle" fullscreen="" width="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 claims that at least three refreshed iPad models are coming this year, including a new base model, iPad Air and an updated iPad mini.</p><p>Like the 17e, the biggest upgrades will all be internal. All three are expected to get the new in-house <a href="https://www.tomsguide.com/computing/ipads/2026-ipad-models-could-get-performance-boost-new-leak-reveals-a19-and-m4-chips">Apple wireless and modem chips</a>. Additionally, they should get faster processors. Gurman claimed they would get the A18 chip, but an <a href="https://www.tomsguide.com/computing/ipads/2026-ipad-models-could-get-performance-boost-new-leak-reveals-a19-and-m4-chips">earlier report</a> based on leaked internal documents indicated that the iPads would get the <a href="https://www.tomsguide.com/computing/macbooks/forget-iphone-17-pro-that-a19-pro-chip-needs-to-be-in-a-macbook-like-yesterday">newer A19 chipset</a> or <a href="https://www.tomsguide.com/computing/apple-desktops/apple-m4-chip">the M4 chip</a>.</p><p>The base model will get the A19, while the iPad Air will get the M4 set. </p><p>Finally, at the end of 2025, it was rumored that the <a href="https://www.tomsguide.com/computing/ipads/ipad-mini-8-rumors-everything-we-know-so-far">iPad mini 8</a> will get an<a href="https://www.tomsguide.com/computing/ipads/ipad-mini-8-oled-now-tipped-to-feature-apples-a20-pro-chip-heres-what-that-means"> OLED upgrade,</a> and it might feature the <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-tipped-for-a20-pro-chip-apples-first-2nm-processor-to-power-new-foldable-phone">A20 Pro </a>CPU that will feature in the <a href="https://www.tomsguide.com/phones/iphones/iphone-18-countdown-starts-now-5-rumored-upgrades-apple-could-be-giving-its-pro-models">iPhone 18 Pro </a>later this year. The upgraded iPad mini isn't expected to launch until later this year after the iPhone 18 Pro launch.</p><h3 class="article-body__section" id="section-macbooks-budget-m5-air-and-new-pro-models"><span>MacBooks: Budget, M5 Air, and new Pro models</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3329px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="aU4pys8HozWWA8BGnegVU6" name="MacBook Air M4 2025-2" alt="Person holding the MacBook Air 13-inch M4 outside above grass in a shaded garden" src="https://cdn.mos.cms.futurecdn.net/aU4pys8HozWWA8BGnegVU6-1920-80.jpg" mos="" align="middle" fullscreen="" width="3329" height="1873" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Apple launched its MacBook Pro M5 in October last year but was missing the M5 Pro and M5 Max/Ultra models. The most current rumors have set the high-end <a href="https://www.tomsguide.com/computing/macbooks/m5-pro-and-m5-max-macbook-pros-look-set-to-launch-in-march-and-apples-next-mac-launches-are-easy-to-call">Pro models to launch</a> as early as the week of March 2. We expect the <a href="https://www.tomsguide.com/computing/macbooks/m5-macbook-air-reportedly-coming-spring-2026-plus-the-missing-macbook-pros-and-a-new-mac-mini">MacBook Air M5 to launch</a> around this time as well. </p><p>The more interesting potential release is the rumored <a href="https://www.tomsguide.com/computing/macbooks/cheap-macbook-a18-pro-everything-we-know-so-far">cheap MacBook </a>meant to take on low-cost Windows laptops and Google Chromebooks. Rumors have slated this budget MacBook to cost around $599, likely as a way for Apple to kneecap the refurbished market for deals like the <a href="https://goto.walmart.com/c/1943169/568844/9383?subId1=tomsguide-us-6564757818058362988&sharedId=tomsguide-us&u=https%3A%2F%2Fwww.walmart.com%2Fip%2FApple-MacBook-Air-13-3-inch-Laptop-Silver-M1-Chip-Built-for-Apple-Intelligence-8GB-RAM-256GB-storage%2F715596133" target="_blank" rel="sponsored">M1 MacBook Air from Walmart</a>.</p><p>The laptop should have a 12-inch to 13-inch display and run on the A18 Pro chipset, though that is speculation. I haven't seen a release date in the rumor mill, but I would put a couple bucks on it launching alongside the iPhone 17e, creating a "budget ecosystem" for Apple. Possibly, it could debut as part of a week of MacBooks with the Pro models.</p><p>Finally, on the computing front, Apple could finally release an updated Studio Display and Mac Studio desktops. Allegedly, new Mac minis, likely with the M5 chip, are on the docket as well. It's not clear when these devices will launch. Plus, an <a href="https://www.tomsguide.com/computing/macbooks/macbook-pro-m6-oled-rumors-everything-we-know-so-far">OLED MacBook Pro M6</a> is rumored to launch at some point this year, likely in October, its usual window.</p><h3 class="article-body__section" id="section-ios-26-4-siri-2-0-ios-27"><span>iOS 26.4: Siri 2.0, iOS 27</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3000px;"><p class="vanilla-image-block" style="padding-top:50.03%;"><img id="kXY7uTKX6EYEPwD7nBp2G4" name="Apple 2026 E Siri AI" alt="Siri" src="https://cdn.mos.cms.futurecdn.net/kXY7uTKX6EYEPwD7nBp2G4-1920-80.jpg" mos="" align="middle" fullscreen="" width="3000" height="1501" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide/Apple)</span></figcaption></figure><p>One of our complaints about the 16e was the high price point and the lack of actual Apple Intelligence, thanks to Apple's struggles with AI and creating a <a href="https://www.tomsguide.com/phones/iphones/siri-2-0-could-be-with-us-in-just-two-weeks-heres-what-we-have-to-look-forward-to">true Siri 2.0</a>.</p><p>That version should finally <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">launch with iOS 26.4</a>, likely in March, which will include upgrades to Siri. The real upgrade probably won't launch until WWDC 2026 in June when we'll learn more about<a href="https://www.tomsguide.com/phones/iphones/ios-27-could-lose-apples-rumored-new-ai-fitness-feature-but-we-could-still-see-parts-of-it-launch-this-year"> iOS 27</a> and the <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 Gemini partnership</a> to bolster Apple Intelligence.</p><p>All in all, it's a busy season for the tech giant, and Tom's Guide will be there to cover all the new devices and help you decide if it's time to upgrade.</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/new-snapdragon-x2-elite-benchmarks-surface-and-apple-and-intel-should-be-worried">New Snapdragon X2 Elite benchmarks surface — and Apple and Intel should be worried</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/5-apple-watch-settings-you-should-change-right-now-for-more-accurate-heart-rate-tracking">5 Apple Watch settings you should change right now for more accurate heart rate tracking</a></li><li><a href="https://www.tomsguide.com/us/best-apple-iphone,review-6348.html">Best iPhones: Which iPhone should you buy?</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ New iPad 12 and iPad Air 8 reportedly 'coming soon,' and expect one major upgrade ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Now may be the worst time to buy an iPad, as Apple is reportedly set to reveal all-new models in the near future — and it may even come with a first for the entry-level tablet.</p><p>Apple's next iPad 12 and iPad Air 8 are "coming soon," according to <a href="https://www.bloomberg.com/news/newsletters/2026-02-08/apple-readies-iphone-17e-new-siri-entry-level-ipad-ipad-air-and-macbook-pro-mldr3hpk" target="_blank">Bloomberg's Mark Gurman</a>. Both tablets are expected to see major chip upgrades, including an A18 or A19 for the base iPad, and a mighty M4 processor for the upcoming Air. </p><h2 id="what-upgrades-can-we-expect">What upgrades can we expect?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="xajNJzmNq6NEvVht46rLwE" name="iPad mini 7--5" alt="An iPad mini 7 in hand in front of a sliding glass door" src="https://cdn.mos.cms.futurecdn.net/xajNJzmNq6NEvVht46rLwE-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>While significant design changes aren't expected over the current <a href="https://www.tomsguide.com/computing/ipads/ipad-11-2025-review">iPad 11</a> and <a href="https://www.tomsguide.com/tablets/ipads/ipad-air-m3-review">iPad Air M3</a>, previous leaks have hinted that Apple's lower-cost tablet <a href="https://www.tomsguide.com/computing/ipads/2026-ipad-models-could-get-performance-boost-new-leak-reveals-a19-and-m4-chips">will feature an A19 chip</a> — the same silicon found in the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-17-review">iPhone 17</a>. Compared to the A16, this would see a 50% performance boost, but it will also finally bring  <a href="https://www.tomsguide.com/ai/apple-intelligence/im-a-long-time-iphone-owner-but-i-rarely-use-apple-intelligence-heres-why">Apple Intelligence</a> features to the tablet. </p><p>It isn't certain if Apple will manage to equip the iPad 12 with an A19 chip, as other reports have indicated that it will feature an A18 instead. Regardless, this will still deliver AI to the base tablet, and considering that <a href="https://www.tomsguide.com/ai/siri-is-getting-a-gemini-upgrade-and-it-could-change-the-iphone-forever">Siri will now be powered by Google's Gemini</a>, we could see some exciting software upgrades once it arrives. </p><p>Another rumored performance boost coming to the iPad 12 is a move to 8GB of RAM, compared to the usual 6GB. This makes sense, seeing as the iPhone 17 comes with 8GB of RAM, and would be yet another jump between base iPad models, as the <a href="https://www.tomsguide.com/reviews/ipad-2022-10th-gen">iPad 10</a> came with 4GB. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="22aMuZ6H28NSRxxTm3F2t7" name="iPad Air M3-07" alt="iPad Air M3" src="https://cdn.mos.cms.futurecdn.net/22aMuZ6H28NSRxxTm3F2t7-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>As for the iPad Air 8, we can expect the next-gen tablet to feature an M4 chip, meaning we'll find the power of a <a href="https://www.tomsguide.com/computing/laptops/macbook-air-m4-review">MacBook Air M4</a> in the form of a tablet. That should give it around a 20%+ performance increase, but we may also see Apple's custom <a href="https://www.tomsguide.com/phones/iphones/iphone-17-could-come-packing-apples-home-made-wi-fi-chip-what-that-means-for-you">N1 wireless chip</a> make an appearance, delivering a substantial upgrade to Wi-Fi connectivity. </p><p>With both the iPad 12 and iPad Air 8 now tipped to be heading our way soon, it's likely these tablets will launch in spring. Both the 11th-gen iPad and M3-powered iPad Air launched in March 2025, and the Cupertino tech giant may follow suit with its latest entries. That's not all, as the <a href="https://www.tomsguide.com/computing/macbooks/m5-pro-and-m5-max-macbook-pros-look-set-to-launch-in-march-and-apples-next-mac-launches-are-easy-to-call">M5 Pro and M5 Max MacBook Pro models are also expected to launch in March</a>. </p><h2 id="a-simple-refresh-with-big-performance-gains">A simple refresh (with big performance gains)</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="x9Q9my5jAPw2ni3Z4bkjRW" name="iPad Air M3-01" alt="iPad Air M3" src="https://cdn.mos.cms.futurecdn.net/x9Q9my5jAPw2ni3Z4bkjRW-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Aside from the chip upgrades, Apple Intelligence features and possible N1 wireless chip, expect the iPad 12 and iPad Air with M4 to look largely the same. </p><p>That means identical designs (11-inch for the iPad, 11- and 13-inch for the iPad Air), same 12MP cameras and Liquid Retina display (2360 x 1640) displays. As with past generations, the next tablets are set to be more of a performance upgrade. </p><p>It will be interesting to see if the base iPad 12 either gets an A18 or A19 chipset, as Apple previously jumped a single generation for its entry-level tablet; the iPad 11 received an A16 upgrade over the iPad 10's A14 chip. However, the key feature here will be Apple Intelligence support, making the whole iPad lineup deliver AI capabilities. </p><p>While there's still no word on the anticipated <a href="https://www.tomsguide.com/computing/ipads/ipad-mini-8-rumors-everything-we-know-so-far">iPad mini 8</a>, which is tipped to see even bigger upgrades that include an OLED display, more iPads are around the corner — and finally catching up to the <a href="https://www.tomsguide.com/computing/ipads/ipad-pro-m5-review">iPad Pro M5</a>. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-W2ryNW"></div>                            </div>                            <script src="https://kwizly.com/embed/W2ryNW.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/computing/e-readers/samsung-just-announced-a-color-e-reader-made-of-plankton-no-im-not-kidding">Samsung just announced a color e-reader made of plankton — no, I’m not kidding</a></li><li><a href="https://www.tomsguide.com/computing/tablets/i-tried-the-tcl-nxtpaper-11-plus-and-this-budget-tablet-is-easily-my-ipad-killer-heres-why">I tried the TCL NXTPAPER 11 Plus and this budget tablet is easily my iPad killer — here’s why</a></li><li><a href="https://www.tomsguide.com/computing/ipads/just-got-a-new-ipad-5-things-you-should-do-first">Just got a new iPad? 5 things you should do first</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/ipads/new-ipad-12-and-ipad-air-8-reportedly-coming-soon-and-expect-one-major-upgrade</link>
                                                                            <description>
                            <![CDATA[ Apple is set to reveal all-new iPad 12 and iPad Air 8 models soon, with both tablets expected to see major A18 and M4 chip upgrades. But don't expect a significant refresh. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">dTsQ35gPTVXbDrfx8C3845</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/JZ8qJVQDfc5uP2QVVeRcU-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 09 Feb 2026 11:13:24 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Tablets]]></category>
                                                                                                                    <dc:creator><![CDATA[ Darragh Murphy ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/5QiaTSWf9FcVB7STxcdo4M-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Darragh is Tom’s Guide’s Computing Editor and is fascinated by all things bizarre in tech. This usually leads to assorted coverage varying from washing machines designed for earbuds to the wild world of laptops. Whether it&#039;s connecting Scar from The Lion King to two-factor authentication or turning his love for laptops into a fabricated rap battle from 8 Mile, he believes there’s always a quirky spin to be made.&lt;br&gt;&lt;br&gt;Darragh has previously been an Editor for Laptop Mag and a News Editor for Time Out Dubai, where he also headed the gaming and tech section. His work can be seen in Mashable, Android Police, Shortlist Dubai, Proton, theBit.nz, ReviewsFire and more. &lt;br&gt;&lt;br&gt;While laptops are his bread and butter, he’s also reviewed smartphones, monitors, speakers, docking stations and VPNs. He’s covered IFA, MWC Barcelona, the Consumer Electronics Show (&lt;a href=&quot;https://www.tomsguide.com/uk/tag/ces&quot; target=&quot;_blank&quot;&gt;CES&lt;/a&gt;) and more.&lt;br&gt;&lt;br&gt;When he&#039;s not checking out the latest devices and all things computing, he can be found going for dreaded long runs, watching terrible shark movies, and trying to find time to game.&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/JZ8qJVQDfc5uP2QVVeRcU-1280-80.jpg">
                                                            <media:credit><![CDATA[Future / Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPad 11]]></media:description>                                                            <media:text><![CDATA[iPad 11]]></media:text>
                                <media:title type="plain"><![CDATA[iPad 11]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/JZ8qJVQDfc5uP2QVVeRcU-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Now may be the worst time to buy an iPad, as Apple is reportedly set to reveal all-new models in the near future — and it may even come with a first for the entry-level tablet.</p><p>Apple's next iPad 12 and iPad Air 8 are "coming soon," according to <a href="https://www.bloomberg.com/news/newsletters/2026-02-08/apple-readies-iphone-17e-new-siri-entry-level-ipad-ipad-air-and-macbook-pro-mldr3hpk" target="_blank">Bloomberg's Mark Gurman</a>. Both tablets are expected to see major chip upgrades, including an A18 or A19 for the base iPad, and a mighty M4 processor for the upcoming Air. </p><h2 id="what-upgrades-can-we-expect">What upgrades can we expect?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="xajNJzmNq6NEvVht46rLwE" name="iPad mini 7--5" alt="An iPad mini 7 in hand in front of a sliding glass door" src="https://cdn.mos.cms.futurecdn.net/xajNJzmNq6NEvVht46rLwE-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>While significant design changes aren't expected over the current <a href="https://www.tomsguide.com/computing/ipads/ipad-11-2025-review">iPad 11</a> and <a href="https://www.tomsguide.com/tablets/ipads/ipad-air-m3-review">iPad Air M3</a>, previous leaks have hinted that Apple's lower-cost tablet <a href="https://www.tomsguide.com/computing/ipads/2026-ipad-models-could-get-performance-boost-new-leak-reveals-a19-and-m4-chips">will feature an A19 chip</a> — the same silicon found in the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-17-review">iPhone 17</a>. Compared to the A16, this would see a 50% performance boost, but it will also finally bring  <a href="https://www.tomsguide.com/ai/apple-intelligence/im-a-long-time-iphone-owner-but-i-rarely-use-apple-intelligence-heres-why">Apple Intelligence</a> features to the tablet. </p><p>It isn't certain if Apple will manage to equip the iPad 12 with an A19 chip, as other reports have indicated that it will feature an A18 instead. Regardless, this will still deliver AI to the base tablet, and considering that <a href="https://www.tomsguide.com/ai/siri-is-getting-a-gemini-upgrade-and-it-could-change-the-iphone-forever">Siri will now be powered by Google's Gemini</a>, we could see some exciting software upgrades once it arrives. </p><p>Another rumored performance boost coming to the iPad 12 is a move to 8GB of RAM, compared to the usual 6GB. This makes sense, seeing as the iPhone 17 comes with 8GB of RAM, and would be yet another jump between base iPad models, as the <a href="https://www.tomsguide.com/reviews/ipad-2022-10th-gen">iPad 10</a> came with 4GB. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="22aMuZ6H28NSRxxTm3F2t7" name="iPad Air M3-07" alt="iPad Air M3" src="https://cdn.mos.cms.futurecdn.net/22aMuZ6H28NSRxxTm3F2t7-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>As for the iPad Air 8, we can expect the next-gen tablet to feature an M4 chip, meaning we'll find the power of a <a href="https://www.tomsguide.com/computing/laptops/macbook-air-m4-review">MacBook Air M4</a> in the form of a tablet. That should give it around a 20%+ performance increase, but we may also see Apple's custom <a href="https://www.tomsguide.com/phones/iphones/iphone-17-could-come-packing-apples-home-made-wi-fi-chip-what-that-means-for-you">N1 wireless chip</a> make an appearance, delivering a substantial upgrade to Wi-Fi connectivity. </p><p>With both the iPad 12 and iPad Air 8 now tipped to be heading our way soon, it's likely these tablets will launch in spring. Both the 11th-gen iPad and M3-powered iPad Air launched in March 2025, and the Cupertino tech giant may follow suit with its latest entries. That's not all, as the <a href="https://www.tomsguide.com/computing/macbooks/m5-pro-and-m5-max-macbook-pros-look-set-to-launch-in-march-and-apples-next-mac-launches-are-easy-to-call">M5 Pro and M5 Max MacBook Pro models are also expected to launch in March</a>. </p><h2 id="a-simple-refresh-with-big-performance-gains">A simple refresh (with big performance gains)</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="x9Q9my5jAPw2ni3Z4bkjRW" name="iPad Air M3-01" alt="iPad Air M3" src="https://cdn.mos.cms.futurecdn.net/x9Q9my5jAPw2ni3Z4bkjRW-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Aside from the chip upgrades, Apple Intelligence features and possible N1 wireless chip, expect the iPad 12 and iPad Air with M4 to look largely the same. </p><p>That means identical designs (11-inch for the iPad, 11- and 13-inch for the iPad Air), same 12MP cameras and Liquid Retina display (2360 x 1640) displays. As with past generations, the next tablets are set to be more of a performance upgrade. </p><p>It will be interesting to see if the base iPad 12 either gets an A18 or A19 chipset, as Apple previously jumped a single generation for its entry-level tablet; the iPad 11 received an A16 upgrade over the iPad 10's A14 chip. However, the key feature here will be Apple Intelligence support, making the whole iPad lineup deliver AI capabilities. </p><p>While there's still no word on the anticipated <a href="https://www.tomsguide.com/computing/ipads/ipad-mini-8-rumors-everything-we-know-so-far">iPad mini 8</a>, which is tipped to see even bigger upgrades that include an OLED display, more iPads are around the corner — and finally catching up to the <a href="https://www.tomsguide.com/computing/ipads/ipad-pro-m5-review">iPad Pro M5</a>. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-W2ryNW"></div>                            </div>                            <script src="https://kwizly.com/embed/W2ryNW.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/computing/e-readers/samsung-just-announced-a-color-e-reader-made-of-plankton-no-im-not-kidding">Samsung just announced a color e-reader made of plankton — no, I’m not kidding</a></li><li><a href="https://www.tomsguide.com/computing/tablets/i-tried-the-tcl-nxtpaper-11-plus-and-this-budget-tablet-is-easily-my-ipad-killer-heres-why">I tried the TCL NXTPAPER 11 Plus and this budget tablet is easily my iPad killer — here’s why</a></li><li><a href="https://www.tomsguide.com/computing/ipads/just-got-a-new-ipad-5-things-you-should-do-first">Just got a new iPad? 5 things you should do first</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ You can find Apple's most powerful iPad at the cheapest it's ever been right now — $100 off ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Anyone who's been holding out to upgrade an ageing iPad may want to take a look at Amazon right now, because there's a heckuva deal on the most powerful tablet Apple makes. In both sizes.</p><p>Right now, you can get the <a href="https://www.amazon.com/dp/B0FWCXJVHN" target="_blank" rel="nofollow">11-inch M5 iPad Pro for $899</a> and/or the <a href="https://www.amazon.com/dp/B0FWD1MS82" target="_blank" rel="nofollow">13-inch M5 iPad Pro for $1149</a> — in both cases, that's the lowest price I've ever seen. </p><p>It beats the discounts available during Black Friday and that should be all the encouragement you need to move fast on this.</p><div class="product"><a data-dimension112="ca16e4ea-5cbd-417f-b751-18a5f5ed1321" data-action="Deal Block" data-label="11" iPad Pro (WiFi/256GB)" data-dimension48="11" iPad Pro (WiFi/256GB)" data-dimension25="$899" href="https://www.amazon.com/dp/B0FWCXJVHN" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1309px;"><p class="vanilla-image-block" style="padding-top:114.59%;"><img id="xpzdCL9sJUsDBqZ83ZpxEA" name="iPad Pro 11 M4 deal block.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/xpzdCL9sJUsDBqZ83ZpxEA-1920-80.jpg" mos="" align="middle" fullscreen="" width="1309" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0FWCXJVHN" target="_blank" rel="nofollow" data-dimension112="ca16e4ea-5cbd-417f-b751-18a5f5ed1321" data-action="Deal Block" data-label='11" iPad Pro (WiFi/256GB)' data-dimension48='11" iPad Pro (WiFi/256GB)' data-dimension25="$899">11" iPad Pro (WiFi/256GB): was $999 now $899</a></strong><br>The 11-inch iPad Pro packs Apple's latest M5 processor paired with a stunning 11-inch Tandem OLED (2420 x 1668) display. The new M5 chip features 9 CPU cores and 10 GPU cores — each with their own AI accelerator that makes this a monster for tackling intensive tasks.<a class="view-deal button" href="https://www.amazon.com/dp/B0FWCXJVHN" target="_blank" rel="nofollow" data-dimension112="ca16e4ea-5cbd-417f-b751-18a5f5ed1321" data-action="Deal Block" data-label="11" iPad Pro (WiFi/256GB)" data-dimension48="11" iPad Pro (WiFi/256GB)" data-dimension25="$899">View Deal</a></p></div><div class="product"><a data-dimension112="363d9961-edbc-40a7-9769-af55b675f6a5" data-action="Deal Block" data-label="13" iPad Pro (WiFi/256GB)" data-dimension48="13" iPad Pro (WiFi/256GB)" data-dimension25="$1149" href="https://www.amazon.com/dp/B0FWD1MS82" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1309px;"><p class="vanilla-image-block" style="padding-top:114.59%;"><img id="xpzdCL9sJUsDBqZ83ZpxEA" name="iPad Pro 11 M4 deal block.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/xpzdCL9sJUsDBqZ83ZpxEA-1920-80.jpg" mos="" align="middle" fullscreen="" width="1309" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0FWD1MS82" target="_blank" rel="nofollow" data-dimension112="363d9961-edbc-40a7-9769-af55b675f6a5" data-action="Deal Block" data-label='13" iPad Pro (WiFi/256GB)' data-dimension48='13" iPad Pro (WiFi/256GB)' data-dimension25="$1149">13" iPad Pro (WiFi/256GB): was $1299 now $1149</a></strong><br>The 13-inch iPad Pro is for those who want even more screen real estate for better multitasking and more productivity. You get the same M5 processor with its 9 CPU cores and 10 GPU cores, but the display is the star of the show here. The Ultra Retina XDR OLED panel with its 2,000,000:1 contrast ratio and 2,360 x 1,640 resolution will probably put your TV to shame.<a class="view-deal button" href="https://www.amazon.com/dp/B0FWD1MS82" target="_blank" rel="nofollow" data-dimension112="363d9961-edbc-40a7-9769-af55b675f6a5" data-action="Deal Block" data-label="13" iPad Pro (WiFi/256GB)" data-dimension48="13" iPad Pro (WiFi/256GB)" data-dimension25="$1149">View Deal</a></p></div><p>Not that you were in any doubt, but the M5 iPad Pro isn't just one of the <a href="https://www.tomsguide.com/best-picks/best-ipad">best iPads</a> you can buy, it's raw power and mesmerizing screen means it outperforms some of the <a href="https://www.tomsguide.com/computing/laptops/best-laptops">best laptops</a> too. In our <a href="https://www.tomsguide.com/computing/ipads/ipad-pro-m5-review">full review</a>, we awarded it 4.5 stars and called it "a phenomenal Apple tablet that can do just about anything."</p><p>The M5 processor was the headline upgrade from the <a href="https://www.tomsguide.com/tablets/ipads/ipad-pro-2024">M4 iPad Pro</a> and Apple's latest silicon shines no matter what you throw at it. </p><p>Designers, coders and content creators won't see a hint of lag while they're in the flow and thanks to the efficiency of the chip (and <a href="https://www.tomsguide.com/computing/ipads/apple-ipados-26-review">iPadOS 26</a> on board) the battery life is excellent.  You can expect will over 13 hours of life from the 13-inch M5 iPad Pro and 11 hours from its smaller sibling.</p><p>Here's how far ahead the M5 iPad Pro comes out when compared with its predecessor and Samsung's Galaxy Tab S11 Ultra.</p><div ><table><caption>Performance benchmark results</caption><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>iPad Pro M5</strong></p></td><td  ><p><strong>iPad Pro M4</strong></p></td><td  ><p><strong>Samsung Galaxy Tab S11 Ultra</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Geekbench (single-core)</strong></p></td><td  ><p>4,155</p></td><td  ><p>3,700</p></td><td  ><p>2,811</p></td></tr><tr><td class="firstcol " ><p><strong>Geekbench (multi-core)</strong></p></td><td  ><p>16,517</p></td><td  ><p>14,523</p></td><td  ><p>9,126</p></td></tr><tr><td class="firstcol " ><p><strong>3D Mark Wild Life Extreme Unlimited</strong></p></td><td  ><p>9,934 / 59 fps</p></td><td  ><p>8,529 / 51 fps</p></td><td  ><p>6,575 / 39 fps</p></td></tr></tbody></table></div><p>The performance is one thing, but it's the screen through which you view it that had us rocked back on our heels with amazement when we tested the M5 iPad Pro.</p><h2 id="super-screen">Super screen</h2><p>As with the M4 iPad Pro, this remains Apple's only OLED tablet. And what you get from the Ultra Retina XDR panel is incredible image quality with deep blacks and bright whites served up at a crisp 2,360 x 1,640 resolution and 2,000,000:1 contrast ratio.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="kqhEPMrqoZSt6oxVA8TFnL" name="iPad Pro M5--10" alt="iPad Pro M5" src="https://cdn.mos.cms.futurecdn.net/kqhEPMrqoZSt6oxVA8TFnL-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>With all this praise, is there anything to be wary about with the M5 iPad Pro? Kinda. We only docked it a point in our review for the expensive peripherals and accessories. </p><p>Which is a fair point — to get the best from this device you're going to want to invest in a Magic Keyboard and Apple Pencil at the very least. </p><p>The good news is that with the money saved thanks to this deal, it's much more affordable to do that than it was just three short months ago when Apple launched this tablet.</p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/ipads/you-can-find-apples-most-powerful-ipad-at-the-cheapest-its-ever-been-right-now-usd100-off</link>
                                                                            <description>
                            <![CDATA[ The M5 iPad Pro is the most powerful iPad you can buy and Amazon has just dropped it to its lowest-ever price. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">5bbQ5TFKQGAHptYniTXpZ7</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/TVTUjZo28wu7TceeZQYJmb-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 26 Jan 2026 12:11:40 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[Computing]]></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/TVTUjZo28wu7TceeZQYJmb-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPad Pro M5 with a Tom&#039;s Guide &#039;Lowest Price&#039; deal badge added]]></media:description>                                                            <media:text><![CDATA[iPad Pro M5 with a Tom&#039;s Guide &#039;Lowest Price&#039; deal badge added]]></media:text>
                                <media:title type="plain"><![CDATA[iPad Pro M5 with a Tom&#039;s Guide &#039;Lowest Price&#039; deal badge added]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/TVTUjZo28wu7TceeZQYJmb-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Anyone who's been holding out to upgrade an ageing iPad may want to take a look at Amazon right now, because there's a heckuva deal on the most powerful tablet Apple makes. In both sizes.</p><p>Right now, you can get the <a href="https://www.amazon.com/dp/B0FWCXJVHN" target="_blank" rel="nofollow">11-inch M5 iPad Pro for $899</a> and/or the <a href="https://www.amazon.com/dp/B0FWD1MS82" target="_blank" rel="nofollow">13-inch M5 iPad Pro for $1149</a> — in both cases, that's the lowest price I've ever seen. </p><p>It beats the discounts available during Black Friday and that should be all the encouragement you need to move fast on this.</p><div class="product"><a data-dimension112="ca16e4ea-5cbd-417f-b751-18a5f5ed1321" data-action="Deal Block" data-label="11" iPad Pro (WiFi/256GB)" data-dimension48="11" iPad Pro (WiFi/256GB)" data-dimension25="$899" href="https://www.amazon.com/dp/B0FWCXJVHN" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1309px;"><p class="vanilla-image-block" style="padding-top:114.59%;"><img id="xpzdCL9sJUsDBqZ83ZpxEA" name="iPad Pro 11 M4 deal block.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/xpzdCL9sJUsDBqZ83ZpxEA-1920-80.jpg" mos="" align="middle" fullscreen="" width="1309" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0FWCXJVHN" target="_blank" rel="nofollow" data-dimension112="ca16e4ea-5cbd-417f-b751-18a5f5ed1321" data-action="Deal Block" data-label='11" iPad Pro (WiFi/256GB)' data-dimension48='11" iPad Pro (WiFi/256GB)' data-dimension25="$899">11" iPad Pro (WiFi/256GB): was $999 now $899</a></strong><br>The 11-inch iPad Pro packs Apple's latest M5 processor paired with a stunning 11-inch Tandem OLED (2420 x 1668) display. The new M5 chip features 9 CPU cores and 10 GPU cores — each with their own AI accelerator that makes this a monster for tackling intensive tasks.<a class="view-deal button" href="https://www.amazon.com/dp/B0FWCXJVHN" target="_blank" rel="nofollow" data-dimension112="ca16e4ea-5cbd-417f-b751-18a5f5ed1321" data-action="Deal Block" data-label="11" iPad Pro (WiFi/256GB)" data-dimension48="11" iPad Pro (WiFi/256GB)" data-dimension25="$899">View Deal</a></p></div><div class="product"><a data-dimension112="363d9961-edbc-40a7-9769-af55b675f6a5" data-action="Deal Block" data-label="13" iPad Pro (WiFi/256GB)" data-dimension48="13" iPad Pro (WiFi/256GB)" data-dimension25="$1149" href="https://www.amazon.com/dp/B0FWD1MS82" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1309px;"><p class="vanilla-image-block" style="padding-top:114.59%;"><img id="xpzdCL9sJUsDBqZ83ZpxEA" name="iPad Pro 11 M4 deal block.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/xpzdCL9sJUsDBqZ83ZpxEA-1920-80.jpg" mos="" align="middle" fullscreen="" width="1309" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0FWD1MS82" target="_blank" rel="nofollow" data-dimension112="363d9961-edbc-40a7-9769-af55b675f6a5" data-action="Deal Block" data-label='13" iPad Pro (WiFi/256GB)' data-dimension48='13" iPad Pro (WiFi/256GB)' data-dimension25="$1149">13" iPad Pro (WiFi/256GB): was $1299 now $1149</a></strong><br>The 13-inch iPad Pro is for those who want even more screen real estate for better multitasking and more productivity. You get the same M5 processor with its 9 CPU cores and 10 GPU cores, but the display is the star of the show here. The Ultra Retina XDR OLED panel with its 2,000,000:1 contrast ratio and 2,360 x 1,640 resolution will probably put your TV to shame.<a class="view-deal button" href="https://www.amazon.com/dp/B0FWD1MS82" target="_blank" rel="nofollow" data-dimension112="363d9961-edbc-40a7-9769-af55b675f6a5" data-action="Deal Block" data-label="13" iPad Pro (WiFi/256GB)" data-dimension48="13" iPad Pro (WiFi/256GB)" data-dimension25="$1149">View Deal</a></p></div><p>Not that you were in any doubt, but the M5 iPad Pro isn't just one of the <a href="https://www.tomsguide.com/best-picks/best-ipad">best iPads</a> you can buy, it's raw power and mesmerizing screen means it outperforms some of the <a href="https://www.tomsguide.com/computing/laptops/best-laptops">best laptops</a> too. In our <a href="https://www.tomsguide.com/computing/ipads/ipad-pro-m5-review">full review</a>, we awarded it 4.5 stars and called it "a phenomenal Apple tablet that can do just about anything."</p><p>The M5 processor was the headline upgrade from the <a href="https://www.tomsguide.com/tablets/ipads/ipad-pro-2024">M4 iPad Pro</a> and Apple's latest silicon shines no matter what you throw at it. </p><p>Designers, coders and content creators won't see a hint of lag while they're in the flow and thanks to the efficiency of the chip (and <a href="https://www.tomsguide.com/computing/ipads/apple-ipados-26-review">iPadOS 26</a> on board) the battery life is excellent.  You can expect will over 13 hours of life from the 13-inch M5 iPad Pro and 11 hours from its smaller sibling.</p><p>Here's how far ahead the M5 iPad Pro comes out when compared with its predecessor and Samsung's Galaxy Tab S11 Ultra.</p><div ><table><caption>Performance benchmark results</caption><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>iPad Pro M5</strong></p></td><td  ><p><strong>iPad Pro M4</strong></p></td><td  ><p><strong>Samsung Galaxy Tab S11 Ultra</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Geekbench (single-core)</strong></p></td><td  ><p>4,155</p></td><td  ><p>3,700</p></td><td  ><p>2,811</p></td></tr><tr><td class="firstcol " ><p><strong>Geekbench (multi-core)</strong></p></td><td  ><p>16,517</p></td><td  ><p>14,523</p></td><td  ><p>9,126</p></td></tr><tr><td class="firstcol " ><p><strong>3D Mark Wild Life Extreme Unlimited</strong></p></td><td  ><p>9,934 / 59 fps</p></td><td  ><p>8,529 / 51 fps</p></td><td  ><p>6,575 / 39 fps</p></td></tr></tbody></table></div><p>The performance is one thing, but it's the screen through which you view it that had us rocked back on our heels with amazement when we tested the M5 iPad Pro.</p><h2 id="super-screen">Super screen</h2><p>As with the M4 iPad Pro, this remains Apple's only OLED tablet. And what you get from the Ultra Retina XDR panel is incredible image quality with deep blacks and bright whites served up at a crisp 2,360 x 1,640 resolution and 2,000,000:1 contrast ratio.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="kqhEPMrqoZSt6oxVA8TFnL" name="iPad Pro M5--10" alt="iPad Pro M5" src="https://cdn.mos.cms.futurecdn.net/kqhEPMrqoZSt6oxVA8TFnL-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>With all this praise, is there anything to be wary about with the M5 iPad Pro? Kinda. We only docked it a point in our review for the expensive peripherals and accessories. </p><p>Which is a fair point — to get the best from this device you're going to want to invest in a Magic Keyboard and Apple Pencil at the very least. </p><p>The good news is that with the money saved thanks to this deal, it's much more affordable to do that than it was just three short months ago when Apple launched this tablet.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Just got a new iPad? 5 things you should do first ]]></title>
                                                                                                <dc:content><![CDATA[ <p>If you or someone you love just came into possession of a new iPad, congratulations! I've been reviewing tablets for ages here at Tom's Guide, and I feel like Apple's iPads are among the <a href="https://www.tomsguide.com/best-picks/best-tablet"><u>best tablets</u></a> on the market right now. They're light and long-lasting, with lovely touchscreens and enough speed to run any app in Apple's massive App Store.</p><p>They make for great gifts, but the iPad interface is so minimal and intuitive that there's a slew of useful features you might take months to find if you didn't know about them. With that in mind, I figured I could quickly help you make your new iPad your own by walking you through my 5 favorite iPad features you should master to make the most of your new tablet.</p><p>We've written a lot about <a href="https://www.tomsguide.com/computing/tablets/ipads">iPads </a>over the years, so in this guide, I tried to specifically focus on useful features that aren't easy to find unless you know where to look. So, whether you have a new <a href="https://www.tomsguide.com/computing/ipads/ipad-11-2025-review">iPad</a>, <a href="https://www.tomsguide.com/tablets/ipads/ipad-air-m3-review"><u>iPad Air</u></a>, <a href="https://www.tomsguide.com/computing/ipads/ipad-pro-m5-review"><u>iPad Pro,</u></a> or an iPad mini, I have some quick tips on how to make it your own!</p><h3 class="article-body__section" id="section-customize-your-home-screen"><span>Customize your home screen</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1510px;"><p class="vanilla-image-block" style="padding-top:59.60%;"><img id="edZ5kkSoSSHehvBCZW6BgC" name="ipadtips1" alt="Apple iPad home screen" src="https://cdn.mos.cms.futurecdn.net/edZ5kkSoSSHehvBCZW6BgC-1920-80.jpg" mos="" align="middle" fullscreen="1" width="1510" height="900" attribution="" endorsement="" class="inline expandable"><a href='https://cdn.mos.cms.futurecdn.net/edZ5kkSoSSHehvBCZW6BgC-1920-80.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>As you swipe around your home screen, you'll see all the apps you've downloaded lined up in neat little rows. You can let your iPad manage all this automatically, but if you'd like to customize your home screen, there's an easy (yet oddly hard to find) way to do so.</p><p>To start customizing your home screen, simply press and hold your finger on any empty space on your tablet's home screen until you see the icons start to shake. At this point, you can tap and drag them around to reorganize them, but you can do a lot more than that if you hit that tiny "Edit" button in the upper-left corner of the screen.</p><p>I can't tell you how many times I've had family tell me they never even saw that button, because it's awfully tiny. But if you tap and hold the home screen until the icons start to jiggle and then hit the Edit button, you can do a lot more: change your wallpaper, adjust your light/dark mode settings and lay down Widgets on your home screen.</p><p>Don't know about Widgets? You will soon!</p><h3 class="article-body__section" id="section-lay-down-some-widgets"><span>Lay down some Widgets</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1510px;"><p class="vanilla-image-block" style="padding-top:59.60%;"><img id="pu8FfhuQWWYXyfnDhhcWSR" name="ipadtips2" alt="Apple iPad Widgets menu" src="https://cdn.mos.cms.futurecdn.net/pu8FfhuQWWYXyfnDhhcWSR-1920-80.jpg" mos="" align="middle" fullscreen="1" width="1510" height="900" attribution="" endorsement="" class="inline expandable"><a href='https://cdn.mos.cms.futurecdn.net/pu8FfhuQWWYXyfnDhhcWSR-1920-80.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Widgets are blocks you can put on your home screen that will display useful information and update in real time. They debuted with <a href="https://www.tomsguide.com/news/ipados-17">iPadOS 17</a> a few years ago, and now they're really robust and useful.</p><p>To start putting Widgets on your home screen, you just hold your finger on an empty space until you enter edit mode (when the icons start jiggling) and then hit the Edit button in the top-left corner. </p><p>That will open the Widgets menu, where you'll see a big list of apps you have that you can scroll through to pick out Widgets. Apple's apps have great Widget support with lots of options, but nowadays, many third-party apps do too. You can also put active Widgets on your iPad's lock screen, so you can stay on top of key details like your calendar or to-do list even when your iPad is locked.</p><h3 class="article-body__section" id="section-turn-on-find-my-ipad"><span>Turn on "Find My iPad"</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1510px;"><p class="vanilla-image-block" style="padding-top:59.60%;"><img id="ENsh7V5syxhFfpReUYamZC" name="ipadtips3" alt="Apple iPad Find My menu" src="https://cdn.mos.cms.futurecdn.net/ENsh7V5syxhFfpReUYamZC-1920-80.jpg" mos="" align="middle" fullscreen="1" width="1510" height="900" attribution="" endorsement="" class="inline expandable"><a href='https://cdn.mos.cms.futurecdn.net/ENsh7V5syxhFfpReUYamZC-1920-80.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Next, let's ensure you have a little peace of mind if you ever misplace your iPad or leave it somewhere.</p><p>Apple has a robust tracking system in the form of "Find My", an app that you can use to track the location of your enrolled Apple devices in real time. It's super useful, but a lot of new iPad users don't even know it exists.</p><p>To enable Find My for your iPad, open the Settings app, then tap your name in the upper-left corner. Navigate to the Find My menu and make sure the "Find My iPad" setting is turned on. From within this menu, you can also choose to share your iPad's location with family and friends.</p><h3 class="article-body__section" id="section-master-multitasking"><span>Master 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:1510px;"><p class="vanilla-image-block" style="padding-top:59.60%;"><img id="MzqpcpMLSWoCS2uKXXTeEm" name="ipadtips4" alt="Apple iPad multitasking menu" src="https://cdn.mos.cms.futurecdn.net/MzqpcpMLSWoCS2uKXXTeEm-1920-80.jpg" mos="" align="middle" fullscreen="1" width="1510" height="900" attribution="" endorsement="" class="inline expandable"><a href='https://cdn.mos.cms.futurecdn.net/MzqpcpMLSWoCS2uKXXTeEm-1920-80.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Your iPad is great for focusing on a specific app or task, but there are some advanced multitasking features you can use to access multiple apps simultaneously. I love doing this when I need to reference something while working or if I want to chat with a friend while watching something, and I think you will too.</p><p>The trick is finding and mastering these tools, because they're not well-explained if you don't dig into Apple's guides and menus. To access your iPad's multitasking settings, open the Settings app and navigate to the Multitasking & Gestures submenu.</p><p>From here, you can (at least as of iPadOS 26) pick and choose one of three different ways to multitask. The "Full Screen Apps" setting is the default and also the most restrictive, as you can only view one app at a time in full-screen mode. So basically, you can only multitask by quickly switching between apps.</p><p>The second "Windowed Apps" option makes your iPad work a bit more like a Mac or a Windows PC. When working in this multitasking mode, you can have multiple apps open on your screen at once, and you can change their size or move them by tapping and dragging on the corners of the app.</p><p>The final option is "Stage Manager," and it's something totally unique to your iPad. When working in Stage Manager mode, you can center one app on your iPad while the other open apps are listed as small icons along the side of the screen. When you want to switch apps, you just tap the icon of the app you want to look at, and it immediately leaps to the fore. Check out our <a href="https://www.tomsguide.com/how-to/how-to-use-stage-manager-on-ipad-">how to use Stage Manager on iPad</a> guide for step-by-step instructions and more tips!</p><h3 class="article-body__section" id="section-make-your-control-center-your-own"><span>Make your Control Center your own</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1510px;"><p class="vanilla-image-block" style="padding-top:59.60%;"><img id="93pNRCmFSAbYvfzPN28EMM" name="ipadtips5" alt="Apple iPad Control Center in action" src="https://cdn.mos.cms.futurecdn.net/93pNRCmFSAbYvfzPN28EMM-1920-80.jpg" mos="" align="middle" fullscreen="1" width="1510" height="900" attribution="" endorsement="" class="inline expandable"><a href='https://cdn.mos.cms.futurecdn.net/93pNRCmFSAbYvfzPN28EMM-1920-80.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>There's a really useful Control Center menu built into your iPad that you can customize so it has just the controls you really want, and none that you don't. But if you didn't know where to look, you might take a while to even realize it exists.</p><p>See, to access the Control Center, you have to drag your finger down from the upper-right corner of your iPad. It can take a few tries to get it right and stop pulling down the notifications pane by accident (which happens if you drag your finger down from the top of the screen elsewhere), but once you get the hang of it, summoning the Control Center gives you quick access to useful features like volume and Wi-Fi controls, your music library, your smart home settings and more.</p><p>You can customize your Control Center by dragging your finger down from the upper-right corner to summon it and then tapping the small plus (+) icon in the upper-left corner of the menu. This will turn on editing mode, and you can then tap and drag controls around to reorganize your Control Center. You can also tap the minus (-) icon to remove a control, or tap the thick edge of the control and drag it to change the size of the control.</p><p>Once I got the hang of using the Command Center, it became my go-to tool for quickly doing things like playing music or turning on smart lights in my apartment. I hope you find it equally useful! </p><p>Master these five sometimes hard-to-find features, and you're well on your way to making your new iPad your own. I hope you found these tips useful, and if you have your own advice for new iPad owners, share it in the comments below!</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide </span></h3><ul><li><a href="https://www.tomsguide.com/computing/ipads/i-review-ipads-for-a-living-heres-15-ipad-shortcuts-i-cant-live-without">I review iPads for a living — here's 15 iPad shortcuts I can't live without</a></li><li><a href="https://www.tomsguide.com/computing/apple-desktops/5-free-ways-to-speed-up-your-slow-mac">5 free ways to speed up your slow Mac</a></li><li><a href="https://www.tomsguide.com/computing/keyboards/your-mechanical-keyboard-is-disgusting-heres-how-to-clean-it-properly-in-30-minutes">Your mechanical keyboard is gross — here's how to clean it</a></li></ul><div data-widget-type="merchantlink" data-model-name="Apple Pencil (USB-C),Apple Pencil Pro"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/ipads/just-got-a-new-ipad-5-things-you-should-do-first</link>
                                                                            <description>
                            <![CDATA[ If you or someone you love just got a new iPad, I have some quick tips to make the most of it, as someone who has reviewed iPads for nearly a decade. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">NyLGrzARhHpi99f7MWqHJA</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/BCxf6YVzi459EsaeZB44rA-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 18 Jan 2026 11:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Tablets]]></category>
                                                                                                <author><![CDATA[ alex.wawro@futurenet.com (Alex Wawro) ]]></author>                    <dc:creator><![CDATA[ Alex Wawro ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/Y4wW9n7CZrNzgofqVkGA5J-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Alex Wawro is a lifelong tech and games enthusiast with more than a decade of experience covering the movers and shakers in both industries for media outlets like Game Developer, Black Hat and PC World magazine. A lifelong PC builder, he currently serves as a senior editor at Tom&#039;s Guide covering all things computing, from laptops and desktops to printers, keyboards and mice. If you plug it into a PC, he&#039;s probably the person to talk to.&amp;nbsp;&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/BCxf6YVzi459EsaeZB44rA-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPad 2022 review iPadOS 16 lift image from background]]></media:description>                                                            <media:text><![CDATA[iPad 2022 review iPadOS 16 lift image from background]]></media:text>
                                <media:title type="plain"><![CDATA[iPad 2022 review iPadOS 16 lift image from background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/BCxf6YVzi459EsaeZB44rA-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>If you or someone you love just came into possession of a new iPad, congratulations! I've been reviewing tablets for ages here at Tom's Guide, and I feel like Apple's iPads are among the <a href="https://www.tomsguide.com/best-picks/best-tablet"><u>best tablets</u></a> on the market right now. They're light and long-lasting, with lovely touchscreens and enough speed to run any app in Apple's massive App Store.</p><p>They make for great gifts, but the iPad interface is so minimal and intuitive that there's a slew of useful features you might take months to find if you didn't know about them. With that in mind, I figured I could quickly help you make your new iPad your own by walking you through my 5 favorite iPad features you should master to make the most of your new tablet.</p><p>We've written a lot about <a href="https://www.tomsguide.com/computing/tablets/ipads">iPads </a>over the years, so in this guide, I tried to specifically focus on useful features that aren't easy to find unless you know where to look. So, whether you have a new <a href="https://www.tomsguide.com/computing/ipads/ipad-11-2025-review">iPad</a>, <a href="https://www.tomsguide.com/tablets/ipads/ipad-air-m3-review"><u>iPad Air</u></a>, <a href="https://www.tomsguide.com/computing/ipads/ipad-pro-m5-review"><u>iPad Pro,</u></a> or an iPad mini, I have some quick tips on how to make it your own!</p><h3 class="article-body__section" id="section-customize-your-home-screen"><span>Customize your home screen</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1510px;"><p class="vanilla-image-block" style="padding-top:59.60%;"><img id="edZ5kkSoSSHehvBCZW6BgC" name="ipadtips1" alt="Apple iPad home screen" src="https://cdn.mos.cms.futurecdn.net/edZ5kkSoSSHehvBCZW6BgC-1920-80.jpg" mos="" align="middle" fullscreen="1" width="1510" height="900" attribution="" endorsement="" class="inline expandable"><a href='https://cdn.mos.cms.futurecdn.net/edZ5kkSoSSHehvBCZW6BgC-1920-80.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>As you swipe around your home screen, you'll see all the apps you've downloaded lined up in neat little rows. You can let your iPad manage all this automatically, but if you'd like to customize your home screen, there's an easy (yet oddly hard to find) way to do so.</p><p>To start customizing your home screen, simply press and hold your finger on any empty space on your tablet's home screen until you see the icons start to shake. At this point, you can tap and drag them around to reorganize them, but you can do a lot more than that if you hit that tiny "Edit" button in the upper-left corner of the screen.</p><p>I can't tell you how many times I've had family tell me they never even saw that button, because it's awfully tiny. But if you tap and hold the home screen until the icons start to jiggle and then hit the Edit button, you can do a lot more: change your wallpaper, adjust your light/dark mode settings and lay down Widgets on your home screen.</p><p>Don't know about Widgets? You will soon!</p><h3 class="article-body__section" id="section-lay-down-some-widgets"><span>Lay down some Widgets</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1510px;"><p class="vanilla-image-block" style="padding-top:59.60%;"><img id="pu8FfhuQWWYXyfnDhhcWSR" name="ipadtips2" alt="Apple iPad Widgets menu" src="https://cdn.mos.cms.futurecdn.net/pu8FfhuQWWYXyfnDhhcWSR-1920-80.jpg" mos="" align="middle" fullscreen="1" width="1510" height="900" attribution="" endorsement="" class="inline expandable"><a href='https://cdn.mos.cms.futurecdn.net/pu8FfhuQWWYXyfnDhhcWSR-1920-80.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Widgets are blocks you can put on your home screen that will display useful information and update in real time. They debuted with <a href="https://www.tomsguide.com/news/ipados-17">iPadOS 17</a> a few years ago, and now they're really robust and useful.</p><p>To start putting Widgets on your home screen, you just hold your finger on an empty space until you enter edit mode (when the icons start jiggling) and then hit the Edit button in the top-left corner. </p><p>That will open the Widgets menu, where you'll see a big list of apps you have that you can scroll through to pick out Widgets. Apple's apps have great Widget support with lots of options, but nowadays, many third-party apps do too. You can also put active Widgets on your iPad's lock screen, so you can stay on top of key details like your calendar or to-do list even when your iPad is locked.</p><h3 class="article-body__section" id="section-turn-on-find-my-ipad"><span>Turn on "Find My iPad"</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1510px;"><p class="vanilla-image-block" style="padding-top:59.60%;"><img id="ENsh7V5syxhFfpReUYamZC" name="ipadtips3" alt="Apple iPad Find My menu" src="https://cdn.mos.cms.futurecdn.net/ENsh7V5syxhFfpReUYamZC-1920-80.jpg" mos="" align="middle" fullscreen="1" width="1510" height="900" attribution="" endorsement="" class="inline expandable"><a href='https://cdn.mos.cms.futurecdn.net/ENsh7V5syxhFfpReUYamZC-1920-80.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Next, let's ensure you have a little peace of mind if you ever misplace your iPad or leave it somewhere.</p><p>Apple has a robust tracking system in the form of "Find My", an app that you can use to track the location of your enrolled Apple devices in real time. It's super useful, but a lot of new iPad users don't even know it exists.</p><p>To enable Find My for your iPad, open the Settings app, then tap your name in the upper-left corner. Navigate to the Find My menu and make sure the "Find My iPad" setting is turned on. From within this menu, you can also choose to share your iPad's location with family and friends.</p><h3 class="article-body__section" id="section-master-multitasking"><span>Master 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:1510px;"><p class="vanilla-image-block" style="padding-top:59.60%;"><img id="MzqpcpMLSWoCS2uKXXTeEm" name="ipadtips4" alt="Apple iPad multitasking menu" src="https://cdn.mos.cms.futurecdn.net/MzqpcpMLSWoCS2uKXXTeEm-1920-80.jpg" mos="" align="middle" fullscreen="1" width="1510" height="900" attribution="" endorsement="" class="inline expandable"><a href='https://cdn.mos.cms.futurecdn.net/MzqpcpMLSWoCS2uKXXTeEm-1920-80.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Your iPad is great for focusing on a specific app or task, but there are some advanced multitasking features you can use to access multiple apps simultaneously. I love doing this when I need to reference something while working or if I want to chat with a friend while watching something, and I think you will too.</p><p>The trick is finding and mastering these tools, because they're not well-explained if you don't dig into Apple's guides and menus. To access your iPad's multitasking settings, open the Settings app and navigate to the Multitasking & Gestures submenu.</p><p>From here, you can (at least as of iPadOS 26) pick and choose one of three different ways to multitask. The "Full Screen Apps" setting is the default and also the most restrictive, as you can only view one app at a time in full-screen mode. So basically, you can only multitask by quickly switching between apps.</p><p>The second "Windowed Apps" option makes your iPad work a bit more like a Mac or a Windows PC. When working in this multitasking mode, you can have multiple apps open on your screen at once, and you can change their size or move them by tapping and dragging on the corners of the app.</p><p>The final option is "Stage Manager," and it's something totally unique to your iPad. When working in Stage Manager mode, you can center one app on your iPad while the other open apps are listed as small icons along the side of the screen. When you want to switch apps, you just tap the icon of the app you want to look at, and it immediately leaps to the fore. Check out our <a href="https://www.tomsguide.com/how-to/how-to-use-stage-manager-on-ipad-">how to use Stage Manager on iPad</a> guide for step-by-step instructions and more tips!</p><h3 class="article-body__section" id="section-make-your-control-center-your-own"><span>Make your Control Center your own</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1510px;"><p class="vanilla-image-block" style="padding-top:59.60%;"><img id="93pNRCmFSAbYvfzPN28EMM" name="ipadtips5" alt="Apple iPad Control Center in action" src="https://cdn.mos.cms.futurecdn.net/93pNRCmFSAbYvfzPN28EMM-1920-80.jpg" mos="" align="middle" fullscreen="1" width="1510" height="900" attribution="" endorsement="" class="inline expandable"><a href='https://cdn.mos.cms.futurecdn.net/93pNRCmFSAbYvfzPN28EMM-1920-80.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>There's a really useful Control Center menu built into your iPad that you can customize so it has just the controls you really want, and none that you don't. But if you didn't know where to look, you might take a while to even realize it exists.</p><p>See, to access the Control Center, you have to drag your finger down from the upper-right corner of your iPad. It can take a few tries to get it right and stop pulling down the notifications pane by accident (which happens if you drag your finger down from the top of the screen elsewhere), but once you get the hang of it, summoning the Control Center gives you quick access to useful features like volume and Wi-Fi controls, your music library, your smart home settings and more.</p><p>You can customize your Control Center by dragging your finger down from the upper-right corner to summon it and then tapping the small plus (+) icon in the upper-left corner of the menu. This will turn on editing mode, and you can then tap and drag controls around to reorganize your Control Center. You can also tap the minus (-) icon to remove a control, or tap the thick edge of the control and drag it to change the size of the control.</p><p>Once I got the hang of using the Command Center, it became my go-to tool for quickly doing things like playing music or turning on smart lights in my apartment. I hope you find it equally useful! </p><p>Master these five sometimes hard-to-find features, and you're well on your way to making your new iPad your own. I hope you found these tips useful, and if you have your own advice for new iPad owners, share it in the comments below!</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide </span></h3><ul><li><a href="https://www.tomsguide.com/computing/ipads/i-review-ipads-for-a-living-heres-15-ipad-shortcuts-i-cant-live-without">I review iPads for a living — here's 15 iPad shortcuts I can't live without</a></li><li><a href="https://www.tomsguide.com/computing/apple-desktops/5-free-ways-to-speed-up-your-slow-mac">5 free ways to speed up your slow Mac</a></li><li><a href="https://www.tomsguide.com/computing/keyboards/your-mechanical-keyboard-is-disgusting-heres-how-to-clean-it-properly-in-30-minutes">Your mechanical keyboard is gross — here's how to clean it</a></li></ul><div data-widget-type="merchantlink" data-model-name="Apple Pencil (USB-C),Apple Pencil Pro"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Your old iPad is more useful than you think — 5 ways to give it new life ]]></title>
                                                                                                <dc:content><![CDATA[ <p>If you've upgraded to one of the <a href="https://www.tomsguide.com/best-picks/best-ipad">best iPads</a> out there, like the <a href="https://www.tomsguide.com/tablets/ipads/ipad-air-m3-review">Air M3</a> or the <a href="https://www.tomsguide.com/tablets/ipads/ipad-mini-7-review">iPad Mini 7,</a> your old tablet is probably sitting in a drawer collecting dust. But even vintage iPads that Apple no longer supports with the latest updates are still capable devices that can handle useful tasks. </p><p>Instead of letting it become e-waste or trying to sell it for pennies, repurpose it into something that solves everyday problems and actually gets used. From boosting productivity to managing your smart home to pure entertainment, your old iPad has plenty of life left in it. </p><p>Here are five practical ways to give your old iPad a second life.</p><section class="howto-block">                    <h3>1. Turn it into a second monitor</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="http://cdn.mos.cms.futurecdn.net/keK9WYEVPpAcpENjiketTg.jpg"                                        alt="Macbook Air on a kitchen counter with an iPad next to it"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="http://cdn.mos.cms.futurecdn.net/keK9WYEVPpAcpENjiketTg.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p>A second screen boosts productivity, but new monitors are expensive. Your old iPad can become a wireless display for your laptop in minutes.</p><p>Mac users can use Apple's built-in Sidecar feature. <strong>Sign both devices into the same Apple account, connect to the same Wi-Fi, open System Settings, go to Displays, and select your iPad</strong>. It instantly becomes an extension of your Mac's screen.</p><p><strong>Windows users need third-party apps like Duet Display or Spacedesk</strong>. Download the app on both devices, connect via Wi-Fi or USB, and you're set. Drag windows between screens like any multi-monitor setup.</p><p>This works great for keeping email visible while working, monitoring social feeds, or displaying reference materials. Some apps even let you use the iPad's touchscreen as an input device.</p></p>                </section><section class="howto-block">                    <h3>2. Set it up as a smart home control hub</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="http://cdn.mos.cms.futurecdn.net/g7TZYnT4k4HxB2L7jFD3jX.jpg"                                        alt=""                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="http://cdn.mos.cms.futurecdn.net/g7TZYnT4k4HxB2L7jFD3jX.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p><strong>Mount an old iPad in your kitchen or entryway as a permanent touchscreen for your smart home</strong> — whether that's managing smart lights, thermostats, cameras, and other connected devices.</p><p>For HomeKit devices, <strong>use the built-in Home app</strong>. Add your devices, organize by room, and create automation routines. Anyone can walk up and control your home with a few taps.</p><p>For non-HomeKit devices, <strong>use SmartThings, Google Home, or manufacturer apps</strong>. The advantage is having a dedicated control panel that's always available without hunting for your phone.</p><p>Keep it plugged in constantly. Most iPads handle this fine, and many people set them to never sleep so the interface is always visible.</p></p>                </section><section class="howto-block">                    <h3>3. Use it as an e-reader</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="http://cdn.mos.cms.futurecdn.net/w3PX3uamEMbZfRiMcKZqFg.jpg"                                        alt="best iPad VPN"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="http://cdn.mos.cms.futurecdn.net/w3PX3uamEMbZfRiMcKZqFg.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Sushiman/Shutterstock)</div></figure>                    <p><p>Your old iPad can replace a $100-$200 Kindle without spending anything. <strong>Install Apple Books, Kindle, Libby for library books, or Kobo</strong> to access virtually any book you want.</p><p>Unlike Kindle devices, an iPad gives you access to multiple book stores simultaneously. You're not locked into one retailer and can switch between apps depending on where you find the best deal.</p><p><strong>Enable Reading Mode in Display settings to reduce blue light </strong>for longer reading sessions. You could even <strong>create a Focus mode that silences notifications and removes distracting apps</strong>, so you can read uninterrupted. </p><p>To make it even more like a Kindle you could purchase a paper-texture screen protector to reduce glare and give your screen a more book-like feel. </p></p>                </section><section class="howto-block">                    <h3>4. Create a digital photo frame</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="http://cdn.mos.cms.futurecdn.net/PvqRG7EgUgu3GHe7xdQweD.jpg"                                        alt="How to reset an ipad to get a fresh iPad"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="http://cdn.mos.cms.futurecdn.net/PvqRG7EgUgu3GHe7xdQweD.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p>Turn your old iPad into a rotating display of favorite memories. This works well for family photos, vacations, or pictures of kids and grandchildren.</p><p>Apps like Skylight Frame, PhotoSync, or Apple's Photos app create slideshows from selected albums.<strong> Connect to iCloud Photos, Google Photos, or Dropbox</strong>, and it automatically displays your latest photos without manual updates.</p><p>You can also by frames designed for iPads on Etsy or Amazon to make it look like a traditional picture frame. Options include wall-mounting hardware or table stands.</p><p>Place it in high-traffic areas like the living room or kitchen. The rotating photos are more engaging than static prints, and you can update the collection remotely anytime.</p></p>                </section><section class="howto-block">                    <h3>5. Turn it into a dedicated gaming device</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="http://cdn.mos.cms.futurecdn.net/eFFnjBP4cqHvkRtZAXKDm9.jpg"                                        alt="iPad 2022 review playing Genshin Impact"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="http://cdn.mos.cms.futurecdn.net/eFFnjBP4cqHvkRtZAXKDm9.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p>Your old iPad might not run demanding games, but it's perfect for casual gaming that keeps your main phone free. Apple Arcade offers hundreds of games that run smoothly on older iPads. </p><p>For kids, <strong>set up Screen Time restrictions to limit hours, approve downloads, and prevent in-app purchases</strong>. Add a rugged case and you have a kid-friendly gaming tablet.</p><p>You can also connect a Bluetooth controller for supported games. The larger screen makes gaming more immersive, especially for racing games or platformers.</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/computing/ipads/i-review-ipads-for-a-living-heres-15-ipad-shortcuts-i-cant-live-without">I review iPads for a living — here's 15 iPad shortcuts I can't live without</a></li><li><a href="https://www.tomsguide.com/computing/apple-desktops/5-free-ways-to-speed-up-your-slow-mac">5 free ways to speed up your slow Mac</a></li><li><a href="https://www.tomsguide.com/computing/keyboards/your-mechanical-keyboard-is-disgusting-heres-how-to-clean-it-properly-in-30-minutes">Your mechanical keyboard is gross — here's how to clean it</a></li></ul><div data-model-name="Apple 13" MacBook Air M4 (2025),Apple 15" MacBook Air M4 (2025),Dell XPS 13,Lenovo Yoga Slim 7x (14-inch Snapdragon),Lenovo Chromebook Plus 14,Asus ROG Zephyrus G14 (2025)" data-widget-type="comparison"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/ipads/your-old-ipad-is-more-useful-than-you-think-5-ways-to-give-it-new-life</link>
                                                                            <description>
                            <![CDATA[ Learn five practical ways to repurpose your old iPad. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">6JyjvnwXmqDsBGPffESms7</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/dFvUnm635ciBzKHoZZpnGf-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 12 Jan 2026 06:45:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Tablets]]></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/XR7uugHJo9GDpoV7ZN22Ae-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/dFvUnm635ciBzKHoZZpnGf-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPad 10th generation in the hands browsing the iPad OS home screen]]></media:description>                                                            <media:text><![CDATA[iPad 10th generation in the hands browsing the iPad OS home screen]]></media:text>
                                <media:title type="plain"><![CDATA[iPad 10th generation in the hands browsing the iPad OS home screen]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/dFvUnm635ciBzKHoZZpnGf-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>If you've upgraded to one of the <a href="https://www.tomsguide.com/best-picks/best-ipad">best iPads</a> out there, like the <a href="https://www.tomsguide.com/tablets/ipads/ipad-air-m3-review">Air M3</a> or the <a href="https://www.tomsguide.com/tablets/ipads/ipad-mini-7-review">iPad Mini 7,</a> your old tablet is probably sitting in a drawer collecting dust. But even vintage iPads that Apple no longer supports with the latest updates are still capable devices that can handle useful tasks. </p><p>Instead of letting it become e-waste or trying to sell it for pennies, repurpose it into something that solves everyday problems and actually gets used. From boosting productivity to managing your smart home to pure entertainment, your old iPad has plenty of life left in it. </p><p>Here are five practical ways to give your old iPad a second life.</p><section class="howto-block">                    <h3>1. Turn it into a second monitor</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="http://cdn.mos.cms.futurecdn.net/keK9WYEVPpAcpENjiketTg.jpg"                                        alt="Macbook Air on a kitchen counter with an iPad next to it"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="http://cdn.mos.cms.futurecdn.net/keK9WYEVPpAcpENjiketTg.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p>A second screen boosts productivity, but new monitors are expensive. Your old iPad can become a wireless display for your laptop in minutes.</p><p>Mac users can use Apple's built-in Sidecar feature. <strong>Sign both devices into the same Apple account, connect to the same Wi-Fi, open System Settings, go to Displays, and select your iPad</strong>. It instantly becomes an extension of your Mac's screen.</p><p><strong>Windows users need third-party apps like Duet Display or Spacedesk</strong>. Download the app on both devices, connect via Wi-Fi or USB, and you're set. Drag windows between screens like any multi-monitor setup.</p><p>This works great for keeping email visible while working, monitoring social feeds, or displaying reference materials. Some apps even let you use the iPad's touchscreen as an input device.</p></p>                </section><section class="howto-block">                    <h3>2. Set it up as a smart home control hub</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="http://cdn.mos.cms.futurecdn.net/g7TZYnT4k4HxB2L7jFD3jX.jpg"                                        alt=""                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="http://cdn.mos.cms.futurecdn.net/g7TZYnT4k4HxB2L7jFD3jX.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p><strong>Mount an old iPad in your kitchen or entryway as a permanent touchscreen for your smart home</strong> — whether that's managing smart lights, thermostats, cameras, and other connected devices.</p><p>For HomeKit devices, <strong>use the built-in Home app</strong>. Add your devices, organize by room, and create automation routines. Anyone can walk up and control your home with a few taps.</p><p>For non-HomeKit devices, <strong>use SmartThings, Google Home, or manufacturer apps</strong>. The advantage is having a dedicated control panel that's always available without hunting for your phone.</p><p>Keep it plugged in constantly. Most iPads handle this fine, and many people set them to never sleep so the interface is always visible.</p></p>                </section><section class="howto-block">                    <h3>3. Use it as an e-reader</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="http://cdn.mos.cms.futurecdn.net/w3PX3uamEMbZfRiMcKZqFg.jpg"                                        alt="best iPad VPN"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="http://cdn.mos.cms.futurecdn.net/w3PX3uamEMbZfRiMcKZqFg.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Sushiman/Shutterstock)</div></figure>                    <p><p>Your old iPad can replace a $100-$200 Kindle without spending anything. <strong>Install Apple Books, Kindle, Libby for library books, or Kobo</strong> to access virtually any book you want.</p><p>Unlike Kindle devices, an iPad gives you access to multiple book stores simultaneously. You're not locked into one retailer and can switch between apps depending on where you find the best deal.</p><p><strong>Enable Reading Mode in Display settings to reduce blue light </strong>for longer reading sessions. You could even <strong>create a Focus mode that silences notifications and removes distracting apps</strong>, so you can read uninterrupted. </p><p>To make it even more like a Kindle you could purchase a paper-texture screen protector to reduce glare and give your screen a more book-like feel. </p></p>                </section><section class="howto-block">                    <h3>4. Create a digital photo frame</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="http://cdn.mos.cms.futurecdn.net/PvqRG7EgUgu3GHe7xdQweD.jpg"                                        alt="How to reset an ipad to get a fresh iPad"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="http://cdn.mos.cms.futurecdn.net/PvqRG7EgUgu3GHe7xdQweD.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p>Turn your old iPad into a rotating display of favorite memories. This works well for family photos, vacations, or pictures of kids and grandchildren.</p><p>Apps like Skylight Frame, PhotoSync, or Apple's Photos app create slideshows from selected albums.<strong> Connect to iCloud Photos, Google Photos, or Dropbox</strong>, and it automatically displays your latest photos without manual updates.</p><p>You can also by frames designed for iPads on Etsy or Amazon to make it look like a traditional picture frame. Options include wall-mounting hardware or table stands.</p><p>Place it in high-traffic areas like the living room or kitchen. The rotating photos are more engaging than static prints, and you can update the collection remotely anytime.</p></p>                </section><section class="howto-block">                    <h3>5. Turn it into a dedicated gaming device</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="http://cdn.mos.cms.futurecdn.net/eFFnjBP4cqHvkRtZAXKDm9.jpg"                                        alt="iPad 2022 review playing Genshin Impact"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="http://cdn.mos.cms.futurecdn.net/eFFnjBP4cqHvkRtZAXKDm9.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p>Your old iPad might not run demanding games, but it's perfect for casual gaming that keeps your main phone free. Apple Arcade offers hundreds of games that run smoothly on older iPads. </p><p>For kids, <strong>set up Screen Time restrictions to limit hours, approve downloads, and prevent in-app purchases</strong>. Add a rugged case and you have a kid-friendly gaming tablet.</p><p>You can also connect a Bluetooth controller for supported games. The larger screen makes gaming more immersive, especially for racing games or platformers.</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/computing/ipads/i-review-ipads-for-a-living-heres-15-ipad-shortcuts-i-cant-live-without">I review iPads for a living — here's 15 iPad shortcuts I can't live without</a></li><li><a href="https://www.tomsguide.com/computing/apple-desktops/5-free-ways-to-speed-up-your-slow-mac">5 free ways to speed up your slow Mac</a></li><li><a href="https://www.tomsguide.com/computing/keyboards/your-mechanical-keyboard-is-disgusting-heres-how-to-clean-it-properly-in-30-minutes">Your mechanical keyboard is gross — here's how to clean it</a></li></ul><div data-model-name="Apple 13" MacBook Air M4 (2025),Apple 15" MacBook Air M4 (2025),Dell XPS 13,Lenovo Yoga Slim 7x (14-inch Snapdragon),Lenovo Chromebook Plus 14,Asus ROG Zephyrus G14 (2025)" data-widget-type="comparison"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Whoa! This is the best iPad deal I've seen all year and it arrives before Christmas ]]></title>
                                                                                                <dc:content><![CDATA[ <p>I track iPad sales year-round. Although I'm used to seeing the best <a href="https://www.tomsguide.com/news/ipad-deals">iPad deals</a> toward the end of the year, Target has a sale that's even taken me by surprise. </p><p>For a limited time, you can get the <a href="https://www.target.com/p/apple-ipad-air-m3-wi-fi/-/A-94651514?preselect=91122029" target="_blank" rel="nofollow">11-inch iPad Air (M3) on sale for $399 at Target</a>. That's $200 off and the lowest price I've ever seen for this tablet. Even better, it arrives in time for Christmas. (By comparison, <a href="https://www.amazon.com/dp/B0DZ73DTVT" target="_blank" rel="nofollow">Amazon has it for $499</a>). </p><div class="product"><a data-dimension112="d53f825a-033f-4add-98b8-1bfebe177c86" data-action="Deal Block" data-label="11" iPad Air (M3)" data-dimension48="11" iPad Air (M3)" data-dimension25="$399" href="https://www.target.com/p/apple-ipad-air-m3-wi-fi/-/A-94651514?preselect=91122029" 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:100.00%;"><img id="aoGB4wkdAHzFMh5DWfhmJ5" name="iPad Air M3" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/aoGB4wkdAHzFMh5DWfhmJ5-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.target.com/p/apple-ipad-air-m3-wi-fi/-/A-94651514?preselect=91122029" target="_blank" rel="nofollow" data-dimension112="d53f825a-033f-4add-98b8-1bfebe177c86" data-action="Deal Block" data-label='11" iPad Air (M3)' data-dimension48='11" iPad Air (M3)' data-dimension25="$399">11" iPad Air (M3): was $599 now $399</a></strong><br>The 2025 iPad Air packs Apple's M3 processor, an 11-inch LED (2360 x 1640) display, 128GB of storage, 12MP rear camera, and 12MP front camera. The tablet packs a more powerful 8-core CPU, which makes the M3 up to 35% faster for multithreaded CPU workflows than the iPad Air M1. There's also a 9-core GPU on board with 40% faster graphics performance than the M1. In our <a href="https://www.tomsguide.com/tablets/ipads/ipad-air-m3-review">iPad Air M3 review</a> we said its fun Apple Intelligence features, reliable battery life (9 hours w/ 41 minutes), and overall thin design make it a winning Apple slate.<br><strong>Price check: </strong><a href="https://www.amazon.com/dp/B0DZ73HCJZ" target="_blank" rel="nofollow"><strong>$499 @ Amazon</strong></a><strong> | </strong><a href="https://www.bestbuy.com/product/apple-11-inch-ipad-air-m3-chip-built-for-apple-intelligence-wi-fi-128gb-blue/JJGCQ8VZVZ" target="_blank" rel="nofollow"><strong>$499 @ Best Buy</strong></a><strong></strong><a class="view-deal button" href="https://www.target.com/p/apple-ipad-air-m3-wi-fi/-/A-94651514?preselect=91122029" target="_blank" rel="nofollow" data-dimension112="d53f825a-033f-4add-98b8-1bfebe177c86" data-action="Deal Block" data-label="11" iPad Air (M3)" data-dimension48="11" iPad Air (M3)" data-dimension25="$399">View Deal</a></p></div><p>The iPad Air M3 is our new choice for the <a href="https://www.tomsguide.com/best-picks/best-ipad">best iPad</a> you can buy. In our <a href="https://www.tomsguide.com/tablets/ipads/ipad-air-m3-review">iPad Air M3 review</a>, we gave it 4.5 out of 5 stars, which is a near-perfect score. Sure, it’s not a huge upgrade over its predecessor, but it's an incredible device that can do almost anything you’d want from a tablet.</p><p>As its name suggests, this is a thin and lightweight tablet that’s easy to carry around wherever you go. Measuring 0.24 inches thick and weighing just 1.05 pounds, you’ll barely even notice it in your backpack.</p><p>The biggest update to the latest iPad Air is the M3 processor. The chip packs an 8-core CPU, a 9-core GPU, and a 16-core Neural Engine. This configuration also has 8GB of RAM and 128GB of storage. Thanks to these specs, this iPad Air has enough power for tasks like web surfing and even some gaming. In our testing, we ran multiple apps and tabs simultaneously without any slowdown.</p><p>Apple’s M3 chip also lets you access several <a href="https://www.tomsguide.com/ai/apple-intelligence-everything-to-know-about-apples-ai">Apple Intelligence</a> features, such as removing unwanted objects from photos. Apple Intelligence can also rewrite your messages and emails if you want to sound more professional, casual, or concise.</p><p>Toss in its sharp 12MP cameras and nearly 10-hour battery life, and the iPad Air M3 is one of the finest tablets you can buy. </p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/ipads/this-usd399-ipad-air-deal-is-selling-out-fast-and-can-arrive-in-time-for-christmas</link>
                                                                            <description>
                            <![CDATA[ The 11-inch M3 iPad Air is selling for just $399 in this epic last-minute iPad deal. Even better, it can arrive in time for Christmas if you act fast. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">aFjP5NPDfJicsauPJmXryQ</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/tPtXABvgtz8FCzc4F6F2pZ-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 18 Dec 2025 16:52:11 +0000</pubDate>                                                                                                                                <updated>Thu, 18 Dec 2025 17:41:03 +0000</updated>
                                                                                                                                            <category><![CDATA[iPads]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Tablets]]></category>
                                                                                                <author><![CDATA[ louis.ramirez@futurenet.com (Louis Ramirez) ]]></author>                    <dc:creator><![CDATA[ Louis Ramirez ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/oYF2xVwCb4pTGhAJi8Yqr5-320-70.jpeg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;As deals editor-in-chief at Tom’s Guide, Louis refuses to pay full price for anything. He has over 10 years of experience finding the best deals and coupons to bring readers. Louis price checks&amp;nbsp;against multiple retailers and searches high and low for sales on 4K TVs, Apple devices, streaming services, mattresses, kitchen appliances, and more.&amp;nbsp;He&#039;s also always looking for the the best coupon codes to turn good deals into stellar buys.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;He has covered major retail events like Amazon Prime Day, Black Friday, and Cyber Monday for more than a decade and knows how to spot an epic deal from a fake discount. He&#039;s also great at helping people negotiate better prices on everything from gym memberships to their home internet service. Louis&#039; work has also helped readers find PS5 restock, baby formula, Clorox wipes, and everything in between. For his next major purchase, Louis is hoping to find a killer deal on an M3-based Mac.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;A born-and-bred New Yorker, Louis is always in search of the perfect cup of coffee. On his free time, he enjoys swimming, running, and any workout that pushes his Apple Watch to the max. He&#039;s also a big fan of international films, horror movies, and K-dramas. His work has appeared on Gizmodo, CNET, Digital Trends, Dealnews, and Time Out New York.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/tPtXABvgtz8FCzc4F6F2pZ-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPad Air M3]]></media:description>                                                            <media:text><![CDATA[iPad Air M3]]></media:text>
                                <media:title type="plain"><![CDATA[iPad Air M3]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/tPtXABvgtz8FCzc4F6F2pZ-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I track iPad sales year-round. Although I'm used to seeing the best <a href="https://www.tomsguide.com/news/ipad-deals">iPad deals</a> toward the end of the year, Target has a sale that's even taken me by surprise. </p><p>For a limited time, you can get the <a href="https://www.target.com/p/apple-ipad-air-m3-wi-fi/-/A-94651514?preselect=91122029" target="_blank" rel="nofollow">11-inch iPad Air (M3) on sale for $399 at Target</a>. That's $200 off and the lowest price I've ever seen for this tablet. Even better, it arrives in time for Christmas. (By comparison, <a href="https://www.amazon.com/dp/B0DZ73DTVT" target="_blank" rel="nofollow">Amazon has it for $499</a>). </p><div class="product"><a data-dimension112="d53f825a-033f-4add-98b8-1bfebe177c86" data-action="Deal Block" data-label="11" iPad Air (M3)" data-dimension48="11" iPad Air (M3)" data-dimension25="$399" href="https://www.target.com/p/apple-ipad-air-m3-wi-fi/-/A-94651514?preselect=91122029" 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:100.00%;"><img id="aoGB4wkdAHzFMh5DWfhmJ5" name="iPad Air M3" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/aoGB4wkdAHzFMh5DWfhmJ5-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.target.com/p/apple-ipad-air-m3-wi-fi/-/A-94651514?preselect=91122029" target="_blank" rel="nofollow" data-dimension112="d53f825a-033f-4add-98b8-1bfebe177c86" data-action="Deal Block" data-label='11" iPad Air (M3)' data-dimension48='11" iPad Air (M3)' data-dimension25="$399">11" iPad Air (M3): was $599 now $399</a></strong><br>The 2025 iPad Air packs Apple's M3 processor, an 11-inch LED (2360 x 1640) display, 128GB of storage, 12MP rear camera, and 12MP front camera. The tablet packs a more powerful 8-core CPU, which makes the M3 up to 35% faster for multithreaded CPU workflows than the iPad Air M1. There's also a 9-core GPU on board with 40% faster graphics performance than the M1. In our <a href="https://www.tomsguide.com/tablets/ipads/ipad-air-m3-review">iPad Air M3 review</a> we said its fun Apple Intelligence features, reliable battery life (9 hours w/ 41 minutes), and overall thin design make it a winning Apple slate.<br><strong>Price check: </strong><a href="https://www.amazon.com/dp/B0DZ73HCJZ" target="_blank" rel="nofollow"><strong>$499 @ Amazon</strong></a><strong> | </strong><a href="https://www.bestbuy.com/product/apple-11-inch-ipad-air-m3-chip-built-for-apple-intelligence-wi-fi-128gb-blue/JJGCQ8VZVZ" target="_blank" rel="nofollow"><strong>$499 @ Best Buy</strong></a><strong></strong><a class="view-deal button" href="https://www.target.com/p/apple-ipad-air-m3-wi-fi/-/A-94651514?preselect=91122029" target="_blank" rel="nofollow" data-dimension112="d53f825a-033f-4add-98b8-1bfebe177c86" data-action="Deal Block" data-label="11" iPad Air (M3)" data-dimension48="11" iPad Air (M3)" data-dimension25="$399">View Deal</a></p></div><p>The iPad Air M3 is our new choice for the <a href="https://www.tomsguide.com/best-picks/best-ipad">best iPad</a> you can buy. In our <a href="https://www.tomsguide.com/tablets/ipads/ipad-air-m3-review">iPad Air M3 review</a>, we gave it 4.5 out of 5 stars, which is a near-perfect score. Sure, it’s not a huge upgrade over its predecessor, but it's an incredible device that can do almost anything you’d want from a tablet.</p><p>As its name suggests, this is a thin and lightweight tablet that’s easy to carry around wherever you go. Measuring 0.24 inches thick and weighing just 1.05 pounds, you’ll barely even notice it in your backpack.</p><p>The biggest update to the latest iPad Air is the M3 processor. The chip packs an 8-core CPU, a 9-core GPU, and a 16-core Neural Engine. This configuration also has 8GB of RAM and 128GB of storage. Thanks to these specs, this iPad Air has enough power for tasks like web surfing and even some gaming. In our testing, we ran multiple apps and tabs simultaneously without any slowdown.</p><p>Apple’s M3 chip also lets you access several <a href="https://www.tomsguide.com/ai/apple-intelligence-everything-to-know-about-apples-ai">Apple Intelligence</a> features, such as removing unwanted objects from photos. Apple Intelligence can also rewrite your messages and emails if you want to sound more professional, casual, or concise.</p><p>Toss in its sharp 12MP cameras and nearly 10-hour battery life, and the iPad Air M3 is one of the finest tablets you can buy. </p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
            </channel>
</rss>